From 3bffc67a0eebc8b4d29f79c0eda1391936ec5b9e Mon Sep 17 00:00:00 2001 From: livehybrid <5527349+livehybrid@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:19:42 +0000 Subject: [PATCH] chore: CICD refactor --- .appinspect.manualcheck.yaml | 26 + .github/workflows/build-test.yaml | 119 +- .uccignore | 2 +- deps/.gitkeep | 0 package/appserver/static/js/build/0.js | 2 - .../appserver/static/js/build/0.licenses.txt | 1281 --------- package/appserver/static/js/build/1.js | 2 - .../appserver/static/js/build/1.licenses.txt | 1281 --------- package/appserver/static/js/build/3.js | 2 - .../appserver/static/js/build/3.licenses.txt | 1281 --------- package/appserver/static/js/build/4.js | 2 - package/appserver/static/js/build/5.js | 2 - .../appserver/static/js/build/entry_page.js | 57 - .../static/js/build/entry_page.licenses.txt | 2537 ----------------- .../static/js/build/redirect_page.js | 30 - package/default/inputs.conf | 4 +- poetry.lock | 1365 --------- pyproject.toml | 19 - requirements.txt | 3 - 19 files changed, 56 insertions(+), 7959 deletions(-) create mode 100644 .appinspect.manualcheck.yaml delete mode 100644 deps/.gitkeep delete mode 100644 package/appserver/static/js/build/0.js delete mode 100644 package/appserver/static/js/build/0.licenses.txt delete mode 100644 package/appserver/static/js/build/1.js delete mode 100644 package/appserver/static/js/build/1.licenses.txt delete mode 100644 package/appserver/static/js/build/3.js delete mode 100644 package/appserver/static/js/build/3.licenses.txt delete mode 100644 package/appserver/static/js/build/4.js delete mode 100644 package/appserver/static/js/build/5.js delete mode 100644 package/appserver/static/js/build/entry_page.js delete mode 100644 package/appserver/static/js/build/entry_page.licenses.txt delete mode 100644 package/appserver/static/js/build/redirect_page.js delete mode 100644 poetry.lock delete mode 100644 pyproject.toml diff --git a/.appinspect.manualcheck.yaml b/.appinspect.manualcheck.yaml new file mode 100644 index 0000000..3f1d00c --- /dev/null +++ b/.appinspect.manualcheck.yaml @@ -0,0 +1,26 @@ +check_for_remote_code_execution_in_javascript: + comment: 'Manual Check - RCE in Javascript' +check_built_in_import_function: + comment: 'Manual Check - built-in import' +check_for_builtin_functions: + comment: 'Manual Check - built-in function' +check_for_data_compression_and_archiving: + comment: 'Manual Check - Data compression & archiving' +check_for_file_and_directory_access: + comment: 'Manual Check - File/Dir access' +check_for_generic_operating_system_services: + comment: 'Manual Check - OS Services' +check_for_importing_modules: + comment: 'Manual Check - Importing Modules' +check_for_plain_text_credentials_in_python: + comment: 'Manual Check - Plain credentials' +check_for_environment_variable_use_in_python: + comment: 'Manual Check - ENV Vars in Python' +check_for_secret_disclosure: + comment: 'Manual Check - Secret Disclosure' +check_for_executable_flag: + comment: 'Manual Check - Executable flag' +check_for_binary_files_without_source_code: + comment: 'Manual Check - Binary files without source code' +check_for_data_persistence: + comment: 'Manual Check - Data Persistence' \ No newline at end of file diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml index 52a214e..ca94e1f 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-test.yaml @@ -1,109 +1,44 @@ name: Splunk App CI/CD - on: push: branches: - "**" tags: - "v*.*.*" - +permissions: + pull-requests: write + actions: write + checks: write jobs: package: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Install poetry - run: pipx install poetry - - uses: actions/setup-python@v5 + - name: Package app + uses: livehybrid/deploy-splunk-app-action@main with: python-version: "3.9" - cache: "poetry" - architecture: "x64" - - name: "Setup Environment" - run: | - poetry install --no-root - - - name: Generate Documentation - run: | - cat README.md | sed 's/package\/appserver/appserver/g' > package/README.md - poetry run grip README.md --export README.html --title "" - #poetry run pandoc -s README.html -o package/README.pdf - - - name: Generate Addon - run: | - echo "Version is now calculated by ucc-gen" - [ -f ./globalConfig.json ] && poetry run ucc-gen -o output -v || poetry run scripts/build.sh - mv output/$(basename $(pwd)) output/app - # echo "Fix to allow boto3 to be uploaded" - # sed -i.bak -e '267,282d' output/app/lib/botocore/session.py - # rm -f output/app/lib/botocore/session.py.bak - # set -x - # ls * - # rm -rf output/app/lib/3rdparty/**/*.pyc - # rm -rf output/app/lib/3rdparty/linux/nacl/__pycache__/* - # rm -rf output/app/lib/3rdparty/linux/cffi/__pycache__/* - - - name: Generating package - run: | - set -x - rm -rf output/app/lib/3rdparty/**/*.pyc || true - rm -rf output/app/lib/__pycache__ || true - mkdir -p dist - poetry run ucc-gen package -o dist --path output/app - - - name: Local Inspect package - run: | - PACKAGE_ID=$(basename $(pwd)) - PACKAGE=$(ls dist/*) - mkdir -p reports - poetry run splunk-appinspect inspect $PACKAGE --mode=precert --data-format junitxml --output-file reports/$PACKAGE_ID-splunk_appinspect.xml --excluded-tags manual --excluded-tags prerelease --included-tags splunk_appinspect - poetry run splunk-appinspect inspect $PACKAGE --mode=precert --data-format junitxml --output-file reports/$PACKAGE_ID-cloud.xml --excluded-tags manual --excluded-tags prerelease --included-tags cloud - poetry run splunk-appinspect inspect $PACKAGE --mode=precert --data-format junitxml --output-file reports/$PACKAGE_ID-private-victoria.xml --included-tags private_victoria - poetry run splunk-appinspect inspect $PACKAGE --mode=precert --data-format junitxml --output-file reports/$PACKAGE_ID-future.xml --included-tags future - - # - name: Run App Inspect CLI - # uses: splunk/appinspect-cli-action@v1.5 - # with: - # app_path: $PACKAGE - # included_tags: cloud, splunk_appinspect - - - uses: splunk/appinspect-api-action@v3.0 - name: "AppInspect API" - with: - username: "${{ secrets.SPLUNKBASE_USERNAME }}" - password: "${{ secrets.SPLUNKBASE_PASSWORD }}" - app_path: dist - included_tags: "private_victoria,splunk_appinspect,cloud" - excluded_tags: "offensive" - - - name: Upload package artifact - uses: actions/upload-artifact@v4 - with: - name: dist - path: dist/ - - name: Upload Reports - uses: actions/upload-artifact@v4 - with: - name: reports - path: reports - - publish-gh: + appinspect: + name: quality-appinspect needs: package - if: startsWith(github.ref, 'refs/tags/v') - runs-on: ubuntu-latest - container: cimg/go:1.19 + uses: livehybrid/deploy-splunk-app-action/.github/workflows/appinspect-cli.yml@main + with: + tags: "cloud,future,private_victoria" + secrets: + token: "${{ secrets.GITHUB_TOKEN }}" + + quality-appinspect-api: + name: quality-appinspect-api + needs: + - appinspect + uses: livehybrid/deploy-splunk-app-action/.github/workflows/appinspect-api.yml@main + secrets: + splunkbase_username: ${{ secrets.SPLUNKBASE_USERNAME }} + splunkbase_password: ${{ secrets.SPLUNKBASE_PASSWORD }} + + publish-gh: permissions: contents: write - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - path: . - - uses: ncipollo/release-action@v1 - with: - artifacts: "dist/*" - allowUpdates: true + needs: + - appinspect + uses: livehybrid/deploy-splunk-app-action/.github/workflows/publish.yml@main \ No newline at end of file diff --git a/.uccignore b/.uccignore index 03b6107..f824c1f 100644 --- a/.uccignore +++ b/.uccignore @@ -1 +1 @@ -lib/charset_normalizer/md__mypyc.cpython-*-x86_64-linux-gnu.so +lib/charset_normalizer/**/*.so \ No newline at end of file diff --git a/deps/.gitkeep b/deps/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/package/appserver/static/js/build/0.js b/package/appserver/static/js/build/0.js deleted file mode 100644 index 3a2a3eb..0000000 --- a/package/appserver/static/js/build/0.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],Array(288).concat([function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getCustomizedTheme=t.addThemeDefaults=void 0;var r,o=n(2),a=(r=n(314))&&r.__esModule?r:{default:r};t.addThemeDefaults=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,n=void 0===t?"prisma":t,r=e.colorScheme,o=void 0===r?"dark":r,a=e.density,i=void 0===a?"comfortable":a;return{family:n,colorScheme:o,density:i}};var i=(0,o.memoize)((function(e,t){var n=(0,a.default)(e);return t?t(n):n}),(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,n=e.colorScheme,r=e.density,o=arguments.length>1?arguments[1]:void 0;return"".concat(t,"-").concat(n,"-").concat(r,"-").concat(!!o)}));t.getCustomizedTheme=i},,,,function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=104)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},104:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return Me})),n.d(t,"Item",(function(){return he})),n.d(t,"Heading",(function(){return E})),n.d(t,"Divider",(function(){return v}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(29),c=n.n(l),s=n(26),u=n(9),p=n(3),f=n.n(p),d=n(0),b=f.a.div.withConfig({displayName:"DividerStyles__Styled",componentId:"l3zfh3-0"})(["border-top:1px solid ",";",""],Object(d.pick)({enterprise:d.variables.borderColor,prisma:d.variables.neutral200}),Object(d.pick)({prisma:{comfortable:Object(p.css)(["margin:8px 0;"]),compact:Object(p.css)(["margin:6px 0;"])}}));function y(){return(y=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var k={children:i.a.node,title:i.a.bool};function P(e){var t=e.children,n=e.title,r=S(e,["children","title"]);return"prisma"===x()().family?o.a.createElement(j,null,o.a.createElement(w,C({as:n?"h4":"h5","data-test":"heading"},r),t)):o.a.createElement(j,null,o.a.createElement(g.a,C({style:{margin:0},level:n?4:"ss","data-test":"heading"},r),t))}P.propTypes=k,P.filterConsecutive=!0,P.filterLast=!0;var E=P,_=n(4),T=n(45),R=n(84),I=n.n(R),D=n(7),M=n(6);function A(){return(A=Object.assign||function(e){for(var t=1;t * > ","{color:",";}"],U,d.variables.contentColorDisabled)}),(function(e){return e.$selected&&Object(d.pick)({prisma:Object(p.css)(["","{color:",";}"],U,d.variables.contentColorActive)})})),Z=f()(F.a).withConfig({displayName:"ItemStyles__StyledSwitch",componentId:"sc-4kc053-5"})(["position:absolute;left:",";top:",";"],Object(d.pick)({prisma:"16px",enterprise:"8px"}),Object(d.pick)({prisma:{comfortable:"2px",compact:"-2px"},enterprise:"0px"})),X=f.a.span.withConfig({displayName:"ItemStyles__StyledInnerWrapper",componentId:"sc-4kc053-6"})(["display:flex;align-items:flex-start;"]),Y=f.a.span.withConfig({displayName:"ItemStyles__StyledTitleAndDescriptionWrapper",componentId:"sc-4kc053-7"})(["max-width:100%;width:100%;align-self:center;word-break:break-word;white-space:normal;",""],(function(e){return e.$truncate&&Object(p.css)(["white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"])})),Q=f.a.div.withConfig({displayName:"ItemStyles__StyledLabel",componentId:"sc-4kc053-8"})(["overflow:inherit;white-space:inherit;text-overflow:inherit;max-width:100%;min-height:20px;"," ",""],(function(e){return e.$truncate&&Object(p.css)(["display:block;clear:both;"])}),(function(e){return e.$matching&&Object(d.pick)({prisma:Object(p.css)(["color:",";"],d.variables.contentColorMuted)})})),J=f.a.span.withConfig({displayName:"ItemStyles__StyledMatch",componentId:"sc-4kc053-9"})(["color:",";"],Object(d.pick)({prisma:d.variables.contentColorActive,enterprise:d.variables.accentColor})),ee=f.a.span.withConfig({displayName:"ItemStyles__StyledSubmenu",componentId:"sc-4kc053-10"})(["float:right;padding-left:",";color:",";"],d.variables.spacingSmall,Object(d.pick)({prisma:"inherit",enterprise:d.variables.textGray})),te=n(12);function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function re(){return(re=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ae(e,t){for(var n=0;ne.offsetTop&&(t.scrollTop=e.offsetTop))}}},{key:"renderLabel",value:function(){var e=this.props,t=e.children,n=e.matchRanges;if(!n||!Object(_.isString)(t))return t;var r=[];return r.push(t.substring(0,n[0].start)),n.forEach((function(e,a){r.push(o.a.createElement(J,{key:a,"data-test":"match"},t.substring(e.start,e.end))),a=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Se(e,t){for(var n=0;n0?t[n-1].focus():"down"===Object(u.keycode)(e.nativeEvent)&&nn+1){var o=r[n+1];if((o.type===v||o.type===E)&&o.type.filterConsecutive)return e}return t.type!==v&&t.type!==E||!t.type.filterLast||n!==r.length-1?(e.push(t),e):e}),[]);return n?o.a.createElement(xe,we({"data-test":"menu",elementRef:this.handleMount,onKeyDown:this.handleKeyDown,role:"menu",stopScrollPropagation:!0},c()(a,"tagName")),i):o.a.createElement(Oe,we({"data-test":"menu",onKeyDown:this.handleKeyDown,ref:this.handleMount,role:"menu"},a),i)}}])&&Se(t.prototype,n),a&&Se(t,a),l}(r.Component);Re(De,"propTypes",Ie),Re(De,"defaultProps",{retainFocus:!0,stopScrollPropagation:!1}),Re(De,"Item",he),Re(De,"Divider",v),Re(De,"Heading",E);var Me=De},11:function(e,t){e.exports=n(48)},12:function(e,t,n){"use strict";function r(e,t){e&&("function"==typeof e?e(t):e.current=t)}n.d(t,"a",(function(){return r}))},2:function(e,t){e.exports=n(0)},25:function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var r=n(2),o=n.n(r),a=n(28),i=n.n(a),l=n(7),c=n(6);function s(){return(s=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ee(e,t){for(var n=0;n=o){var b=r*c+s+u+p+f+1;d=Math.min(b,d)}var y=o*c+s+u+p+f+1;if(t!==(d=Math.max(y,d)))return d}return!1}({height:r.state.height,multiline:r.props.multiline,rowsMax:r.props.rowsMax,rowsMin:r.props.rowsMin,shadow:r.shadow});!1!==e&&r.setState({height:e})})),r.controlledExternally=Object(s.has)(e,"value"),r.state={hasFocus:!1,value:e.defaultValue||"",hideVisibility:!0},n.validateRows(e),r.handleResize=Object(s.throttle)(r.handleResize,100),r}return te(n,null,[{key:"validateRows",value:function(e){e.rowsMin,e.rowsMax}}]),te(n,[{key:"componentDidMount",value:function(){Object(s.defer)(this.syncHeightWithShadow)}},{key:"componentDidUpdate",value:function(e){this.props.multiline&&this.syncHeightWithShadow(),n.validateRows(this.props)}},{key:"isControlled",value:function(){return this.controlledExternally}},{key:"blur",value:function(){var e;null===(e=this.input)||void 0===e||e.blur()}},{key:"focus",value:function(){var e;null===(e=this.input)||void 0===e||e.focus()}},{key:"select",value:function(){var e;null===(e=this.input)||void 0===e||e.select()}},{key:"render",value:function(){var e=this,t=this.props,n=t.appearance,r=t.append,a=t.autoCapitalize,i=t.autoComplete,l=t.autoCorrect,p=t.autoFocus,d=t.canClear,y=t.children,h=t.className,v=t.classNamePrivate,m=t.disabled,g=t.describedBy,O=t.elementRef,x=t.error,C=t.inline,S=t.inputClassName,k=t.inputId,P=t.inputStyle,_=t.labelledBy,R=t.multiline,I=t.maxLength,D=t.name,M=t.passwordVisibilityToggle,A=t.placeholder,L=t.prepend,B=t.spellCheck,z=t.splunkTheme,H=t.tabIndex,$=t.title,U=t.type,X=t.useSyntheticPlaceholder,Y=t.value,ee=J(t,["appearance","append","autoCapitalize","autoComplete","autoCorrect","autoFocus","canClear","children","className","classNamePrivate","disabled","describedBy","elementRef","error","inline","inputClassName","inputId","inputStyle","labelledBy","multiline","maxLength","name","passwordVisibilityToggle","placeholder","prepend","spellCheck","splunkTheme","tabIndex","title","type","useSyntheticPlaceholder","value"]),te="prisma"===z.family,ne=Q(Q({},Object(s.pickBy)(ee,(function(e,t){return"role"===t||0===t.indexOf("aria-")}))),{},{"aria-describedby":g,"aria-labelledby":_,"aria-invalid":x||void 0,"aria-multiline":R}),re=Object(s.omit)(ee,["inputRef","onBlur","onChange","onFocus","onKeyDown","onSelect","rowsMax","rowsMin"].concat(Z(Object(s.keys)(ne)))),oe=this.isControlled()?Y:this.state.value,ae=!m&&(d||"search"===n),ie=oe&&ae||M||void 0,le={className:Object(u.toClassName)(h,S),$append:r||void 0,$error:x,$prepend:L||void 0,value:oe},ce=this.state.hideVisibility?"password":"text",se=M?ce:U,ue=Q(Q(Q({},le),ne),{},{"data-test":"textbox",$customStyle:P,autoCapitalize:a,autoComplete:i,autoCorrect:l,autoFocus:p,id:k,maxLength:I,placeholder:A&&!X?A:void 0,name:D,onChange:this.handleInputChange,onKeyDown:this.handleInputKeyDown,onSelect:this.handleInputSelect,onFocus:this.handleInputFocus,onBlur:this.handleInputBlur,ref:this.handleInputMount,role:"textbox",spellCheck:B,style:Q({height:this.state.height},Object(s.omit)(P,["paddingLeft","paddingRight"])),title:$,tabIndex:H,type:R?null:se}),pe=X&&A&&!oe,fe=te?"left":"right",de="search"===n&&(!oe&&"left"!==fe||"left"===fe),be=te?ae&&!!oe:ae&&!!oe&&(this.state.hasFocus||"search"===n),ye=this.state.hideVisibility?o.a.createElement(T,null):o.a.createElement(E,null);return o.a.createElement(N,G({className:Object(u.toClassName)(h,v),"data-test":"text","data-test-value":oe,elementRef:O,inline:C},re),!m&&R&&o.a.createElement(q,G({$customStyle:P,$search:"search"===n,as:"textarea"},le,{"aria-hidden":"true",onChange:s.noop,style:{width:"100%",position:"absolute",overflow:"hidden",left:-1e4,top:-1e4},tabIndex:-1,ref:function(t){e.shadow=t}})),m?o.a.createElement(q,G({$customStyle:P,$rightIconPadding:ie,$search:"search"===n,as:R?"textarea":void 0,className:Object(u.toClassName)(h,v),"data-multiline":R||null,"data-test":"disabled-textbox",disabled:!0,readOnly:!0,style:R?{height:this.state.height}:void 0,type:R?void 0:se,value:oe,placeholder:A&&!X?A:void 0,ref:R?function(t){e.shadow=t}:void 0},ne)):o.a.createElement(q,G({$rightIconPadding:ie,$search:"search"===n,as:R?"textarea":void 0},ue)),!m&&R&&o.a.createElement(c.a,{target:"window",onResize:this.handleResize}),pe&&o.a.createElement(f.a,null,A),pe&&o.a.createElement(K,{$customStyle:P,$renderSearchIcon:de,"data-role":"placeholder",onMouseDown:this.handlePlaceholderMouseDown,"aria-hidden":!0},A),be&&!M&&o.a.createElement(F,{"data-test":"clear",onMouseDown:this.handleClear,tabIndex:-1,$customStyle:P},o.a.createElement(w.a,{inline:!1,enterpriseSize:1,screenReaderText:Object(b._)("Clear")})),M&&!m&&o.a.createElement(V,{"data-test":"password-toggle",type:"button",onClick:this.handleVisibilityToggle},ye),"search"===n&&de&&o.a.createElement(W,{$customStyle:P,$disabled:m},o.a.createElement(j,{enterpriseSize:"16px",inline:!1})),y)}}]),n}(r.Component);le(se,"propTypes",ce),le(se,"defaultProps",{appearance:"default",append:!1,autoFocus:!1,canClear:!1,disabled:!1,error:!1,inline:!1,inputStyle:{},multiline:!1,placeholder:"",prepend:!1,rowsMax:8,rowsMin:2,tabIndex:0,type:"text",passwordVisibilityToggle:!1,useSyntheticPlaceholder:!1}),le(se,"componentType","Text");var ue=Object(d.withSplunkTheme)(se);ue.propTypes=se.propTypes,ue.componentType=se.componentType;var pe=ue},12:function(e,t,n){"use strict";function r(e,t){e&&("function"==typeof e?e(t):e.current=t)}n.d(t,"a",(function(){return r}))},14:function(e,t){e.exports=n(74)},15:function(e,t){e.exports=n(78)},2:function(e,t){e.exports=n(0)},20:function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var r=n(2),o=n.n(r),a=n(23),i=n.n(a),l=n(7),c=n(6);function s(){return(s=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;t ","{border-color:",";}"],E,y.mixins.colorWithAlpha(y.variables.focusColor,.8))}),P,Object(y.pick)({enterprise:Object(y.pick)({light:y.variables.gray96,dark:"#b1bcc7"}),prisma:y.variables.white}),E,Object(y.pick)({prisma:y.variables.interactiveColorOverlayHover}),Object(y.pick)({enterprise:{light:y.variables.borderLightColor,dark:y.variables.borderColor},prisma:y.variables.transparent}),Object(y.pick)({enterprise:{light:y.variables.gray96,dark:y.variables.gray30},prisma:y.variables.interactiveColorBackgroundDisabled}),Object(y.pick)({enterprise:Object(v.css)(["box-shadow:inset 0 2px 0 rgba(0,0,0,0.06);"])}),(function(e){return e.$selected&&Object(v.css)(["border-color:transparent;background-color:",";"],Object(y.pick)({enterprise:Object(y.pick)({light:y.variables.accentColorL40,dark:y.variables.accentColorD20}),prisma:y.mixins.colorWithAlpha(y.variables.interactiveColorPrimary,.7)}))}),(function(e){return e.$selected&&Object(v.css)(["border-color:",";background-color:",";",""],Object(y.pick)({enterprise:y.variables.accentColorL10,prisma:y.variables.transparent}),Object(y.pick)({enterprise:y.variables.accentColorL10,prisma:y.variables.interactiveColorPrimary}),Object(y.pick)({prisma:Object(v.css)(["box-shadow:",";"],y.variables.embossShadow)}))}),(function(e){return e.$error&&Object(v.css)(["border-color:",";",";"],Object(y.pick)({enterprise:y.variables.errorColor,prisma:y.variables.transparent}),Object(y.pick)({prisma:Object(v.css)(["background-color:",";"],y.variables.accentColorNegative)}))})),T=_.withComponent("span"),R=m.a.label.withConfig({displayName:"SwitchStyles__StyledLabel",componentId:"sc-844ieu-6"})([""," flex:1 1 auto;padding-left:",";color:inherit;",";"],y.mixins.reset("inline-block"),Object(y.pick)({enterprise:Object(v.css)(["",";"],y.variables.spacingQuarter),prisma:"8px"}),(function(e){return!e.$disabled&&Object(v.css)(["cursor:pointer;"])}));function I(e){return(I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function D(){return(D=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function A(e,t){for(var n=0;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var v={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),gutter:i.a.number,isFirstChild:i.a.bool,isLastChild:i.a.bool,span:i.a.number,style:i.a.object};function m(e){var t=e.children,n=e.elementRef,r=e.gutter,a=e.span,i=void 0===a?1:a,l=e.isFirstChild,c=e.isLastChild,u=e.style,p=h(e,["children","elementRef","gutter","span","isFirstChild","isLastChild","style"]),f=r?"calc((100% - ".concat(11*r,"px) * ").concat(i/12," + (").concat(r,"px * ").concat(i-1,"))"):"".concat(100/12*i,"%");Object(b.a)(r);var v={marginLeft:l?void 0:r/2,marginRight:c?void 0:r/2,flex:"".concat(i," ").concat(i," auto"),width:f};return o.a.createElement(d,y({"data-test":"column",ref:n,style:Object(s.defaults)({},u,v)},p),t)}m.propTypes=v;var g=m,O=p.a.div.withConfig({displayName:"RowStyles__Styled",componentId:"sc-121ntds-0"})(["",";flex-flow:row nowrap;&[data-align-items='start']{align-items:flex-start;}&[data-align-items='end']{align-items:flex-end;}&[data-align-items='center']{align-items:center;}&[data-align-items='stretch']{align-items:stretch;}"],f.mixins.reset("flex")),x=p.a.div.withConfig({displayName:"RowStyles__StyledDivider",componentId:"sc-121ntds-1"})(["border-left:1px solid ",";flex:0 0 1;align-self:stretch;"],Object(f.pick)({prisma:f.variables.neutral200,enterprise:{light:f.variables.gray92,dark:f.variables.gray60}}));function j(){return(j=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var C={alignItems:i.a.oneOf(["start","end","center","stretch"]),children:i.a.node,divider:i.a.bool,elementRef:i.a.oneOfType([i.a.func,i.a.object]),gutter:i.a.number,isFirstChild:i.a.bool,isLastChild:i.a.bool,style:i.a.object};function S(e){var t=e.alignItems,n=void 0===t?"stretch":t,a=e.children,i=e.divider,l=e.elementRef,c=e.gutter,u=e.isFirstChild,p=e.isLastChild,f=e.style,d=w(e,["alignItems","children","divider","elementRef","gutter","isFirstChild","isLastChild","style"]),y=Object(r.useCallback)((function(e,t){return Object(r.cloneElement)(e,{gutter:c,isFirstChild:0===t,isLastChild:t===r.Children.count(a)-1})}),[a,c]),h=Object(r.useCallback)((function(e,t,n,r){return e.push(t),i&&n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var R={children:i.a.node,divider:i.a.oneOf(["none","vertical","horizontal"]),elementRef:i.a.oneOfType([i.a.func,i.a.object]),gutter:i.a.number};function I(e){var t=e.children,n=e.divider,a=void 0===n?"none":n,i=e.elementRef,l=e.gutter,s=T(e,["children","divider","elementRef","gutter"]),u=c()(),p=u.family,f=u.density,d=Object(r.useCallback)((function(e,n){var o=0===n,i=n===r.Children.count(t)-1,c=l;return void 0===c&&("prisma"===p?"compact"===f?c=16:"comfortable"===f&&(c=24):"enterprise"===p&&(c=30)),Object(r.cloneElement)(e,{gutter:c,divider:"vertical"===a,isFirstChild:o,isLastChild:i})}),[t,f,a,p,l]),b=Object(r.useCallback)((function(e,t,n,r){return e.push(t),"horizontal"===a&&n0&&void 0!==arguments[0]?arguments[0]:{},t=(0,i.addThemeDefaults)(e),n=t.family,r=t.colorScheme,l=t.density;return Object.freeze(s({colorScheme:r,density:l,family:n},"enterprise"===n?(0,o.default)({colorScheme:r,density:l}):(0,a.default)({colorScheme:r,density:l})))}),(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,n=e.colorScheme,r=e.density;return"".concat(t).concat(n).concat(r)}));t.clearGetThemeCache=function(){var e,t;return null===(e=(t=p.cache).clear)||void 0===e?void 0:e.call(t)};var f=p;t.default=f},function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function j(e,t){for(var n=0;nt.top&&nt?r+1:r}},{key:"updateDragPositionImpl",value:function(e){this.setState({dragPosition:e})}},{key:"updateScrollPosition",value:function(e){var t,n,r=this.rect;(null===(t=this.el)||void 0===t||null===(n=t.parentElement)||void 0===n?void 0:n.parentElement)&&r&&void 0!==this.rowHeight&&e=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var H={children:i.a.node.isRequired,side:i.a.oneOf(["top","bottom"])};function $(e){var t=e.children,n=e.side,r=void 0===n?"top":n,a=z(e,["children","side"]);return o.a.createElement(N,B({"data-test":"caption",side:r},a),t)}$.propTypes=H,$.splunkUiType="Table.Caption";var F=$,V=y.a.td.withConfig({displayName:"CellStyles__Styled",componentId:"sc-1955xk2-0"})([""," padding:",";border-left:0 solid transparent;border-right:0 solid transparent;word-wrap:break-word;line-height:",";vertical-align:top;"," "," "," "," "," "," [data-expansion-row='true'] > &:first-child{padding-top:8px;}[data-expansion-row='true'] > &:last-child{padding-bottom:14px;}[data-has-movable-columns='true'] > &:not([data-movable-column='false']){","}"],h.mixins.reset("table-cell"),Object(h.pick)({enterprise:"6px 12px",prisma:{comfortable:"14px 8px",compact:"6px 8px"}}),h.variables.lineHeight,Object(h.pickVariant)("$align",{center:Object(b.css)(["text-align:center;"]),left:Object(b.css)(["text-align:left;"]),right:Object(b.css)(["text-align:right;"])}),Object(h.pickVariant)("$variant",{expand:{enterprise:Object(b.css)(["padding:6px 0 0 0;"]),prisma:{comfortable:Object(b.css)(["padding:12px 0 0 0;"]),compact:Object(b.css)(["padding:4px 0 0 0;"])}},actions:{prisma:{comfortable:Object(b.css)(["padding:4px 8px;"]),compact:Object(b.css)(["padding:0 8px 0 0;"])}},toggle:{prisma:{comfortable:Object(b.css)(["padding:10px 0 0 0;"]),compact:Object(b.css)(["padding:6px 0 0 0;"])}}}),Object(h.pickVariant)("$appearance",{rowLink:{enterprise:Object(b.css)(["color:",";*:hover > &{cursor:pointer;}"],h.variables.linkColor),prisma:Object(b.css)(["color:",";*:hover > &{cursor:pointer;}"],h.variables.contentColorDefault)},link:{enterprise:Object(b.css)(["color:",";&:hover{cursor:pointer;color:{dark:variables.accentColorL20,light:variables.linkColor,};box-shadow:",";}&:focus{color:{dark:variables.accentColorL20,light:variables.focusColor,};box-shadow:",";}"],h.variables.linkColor,h.variables.focusShadowInset,h.variables.focusShadowInset)}}),(function(e){return e.$clickable&&Object(b.css)(["cursor:pointer;&:hover{background-color:",";color:",";}&:focus{box-shadow:",";color:",";}&:active{background:",";}"],Object(h.pick)({enterprise:{light:h.variables.accentColorL50,dark:h.variables.accentColorD50},prisma:h.variables.interactiveColorOverlayHover}),Object(h.pick)({prisma:h.variables.contentColorDefault}),h.variables.focusShadowInset,Object(h.pick)({prisma:h.variables.contentColorDefault}),Object(h.pick)({prisma:h.variables.interactiveColorOverlayActive}))}),(function(e){return e.$expanded&&Object(b.css)(["background-color:",";"],Object(h.pick)({prisma:h.variables.interactiveColorOverlaySelected}))}),(function(e){return e.$disabled&&Object(b.css)(["color:",";"],Object(h.pick)({prisma:h.variables.contentColorDisabled}))}),Object(h.pick)({enterprise:Object(b.css)(["padding-left:29px;&:first-child{padding-left:28px;}"])}));function q(e){return(q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function W(){return(W=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function U(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function G(e,t){for(var n=0;n &{text-align:right;}"]),left:Object(b.css)(["& > &{text-align:left;}"]),center:Object(b.css)(["& > &{text-align:center;}"])}),Ce,Object(h.pick)({enterprise:"12px"})),Pe=y.a.div.withConfig({displayName:"HeadInnerStyles__Styled",componentId:"sc-1sa0wng-3"})([""," ",";position:relative;font-size:",";",";line-height:",";justify-content:",";padding:",";"," "," "," &[data-helper]{background-color:",";position:absolute;left:-10000px;top:-10000px;box-shadow:",";box-sizing:border-box;background-repeat:repeat-x;",";}@media print{background-image:none;}"],h.mixins.reset("flex"),h.mixins.clearfix(),Object(h.pick)({enterprise:"inherit",prisma:"12px"}),Object(h.pick)({prisma:Object(b.css)(["font-weight:bold;"])}),Object(h.pick)({enterprise:h.variables.lineHeight,prisma:"16px"}),Object(h.pickVariant)("$align",{center:"center",left:"flex-start",right:"flex-end"}),Object(h.pick)({enterprise:"6px 12px",prisma:{comfortable:"16px 10px",compact:"8px"}}),(function(e){return e.$hasActionsHead&&Object(b.css)(["padding:0;"])}),(function(e){return e.$dragging&&Object(b.css)(["opacity:0;"])}),(function(e){return e.$draggable&&Object(b.css)(["padding-left:",";-webkit-user-drag:element;user-select:none;"],Object(h.pick)({enterprise:"16px"}))}),Object(h.pick)({enterprise:{light:h.variables.accentColorL50,dark:h.variables.accentColorD50},prisma:h.mixins.overlayColors(h.variables.interactiveColorBackground,h.variables.interactiveColorOverlaySelected)}),Object(h.pick)({enterprise:h.variables.overlayShadow,prisma:h.variables.dragShadow}),Object(h.pick)({enterprise:Object(b.css)(["border:1px solid ",";"],h.variables.borderColor)})),Ee=y.a.span.withConfig({displayName:"HeadInnerStyles__StyledSortIcon",componentId:"sc-1sa0wng-4"})(["flex:0 0 auto;order:",";",";margin-top:-1px;"," color:",";"," ",""],Object(h.pick)({enterprise:2,prisma:1}),Object(h.pick)({enterprise:Object(b.css)(["right:0;"]),prisma:Object(b.css)(["left:0;"])}),Object(h.pick)({prisma:Object(b.css)(["margin-right:4px;"]),enterprise:Object(b.css)(["margin-left:10px;"])}),Object(h.pick)({enterprise:{light:h.variables.textGray,dark:h.variables.gray80}}),(function(e){return e.$sorted&&Object(b.css)(["color:",";"],Object(h.pick)({enterprise:h.variables.accentColor,prisma:h.variables.contentColorDefault}))}),(function(e){return!e.$sorted&&Object(h.pick)({prisma:Object(b.css)(["display:none;"])})})),_e=y.a.button.withConfig({displayName:"HeadInnerStyles__StyledResize",componentId:"sc-1sa0wng-5"})(["",";position:absolute;right:-5px;width:9px;top:0;bottom:0;z-index:1;cursor:col-resize;th:last-child > "," > &{right:0;width:5px;}&::-moz-focus-inner{border:0;padding:0;}&:focus{outline:none;&::before{content:'';position:absolute;background:",";box-shadow:",";left:4px;width:1px;top:0;bottom:0;}}"],h.mixins.reset("block"),Pe,h.variables.focusColor,h.variables.focusShadow),Te=y.a.th.withConfig({displayName:"HeadCellStyles__Styled",componentId:"sc-1hj81sa-0"})(["",";background-color:",";box-sizing:content-box;text-align:left;vertical-align:",";& + &{border-left:1px solid ",";}"," "," ",""],h.mixins.reset("table-cell"),Object(h.pick)({enterprise:{light:h.variables.gray92,dark:h.variables.black},prisma:h.variables.interactiveColorBackground}),(function(e){return e.$variant?"middle":"top"}),Object(h.pick)({enterprise:h.variables.backgroundColor,prisma:h.variables.backgroundColorPage}),(function(e){return e.$clickable&&Object(b.css)(["&:focus{box-shadow:",";outline:none;& > ","{color:",";background-color:",";}}&:hover{outline:none;& > ","{color:",";background-color:",";}}&:active{& > ","{background-color:",";}}"],h.variables.focusShadowInset,Pe,Object(h.pick)({enterprise:{light:h.variables.accentColorD10,dark:h.variables.linkColorHover}}),Object(h.pick)({prisma:h.variables.interactiveColorOverlaySelected}),Pe,Object(h.pick)({enterprise:{light:h.variables.accentColorD10,dark:h.variables.linkColorHover}}),Object(h.pick)({prisma:h.variables.interactiveColorOverlayHover}),Pe,Object(h.pick)({prisma:h.variables.interactiveColorOverlayActive}))}),(function(e){return e.$dragging&&Object(b.css)(["background-color:",";&:focus{box-shadow:none;}"],Object(h.pick)({enterprise:{light:h.variables.gray80,dark:h.variables.gray20},prisma:h.mixins.overlayColors(h.variables.backgroundColorPage,h.variables.interactiveColorOverlayDrag)}))}),Object(h.pickVariant)("$variant",{actions:Object(b.css)(["& > ","{padding-right:8px;}"],Pe),info:Object(b.css)(["& > ","{",";}"],Pe,Object(h.pick)({enterprise:Object(b.css)(["padding-top:7px;"]),prisma:{comfortable:Object(b.css)(["padding-top:12px;padding-bottom:12px;"]),compact:Object(b.css)(["padding-top:6px;padding-bottom:6px;"])}})),toggleAll:Object(b.css)(["& > ","{padding-top:",";}"],Pe,Object(h.pick)({prisma:{comfortable:"14px",compact:"7px"}}))})),Re=y.a.div.withConfig({displayName:"HeadCellStyles__StyledGuideLine",componentId:"sc-1hj81sa-1"})([""," width:1px;position:absolute;background-color:",";height:100%;top:0;z-index:1;",""],h.mixins.reset("block"),Object(h.pick)({enterprise:h.variables.linkColor,prisma:h.variables.interactiveColorPrimary}),Object(h.pickVariant)("$position",{before:Object(b.css)(["float:left;",":not(:first-child) > &{margin-left:-1px;}"],Te),after:Object(b.css)(["right:0;"])})),Ie=y.a.td.withConfig({displayName:"RowDragCellStyles__Styled",componentId:"sc-9kbaj2-0"})([""," box-sizing:content-box;touch-action:none;width:",";& + &{border-left:",";}&:focus{box-shadow:",";outline:none;}&:hover{background-color:",";outline:none;}&:active{background-color:",";}",""],h.mixins.reset("table-cell"),Object(h.pick)({enterprise:"32px",prisma:"36px"}),Object(h.pick)({enterprise:"1px solid ".concat(h.variables.backgroundColor),prisma:"1px solid ".concat(h.variables.interactiveColorBorder)}),h.variables.focusShadowInset,Object(h.pick)({enterprise:{light:h.variables.accentColorL50,dark:h.variables.accentColorD50},prisma:h.variables.interactiveColorOverlayHover}),Object(h.pick)({prisma:h.variables.interactiveColorOverlayActive}),(function(e){return e.$dragging&&Object(b.css)(["&:active{background-color:",";}"],Object(h.pick)({prisma:h.mixins.overlayColors(h.variables.backgroundColorPage,h.variables.interactiveColorOverlayDrag)}))})),De=y.a.div.withConfig({displayName:"RowDragCellStyles__StyledGuideLine",componentId:"sc-9kbaj2-1"})([""," width:100%;height:1px;position:absolute;left:0;z-index:1;",""],h.mixins.reset("block"),Object(h.pickVariant)("$position",{before:Object(b.css)(["&::before{content:' ';border-top:1px solid;border-color:",";width:100%;height:1px;top:0;position:absolute;}"],Object(h.pick)({enterprise:h.variables.linkColor,prisma:h.variables.interactiveColorPrimary})),after:Object(b.css)(["&::after{bottom:0;background-color:",";}"],Object(h.pick)({enterprise:h.variables.linkColor,prisma:h.variables.interactiveColorPrimary}))})),Me=y.a.div.withConfig({displayName:"RowDragCellStyles__StyledDrag",componentId:"sc-9kbaj2-2"})([""," ",";justify-content:center;cursor:move;"," "," &[data-helper]{background-color:",";position:absolute;left:-10000px;top:-10000px;box-shadow:",";box-sizing:border-box;background-repeat:repeat-x;",";}@media print{background-image:none;}"],h.mixins.reset("flex"),h.mixins.clearfix(),(function(e){return e.$dragging&&Object(b.css)(["opacity:0;"])}),(function(e){return e.$draggable&&Object(b.css)(["padding:",";-webkit-user-drag:element;user-select:none;"],Object(h.pick)({enterprise:"9px 0",prisma:{comfortable:"16px 0 15px",compact:"9px 0 6px"}}))}),Object(h.pick)({enterprise:{light:h.variables.accentColorL50,dark:h.variables.accentColorD50},prisma:h.mixins.overlayColors(h.variables.interactiveColorBackground,h.variables.interactiveColorOverlaySelected)}),Object(h.pick)({enterprise:h.variables.overlayShadow,prisma:h.variables.dragShadow}),Object(h.pick)({enterprise:Object(b.css)(["border:1px solid ",";"],h.variables.borderColor)})),Ae=y.a.div.withConfig({displayName:"DragHandleStyles__StyledDrag",componentId:"sc-9eqfn5-0"})(["display:block;cursor:move;background:",";",""],h.variables.draggableBackground,Object(h.pick)({enterprise:Object(b.css)(["width:7px;height:14px;"]),prisma:Object(b.css)(["width:6px;height:20px;margin-top:-3px;opacity:0;",":focus &,",":hover &,"," &,[data-helper] &{opacity:1;}"],Te,Te,Ie)})),Le={screenReaderContent:i.a.string};function Ne(e){var t=e.screenReaderContent;return o.a.createElement(Ae,null,o.a.createElement(we.a,null,t))}Ne.propTypes=Le;var Be=Ne;function ze(){return(ze=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var We={align:i.a.oneOf(["left","center","right"]),columnId:i.a.any,hasActionsHead:i.a.bool,id:i.a.string,index:i.a.number,isMenu:i.a.bool,label:i.a.node,onAutosizeColumn:i.a.func,onDragEnd:i.a.func,onDragStart:i.a.func,onRequestResize:i.a.func,resizable:i.a.bool,sortDir:i.a.string,truncate:i.a.bool,width:i.a.number};function Ke(e){var t=e.index,n=e.columnId,a=e.id,i=e.width,c=e.onDragEnd,u=e.onAutosizeColumn,p=e.align,d=void 0===p?"left":p,b=e.label,y=e.hasActionsHead,v=void 0!==y&&y,m=e.isMenu,g=void 0!==m&&m,O=e.onDragStart,x=e.onRequestResize,j=e.resizable,w=void 0===j||j,C=e.sortDir,S=void 0===C?void 0:C,k=e.truncate,P=void 0===k||k,E=qe(e,["index","columnId","id","width","onDragEnd","onAutosizeColumn","align","label","hasActionsHead","isMenu","onDragStart","onRequestResize","resizable","sortDir","truncate"]);var _=$e(Object(r.useState)(),2),T=_[0],R=_[1],I=$e(Object(r.useState)(!1),2),D=I[0],M=I[1],A=$e(Object(r.useState)(!1),2),L=A[0],N=A[1],B=$e(Object(r.useState)(0),2),z=B[0],H=B[1],$=$e(Object(r.useState)(0),2),F=$[0],V=$[1],q=Object(r.useRef)(null);Object(r.useEffect)((function(){return function(){return null==T?void 0:T.remove()}}),[T]);var W="prisma"===Object(h.useSplunkTheme)().family,K=!!O;return o.a.createElement(Pe,ze({draggable:K||void 0,onDragStart:K?function(e){var r,o=q.current;if(e.dataTransfer.setDragImage&&(null==o?void 0:o.parentElement)){var a=o.parentElement.getBoundingClientRect(),i=o.cloneNode(!0);i.style.width="".concat(a.width,"px"),i.style.height="".concat(a.height,"px"),i.setAttribute("data-helper","true"),document.body.appendChild(i),e.dataTransfer.setDragImage(i,e.clientX-a.left,e.clientY-a.top),N(!0),R(i)}e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text",null!==(r=null==o?void 0:o.textContent)&&void 0!==r?r:""),null==O||O(t,n)}:void 0,onDragEnd:K?function(){R(void 0),N(!1),null==c||c()}:void 0,ref:q,$hasActionsHead:!!v,$align:d,$draggable:K,$dragging:!!L},Object(l.omit)(E,[].concat(He(Object.keys(Ke.propTypes)),["id"]))),D&&o.a.createElement(s.a,{target:"window",onMouseUp:function(){M(!1)},onMouseMove:function(e){var r=z-e.clientX,o=Math.max(F-r,16);void 0!==t&&(null==x||x(e,{index:t,columnId:n,id:a,width:o}))}}),x&&w&&o.a.createElement(_e,{onMouseDown:function(e){e.preventDefault(),H(e.clientX),V(i||0),M(!0)},onDoubleClick:function(e){void 0!==t&&(null==u||u(e,{index:t,columnId:n}))},onKeyDown:function(e){var r=Object(f.keycode)(e.nativeEvent);if(void 0!==x&&void 0!==i&&void 0!==t){if("left"===r){var o=Math.max(i-10,20);x(e,{index:t,columnId:n,id:a,width:o})}if("right"===r)x(e,{index:t,columnId:n,id:a,width:i+10})}},"data-test":"resize"}),K&&o.a.createElement(Ce,null,o.a.createElement(Be,{screenReaderContent:Object(oe._)("Press left or right arrow key to reorder the columns.")})),o.a.createElement(ke,{$sorted:!!S&&"none"!==S,$align:d,$truncate:P,$fill:g},b,(g||S&&W)&&o.a.createElement(Se,null,o.a.createElement(xe.a,{enterpriseSize:.5,prismaSize:"small",screenReaderText:"none"===S&&W?Object(oe._)("Click to sort"):void 0}))),S&&o.a.createElement(Ee,{$sorted:"none"!==S},"none"===S&&!W&&o.a.createElement(ie.a,{hideDefaultTooltip:!0,screenReaderText:Object(oe._)("Click to sort")}),"asc"===S&&o.a.createElement(Oe,{prismaSize:"small",inline:!0,screenReaderText:Object(oe._)("Press to sort descending")}),"desc"===S&&o.a.createElement(be,{prismaSize:"small",inline:!0,screenReaderText:Object(oe._)("Press to sort ascending")})))}Ke.propTypes=We;var Ue=Ke;function Ge(e){return(Ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ze(){return(Ze=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?null==i||i({fromIndex:o,toIndex:o-1,columnId:r}):"right"===Object(f.keycode)(e.nativeEvent)&&void 0!==o&&(null==i||i({fromIndex:o,toIndex:o+1,columnId:r}))),void 0!==o&&(null==a||a(e,{index:o,columnId:r}))})),ot(nt(t),"handleDragStart",(function(e,n){var r,o;t.setState({isDragging:!0}),null===(r=(o=t.props).onDragStart)||void 0===r||r.call(o,e,n)})),ot(nt(t),"handleDragEnd",(function(){t.setState({isDragging:!1})})),ot(nt(t),"sortDirAriaMapping",{asc:"ascending",desc:"descending",none:"none"}),t.state={isDragging:!1},t}return t=i,(n=[{key:"render",value:function(){var e=this.props,t=e.align,n=e.children,r=e.columnId,a=e.elementRef,c=e.hasActionsHead,s=e.id,u=e.index,p=e.onAutosizeColumn,f=e.onClick,d=e.onDragStart,b=e.onRequestResize,y=e.onSort,h=e.resizable,v=e.showGuideline,m=e.sortDir,g=e.style,O=e.variant,x=e.truncate,j=e.visible,w=e.width,C=!!d,S=!!y&&!!m,k=void 0!==f,P=Object(l.merge)(g,{width:w}),E=!c&&x;return o.a.createElement(Te,Ze({style:P,ref:a,"aria-sort":y&&(this.sortDirAriaMapping[m]||"none"),"data-test":"head-cell","data-test-label":Object(l.isString)(n)?n:void 0,"data-test-sort-dir":y&&m,id:j?s:void 0,onClick:y||k?this.handleClick:void 0,tabIndex:j&&(C||y||k)?0:void 0,$dragging:this.state.isDragging||void 0,$clickable:C||S||k,$variant:O},Object(l.omit)(this.props,[].concat(Xe(Object.keys(i.propTypes)),["id","style"])),{onKeyDown:C||y||k?this.handleKeyDown:void 0}),o.a.createElement(Ue,{label:n,align:t,columnId:r,hasActionsHead:c,id:s,index:u,resizable:j&&h,onDragStart:d?this.handleDragStart:void 0,onDragEnd:d?this.handleDragEnd:void 0,onAutosizeColumn:p,onRequestResize:b,sortDir:y&&m,truncate:E,width:w}),"none"!==v&&o.a.createElement(Re,{$position:v}))}}])&&Qe(t.prototype,n),r&&Qe(t,r),i}(r.Component);ot(it,"splunkUiType","Table.HeadCell"),ot(it,"propTypes",at),ot(it,"defaultProps",{align:"left",resizable:!0,showGuideline:"none",sortDir:"none",truncate:!0,visible:!0});var lt=it,ct=n(97),st=n.n(ct),ut=n(25);function pt(){var e=Object(h.useSplunkTheme)().family,t=Object(oe._)("More Information");return"prisma"===e?o.a.createElement(ut.a,{screenReaderText:t,prismaSize:"small"}):o.a.createElement(st.a,{screenReaderText:t})}var ft=n(17),dt=n.n(ft),bt=n(16),yt=n.n(bt),ht=n(43),vt=n.n(ht),mt=n(54),gt=n(52);function Ot(e){return(Ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xt(e,t){for(var n=0;n0?null==r||r({fromIndex:o,toIndex:o-1,dataId:a}):"down"===l&&void 0!==o&&(null==r||r({fromIndex:o,toIndex:o+1,dataId:a})),void 0!==o&&(null==i||i(e,{index:o,dataId:a}))})),t.state={isDragging:!1},t}return t=i,(n=[{key:"componentDidMount",value:function(){var e,t,n=this.props;n.dataId===n.activeElementId&&(null===(e=this.el)||void 0===e||null===(t=e.parentElement)||void 0===t||t.focus())}},{key:"componentWillUnmount",value:function(){this.cleanupDrag()}},{key:"cleanupDrag",value:function(){var e;this.cloneEl&&(this.cloneEl.remove?this.cloneEl.remove():null===(e=this.cloneEl.parentNode)||void 0===e||e.removeChild(this.cloneEl),this.cloneEl=void 0)}},{key:"render",value:function(){var e=this.props,t=e.showRowGuideline,n=e.rowSpan;return o.a.createElement(Ie,{$align:"center","data-test":"drag",$dragging:this.state.isDragging,tabIndex:0,rowSpan:n,onKeyDown:this.handleKeyDown},"none"!==t&&o.a.createElement(De,{$position:t}),o.a.createElement(Me,{draggable:!0,$draggable:!0,$dragging:this.state.isDragging||void 0,onDragStart:this.handleDragStart,onDragEnd:this.handleDragEnd,ref:this.handleMount},o.a.createElement(Be,{screenReaderContent:Object(oe._)("Press up or down arrow key to reorder the columns.")})))}}])&&xt(t.prototype,n),r&&xt(t,r),i}(r.Component);Pt(_t,"propTypes",Et),Pt(_t,"defaultProps",{showRowGuideline:"none"});var Tt=_t,Rt=y.a.tr.withConfig({displayName:"RowStyles__StyledStripeNone",componentId:"f0igqq-0"})([""," background-color:",";",";@media print{background-color:none;}"," ",""],h.mixins.reset("table-row"),Object(h.pick)({prisma:h.variables.transparent}),(function(e){return e.$clickable&&Object(b.css)(["cursor:pointer;&:hover{background-color:",";}&:focus{box-shadow:",";}"],Object(h.pick)({enterprise:{light:h.variables.accentColorL50,dark:h.variables.accentColorD50},prisma:h.variables.interactiveColorOverlayHover}),h.variables.focusShadowInset)}),(function(e){var t=e.disabled,n=e.$expandable;return!t&&!n&&Object(b.css)(["&:not([data-expansion-row='true']){&:hover{background-color:",";}}"],Object(h.pick)({prisma:h.variables.interactiveColorOverlayHover}))}),(function(e){return e.disabled&&Object(b.css)(["color:",";"],Object(h.pick)({prisma:h.variables.contentColorDisabled}))})),It=y()(Rt).withConfig({displayName:"RowStyles__StyledStripeOdd",componentId:"f0igqq-1"})(["background-color:",";"],Object(h.pick)({enterprise:{dark:h.variables.gray22},prisma:h.variables.transparent})),Dt=y()(Rt).withConfig({displayName:"RowStyles__StyledStripeEven",componentId:"f0igqq-2"})(["background-color:",";"],Object(h.pick)({enterprise:{light:h.variables.gray96,dark:h.variables.gray20},prisma:h.variables.transparent})),Mt=y()(re).withConfig({displayName:"RowStyles__StyledCellSelectionDisabled",componentId:"f0igqq-3"})(["&&{cursor:not-allowed;}"]),At=y()(re).withConfig({displayName:"RowStyles__StyledCellExpansionDisabled",componentId:"f0igqq-4"})(["width:",";"],Object(h.pick)({enterprise:"35px",prisma:"40px"})),Lt=n(60),Nt=n.n(Lt),Bt=y()(Nt.a).withConfig({displayName:"ToggleStyles__StyledSwitch",componentId:"sc-1x3ikch-0"})(["margin:",";justify-content:center;"],Object(h.pickVariant)("$allRows",{true:{enterprise:"-6px 0",prisma:"-10px 0"},false:"-6px 0"}));function zt(){return(zt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $t={allRows:i.a.bool,disabled:i.a.bool,onClick:i.a.func,selected:i.a.oneOf([!0,!1,"some"])};function Ft(e){var t=e.allRows,n=void 0!==t&&t,r=e.disabled,a=e.selected,i=void 0!==a&&a,l=Ht(e,["allRows","disabled","selected"]),c=n?Object(oe._)("No rows selected"):Object(oe._)("Row unselected");return"some"===i?c=Object(oe._)("Some rows selected"):i&&(c=n?Object(oe._)("All rows selected"):Object(oe._)("Row selected")),o.a.createElement(Bt,zt({$allRows:n},l,{interactive:!1,disabled:r,value:"",selected:i,"aria-label":c,selectedLabel:n?Object(oe._)("All rows selected"):Object(oe._)("Row selected"),unselectedLabel:n?Object(oe._)("No rows selected"):Object(oe._)("Row unselected"),someSelectedLabel:Object(oe._)("Some rows selected")}))}Ft.propTypes=$t;var Vt=Ft;function qt(e){return(qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Wt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ut(e,t){for(var n=0;nt.left&&ao?u+1:u}},{key:"cleanupDrag",value:function(){window.removeEventListener("dragend",this.handleDragEnd),this.cells=void 0}},{key:"render",value:function(){var e=this,t=this.props,n=t.actions,a=t.actionsColumnWidth,i=t.children,s=t.hasDragColumn,u=t.hasInfoColumn,p=t.onAutosizeColumn,f=t.onRequestMoveColumn,d=t.onRequestResizeColumn,b=t.onRequestToggleAllRows,y=t.rowSelection,h=this.calculateGuideIndex(),v=r.Children.toArray(i).filter(r.isValidElement).map((function(t,n,o){var a="none";return h===o.length&&n+1===o.length?a="after":h===n&&(a="before"),Object(r.cloneElement)(t,{index:n,showGuideline:a,onRequestResize:d,onDragStart:f?e.handleDragStart:void 0,onRequestMoveColumn:f?e.onRequestMoveColumn:void 0,onAutosizeColumn:p,key:t.key||t.props.columnId||n})})),m=void 0===y?void 0:{all:!0,none:!1,some:"some"}[y],g="some"===m?"mixed":m,O=a||48;return o.a.createElement(ln,fn({ref:this.handleMount,"data-test":"head"},Object(l.omit)(this.props,Object(l.keys)(c.propTypes))),o.a.createElement(an,null,s&&o.a.createElement(un,{key:"drag_rows_head_cell","data-test":"drag-rows-head-cell",align:"center",resizable:!1}),b&&o.a.createElement(cn,{key:"toggle_all","data-test":"toggle-all",resizable:!1,align:"center",onClick:b,variant:"toggleAll",truncate:!1,role:"checkbox","aria-checked":g},o.a.createElement(Vt,{selected:m,allRows:!0})),u&&o.a.createElement(sn,{key:"more_info_head_cell","data-test":"more-info-head-cell",align:"center",resizable:!1,variant:"info"},o.a.createElement(pt,null)),v,n.length>0&&o.a.createElement(lt,{hasActionsHead:!0,key:"actions_head_cell","data-test":"actions-head-cell",align:"right",resizable:!1,width:O,style:{minWidth:O},variant:"actions"},n),0===n.length&&a&&o.a.createElement(lt,{key:"actions_head_cell","data-test":"actions-head-cell",align:"right",resizable:!1,width:a,style:{minWidth:a},variant:"actions"}," ")))}}])&&dn(t.prototype,n),a&&dn(t,a),c}(r.Component);gn(xn,"splunkUiType","Table.Head"),gn(xn,"propTypes",On),gn(xn,"defaultProps",{actions:[]});var jn=xn,wn=n(10),Cn=n(18),Sn=n.n(Cn);function kn(e){return(kn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Pn(){return(Pn=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?null==i||i({fromIndex:o,toIndex:o-1,columnId:r}):"right"===Object(f.keycode)(e.nativeEvent)&&void 0!==o&&(null==i||i({fromIndex:o,toIndex:o+1,columnId:r}))),void 0!==o&&(null==a||a(e,{index:o,columnId:r}))})),Ln(Mn(t),"handleContentClick",(function(e){t.handleRequestClose({reason:"contentClick",event:e})})),Ln(Mn(t),"handleDragStart",(function(e,n){var r,o;t.setState({isDragging:!0}),null===(r=(o=t.props).onDragStart)||void 0===r||r.call(o,e,n)})),Ln(Mn(t),"handleDragEnd",(function(){t.setState({isDragging:!1})})),t.state={el:null,isDragging:!1,open:!1},t.controlledExternally=Object(l.has)(e,"open"),t.popoverId=Object(wn.createDOMID)("popover"),t.cellId=Object(wn.createDOMID)("cellId"),t}return t=i,(n=[{key:"componentDidUpdate",value:function(e){e.visible&&!this.props.visible&&this.handleRequestClose({reason:"offScreen"})}},{key:"focus",value:function(){var e;null===(e=this.state.el)||void 0===e||e.focus()}},{key:"isOpen",value:function(){return this.isControlled()?this.props.open:this.state.open}},{key:"isControlled",value:function(){return this.controlledExternally}},{key:"render",value:function(){var e,t=this,n=this.props,r=n.align,a=n.canCoverHead,c=n.children,s=n.closeReasons,u=n.columnId,p=n.defaultPlacement,f=n.id,d=n.index,b=n.label,y=n.onAutosizeColumn,h=n.onDragStart,v=n.onRequestResize,m=n.repositionMode,g=n.resizable,O=n.retainFocus,x=n.showGuideline,j=n.style,w=n.takeFocus,C=n.truncate,S=n.variant,k=n.visible,P=n.width,E=this.state,_=E.el,T=E.clientX,R=f||this.cellId;return o.a.createElement(Te,Pn({style:Object(l.merge)(j,{width:P}),"data-test":"head-cell",$dragging:this.state.isDragging||void 0,$clickable:!0,$variant:S,id:k?R:void 0,tabIndex:k?0:void 0,ref:this.handleMount},Object(l.omit)(this.props,[].concat(En(Object.keys(i.propTypes)),["id","style"])),{onClick:this.handleClick,onKeyDown:this.handleKeyDown,"aria-haspopup":!0,"aria-owns":this.popoverId,"aria-expanded":this.isOpen()}),o.a.createElement(Ue,{label:b,align:r,columnId:u,id:f,index:d,isMenu:!0,resizable:k&&g,onDragStart:h?this.handleDragStart:void 0,onDragEnd:h?this.handleDragEnd:void 0,onAutosizeColumn:y,onRequestResize:v,truncate:C,width:P}),"none"!==x&&o.a.createElement(Re,{$position:x}),o.a.createElement(Sn.a,{align:"center",open:!!_&&this.isOpen(),autoCloseWhenOffScreen:Object(l.includes)(s,"offScreen"),anchor:_,canCoverAnchor:a,retainFocus:O,defaultPlacement:p,onRequestClose:this.handleRequestClose,repositionMode:m,id:this.popoverId,"aria-labelledby":f||this.cellId,takeFocus:w,pointTo:void 0!==T&&Object(l.isFinite)(T)?{x:T-(null!==(e=null==_?void 0:_.getBoundingClientRect().left)&&void 0!==e?e:0)}:void 0},Object(l.isFunction)(c)?function(){return o.a.createElement("div",{onClick:t.handleContentClick},c.apply(void 0,arguments))}:o.a.createElement("div",{onClick:this.handleContentClick},c)))}}])&&Tn(t.prototype,n),r&&Tn(t,r),i}(r.Component);Ln(Hn,"splunkUiType","Table.HeadDropdownCell"),Ln(Hn,"possibleCloseReasons",Nn),Ln(Hn,"propTypes",Bn),Ln(Hn,"defaultProps",zn);var $n=Hn,Fn=y()(M).withConfig({displayName:"HeadTableStyles__Styled",componentId:"g85wgf-0"})(["min-width:0;table-layout:fixed;"]),Vn=y.a.div.withConfig({displayName:"HeadTableStyles__StyledDockedContainer",componentId:"g85wgf-1"})(["overflow:hidden;position:fixed;box-shadow:",";z-index:",";@media print{display:none;}"],Object(h.pick)({enterprise:h.variables.overlayShadow,prisma:"none"}),h.variables.zindexFixedNavbar),qn=y()(Vn).withConfig({displayName:"HeadTableStyles__StyledFixedContainer",componentId:"g85wgf-2"})(["position:absolute;box-shadow:none;z-index:1;"]);function Wn(e){return(Wn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Kn(){return(Kn=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Gn(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zn(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1)return{target:"headCell",index:o};var a=null===(n=e.getEl())||void 0===n?void 0:n.querySelectorAll("[data-test=resize]"),i=Object(l.indexOf)(a,document.activeElement);return i>-1?{target:"resizeButton",index:i}:void 0}}},{key:"getOffset",value:function(e){var t=e.getBoundingClientRect();return{top:t.top+window.pageYOffset,left:t.left+window.pageXOffset}}},{key:"applyHeadFocusState",value:function(e,t){var n,r,o,a,i=t.target,l=t.index;if("headCell"===i)o=null==e||null===(a=e.getEl())||void 0===a?void 0:a.children[0].children[l];else if("resizeButton"===i){var c;o=null==e||null===(c=e.getEl())||void 0===c?void 0:c.querySelectorAll("[data-test=resize]")[l]}null===(n=o)||void 0===n||null===(r=n.focus)||void 0===r||r.call(n)}}]),pr(n,[{key:"componentDidUpdate",value:function(e){var t=this.head,n=this.headTable;if(t&&n){var r=t.getCellWidths();Object(l.isEqual)(this.state.cellWidths,r)||this.updateDockedHeadState()}"inline"===e.headType&&"inline"!==this.props.headType&&this.updateDockedHeadState()}},{key:"componentDidMount",value:function(){this.updateDockedHeadState()}},{key:"componentWillUnmount",value:function(){this.handleScroll.cancel(),this.handleResize.cancel(),this.cleanupDrag()}},{key:"createHead",value:function(e){var t=this.props,n=t.actions,o=t.actionsColumnWidth,a=t.onRequestMoveColumn,i=t.onRequestMoveRow,l=t.onRequestResizeColumn,c=t.onRequestToggleAllRows,s=t.rowExpansion,u=t.rowSelection,p=this.state.dragIndex,f=r.Children.toArray(e.props.children).filter(r.isValidElement),d=n.filter(r.isValidElement);return Object(r.cloneElement)(e,{actions:d,actionsColumnWidth:o,dragIndex:p,dragPosition:this.state.dragPosition,hasInfoColumn:"none"!==s,hasDragColumn:!!i,onAutosizeColumn:this.handleAutosizeColumn,onDragStart:a?this.handleDragStart:void 0,onRequestMoveColumn:a,onRequestResizeColumn:l,onRequestToggleAllRows:c,ref:this.handleHeadMount,rowSelection:u},f)}},{key:"createBody",value:function(e){var t=this.props.actions.filter(r.isValidElement);return Object(r.cloneElement)(e,{actions:t.length>0,movableColumns:!!this.props.onRequestMoveColumn,onRequestMoveRow:this.props.onRequestMoveRow,rowExpansion:this.props.rowExpansion,stripeRows:this.props.stripeRows})}},{key:"isInline",value:function(){return"inline"===this.props.headType}},{key:"headerIsDocked",value:function(){return"docked"===this.props.headType}},{key:"isFixed",value:function(){return"fixed"===this.props.headType}},{key:"showDockedHeader",value:function(){if(!(this.headerIsDocked()&&this.table&&this.head&&this.tableContainer))return!1;var e=this.props.dockOffset,t=n.getOffset(this.tableContainer).top;return window.pageYOffset>=t-e}},{key:"showDockedScrollBar",value:function(){if(!this.props.dockScrollBar||!this.table||!this.tableContainer)return!1;var e=this.tableContainer.getBoundingClientRect();return e.bottom>window.innerHeight&&e.top=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function I(e,t){for(var n=0;na?(c(),o=e.start,a=e.end):e.end>a&&(a=e.end)})),c(),l},t.filterByKeywords=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=o(t);return e.filter((function(e){return a(n(e),r)}))};var r=n(2);function o(e){return(0,r.isString)(e)?(e.match(/(?:[^\s"]+|"[^"]*")+/g)||[]).map((function(e){return e.replace(/^"(.*)"$/,"$1").toLowerCase()})):[]}function a(e,t){if(!(0,r.isString)(e))return!1;var n=e.toLowerCase();return t.every((function(e){return(0,r.includes)(n,e)}))}function i(e,t){if(!(0,r.isString)(e)||!t||!t.length)return!1;var n=e.toLowerCase();return t.reduce((function(e,t){var r=n.indexOf(t);return r>=0&&e.push({keyword:t,start:r,end:r+t.length}),e}),[]).sort((function(e,t){return e.start!==t.start?e.start>t.start?1:-1:e.end>t.end?1:-1}))}},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=158)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},12:function(e,t,n){"use strict";function r(e,t){e&&("function"==typeof e?e(t):e.current=t)}n.d(t,"a",(function(){return r}))},13:function(e,t){e.exports=n(295)},158:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return A}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(4),c=n(5),s=n(90),u=n(13),p=n.n(u),f=n(3),d=n.n(f),b=n(91),y=n.n(b),h=n(0),v=d.a.div.withConfig({displayName:"ResultsMenuStyles__Styled",componentId:"avbhl8-0"})(["",";flex-direction:column;max-height:calc(100vh - 20px);",""],h.mixins.reset("flex"),Object(h.pick)({prisma:Object(f.css)(["border-radius:",";background-color:",";"],h.variables.borderRadius,h.variables.backgroundColorPopup)})),m=d.a.div.withConfig({displayName:"ResultsMenuStyles__StyledFooter",componentId:"avbhl8-1"})(["padding:",";color:",";",""],Object(h.pick)({prisma:{comfortable:"10px 16px",compact:"6px 16px"},enterprise:"6px 10px"}),Object(h.pick)({prisma:h.variables.contentColorMuted,enterprise:h.variables.textGray}),(function(e){return"above"===e.$placement?Object(h.pick)({prisma:Object(f.css)(["border-bottom:1px solid ",";"],h.variables.neutral200),enterprise:Object(f.css)(["border-bottom:",";"],h.variables.border)}):Object(h.pick)({prisma:Object(f.css)(["border-top:1px solid ",";"],h.variables.neutral200),enterprise:Object(f.css)(["border-top:",";"],h.variables.border)})})),g=d.a.li.withConfig({displayName:"ResultsMenuStyles__StyledLoading",componentId:"avbhl8-2"})(["",";padding:",";"],h.mixins.reset("flex"),Object(h.pick)({prisma:{comfortable:"10px 16px",compact:"6px 16px"},enterprise:"6px 10px"})),O=d()(y.a).withConfig({displayName:"ResultsMenuStyles__StyledWait",componentId:"avbhl8-3"})(["margin-right:",";flex:0 0 auto;"],h.variables.spacingQuarter),x=d.a.div.withConfig({displayName:"ResultsMenuStyles__StyledLoadingMessage",componentId:"avbhl8-4"})(["flex:1 0 0;color:",";"],Object(h.pick)({prisma:h.variables.contentColorMuted,enterprise:h.variables.textGray})),j=n(12);function w(e){return(w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function C(){return(C=Object.assign||function(e){for(var t=1;t=n&&t.handleScrollBottom(e)}})),R(_(t),"handleWheelMenu",(function(e){e.stopPropagation(),document.documentElement.scrollTop=t.state.windowTop})),R(_(t),"handleScrollBottomOnFullMenu",(function(){var e=r.Children.count(t.props.children),n=t.state,o=n.childrenCount,a=n.menuEl,i=n.menuMaxHeight;a&&a.scrollHeight===a.offsetHeight&&t.handleScrollBottom(),i&&e!==o&&t.setState({numberOfItemsLoaded:e-(null!=o?o:0),childrenCount:e,scrollBottomTriggered:!1})})),t.state={containerEl:null,menuEl:null,menuMaxHeight:void 0,numberOfItemsLoaded:0,scrollBottomTriggered:!1,windowTop:0},t.scrollBottomOffset=400,t.itemMinHeight=28,t}return t=c,(n=[{key:"componentDidUpdate",value:function(){var e=this.state,t=e.containerEl,n=e.menuEl,r=e.menuMaxHeight;if(s.isIE11&&t&&n){if(this.props.maxHeight){var o=t.scrollHeight-n.clientHeight,a=this.props.maxHeight-o;(void 0===r||Math.abs(r-a)>1)&&this.setState({menuMaxHeight:a})}this.props&&this.props.onScrollBottom&&this.props.children&&this.handleScrollBottomOnFullMenu()}}},{key:"handleScrollBottom",value:function(e){var t,n;this.state.scrollBottomTriggered||(this.setState({scrollBottomTriggered:!0}),null===(t=(n=this.props).onScrollBottom)||void 0===t||t.call(n,e))}},{key:"renderFooterMessage",value:function(){return this.props.footerMessage&&!!r.Children.toArray(this.props.children).length&&o.a.createElement(m,{$placement:this.props.placement,"data-test":"footer-message",key:"footer"},this.props.footerMessage)}},{key:"render",value:function(){var e=this.props,t=e.animateLoading,n=e.children,a=e.childrenStart,i=e.isLoading,s=e.loadingMessage,f=e.noOptionsMessage,d=e.onScrollBottom,b=e.placement,y=e.style,h=Object(l.omit)(this.props,Object(l.keys)(c.propTypes)),m=r.Children.toArray(n).filter(r.isValidElement).some((function(e){var t=e.type;return!(t===u.Divider&&t.filterFirst||(t===u.Divider||t===u.Heading)&&(t.filterLast||t.filterConsecutive))}));return o.a.createElement(v,C({key:"wrapper",style:y,ref:this.handleMount,onWheel:d?this.handleWheelMenu:void 0,onMouseEnter:d?this.handleMouseEnter:void 0,onMouseLeave:d?this.handleMouseLeave:void 0},h),"above"!==b&&a,"above"===b&&this.renderFooterMessage(),o.a.createElement(p.a,{key:"menu",style:{overflow:"auto",maxHeight:this.state.menuMaxHeight||"calc(100vh - 20px)",flexDirection:"column"},elementRef:this.handleMenuMount,onScroll:d?this.handleScroll:void 0,stopScrollPropagation:!0,role:"listbox"},!m&&f&&!i&&o.a.createElement(p.a.Item,{"data-test":"no-results-message",disabled:!0},f),n,d&&o.a.createElement("div",{style:{height:this.state.scrollBottomTriggered&&this.state.numberOfItemsLoaded*this.itemMinHeight||0}}),i&&o.a.createElement(g,null,t&&o.a.createElement(O,null),o.a.createElement(x,null,s))),"above"!==b&&this.renderFooterMessage(),"above"===b&&a)}}])&&S(t.prototype,n),a&&S(t,a),c}(r.Component);R(M,"propTypes",I),R(M,"defaultProps",D);var A=M},2:function(e,t){e.exports=n(0)},3:function(e,t){e.exports=n(1)},4:function(e,t){e.exports=n(2)},5:function(e,t){e.exports=n(7)},90:function(e,t){e.exports=n(481)},91:function(e,t){e.exports=n(76)}})},,function(e,t,n){var r=n(327),o=n(362),a=n(405),i=n(312),l=n(296),c=n(413),s=n(415),u=n(340),p=s((function(e,t){var n={};if(null==e)return n;var s=!1;t=r(t,(function(t){return t=i(t,e),s||(s=t.length>1),t})),l(e,u(e),n),s&&(n=o(n,7,c));for(var p=t.length;p--;)a(n,t[p]);return n}));e.exports=p},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n-1&&e%1==0&&e<=9007199254740991}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){var r=n(143),o=n(334);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},function(e,t){e.exports=function(){return[]}},function(e,t,n){var r=n(308),o=n(309),a=n(307),i=n(337),l=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=o(e);return t}:i;e.exports=l},function(e,t,n){var r=n(308),o=n(290);e.exports=function(e,t,n){var a=t(e);return o(e)?a:r(a,n(e))}},function(e,t,n){var r=n(339),o=n(338),a=n(306);e.exports=function(e){return r(e,a,o)}},function(e,t,n){var r=n(313);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t){e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var b={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),level:i.a.oneOf([1,2,3,4,"s","ss"])},y={1:"h1",2:"h2",3:"h3",4:"h4",s:"h4",ss:"h5"};function h(e){var t,n=e.level,r=void 0===n?2:n,a=e.children,i=e.elementRef,l=d(e,["level","children","elementRef"]);return o.a.createElement(p,f({as:y[r],$isSection:(t=r,"s"===t.toString().charAt(0)),"data-test":"heading",ref:i},l),a)}h.propTypes=b;var v=h},2:function(e,t){e.exports=n(0)},3:function(e,t){e.exports=n(1)}})},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=20)}([function(e,t,n){"use strict";n.r(t),n.d(t,"TOAST_TYPES",(function(){return r})),n.d(t,"TOAST_POSITIONS",(function(){return o}));var r={INFO:"info",WARNING:"warning",SUCCESS:"success",ERROR:"error"},o={TOP_LEFT:"top-left",TOP_CENTER:"top-center",TOP_RIGHT:"top-right",BOTTOM_LEFT:"bottom-left",BOTTOM_CENTER:"bottom-center",BOTTOM_RIGHT:"bottom-right"}},function(e,t){e.exports=n(0)},function(e,t){e.exports=n(428)},function(e,t){e.exports=n(3)},function(e,t){e.exports=n(1)},function(e,t){e.exports=n(2)},function(e,t){e.exports=n(64)},function(e,t){e.exports=n(82)},function(e,t){e.exports=n(83)},function(e,t){e.exports=n(73)},function(e,t){e.exports=n(152)},function(e,t){e.exports=n(53)},function(e,t){e.exports=n(151)},function(e,t){e.exports=n(150)},function(e,t){e.exports=n(139)},function(e,t){e.exports=n(352)},function(e,t){e.exports=n(441)},,,,function(e,t,n){"use strict";n.r(t);var r,o,a,i=n(1),l=n.n(i),c=n(3),s=n.n(c),u=n(5),p=n(11),f=n.n(p),d=n(6),b=n.n(d),y=n(7),h=n(8),v=n.n(h),m=n(9),g=n(10),O=n.n(g),x=n(12),j=n.n(x),w=n(13),C=n.n(w),S=n(14),k=n.n(S),P=n(15),E=n.n(P),_=n(0),T=n(4),R=n.n(T),I=n(16),D=n.n(I),M=n(2);function A(){var e=Y(["\n ","\n position: fixed;\n z-index: ",";\n ",";\n"]);return A=function(){return e},e}function L(){var e=Y(["\n bottom: 16px;\n left: 50%;\n margin-left: calc(-1 * "," / 2);\n"]);return L=function(){return e},e}function N(){var e=Y(["\n bottom: 16px;\n right: 16px;\n"]);return N=function(){return e},e}function B(){var e=Y(["\n bottom: 16px;\n left: 16px;\n"]);return B=function(){return e},e}function z(){var e=Y(["\n top: 16px;\n left: 16px;\n"]);return z=function(){return e},e}function H(){var e=Y(["\n top: 16px;\n right: 16px;\n"]);return H=function(){return e},e}function $(){var e=Y(["\n top: 16px;\n left: 50%;\n margin-left: calc(-1 * "," / 2);\n"]);return $=function(){return e},e}function F(){var e=Y(["\n width: ",";\n\n & > div:not(:nth-last-child(1)) {\n margin-bottom: 16px;\n }\n"]);return F=function(){return e},e}function V(){var e=Y(["\n display: block;\n position: relative;\n float: right;\n margin: 3px 12px 12px 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n width: auto;\n color: ",";\n padding: 1px 0 2px;\n border: none;\n font-size: 14px;\n line-height: 20px;\n cursor: pointer;\n max-width: calc(100% - 24px);\n background-color: ",";\n"]);return V=function(){return e},e}function q(){var e=Y(["\n overflow-y: auto;\n overflow-x: hidden;\n margin-left: 47px;\n width: 453px;\n padding-top: 8px;\n"]);return q=function(){return e},e}function W(){var e=Y(["\n border-radius: "," 0 0 ",";\n "]);return W=function(){return e},e}function K(){var e=Y(["\n width: 36px;\n height: 100%;\n display: flex;\n position: absolute;\n align-items: center;\n padding-left: 11px;\n background: ",";\n color: ",";\n ","\n"]);return K=function(){return e},e}function U(){var e=Y(["\n display: inline-block;\n height: 100%;\n padding-top: 5px;\n margin-left: 12px;\n margin-right: 12px;\n max-width: 404px;\n hyphens: auto;\n text-overflow: ellipsis;\n padding-bottom: ",";\n"]);return U=function(){return e},e}function G(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Z(){var e=Y(["\n border: 1px solid\n ",";\n "]);return Z=function(){return e},e}function X(){var e=Y(["\n width: ",";\n min-height: 46px;\n position: relative;\n background-color: ",";\n box-shadow: ",";\n ",";\n border-radius: ",";\n"]);return X=function(){return e},e}function Y(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var Q=R.a.div(X(),"500px",Object(M.pick)({enterprise:M.variables.backgroundColor,prisma:M.variables.backgroundColorPopup}),Object(M.pick)({enterprise:M.variables.overlayShadow,prisma:M.variables.embossShadow}),Object(M.pick)({enterprise:Object(T.css)(Z(),Object(M.pickVariant)("$type",(r={},G(r,_.TOAST_TYPES.INFO,M.variables.cat1Color),G(r,_.TOAST_TYPES.WARNING,M.variables.warningColor),G(r,_.TOAST_TYPES.SUCCESS,M.variables.successColor),G(r,_.TOAST_TYPES.ERROR,M.variables.errorColor),r)))}),M.variables.borderRadius),J=R.a.div(U(),(function(e){return e.action?null:"13px"})),ee=R.a.div(K(),Object(M.pick)({enterprise:Object(M.pickVariant)("$type",(o={},G(o,_.TOAST_TYPES.INFO,M.variables.cat1Color),G(o,_.TOAST_TYPES.WARNING,M.variables.warningColor),G(o,_.TOAST_TYPES.SUCCESS,M.variables.successColor),G(o,_.TOAST_TYPES.ERROR,M.variables.errorColor),o)),prisma:Object(M.pickVariant)("$type",(a={},G(a,_.TOAST_TYPES.INFO,M.variables.contentColorActive),G(a,_.TOAST_TYPES.WARNING,M.variables.accentColorWarning),G(a,_.TOAST_TYPES.SUCCESS,M.variables.accentColorPositive),G(a,_.TOAST_TYPES.ERROR,M.variables.accentColorNegative),a))}),Object(M.pick)({enterprise:M.variables.white,prisma:M.variables.contentColorInverted}),Object(M.pick)({prisma:Object(T.css)(W(),M.variables.borderRadius,M.variables.borderRadius)})),te=R.a.div(q()),ne=R.a.button(V(),M.variables.linkColor,Object(M.pick)({enterprise:M.variables.backgroundColor,prisma:"transparent"})),re=R()(D.a)(F(),"500px"),oe=Object(T.css)($(),"500px"),ae=Object(T.css)(H()),ie=Object(T.css)(z()),le=Object(T.css)(B()),ce=Object(T.css)(N()),se=Object(T.css)(L(),"500px"),ue=R.a.div(A(),M.mixins.reset("block"),M.variables.zindexToastMessages,(function(e){switch(e.position){case _.TOAST_POSITIONS.TOP_LEFT:return ie;case _.TOAST_POSITIONS.TOP_CENTER:return oe;case _.TOAST_POSITIONS.TOP_RIGHT:return ae;case _.TOAST_POSITIONS.BOTTOM_LEFT:return le;case _.TOAST_POSITIONS.BOTTOM_CENTER:return se;case _.TOAST_POSITIONS.BOTTOM_RIGHT:return ce;default:return oe}})),pe=function(e){var t=e.children;return l.a.createElement("svg",{viewBox:"0 0 24 24",width:"24px",height:"24px",xmlns:"http://www.w3.org/2000/svg"},t)};pe.propTypes={children:s.a.node.isRequired};var fe=function(e){var t=e.type,n="prisma"===E()().family?function(e){switch(e){case _.TOAST_TYPES.SUCCESS:return l.a.createElement(pe,null,l.a.createElement("path",{fillRule:"evenodd",d:"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM16.8738 8.62627C17.2643 9.01679 17.2643 9.64996 16.8738 10.0405L11.5853 15.329C10.9996 15.9147 10.0499 15.9148 9.46414 15.3291L7.12637 12.9921C6.73579 12.6016 6.7357 11.9684 7.12616 11.5779C7.51663 11.1873 8.1498 11.1872 8.54038 11.5776L10.5246 13.5613L15.4596 8.62627C15.8501 8.23574 16.4833 8.23574 16.8738 8.62627Z",fill:"currentColor"}));case _.TOAST_TYPES.INFO:return l.a.createElement(pe,null,l.a.createElement("path",{fillRule:"evenodd",d:"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM11.0001 16.0094V11.9999C11.0001 11.4476 11.4478 10.9999 12.0001 10.9999C12.5524 10.9999 13.0001 11.4476 13.0001 11.9999V16.0094C13.0001 16.5617 12.5524 17.0094 12.0001 17.0094C11.4478 17.0094 11.0001 16.5617 11.0001 16.0094ZM12 6.9999C12.6628 6.9999 13.2 7.53716 13.2 8.1999C13.2 8.86264 12.6628 9.3999 12 9.3999C11.3373 9.3999 10.8 8.86264 10.8 8.1999C10.8 7.53716 11.3373 6.9999 12 6.9999Z",fill:"currentColor"}));case _.TOAST_TYPES.ERROR:return l.a.createElement(pe,null,l.a.createElement("path",{fillRule:"evenodd",d:"M22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12ZM11.0001 7.9906V12.0001C11.0001 12.5524 11.4478 13.0001 12.0001 13.0001C12.5524 13.0001 13.0001 12.5524 13.0001 12.0001V7.9906C13.0001 7.43832 12.5524 6.9906 12.0001 6.9906C11.4478 6.9906 11.0001 7.43832 11.0001 7.9906ZM12.0001 17.0001C12.6628 17.0001 13.2001 16.4628 13.2001 15.8001C13.2001 15.1374 12.6628 14.6001 12.0001 14.6001C11.3373 14.6001 10.8001 15.1374 10.8001 15.8001C10.8001 16.4628 11.3373 17.0001 12.0001 17.0001Z",fill:"currentColor"}));case _.TOAST_TYPES.WARNING:return l.a.createElement(pe,null,l.a.createElement("path",{fillRule:"evenodd",d:"M10.6827 2.82369C11.2341 1.72544 12.7659 1.72544 13.3173 2.82369L21.8338 19.7867C22.3412 20.7973 21.6254 22 20.5165 22H3.48349C2.37462 22 1.65878 20.7973 2.16616 19.7867L10.6827 2.82369ZM11.0002 13.6618V11.0133C11.0002 10.461 11.4479 10.0133 12.0002 10.0133C12.5525 10.0133 13.0002 10.461 13.0002 11.0133V13.6618C13.0002 14.2141 12.5525 14.6618 12.0002 14.6618C11.4479 14.6618 11.0002 14.2141 11.0002 13.6618ZM13.2002 16.9347C13.2002 17.5975 12.6629 18.1347 12.0002 18.1347C11.3374 18.1347 10.8002 17.5975 10.8002 16.9347C10.8002 16.272 11.3374 15.7347 12.0002 15.7347C12.6629 15.7347 13.2002 16.272 13.2002 16.9347Z",fill:"currentColor"}));default:return l.a.createElement(pe,null,l.a.createElement("path",{fillRule:"evenodd",d:"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM11.0001 16.0094V11.9999C11.0001 11.4476 11.4478 10.9999 12.0001 10.9999C12.5524 10.9999 13.0001 11.4476 13.0001 11.9999V16.0094C13.0001 16.5617 12.5524 17.0094 12.0001 17.0094C11.4478 17.0094 11.0001 16.5617 11.0001 16.0094ZM12 6.9999C12.6628 6.9999 13.2 7.53716 13.2 8.1999C13.2 8.86264 12.6628 9.3999 12 9.3999C11.3373 9.3999 10.8 8.86264 10.8 8.1999C10.8 7.53716 11.3373 6.9999 12 6.9999Z",fill:"currentColor"}))}}(t):function(e){switch(e){case _.TOAST_TYPES.SUCCESS:return l.a.createElement(j.a,{size:"24px"});case _.TOAST_TYPES.INFO:return l.a.createElement(O.a,{size:"24px"});case _.TOAST_TYPES.ERROR:return l.a.createElement(C.a,{size:"26px"});case _.TOAST_TYPES.WARNING:return l.a.createElement(k.a,{size:"24px"});default:return l.a.createElement(O.a,{size:"24px"})}}(t);return l.a.createElement(ee,{role:"img","data-test":t,"aria-label":"".concat(t," toast icon"),$type:t},n)};fe.propTypes={type:s.a.string.isRequired};var de=fe;function be(e){return(be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ye(){return(ye=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ve(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function me(e,t){for(var n=0;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Te(e){return function(e){if(Array.isArray(e))return Re(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Re(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Re(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Re(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&t.focusedToast!==n[0]?{focusedToast:n[0]}:null}))})),Be(Le(t),"handleRequestHide",(function(e){t.setState((function(t){var n=t.focusedToast||e;return{toasts:t.toasts.filter((function(e){return n.id!==e.id})),focusedToast:null}}))})),Be(Le(t),"renderLayer",(function(){var e=t.props,n=e.position,r=e.animationDuration,o=-1!==n.indexOf("top"),a=o?ze:He;return l.a.createElement(ue,{ref:t.handleModalMount,position:n,"data-test":"toast-messages",role:"group","aria-label":"Toast messages container",tabIndex:-1,onKeyDown:t.handleModalKeyDown},l.a.createElement(re,{enterAnimation:a,appearAnimation:a,leaveAnimation:"fade",duration:Object(u.isNil)(r)?200:r,easing:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",verticalAlignment:o?"top":"bottom"},t.state.toasts.map((function(e){var n=e.id,r=e.message,o=e.type,a=e.autoDismiss,i=e.dismissOnActionClick,c=e.action,s=e.timeOut,u=_e(e,["id","message","type","autoDismiss","dismissOnActionClick","action","timeOut"]);return l.a.createElement(ke,Ee({key:n,message:r,type:o,autoDismiss:a,dismissOnActionClick:i,action:c,timeout:s,onRequestHide:function(){return t.handleRequestHide(e)},onFocus:function(){return t.handleToastFocus(n)},onBlur:function(){return t.handleToastBlur()}},u))}))))})),t.state={toasts:e.toasts||[],focusedToast:null},t}return t=a,(n=[{key:"componentDidMount",value:function(){b.a.addCreateListener(this.handleToastCreate)}},{key:"componentWillUnmount",value:function(){this.setState({toasts:[],focusedToast:null}),b.a.removeCreateListener(this.handleToastCreate)}},{key:"handleToastBlur",value:function(){this.state.focusedToast&&this.setState({focusedToast:null})}},{key:"render",value:function(){var e=this,t=-1!==this.props.position.indexOf("top")?0:Math.max(this.state.toasts.length-1,0),n=this.state.toasts.length>0;return this.props.escapeToCloseToasts?l.a.createElement(f.a,{closeReasons:["escapeKey"],render:this.renderLayer,onRequestClose:function(){return e.handleRequestHide(e.state.toasts[t])},open:n},n&&this.renderLayer()):this.renderLayer()}}])&&Ie(t.prototype,n),r&&Ie(t,r),a}(l.a.Component);$e.propTypes={position:s.a.oneOf(Object(u.values)(_.TOAST_POSITIONS)).isRequired,animationDuration:s.a.number,toasts:s.a.arrayOf(s.a.object),escapeToCloseToasts:s.a.bool},$e.defaultProps={escapeToCloseToasts:!0};var Fe=$e,Ve=function(e){return l.a.createElement(Fe,{position:e.position})};Ve.propTypes={position:s.a.oneOf(["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"])},Ve.defaultProps={position:"top-center"};t.default=Ve}])},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(315))&&r.__esModule?r:{default:r};function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=function(){var e=(0,r.useContext)(o.ThemeContext)||{},t=e.splunkThemeV1,n=void 0===t?{}:t,i=s(e,["splunkThemeV1"]),c=n.family,u=n.colorScheme,p=n.density,f=n.customizer;return l(l({},i),(0,a.getCustomizedTheme)({family:c,colorScheme:u,density:p},f))};t.default=u},,function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var y={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),flex:i.a.bool};function h(e){var t=e.children,n=b(e,["children"]),a=r.Children.toArray(t).filter(r.isValidElement).map((function(e,t,n){var o=n.length;return Object(r.cloneElement)(e,{prepend:t>0,append:t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=125)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},10:function(e,t){e.exports=n(71)},125:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return le})),n.d(t,"Divider",(function(){return h.Divider})),n.d(t,"Heading",(function(){return h.Heading})),n.d(t,"Option",(function(){return M}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(4),c=n(22),s=n(5),u=n(9),p=n(10),f=n(16),d=n.n(f),b=n(32),y=n.n(b),h=n(13),v=n(35),m=n.n(v),g=n(24),O=n.n(g),x=n(39);function j(e){return(j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function w(){return(w=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;t-1&&e%1==0&&e0&&a(u)?n>1?e(u,n-1,a,i,l):r(l,u):i||(l[l.length]=u)}return l}},function(e,t,n){var r=n(80),o=n(332),a=n(290),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||o(e)||!!(i&&e&&e[i])}},function(e,t,n){var r=n(420),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,l=o(a.length-t,0),c=Array(l);++i0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=136)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},12:function(e,t,n){"use strict";function r(e,t){e&&("function"==typeof e?e(t):e.current=t)}n.d(t,"a",(function(){return r}))},136:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return $}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(4),c=n(27),s=n(3),u=n.n(s),p=n(0),f=n(15),d=n.n(f),b=n(33),y=n(12);function h(e){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function v(){return(v=Object.assign||function(e){for(var t=1;tr&&(n.scrollLeft=r,e.stopPropagation(),e.preventDefault())}if(n.clientHeight!==n.scrollHeight){if(e.deltaY<0&&n.scrollTopo&&(n.scrollTop=o,e.stopPropagation(),e.preventDefault())}}})),C(j(t),"handleMount",(function(e){t.setState({containerEl:e}),Object(y.a)(t.props.elementRef,e)})),C(j(t),"handleMouseEnter",(function(){t.defaultWindowOverflowX=document.body.style.overflowX,t.defaultWindowOverflowY=document.body.style.overflowY,document.body.style.overflowX="hidden",document.body.style.overflowY="hidden"})),C(j(t),"handleMouseLeave",(function(){document.body.style.overflowX=t.defaultWindowOverflowX,document.body.style.overflowY=t.defaultWindowOverflowY})),t.state={containerEl:null},t}return t=i,(n=[{key:"componentDidUpdate",value:function(e,t){this.state.containerEl&&(t.containerEl||(this.state.containerEl.scrollTop=this.props.defaultTop,this.state.containerEl.scrollLeft=this.props.defaultLeft),Object(l.isFinite)(this.props.top)&&(this.state.containerEl.scrollTop=this.props.top),Object(l.isFinite)(this.props.left)&&(this.state.containerEl.scrollLeft=this.props.left))}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.onScroll,r=e.stopScrollPropagation,a=this.state.containerEl,c=this.props.tagName;return o.a.createElement(o.a.Fragment,null,o.a.createElement(c,v({},Object(l.omit)(this.props,Object(l.keys)(i.propTypes)),{ref:this.handleMount,onMouseEnter:"window"===r?this.handleMouseEnter:void 0,onMouseLeave:"window"===r?this.handleMouseLeave:void 0,onScroll:n}),o.a.createElement(b.ScrollContainerProvider,{value:a},t)),!0===r&&a&&o.a.createElement(d.a,{onWheel:Object(f.withOptions)(this.handleWheel,{passive:!1}),target:a}))}}])&&m(t.prototype,n),r&&m(t,r),i}(r.Component);C(k,"propTypes",S),C(k,"defaultProps",{defaultLeft:0,defaultTop:0,tagName:"div"});var P=k,E=u()(P).withConfig({displayName:"ScrollStyles__StyledInner",componentId:"sc-1xspttf-0"})(["",";overflow:auto;overflow-y:auto;overflow-x:hidden;"],p.mixins.reset("block"));function _(e){return(_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(){return(T=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function I(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"inline";return function(){return(0,o.css)(s(),(0,l.default)({enterprise:i.default.textColor,prisma:i.default.contentColorDefault}),e,i.default.fontFamily,i.default.fontSize,i.default.lineHeight,i.default.focusColor)}};function p(){return{"&::after":{display:"table",content:'""',clear:"both"}}}function f(){return{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}function d(){return{maxWidth:"100% !important",width:"100% !important",overflow:"hidden !important"}}function b(){return{display:"none !important"}}function y(){return{background:"none !important"}}function h(){return{wordBreak:"break-all !important",wordWrap:"break-word !important",overflowWrap:"break-word !important",whiteSpace:"normal !important"}}function v(){return{position:"absolute",overflow:"hidden",clip:"rect(0 0 0 0)",height:"1px",width:"1px",margin:"-1px",padding:0,border:0}}function m(e,t){return function(n){var o="function"==typeof e?e(n):e,i="function"==typeof t?t(n):t,l=(0,a.normal)((0,r.default)(o).toRgb(),(0,r.default)(i).toRgb());return(0,r.default)(l).toRgbString()}}function g(e,t){return function(n){var o="function"==typeof e?e(n):e;return(0,r.default)(o).setAlpha(t).toRgbString()}}t.reset=u;var O={reset:u,clearfix:p,ellipsis:f,printWidth100Percent:d,printHide:b,printNoBackground:y,printWrapAll:h,screenReaderContent:v,colorWithAlpha:g,overlayColors:m};t.default=O},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(316),o=n(291),a=function(e,t){return function(n){var a,i=n[e],l=t[i];if((0,r.isInterpolationResult)(l))return l;var c=(0,o.addThemeDefaults)(null===(a=n.theme)||void 0===a?void 0:a.splunkThemeV1);return(0,r.getThemeVariant)(l,c)}};t.default=a},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.family,n=e.colorScheme,r=e.density,i=e.additionalThemeProperties,c=e.customizeTheme,u=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,["family","colorScheme","density","additionalThemeProperties","customizeTheme"]),p=((0,o.useContext)(a.ThemeContext)||{}).splunkThemeV1,f=void 0===p?{}:p,d=s(s({},i),{},{splunkThemeV1:{family:t||f.family||"prisma",colorScheme:n||f.colorScheme||"dark",density:r||f.density||"comfortable",customizer:c||f.customizer}});return o.default.createElement(a.ThemeProvider,l({theme:d},u))};var o=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==r(e)&&"function"!=typeof e)return{default:e};var t=i();if(t&&t.has(e))return t.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(n,a,l):n[a]=e[a]}n.default=e,t&&t.set(e,n);return n}(n(0)),a=n(1);function i(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return i=function(){return e},e}function l(){return(l=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var d=function(e){var t=o.default.forwardRef((function(t,n){var r=(0,o.useContext)(a.ThemeContext)||{},l=r.splunkThemeV1,s=f(r,["splunkThemeV1"]),p=l||{},d=p.family,b=p.colorScheme,y=p.density,h=p.customizer,v=(0,i.addThemeDefaults)({family:d,colorScheme:b,density:y}),m=u(u({},s),(0,i.getCustomizedTheme)(v,h));return o.default.createElement(e,c({},t,{ref:n,splunkTheme:m}))})),n=e.displayName||e.name||"Component";return t.displayName="withSplunkTheme(".concat(n,")"),t};t.default=d},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var r=n(0),o=n.n(r),a=n(40),i=n.n(a);function l(e){var t=!1;return function(){t||(console.warn(e),t=!0)}}l("\n>> Error, via react-flip-move <<\n\nYou provided a stateless functional component as a child to . Unfortunately, SFCs aren't supported, because Flip Move needs access to the backing instances via refs, and SFCs don't have a public instance that holds that info.\n\nPlease wrap your components in a native element (eg.
), or a non-functional component.\n"),l("\n>> Error, via react-flip-move <<\n\nYou provided a primitive (text or number) node as a child to . Flip Move needs containers with unique keys to move children around.\n\nPlease wrap your value in a native element (eg. ), or a component.\n");var c=l("\n>> Warning, via react-flip-move <<\n\nWhen using \"wrapperless\" mode (by supplying 'typeName' of 'null'), strange things happen when the direct parent has the default \"static\" position.\n\nFlipMove has added 'position: relative' to this node, to ensure Flip Move animates correctly.\n\nTo avoid seeing this warning, simply apply a non-static position to that parent node.\n"),s=l("\n>> Warning, via react-flip-move <<\n\nOne or more of Flip Move's child elements have the html attribute 'disabled' set to true.\n\nPlease note that this will cause animations to break in Internet Explorer 11 and below. Either remove the disabled attribute or set 'animation' to false.\n"),u={elevator:{from:{transform:"scale(0)",opacity:"0"},to:{transform:"",opacity:""}},fade:{from:{opacity:"0"},to:{opacity:""}},accordionVertical:{from:{transform:"scaleY(0)",transformOrigin:"center top"},to:{transform:"",transformOrigin:"center top"}},accordionHorizontal:{from:{transform:"scaleX(0)",transformOrigin:"left center"},to:{transform:"",transformOrigin:"left center"}},none:null},p={elevator:{from:{transform:"scale(1)",opacity:"1"},to:{transform:"scale(0)",opacity:"0"}},fade:{from:{opacity:"1"},to:{opacity:"0"}},accordionVertical:{from:{transform:"scaleY(1)",transformOrigin:"center top"},to:{transform:"scaleY(0)",transformOrigin:"center top"}},accordionHorizontal:{from:{transform:"scaleX(1)",transformOrigin:"left center"},to:{transform:"scaleX(0)",transformOrigin:"left center"}},none:null},f=u,d=function(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:[],n={};return Object.keys(e).forEach((function(r){-1===t.indexOf(r)&&(n[r]=e[r])})),n}(this.props,n);return r.style=O({position:"relative"},r.style),t.delegated=r,t},n.prototype.convertTimingProp=function(e){var t=this.props[e],r="number"==typeof t?t:parseInt(t,10);return isNaN(r)?n.defaultProps[e]:r},n.prototype.convertAnimationProp=function(e,t){switch(void 0===e?"undefined":m(e)){case"boolean":return t[e?"elevator":"none"];case"string":return-1===Object.keys(t).indexOf(e)?t.elevator:t[e];default:return e}},n.prototype.render=function(){return o.a.createElement(e,this.convertProps(this.props))},n}(r.Component),t.defaultProps={easing:"ease-in-out",duration:350,delay:0,staggerDurationBy:0,staggerDelayBy:0,typeName:"div",enterAnimation:"elevator",leaveAnimation:"elevator",disableAllAnimations:!1,getPosition:function(e){return e.getBoundingClientRect()},maintainContainerHeight:!1,verticalAlignment:"top"},n}function C(e){var t=e.domNode,n=e.styles;Object.keys(n).forEach((function(e){t.style.setProperty(v(e),n[e])}))}var S=function(e){var t=e.childDomNode,n={top:0,left:0,right:0,bottom:0,height:0,width:0},r=e.childBoundingBox||n,o=e.parentBoundingBox||n,a=(0,e.getPosition)(t),i=a.top-o.top,l=a.left-o.left;return[r.left-l,r.top-i]},k=function(e,t){var n=t.delay,r=t.duration,o=t.staggerDurationBy,a=t.staggerDelayBy,i=t.easing;n+=e*a,r+=e*o;return["transform","opacity"].map((function(e){return e+" "+r+"ms "+i+" "+n+"ms"})).join(", ")},P=function(){var e={transition:"transitionend","-o-transition":"oTransitionEnd","-moz-transition":"transitionend","-webkit-transition":"webkitTransitionEnd"};if("undefined"==typeof document)return"";var t=document.createElement("fakeelement"),n=d((function(e){return void 0!==t.style.getPropertyValue(e)}),Object.keys(e));return n?e[n]:""}(),E=!P;function _(e){return e.key||""}function T(e){return r.Children.toArray(e)}var R=w(function(e){function t(){var n,r;g(this,t);for(var o=arguments.length,a=Array(o),l=0;l0?i+"px":"0"}})}}({domNode:this.heightPlaceholderData.domNode,parentData:this.parentData,getPosition:o}));this.state.children.forEach((function(t){var n=e.getChildData(_(t)).domNode;n&&(t.entering||t.leaving||C({domNode:n,styles:{transition:""}}))}))},t.prototype.UNSAFE_componentWillReceiveProps=function(e){this.updateBoundingBoxCaches();var t=T(e.children);this.setState({children:this.isAnimationDisabled(e)?t.map((function(e){return O({},e,{element:e})})):this.calculateNextSetOfChildren(t)})},t.prototype.animateChild=function(e,t,n){var r=this,o=this.getChildData(_(e)).domNode;o&&(C({domNode:o,styles:n}),this.props.onStart&&this.props.onStart(e,o),requestAnimationFrame((function(){requestAnimationFrame((function(){var n={transition:k(t,r.props),transform:"",opacity:""};e.appearing&&r.props.appearAnimation?n=O({},n,r.props.appearAnimation.to):e.entering&&r.props.enterAnimation?n=O({},n,r.props.enterAnimation.to):e.leaving&&r.props.leaveAnimation&&(n=O({},n,r.props.leaveAnimation.to)),C({domNode:o,styles:n})}))})),this.bindTransitionEndHandler(e))},t.prototype.bindTransitionEndHandler=function(e){var t=this,n=this.getChildData(_(e)).domNode;if(n){n.addEventListener(P,(function r(o){o.target===n&&(n.style.transition="",t.triggerFinishHooks(e,n),n.removeEventListener(P,r),e.leaving&&t.removeChildData(_(e)))}))}},t.prototype.triggerFinishHooks=function(e,t){var n=this;if(this.props.onFinish&&this.props.onFinish(e,t),this.remainingAnimations-=1,0===this.remainingAnimations){var r=this.state.children.filter((function(e){return!e.leaving})).map((function(e){return O({},e,{element:e.element,appearing:!1,entering:!1})}));this.setState({children:r},(function(){"function"==typeof n.props.onFinishAll&&n.callChildrenHook(n.props.onFinishAll),n.childrenToAnimate=[]})),this.heightPlaceholderData.domNode&&(this.heightPlaceholderData.domNode.style.height="0")}},t.prototype.callChildrenHook=function(e){var t=this,n=[],r=[];this.childrenToAnimate.forEach((function(e){var o=t.findChildByKey(e);o&&(n.push(o),t.hasChildData(e)&&r.push(t.getChildData(e).domNode))})),e(n,r)},t.prototype.updateBoundingBoxCaches=function(){var e=this,t=this.parentData.domNode;if(t){this.parentData.boundingBox=this.props.getPosition(t);var n=[];this.state.children.forEach((function(r){var o=_(r);if(o)if(e.hasChildData(o)){var a=e.getChildData(o);a.domNode&&r?n.push(function(e){var t=e.childDomNode,n=e.parentDomNode,r=e.getPosition,o=r(n),a=r(t),i=a.top,l=a.left,c=a.right,s=a.bottom,u=a.width,p=a.height;return{top:i-o.top,left:l-o.left,right:o.right-c,bottom:o.bottom-s,width:u,height:p}}({childDomNode:a.domNode,parentDomNode:t,getPosition:e.props.getPosition})):n.push(null)}else n.push(null);else n.push(null)})),this.state.children.forEach((function(t,r){var o=_(t),a=n[r];o&&e.setChildData(o,{boundingBox:a})}))}},t.prototype.computeInitialStyles=function(e){if(e.appearing)return this.props.appearAnimation?this.props.appearAnimation.from:{};if(e.entering)return this.props.enterAnimation?O({position:"",top:"",left:"",right:"",bottom:""},this.props.enterAnimation.from):{};if(e.leaving)return this.props.leaveAnimation?this.props.leaveAnimation.from:{};var t=this.getChildData(_(e)),n=t.domNode,r=t.boundingBox,o=this.parentData.boundingBox;if(!n)return{};var a=S({childDomNode:n,childBoundingBox:r,parentBoundingBox:o,getPosition:this.props.getPosition});return{transform:"translate("+a[0]+"px, "+a[1]+"px)"}},t.prototype.isAnimationDisabled=function(e){return E||e.disableAllAnimations||0===e.duration&&0===e.delay&&0===e.staggerDurationBy&&0===e.staggerDelayBy},t.prototype.findChildByKey=function(e){return d((function(t){return _(t)===e}),this.state.children)},t.prototype.hasChildData=function(e){return Object.prototype.hasOwnProperty.call(this.childrenData,e)},t.prototype.getChildData=function(e){return this.hasChildData(e)?this.childrenData[e]:{}},t.prototype.setChildData=function(e,t){this.childrenData[e]=O({},this.getChildData(e),t)},t.prototype.removeChildData=function(e){delete this.childrenData[e],this.setState((function(t){return O({},t,{children:t.children.filter((function(t){return t.element.key!==e}))})}))},t.prototype.createHeightPlaceholder=function(){var e=this,t=this.props.typeName,n="ul"===t||"ol"===t?"li":"div";return Object(r.createElement)(n,{key:"height-placeholder",ref:function(t){e.heightPlaceholderData.domNode=t},style:{visibility:"hidden",height:0}})},t.prototype.childrenWithRefs=function(){var e=this;return this.state.children.map((function(t){return Object(r.cloneElement)(t.element,{ref:function(n){if(n){var r=function(e){if("undefined"==typeof HTMLElement)return null;if(e instanceof HTMLElement)return e;var t=Object(a.findDOMNode)(e);return t&&t.nodeType===Node.TEXT_NODE?null:t}(n);e.setChildData(_(t),{domNode:r})}}})}))},t.prototype.render=function(){var e=this,t=this.props,n=t.typeName,o=t.delegated,a=t.leaveAnimation,i=t.maintainContainerHeight,l=this.childrenWithRefs();if(a&&i&&l.push(this.createHeightPlaceholder()),!n)return l;var c=O({},o,{children:l,ref:function(t){e.parentData.domNode=t}});return Object(r.createElement)(n,c)},t}(r.Component));t.default=R},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=41)}({0:function(e,t){e.exports=n(0)},1:function(e,t){e.exports=n(7)},2:function(e,t){e.exports=n(16)},41:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s}));var r=n(0),o=n.n(r),a=n(1),i=n(2),l=n.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t0},e.prototype.connect_=function(){r&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),l?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){r&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;i.some((function(e){return!!~n.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),s=function(e,t){for(var n=0,r=Object.keys(t);n0},e}(),x="undefined"!=typeof WeakMap?new WeakMap:new n,j=function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=c.getInstance(),r=new O(t,n,this);x.set(this,r)};["observe","unobserve","disconnect"].forEach((function(e){j.prototype[e]=function(){var t;return(t=x.get(this))[e].apply(t,arguments)}}));var w=void 0!==o.ResizeObserver?o.ResizeObserver:j;t.a=w}).call(this,n(23))},function(e,t,n){"use strict";(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(23))},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=146)}({0:function(e,t){e.exports=n(0)},1:function(e,t){e.exports=n(7)},146:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s}));var r=n(0),o=n.n(r),a=n(1),i=n(2),l=n.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var d={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object])};function b(e){var t=e.children,n=e.elementRef,r=f(e,["children","elementRef"]);return o.a.createElement(u,p({"data-test":"description",ref:n},r),t)}b.propTypes=d;var y=b,h=c.a.dl.withConfig({displayName:"DefinitionListStyles__Styled",componentId:"sc-1pqfrgm-0"})(["",";",""],s.mixins.reset("block"),Object(s.pick)({prisma:Object(l.css)(["color:",";"],s.variables.contentColorMuted)})),v=c.a.dt.withConfig({displayName:"TermStyles__Styled",componentId:"sc-1ao97j9-0"})(["",";float:left;width:120px;overflow:hidden;overflow-x:hidden;white-space:nowrap;font-weight:400;word-wrap:normal;",""],s.mixins.reset("block"),Object(s.pick)({enterprise:Object(l.css)(["&::after{content:'","';}"]," ".concat(".".repeat(100)))}));function m(){return(m=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var O={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object])};function x(e){var t=e.children,n=e.elementRef,r=g(e,["children","elementRef"]);return o.a.createElement(v,m({"data-test":"term",ref:n},r),t)}x.propTypes=O;var j=x;function w(){return(w=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var S={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),termWidth:i.a.oneOfType([i.a.number,i.a.string])};function k(e){var t=e.children,n=e.elementRef,a=e.termWidth,i=void 0===a?120:a,l=C(e,["children","elementRef","termWidth"]);return o.a.createElement(h,w({"data-test":"definition-list",ref:n},l),function(e){var t=e.children,n=e.termWidth;return r.Children.toArray(t).filter(r.isValidElement).map((function(e){return e.type===j?Object(r.cloneElement)(e,{style:{width:n}}):e.type===y?Object(r.cloneElement)(e,{style:{marginLeft:n}}):e}))}({children:t,termWidth:i}))}k.propTypes=S,k.Description=y,k.Term=j;var P=k},2:function(e,t){e.exports=n(0)},3:function(e,t){e.exports=n(1)}})},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=118)}({0:function(e,t){e.exports=n(0)},1:function(e,t){e.exports=n(7)},118:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s}));var r=n(0),o=n.n(r),a=n(1),i=n(2),l=n.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),c=n.call(a,"finallyLoc");if(l&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),j(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;j(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}(e.exports);try{regeneratorRuntime=r}catch(e){Function("r","regeneratorRuntime = r")(r)}},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=155)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},10:function(e,t){e.exports=n(71)},11:function(e,t){e.exports=n(48)},155:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return H}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(4),c=n(5),s=n(10),u=n(44),p=n.n(u),f=n(25),d=n(3),b=n.n(d),y=n(8),h=n.n(y),v=n(11),m=n.n(v),g=n(0),O=b()(h.a).withConfig({displayName:"CollapsiblePanelStyles__StyledBox",componentId:"sc-1phikbp-0"})(["display:flex;flex-direction:column;min-height:",";",";& + &{margin-top:",";}"],Object(g.pick)({enterprise:Object(d.css)(["calc("," + 12px)"],g.variables.lineHeight),prisma:{comfortable:"56px",compact:"48px"}}),Object(g.pick)({prisma:Object(d.css)(["background-color:",";"],g.variables.backgroundColorSection)}),Object(g.pick)({enterprise:"2px",prisma:"1px"})),x=b.a.span.withConfig({displayName:"CollapsiblePanelStyles__StyledIcon",componentId:"sc-1phikbp-1"})(["position:absolute;left:",";transition:transform ",";",";"],Object(g.pick)({enterprise:"12px",prisma:"20px"}),Object(g.pick)({enterprise:"300ms",prisma:"200ms"}),Object(g.pick)({prisma:Object(d.css)(["color:",";display:flex;top:",";[disabled] > &{color:inherit;}"],g.variables.contentColorDefault,Object(g.pick)({comfortable:"20px",compact:"16px"}))})),j=b.a.div.withConfig({displayName:"CollapsiblePanelStyles__StyledTitleWithActions",componentId:"sc-1phikbp-2"})(["flex-shrink:0;border-bottom:0;position:relative;padding:",";transition:background-color 0.2s,border 0.2s,box-shadow 0.2s;color:",";"," ",""],Object(g.pick)({enterprise:"0px 10px 0px 30px",prisma:{comfortable:"8px 10px 8px 52px",compact:"8px 10px 8px 52px"}}),Object(g.pick)({enterprise:g.variables.textColor,prisma:g.variables.contentColorActive}),Object(g.pick)({prisma:Object(d.css)(["background-color:",";"],g.variables.interactiveColorBackground),enterprise:{dark:Object(d.css)(["background-color:",";"],g.variables.gray45),light:Object(d.css)(["background-color:",";"],g.variables.gray96)}}),(function(e){return e.$disabled&&Object(d.css)(["cursor:default;color:",";"],Object(g.pick)({enterprise:g.variables.contentColorDefault,prisma:g.variables.contentColorDisabled}))})),w=b()(m.a).withConfig({displayName:"CollapsiblePanelStyles__StyledClickableIcon",componentId:"sc-1phikbp-3"})(["position:absolute;left:",";padding:",";top:",";& > svg{transition:transform ",";}",";"," &:focus:not([disabled]),&:active:not([disabled]){color:",";box-shadow:",";}&:hover:not([disabled]){color:",";background-color:",";}"],Object(g.pick)({enterprise:"4px",prisma:"8px"}),Object(g.pick)({enterprise:{comfortable:"2px 8px",compact:"0px 8px"},prisma:{comfortable:"12px",compact:"8px"}}),Object(g.pick)({enterprise:"4px",prisma:"8px"}),Object(g.pick)({enterprise:"300ms",prisma:"200ms"}),Object(g.pick)({prisma:Object(d.css)(["color:",";display:flex;[disabled] > &{color:inherit;}"],g.variables.contentColorDefault)}),Object(g.pickVariant)("$open",{true:Object(d.css)(["& > svg{transform:rotate(90deg);}"])}),Object(g.pick)({enterprise:g.variables.textColor,prisma:g.variables.contentColorActive}),g.variables.focusShadowInset,Object(g.pick)({enterprise:g.variables.textColor,prisma:g.variables.contentColorActive}),Object(g.pick)({enterprise:{light:g.variables.gray92,dark:g.variables.gray30},prisma:g.mixins.overlayColors(g.variables.interactiveColorBackground,g.variables.interactiveColorOverlayHover)})),C=b()(m.a).withConfig({displayName:"CollapsiblePanelStyles__StyledTitleClickable",componentId:"sc-1phikbp-4"})(["width:100%;flex-shrink:0;border-bottom:0;cursor:pointer;position:relative;display:block;transition:background-color 0.2s,border 0.2s,box-shadow 0.2s;padding:",";color:",";"," "," &[disabled]{cursor:default;color:",";}&:focus:not([disabled]),&:active:not([disabled]){color:",";box-shadow:",";}&:hover:not([disabled]){color:",";background-color:",";}"],Object(g.pick)({enterprise:"6px 30px",prisma:{comfortable:"18px 20px 18px 52px",compact:"14px 20px 14px 52px"}}),Object(g.pick)({enterprise:g.variables.textColor,prisma:g.variables.contentColorActive}),Object(g.pick)({prisma:Object(d.css)(["background-color:",";"],g.variables.interactiveColorBackground)}),Object(g.pickVariant)("$open",{true:Object(d.css)(["","{transform:rotate(90deg);}"],x),false:{enterprise:{dark:Object(d.css)(["background-color:",";"],g.variables.gray45),light:Object(d.css)(["background-color:",";"],g.variables.gray96)}}}),Object(g.pick)({enterprise:g.variables.contentColorDefault,prisma:g.variables.contentColorDisabled}),Object(g.pick)({enterprise:g.variables.textColor,prisma:g.variables.contentColorActive}),g.variables.focusShadowInset,Object(g.pick)({enterprise:g.variables.textColor,prisma:g.variables.contentColorActive}),Object(g.pick)({enterprise:{light:g.variables.gray92,dark:g.variables.gray30},prisma:g.mixins.overlayColors(g.variables.interactiveColorBackground,g.variables.interactiveColorOverlayHover)})),S=b.a.span.withConfig({displayName:"CollapsiblePanelStyles__StyledHeadingContent",componentId:"sc-1phikbp-5"})(["display:flex;justify-content:space-between;"," ",""],Object(g.pick)({prisma:Object(d.css)(["font-weight:",";"],g.variables.fontWeightSemiBold)}),(function(e){return e.$titleWithActions&&Object(d.css)(["min-height:",";"],Object(g.pick)({prisma:{comfortable:"40px",compact:"32px"}}))})),k=b.a.span.withConfig({displayName:"CollapsiblePanelStyles__StyledDescription",componentId:"sc-1phikbp-6"})(["font-size:",";margin-left:",";"],g.variables.fontSizeSmall,Object(g.pick)({enterprise:g.variables.spacingHalf,prisma:g.variables.spacingLarge}));function P(e){return(P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function E(){return(E=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;t &{color:inherit;}"],c.mixins.reset("block"),c.variables.fontSizeSmall,c.variables.contentColorMuted,Object(c.pick)({enterprise:"2px",prisma:"4px"}));function C(e){return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(){return(S=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,a=void 0;try{for(var i,l=e[Symbol.iterator]();!(r=(i=l.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){o=!0,a=e}finally{try{r||null==l.return||l.return()}finally{if(o)throw a}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return E(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return E(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(o.prepend=!0),i("append")&&n1&&(o.inline=!0),"stack"===a&&i("inline")&&(o.inline=!1,n=o?e:r(e,t,n)}},function(e,t,n){var r=n(478),o=n(357),a=n(479);e.exports=function(e){return o(e)?a(e):r(e)}},function(e,t){e.exports=function(e){return e.split("")}},function(e,t){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",a="[^\\ud800-\\udfff]",i="(?:\\ud83c[\\udde6-\\uddff]){2}",l="[\\ud800-\\udbff][\\udc00-\\udfff]",c="(?:"+r+"|"+o+")"+"?",s="[\\ufe0e\\ufe0f]?"+c+("(?:\\u200d(?:"+[a,i,l].join("|")+")[\\ufe0e\\ufe0f]?"+c+")*"),u="(?:"+[a+r+"?",r,i,l,n].join("|")+")",p=RegExp(o+"(?="+o+")|"+u+s,"g");e.exports=function(e){return e.match(p)||[]}},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isIE11=function(){return!!navigator.userAgent.match(/Trident\/7\./)}},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=140)}({1:function(e,t){e.exports=n(3)},10:function(e,t){e.exports=n(71)},12:function(e,t,n){"use strict";function r(e,t){e&&("function"==typeof e?e(t):e.current=t)}n.d(t,"a",(function(){return r}))},13:function(e,t){e.exports=n(295)},140:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return G})),n.d(t,"Option",(function(){return I})),n.d(t,"Divider",(function(){return f.Divider})),n.d(t,"Heading",(function(){return f.Heading}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(4),c=n(22),s=n(10),u=n(5),p=n(9),f=n(13),d=n(18),b=n.n(d),y=n(35),h=n.n(y),v=n(24),m=n.n(v);function g(e){return(g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function O(){return(O=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function j(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w(e,t){for(var n=0;nc&&ol&&a0)&&Object(c.keywordLocations)(a,j)||void 0;return o?(t.activeValue=e.props.value,Object(r.cloneElement)(e,{ref:t.handleActiveOptionMount,id:t.activeItemId,onClick:t.handleSelectOption,matchRanges:i||s,active:!0})):Object(r.cloneElement)(e,{onClick:t.handleSelectOption,matchRanges:i||s})})),o.a.createElement(h.a,A({style:Object(l.extend)({overflow:"auto",width:Math.max(null!=n?n:0,200)},d),maxHeight:null!=a?a:void 0,onScrollBottom:b?t.handleScrollBottom:void 0,isLoading:p},Object(l.pick)(t.props,"className","noOptionsMessage","footerMessage","animateLoading","loadingMessage")),t.options)})),t.state={activeIndex:0,anchor:null,typedValue:void 0,open:!1,value:e.defaultValue||""},t.controlledExternally=Object(l.has)(e,"value"),t.popoverId=Object(s.createDOMID)("popover"),t.activeItemId=Object(s.createDOMID)("active-item"),t}return t=d,(n=[{key:"componentDidUpdate",value:function(){}},{key:"getValue",value:function(){return this.isControlled()?this.props.value:this.state.value}},{key:"getDisplayValue",value:function(){var e=this.getValue(),t=this.state.typedValue,n=r.Children.toArray(this.props.children).filter(r.isValidElement),o=!t&&n.find((function(t){return void 0!==t.props.label&&t.props.value===e}));return o?null==o?void 0:o.props.label:e}},{key:"open",value:function(){var e=this;this.setState({open:!0,activeIndex:0},(function(){var t,n;null===(t=(n=e.props).onOpen)||void 0===t||t.call(n)}))}},{key:"close",value:function(){var e=this;this.setState({open:!1},(function(){var t,n;null===(t=(n=e.props).onClose)||void 0===t||t.call(n)}))}},{key:"focus",value:function(){var e;null===(e=this.textInput)||void 0===e||e.focus()}},{key:"isControlled",value:function(){return this.controlledExternally}},{key:"render",value:function(){var e=this.props.defaultPlacement,t=this.state,n=t.anchor,r=t.open,a=this.getValue(),i=this.getDisplayValue();return o.a.createElement(m.a,A({autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,canClear:!0,"data-test":"combo-box"},Object(l.omit)(this.props,"animateLoading","className","controlledFilter","defaultValue","footerMessage","isLoadingOptions","loadingMessage","menuStyle","noOptionsMessage","onClose","onOpen","onScrollBottom","spellCheck"),{"data-test-popover-id":this.popoverId,"data-test-label":i,"data-test-value":a,"data-test-open":r&&!!n,onFocus:this.handleInputFocus,onClick:this.handleInputClick,onChange:this.handleChange,onKeyDown:this.handleInputKeyDown,inputRef:this.handleInputMount,role:"combobox",value:i,"aria-activedescendant":this.activeItemId,"aria-expanded":r,"aria-haspopup":!0,"aria-label":Object(u._)("Value input"),"aria-controls":r?this.popoverId:void 0}),o.a.createElement(b.a,{anchor:n,autoCloseWhenOffScreen:!0,canCoverAnchor:!1,defaultPlacement:e,id:this.popoverId,onRequestClose:this.handleRequestClose,open:r&&!!n,repositionMode:"flip"},this.renderMenu))}}])&&B(t.prototype,n),a&&B(t,a),d}(r.Component);q(U,"propTypes",W),q(U,"defaultProps",K),q(U,"Option",I),q(U,"Divider",f.Divider),q(U,"Heading",f.Heading);var G=U},18:function(e,t){e.exports=n(132)},2:function(e,t){e.exports=n(0)},22:function(e,t){e.exports=n(323)},24:function(e,t){e.exports=n(297)},35:function(e,t){e.exports=n(324)},4:function(e,t){e.exports=n(2)},5:function(e,t){e.exports=n(7)},9:function(e,t){e.exports=n(73)}})},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=113)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},10:function(e,t){e.exports=n(71)},113:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return Xe})),n.d(t,"Divider",(function(){return s.Divider})),n.d(t,"Heading",(function(){return s.Heading})),n.d(t,"Option",(function(){return M}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(4),c=n(5),s=n(13),u=n(22),p=n(10),f=n(9),d=n(16),b=n.n(d),y=n(32),h=n.n(y),v=n(35),m=n.n(v),g=n(24),O=n.n(g);function x(e){return(x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function j(){return(j=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function C(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){for(var n=0;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function K(){return(K=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0,compact:!0,role:"option"});return b&&b.indexOf(a.props.value)>=0?(0===O&&e.splice(O,0,o.a.createElement(s.Divider,{key:"topDivider"})),e.splice(O,0,l),O+=1):e.push(l),e}),[]);Object(l.forEachRight)(g,(function(e){if(!Object(l.find)(x,(function(t){return oe(t)&&t.props&&t.props.value===e}))){e===t.state.filterKeyword&&(n=!0);var r=b&&b.indexOf(e)>=0;x.splice(r?0:O+1,0,o.a.createElement(M,{label:String(e),value:e,key:"missing-value-".concat(e),onClick:t.handleMenuOptionClick,compact:!0,selected:!0})),r&&(O+=1)}}));var j=Object(u.stringToKeywords)(f);return x=v?x:x.filter((function(e){return!oe(e)||Object(u.testPhrase)(e.props.label,j)})).map((function(e){if(!oe(e))return e;var t=j&&Object(u.keywordLocations)(e.props.label,j);return Object(r.cloneElement)(e,{matchRanges:t||void 0})})),h&&!n&&f&&x.splice(O,0,o.a.createElement(M,{label:"".concat(f," (new value)"),value:f,key:"newValue",compact:!0,onClick:t.handleMenuOptionClick})),x=x.reduce((function(e,n){if(!oe(n))return e.push(n),e;if(n.props&&n.props.hidden)return e;var o=t.availableOptionCount===t.state.activeIndex;if(t.availableOptionCount+=1,t.selectedOptionCount+=n.props.selected?1:0,!o||!d)return e.push(n),e;n.props.disabled||(t.activeValue=n.props.value);var a=Object(r.cloneElement)(n,{active:o,id:t.activeItemId,ref:t.handleActiveOptionMount});return e.push(a),e}),[]),t.displayedValues=x.reduce((function(e,t){return oe(t)&&e.push(t.props.value),e}),[]),o.a.createElement(m.a,K({childrenStart:t.renderControls({placement:c,hasChildren:!!x.length}),placement:null!=c?c:void 0,maxHeight:null!=i?i:void 0,onScrollBottom:t.props.onScrollBottom?t.handleScrollBottom:void 0,"data-test":"results-menu",isLoading:t.props.isLoadingOptions},Object(l.pick)(t.props,"noOptionsMessage","footerMessage","animateLoading","loadingMessage"),{style:Object(l.extend)({width:Math.max(null!=a?a:0,200)},t.props.menuStyle)}),x)})),t.state={activeIndex:0,filterKeyword:"",open:!1,textHasFocus:!1,topValues:[],values:e.defaultValues||[]},t.controlledExternally=Object(l.has)(e,"values"),t.displayedValues=[],t.availableOptionCount=0,t.selectedOptionCount=0,t.activeItemId=Object(p.createDOMID)("active-item"),t}return t=d,(n=[{key:"componentDidUpdate",value:function(e){}},{key:"getCurrentValues",value:function(){return this.isControlled()?this.props.values:this.state.values}},{key:"isControlled",value:function(){return this.controlledExternally}},{key:"toggleValue",value:function(e,t){var n,r,o,a,i=null!==(n=this.getCurrentValues())&&void 0!==n?n:[],l=i.indexOf(t),c=this.props.name;a=l>=0?[].concat(U(i.slice(0,l)),U(i.slice(l+1))):i.concat([t]),this.isControlled()||this.setState({values:a,open:!0}),null===(r=(o=this.props).onChange)||void 0===r||r.call(o,e,{values:a,name:c})}},{key:"renderControls",value:function(e){var t=e.hasChildren,n=e.placement,r=o.a.createElement(V,{$placement:n,key:"selectAll"},o.a.createElement(h.a,{onClick:this.handleSelectAll,disabled:!(this.availableOptionCount-this.selectedOptionCount),"data-test":"select-all",style:{marginRight:20}},this.state.filterKeyword?Object(c._)("Select All Matches"):Object(c._)("Select All")),o.a.createElement(h.a,{onClick:this.handleClearAll,disabled:!this.selectedOptionCount,"data-test":"clear-all"},this.state.filterKeyword?Object(c._)("Clear All Matches"):Object(c._)("Clear All")));return o.a.createElement("div",{key:"controls"},"above"===n&&t&&r,o.a.createElement($,{key:"filter","data-test":"filter",$placement:n},o.a.createElement(O.a,{value:this.state.filterKeyword,appearance:"search",autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,onChange:this.handleTextChange,onKeyDown:this.handleTextKeyDown,onFocus:this.handleTextFocus,onBlur:this.handleTextBlur,placeholder:Object(c._)("filter"),tabIndex:1,"aria-label":Object(c._)("Filter"),"aria-activedescendant":this.activeItemId,inputRef:this.props.inputRef})),"above"!==n&&t&&r)}},{key:"render",value:function(){var e,t=this.props,n=t.children,a=t.defaultPlacement,i=t.describedBy,s=t.disabled,u=t.error,p=t.inline,f=t.labelledBy,d=t.placeholder,y=W(t,["children","defaultPlacement","describedBy","disabled","error","inline","labelledBy","placeholder"]),h=r.Children.toArray(n),v=null!==(e=this.getCurrentValues())&&void 0!==e?e:[],m=v.reduce((function(e,t,n,r){var o=Object(l.find)(h,(function(e){return oe(e)&&e.props.value===t}));return o?e.push(o.props.children||o.props.label):e.push(t),n0?m:d,error:u,inline:p,disabled:s||void 0,isMenu:!0,role:"listbox","aria-labelledby":f,"aria-describedby":i,"aria-multiselectable":"true",onClick:this.props.onClick},Object(l.omit)(y,"allowNewValues","animateLoading","controlledFilter","defaultValues","footerMessage","inputRef","isLoadingOptions","menuStyle","noOptionsMessage","onChange","onClick","onFilterChange","onScrollBottom","onOpen","onClose","values","useClickawayOverlay")),!!v.length&&o.a.createElement(F,{"data-role":"count"},"(",v.length,")"));return o.a.createElement(b.a,{closeReasons:["clickAway","escapeKey","offScreen","toggleClick"],toggle:g,onRequestOpen:this.handleRequestOpen,onRequestClose:this.handleRequestClose,open:this.state.open,repositionMode:"flip",defaultPlacement:a,canCoverAnchor:window.innerHeight<500},this.renderMenu)}}])&&Z(t.prototype,n),a&&Z(t,a),d}(r.Component);te(ae,"propTypes",ne),te(ae,"defaultProps",re),te(ae,"Option",M),te(ae,"Divider",s.Divider),te(ae,"Heading",s.Heading);var ie=ae,le=n(87),ce=n.n(le),se=n(18),ue=n.n(se),pe=n(14),fe=n.n(pe),de=n(8),be=n.n(de),ye=L()(be.a).withConfig({displayName:"NormalStyles__StyledBox",componentId:"sc-1uwwpco-0"})(["border-radius:",";align-items:flex-start;flex-wrap:wrap;min-height:",";max-height:300px;overflow-y:auto;",";"," "," "," "," "," &[data-inline]{width:400px;}[data-inline='true'] + &{margin-left:","}"],z.variables.borderRadius,z.variables.inputHeight,Object(z.pick)({enterprise:Object(A.css)(["border:",";padding:2px 0 0 2px;"],z.variables.border),prisma:Object(A.css)(["border:1px solid ",";padding:2px;"],z.variables.interactiveColorBorder)}),Object(z.pick)({enterprise:{light:Object(A.css)(["background-color:",";"],z.variables.white),dark:Object(A.css)(["background-color:",";"],z.variables.gray22)}}),(function(e){return e.$hasfocus&&Object(z.pick)({enterprise:Object(A.css)(["box-shadow:",";"],z.variables.focusShadow),prisma:Object(A.css)(["border-color:",";"],z.variables.focusColor)})}),(function(e){return e.$error&&Object(A.css)(["border-color:",";color:",";"],z.variables.accentColorNegative,z.variables.accentColorNegative)}),(function(e){return e.$disabled?Object(z.pick)({enterprise:{light:Object(A.css)(["background-color:",";cursor:not-allowed;"],z.variables.gray96),dark:Object(A.css)(["background-color:",";border-color:",";cursor:not-allowed;"],z.variables.gray22,z.variables.gray30)},prisma:Object(A.css)(["border-color:",";cursor:not-allowed;"],z.variables.interactiveColorBorderDisabled)}):Object(A.css)(["&:hover{border-color:",";}"],Object(z.pick)({enterprise:z.variables.borderColor,prisma:z.variables.interactiveColorBorderHover}))}),(function(e){return e.$popoverOpen&&Object(A.css)(["position:relative;z-index:calc("," - 2);"],z.variables.zindexFixedNavbar)}),Object(z.pick)({enterprise:z.variables.spacingHalf,prisma:z.variables.spacingSmall})),he=L.a.div.withConfig({displayName:"NormalStyles__StyledInputWrapper",componentId:"sc-1uwwpco-1"})(["flex:1 0 auto;max-width:100%;"]),ve=L.a.input.withConfig({displayName:"NormalStyles__StyledInput",componentId:"sc-1uwwpco-2"})(["",";min-width:100%;max-width:100%;line-height:12px;",""],z.mixins.reset("block"),Object(z.pick)({enterprise:{comfortable:Object(A.css)(["padding:",";"],z.variables.spacingQuarter),compact:Object(A.css)(["padding:3px;"])},prisma:{comfortable:Object(A.css)(["padding:7px 10px;"]),compact:Object(A.css)(["padding:3px;"])}})),me=L.a.div.withConfig({displayName:"NormalStyles__StyledOverlay",componentId:"sc-1uwwpco-3"})(["",""],(function(e){return e.$popoveropen&&Object(A.css)(["position:fixed;top:0;left:0;width:100%;height:100%;z-index:calc("," - 2);"],z.variables.zindexFixedNavbar)})),ge=n(12);function Oe(e){return(Oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xe(e){return function(e){if(Array.isArray(e))return je(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return je(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return je(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function je(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ke(){return(ke=Object.assign||function(e){for(var t=1;t=0;O&&O.length&&r.Children.toArray(i).filter(r.isValidElement).filter((function(e){return e.type===M})).forEach((function(e){if(e.type===M){var t=O.indexOf(e.props.value);-1!==t&&(x[t]=e)}}));var w=Object(u.stringToKeywords)(this.state.filterKeyword),C=c?r.Children.toArray(i):r.Children.toArray(i).filter((function(e){return!Object(l.get)(e,["props","label"],!1)||Object(u.testPhrase)(e.props.label,w)}));this.availableOptionCount=0,this.activeValue=void 0,this.children=r.Children.map(C,(function(e,n){if(!e.props||!Object(l.has)(e.props,"value"))return e;var o=e;if(o.props.value===t.state.filterKeyword&&(j=!0),O.indexOf(o.props.value)>=0)return null;var a=o.props,i=a.children,s=a.label,p=a.matchRanges,f=void 0===i||Object(l.isString)(i),d=f&&!c&&!p&&w&&Object(u.keywordLocations)(s,w);return Object(r.cloneElement)(o,{key:n,onClick:t.handleMenuOptionClick,matchRanges:f&&(p||d)||void 0})})).filter((function(e){return null!==e})),a&&!j&&this.state.filterKeyword&&this.children.unshift(o.a.createElement(M,{label:"".concat(this.state.filterKeyword," (new value)"),value:this.state.filterKeyword,key:"newValue",onClick:this.handleMenuOptionClick})),this.state.open&&(this.children=r.Children.map(this.children,(function(e){if(!e.props||!Object(l.has)(e.props,"value"))return e;var n=e,o=t.availableOptionCount===t.state.activeIndex;return t.availableOptionCount+=1,o?(n.props.disabled||(t.activeValue=n.props.value),Object(r.cloneElement)(n,{active:o,id:t.activeItemId,ref:t.handleActiveOptionMount})):n})));var S="".concat(.8*this.state.filterKeyword.length,"em");return[o.a.createElement(ye,ke({key:"control","data-test-values":JSON.stringify(O),inline:b,$hasfocus:this.state.hasFocus},l.omit.apply(void 0,[m,"animateLoading","controlledFilter","defaultValues","footerMessage","inputRef","isLoadingOptions","labelledBy","menuStyle","noOptionsMessage","onChange","onFilterChange","onScrollBottom","onClose","onOpen","values","useClickawayOverlay"].concat(xe(Object(l.keys)(g)))),{onClick:f?void 0:this.handleClick,$disabled:f,$error:d,"data-test-popover-id":this.popoverId,$popoverOpen:this.state.open,flex:!0,elementRef:this.handleMount,role:"listbox","aria-disabled":f||void 0}),o.a.createElement(fe.a,{role:"status","aria-live":"polite"},this.state.loadingMoreMessage),this.renderButtons(x),!f&&o.a.createElement(he,{role:"combobox","aria-owns":this.state.open?this.popoverId:void 0,"aria-haspopup":!0,"aria-expanded":this.state.open},o.a.createElement(ve,ke({"data-test":"textbox",ref:this.handleInputMount,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,onChange:this.handleInputChange,onKeyDown:this.handleInputKeyDown,value:this.state.filterKeyword,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",style:{flexBasis:S,width:S},placeholder:O.length?"":h,"aria-activedescendant":this.state.open&&this.availableOptionCount>0?this.activeItemId:void 0,"aria-controls":this.state.open?this.popoverId:void 0},g))),!f&&o.a.createElement(ue.a,{open:this.state.open&&!!this.state.el,autoCloseWhenOffScreen:!0,anchor:this.state.el,onRequestClose:this.handleRequestClose,canCoverAnchor:!1,defaultPlacement:s,repositionMode:"flip",id:this.popoverId},this.renderMenu)),v&&this.state.open?o.a.createElement(me,{key:"overlay",$popoveropen:this.state.open,"data-test":"overlay"}):null]}}])&&Pe(t.prototype,n),a&&Pe(t,a),c}(r.Component);De(Le,"propTypes",Me),De(Le,"defaultProps",Ae),De(Le,"Option",M),De(Le,"Divider",s.Divider),De(Le,"Heading",s.Heading);var Ne=Le;function Be(e){return(Be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ze(){return(ze=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var E={appearance:u.a.oneOf(["info","success","warning","error","outline"]),backgroundColor:u.a.string,children:u.a.node.isRequired,disabled:u.a.bool,elementRef:u.a.oneOfType([u.a.func,u.a.object]),foregroundColor:u.a.string,icon:u.a.node,onRequestRemove:u.a.func,value:u.a.any};function _(e){var t=e.appearance,n=e.backgroundColor,r=e.disabled,o=e.foregroundColor,i=e.icon,l=P(e,["appearance","backgroundColor","disabled","foregroundColor","icon"]),c=o&&Object(a.isCSSColor)(o)?o:void 0,s=n&&Object(a.isCSSColor)(n)?n:void 0;return[{"data-test":"chip",$appearance:t||(s?"custom":"default"),$backgroundColor:s,$foregroundColor:c,disabled:r,icon:i},l]}function T(e){var t=S(_(e),2),n=t[0],a=t[1],l=n.$appearance,s=n.$foregroundColor,u=n.disabled,f=n.icon,d=P(n,["$appearance","$foregroundColor","disabled","icon"]),b=a.children,y=a.elementRef,h=a.onRequestRemove,v=a.value,m=P(a,["children","elementRef","onRequestRemove","value"]),k=Object(r.useCallback)((function(e){h(e,{value:v})}),[h,v]);return o.a.createElement(w,C({$appearance:l,$disabled:u,$foregroundColor:s,"data-test-value":v,disabled:u,elementRef:y,onClick:k},d,c()(m,Object.keys(E))),o.a.createElement(g,null,f&&o.a.createElement(O,{$appearance:l,$disabled:u,$foregroundColor:s},f),o.a.createElement(x,{"data-test":"label",$appearance:l,$disabled:u,$foregroundColor:s},b),o.a.createElement(j,{$disabled:u,$foregroundColor:s},o.a.createElement(p.a,{"data-test":"crossmark",enterpriseSize:.85,prismaSize:"small",screenReaderText:Object(i._)("Remove")}))))}function R(e){var t=S(_(e),2),n=t[0],r=t[1],a=n.$appearance,i=n.$foregroundColor,l=n.disabled,s=n.icon,u=P(n,["$appearance","$foregroundColor","disabled","icon"]),p=r.children,f=r.elementRef,d=P(r,["children","elementRef"]);return o.a.createElement(m,C({$appearance:a,$disabled:l,ref:f},u,c()(d,Object.keys(E))),o.a.createElement(g,null,s&&o.a.createElement(O,{$appearance:a,$disabled:l,$foregroundColor:i},s),o.a.createElement(x,{"data-test":"label",$appearance:a,$disabled:l,$foregroundColor:i},p)))}function I(e){return function(e){return!!e.onRequestRemove}(e)?o.a.createElement(T,e):o.a.createElement(R,e)}I.propTypes=E,I.defaultProps={disabled:!1};var D=I},2:function(e,t){e.exports=n(0)},20:function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var r=n(2),o=n.n(r),a=n(23),i=n.n(a),l=n(7),c=n(6);function s(){return(s=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var j={appearance:i.a.oneOf(["default","pill","prisma"]),disabled:i.a.bool,icon:i.a.node,label:i.a.string,onClick:i.a.func,selected:i.a.bool,value:i.a.any.isRequired,error:i.a.bool};function w(e){var t=e.appearance,n=e.disabled,r=e.label,a=e.icon,i=e.onClick,l=e.selected,c=e.value,s=x(e,["appearance","disabled","label","icon","onClick","selected","value"]);return"prisma"===t?o.a.createElement(v,O({"data-test":"option","data-test-value":c},s,{onClick:l?void 0:function(e){return null==i?void 0:i(e,{value:c,label:r})},role:"radio","aria-checked":l,$selected:l,tabIndex:l?-1:void 0,disabled:n}),a&&o.a.createElement(m,null,a),o.a.createElement(g,null,r)):o.a.createElement(f.a,O({"data-test":"option","data-test-value":c,appearance:t,disabled:n,label:r,icon:a,selected:l,value:c},s,{onClick:l?void 0:function(e){return null==i?void 0:i(e,{value:c,label:r})},role:"radio","aria-checked":l,tabIndex:l?-1:void 0}))}w.propTypes=j;var C=w,S=n(8),k=n.n(S),P=b()(k.a).withConfig({displayName:"RadioBarStyles__StyledRadioBar",componentId:"gg1b79-0"})(["height:",";padding:2px;border-radius:",";background:",";border:1px solid ",";[data-inline] + &{margin-left:",";}"],c.variables.inputHeight,c.variables.borderRadius,(function(e){return e.$disabled?c.variables.interactiveColorBackgroundDisabled:c.variables.interactiveColorBackground}),(function(e){return e.$error?c.variables.accentColorNegative:"transparent"}),c.variables.spacingLarge);function E(e){return(E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(){return(_=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function R(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function I(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var y={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),inline:i.a.bool,size:i.a.oneOf(["small","medium"])};function h(e){var t=e.children,n=e.inline,r=void 0!==n&&n,a=e.size,i=void 0===a?"medium":a,l=b(e,["children","inline","size"]);return o.a.createElement(f,d({"data-test":"static-content","data-size":i,inline:r},l),t)}h.propTypes=y;var v=h},2:function(e,t){e.exports=n(0)},3:function(e,t){e.exports=n(1)},8:function(e,t){e.exports=n(70)}})},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=116)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},116:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return G}));var r=n(2),o=n.n(r),a=n(1),i=n.n(a),l=n(37),c=n(5),s=n(8),u=n.n(s),p=n(0),f=n(88),d=n.n(f),b=n(7),y=n(6);function h(){return(h=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var K={alwaysShowLastPageLink:i.a.bool,current:i.a.number,elementRef:i.a.oneOfType([i.a.func,i.a.object]),numPageLinks:i.a.number,onChange:i.a.func,totalPages:i.a.number};function U(e){var t,n,r=e.onChange,a=e.current,i=void 0===a?1:a,s=e.alwaysShowLastPageLink,f=void 0!==s&&s,d=e.numPageLinks,b=void 0===d?5:d,y=e.totalPages,h=W(e,["onChange","current","alwaysShowLastPageLink","numPageLinks","totalPages"]),v=Object(p.useSplunkTheme)().family,g=Math.min(b,y),O=Math.ceil(g/2),x=Math.ceil(y-g/2),j=[];if(y<=1)return null;i<=O+1?n=(t=1)+Math.min(y,g)-1:i>O&&iO&&y>g&&1!==t&&(j.push(o.a.createElement(B,{label:"1",key:"first",onClick:r,page:1,"aria-label":Object(c._)("Go to first page")})),j.push(o.a.createElement(B,{label:w,disabled:!0,key:"prevEllipsis","aria-hidden":"true",selected:!1})));for(var C=t;C<=n;C+=1){var S=C===i;j.push(o.a.createElement(B,{label:String(C),selected:S,onClick:r,page:C,key:C,"aria-label":S?Object(c._)("Current page"):Object(l.sprintf)(Object(c._)("Go to page %(pageNumber)d"),{pageNumber:C})}))}return i<=x&&y>g&&n!==y&&(j.push(o.a.createElement(B,{label:w,disabled:!0,key:"nextEllipsis","aria-hidden":"true"})),f&&j.push(o.a.createElement(B,{"data-test":"last",label:String(y),key:"last",onClick:r,page:y,"aria-label":Object(c._)("Go to last page")}))),j.push(o.a.createElement(B,{"data-test":"next",disabled:i===y,onClick:r,page:i+1,key:"next","aria-label":Object(c._)("Go to next page")},Object(c._)("Next"),o.a.createElement(F,{$disabled:i===y}))),o.a.createElement(u.a,q({"data-test":"paginator","data-test-current":i,flex:!0,inline:!0,role:"navigation","aria-label":Object(c._)("Pagination navigation")},h),j)}U.propTypes=K;var G=U},2:function(e,t){e.exports=n(0)},25:function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var r=n(2),o=n.n(r),a=n(28),i=n.n(a),l=n(7),c=n(6);function s(){return(s=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"en-us",n=(0,r.toNumber)(e);if(n<=1e3)return n.toLocaleString(t);if(n<1e4)return l((0,o._)("%sK"),(0,a.roundToDecimal)(n/1e3,-2).toLocaleString(t));if(n<1e5)return l((0,o._)("%sK"),(0,a.roundToDecimal)(n/1e3,-1).toLocaleString(t));if(n<999500)return l((0,o._)("%sK"),(0,a.roundToDecimal)(n/1e3,0).toLocaleString(t));if(n<1e7)return l((0,o._)("%sM"),(0,a.roundToDecimal)(n/1e6,-2).toLocaleString(t));if(n<1e8)return l((0,o._)("%sM"),(0,a.roundToDecimal)(n/1e6,-1).toLocaleString(t));if(n<9995e5)return l((0,o._)("%sM"),(0,a.roundToDecimal)(n/1e6,0).toLocaleString(t));if(n<1e10)return l((0,o._)("%sB"),(0,a.roundToDecimal)(n/1e9,-2).toLocaleString(t));if(n<1e11)return l((0,o._)("%sB"),(0,a.roundToDecimal)(n/1e9,-1).toLocaleString(t));return l((0,o._)("%sB"),(0,a.roundToDecimal)(n/1e9,0).toLocaleString(t))},t.bytesToFileSize=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-us",n=(e||0)/1024;if(n<0)throw new RangeError("bytes must be >= 0");if(0===Math.floor(n))return l((0,o._)("%s B"),e.toLocaleString(t));var r=n/1024;if(0===Math.floor(r))return l((0,o._)("%s KB"),(0,a.roundToDecimal)(n,-2).toLocaleString(t));var i=r/1024;if(0===Math.floor(i))return l((0,o._)("%s MB"),(0,a.roundToDecimal)(r,-2).toLocaleString(t));var c=i/1024;if(0===Math.floor(c))return l((0,o._)("%s GB"),(0,a.roundToDecimal)(i,-2).toLocaleString(t));return l((0,o._)("%s TB"),(0,a.roundToDecimal)(c,-2).toLocaleString(t))},t.smartTrim=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.precomposed,o=void 0!==r&&r;if(!e||t<1||e.length<=t)return e;var a=o?"…":"...";if(1===t)return"".concat(e[0]).concat(a);var i=Math.ceil(e.length/2),l=e.length-t,c=Math.ceil(l/2),s=l-c;return"".concat(e.substring(0,i-c)).concat(a).concat(e.substring(i+s))};var r=n(2),o=n(7),a=n(490),i=n(491);function l(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:0;return(0,r.round)(e,-1*t)},t.floorPowerOfTen=function(e){return Math.pow(10,Math.floor(Math.log(e)/Math.LN10))},t.isLessThanMinSafeInt=function(e){if(!(0,r.isNumber)(e))return!1;return e<=-9007199254740991},t.isGreaterThanMaxSafeInt=function(e){if(!(0,r.isNumber)(e))return!1;return e>=9007199254740991};var r=n(2),o=/(^[-+]?[0-9]*[.]?[0-9]*$)|(^[-+]?[0-9][.]?[0-9]*e[-+]?[0-9][0-9]*$)/i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sprintfFormat=l,t.sprintfParse=s;var r=n(2);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var a={notType:/[^T]/,notPrimitive:/[^v]/,number:/[diefg]/,numericArg:/[bcdiefguxX]/,json:/[j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,keyAccess:/^\.([a-z_][a-z_\d]*)/i,indexAccess:/^\[(\d+)\]/,sign:/^[+-]/};function i(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=0),s.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,s.width?parseInt(s.width,10):0);break;case"e":n=s.precision?parseFloat(n).toExponential(s.precision):parseFloat(n).toExponential();break;case"f":n=s.precision?parseFloat(n).toFixed(s.precision):parseFloat(n);break;case"g":n=s.precision?String(Number(n.toPrecision(s.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=s.precision?n.substring(0,s.precision):n;break;case"t":n=String(!!n),n=s.precision?n.substring(0,s.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=s.precision?n.substring(0,s.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=s.precision?n.substring(0,s.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}a.json.test(s.type)?v+=n:(!a.number.test(s.type)||d&&!s.sign?b="":(b=d?"+":"-",n=n.toString().replace(a.sign,"")),p=s.padChar?"0"===s.padChar?"0":s.padChar.charAt(1):" ",f=s.width-(b+n).length,u=s.width&&f>0?(0,r.repeat)(p,f):"",v+=s.align?b+n+u:"0"===p?b+u+n:u+b+n)}return v}var c=Object.create(null);function s(e){if(c[e])return c[e];for(var t,n=e,r=0,o=[];n;){if(null!==(t=a.text.exec(n)))o.push(t[0]);else if(null!==(t=a.modulo.exec(n)))o.push("%");else{if(null===(t=a.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){r|=1;var i=t[2],l=[],s=[];if(null===(l=a.key.exec(i)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(l[1]);""!==(i=i.substring(l[0].length));)if(null!==(l=a.keyAccess.exec(i)))s.push(l[1]);else{if(null===(l=a.indexAccess.exec(i)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(l[1])}t[2]=s}else r|=2;if(3===r)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");o.push({placeholder:t[0],paramNo:t[1],keys:t[2],sign:t[3],padChar:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}n=n.substring(t[0].length)}return c[e]=o,c[e]}},function(e,t,n){e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=42)}({0:function(e,t){e.exports=n(0)},1:function(e,t){e.exports=n(7)},2:function(e,t){e.exports=n(16)},42:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s}));var r=n(0),o=n.n(r),a=n(1),i=n(2),l=n.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var y={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object])};function h(e){var t=e.children,n=b(e,["children"]);return o.a.createElement(f,d({"data-test":"body"},n),t)}h.propTypes=y;var v=h,m=c()(u.a).withConfig({displayName:"FooterStyles__StyledBox",componentId:"sc-1yu3r4s-0"})(["",";text-align:right;color:",";",""],Object(p.pick)({enterprise:Object(l.css)(["padding:",";&:first-child{border-top:none;}"],p.variables.spacing),prisma:{comfortable:Object(l.css)(["padding:24px;"]),compact:"padding: 18px 24px"}}),p.variables.contentColorMuted,(function(e){return e.$showTopBorder&&Object(p.pick)({enterprise:Object(l.css)(["border-top:1px solid ",";"],p.variables.gray92)})}));function g(){return(g=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var x={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),showBorder:i.a.bool};function j(e){var t=e.children,n=e.showBorder,r=void 0===n||n,a=O(e,["children","showBorder"]);return o.a.createElement(m,g({"data-test":"footer",$showTopBorder:r},a),t)}j.propTypes=x;var w=j,C=n(5),S=n(71),k=n.n(S),P=n(17),E=n.n(P),_=n(16),T=n.n(_),R=n(34),I=n.n(R),D=n(52),M=c.a.div.withConfig({displayName:"HeaderStyles__StyledTitle",componentId:"eqi6uk-0"})([""," "," margin:0;overflow-wrap:break-word;padding:0;"],p.mixins.reset("block"),Object(p.pick)({enterprise:Object(l.css)(["font-weight:",";font-size:",";line-height:1.2;"],p.variables.fontWeightSemiBold,p.variables.fontSizeLarge),prisma:Object(l.css)(["font-weight:",";color:",";"],p.variables.fontWeightBold,p.variables.contentColorActive)})),A=c.a.div.withConfig({displayName:"HeaderStyles__StyledSubtitle",componentId:"eqi6uk-1"})(["",";"," margin:0;padding:0;font-weight:normal;"],p.mixins.reset("inline"),Object(p.pick)({enterprise:Object(l.css)(["font-size:",";color:",";"],p.variables.fontSizeSmall,p.variables.textGray),prisma:Object(l.css)(["color:",";"],p.variables.contentColorDefault)})),L=c.a.div.withConfig({displayName:"HeaderStyles__StyledTitleContainer",componentId:"eqi6uk-2"})([""," &:not(:last-child){margin-right:",";}"],(function(e){return e.$truncateTitle&&Object(l.css)(["overflow:hidden;& > ",",& > ","{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}"],M,A)}),Object(p.pick)({enterprise:p.variables.spacingHalf,prisma:p.variables.spacingSmall})),N=c.a.div.withConfig({displayName:"HeaderStyles__StyledActionContainer",componentId:"eqi6uk-3"})([""," position:absolute;",";"],p.mixins.reset("block"),Object(p.pick)({enterprise:Object(l.css)(["right:",";top:",";"],p.variables.spacing,p.variables.spacing),prisma:Object(l.css)(["right:12px;top:12px;"])})),B=c()(u.a).withConfig({displayName:"HeaderStyles__StyledBox",componentId:"eqi6uk-4"})(["display:flex;flex:0 0 auto;justify-content:space-between;position:relative;min-height:30px;"," "," >:not(","):not(","){flex:1 0 auto;}"],Object(p.pick)({enterprise:Object(l.css)(["padding:",";"],p.variables.spacing),prisma:{comfortable:Object(l.css)(["padding:16px 24px;&:last-child{padding-bottom:32px;}"]),compact:Object(l.css)(["padding:12px 24px;&:last-child{padding-bottom:24px;}"])}}),Object(p.pick)({prisma:Object(l.css)(["border-top-left-radius:",";border-top-right-radius:",";"],p.variables.borderRadius,p.variables.borderRadius)}),L,N);function z(){return(z=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $={actionPrimary:i.a.node,actionsSecondary:i.a.node,anchor:i.a.string,children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),subtitle:i.a.node,title:i.a.node,truncateTitle:i.a.bool};function F(e){var t=e.actionPrimary,n=e.actionsSecondary,r=e.anchor,a=e.children,i=e.subtitle,l=e.title,c=e.truncateTitle,s=void 0===c||c,u=H(e,["actionPrimary","actionsSecondary","anchor","children","subtitle","title","truncateTitle"]),p=I()().family,f=o.a.createElement(E.a,{appearance:"secondary","data-test":"actions-secondary-toggle",icon:o.a.createElement(D.a,{screenReaderText:t?Object(C._)("More Actions"):Object(C._)("Actions")}),style:{marginLeft:10}}),d="prisma"===p?"right":"below";return o.a.createElement(B,z({"data-test":"header"},u),(l||i)&&o.a.createElement(L,{$truncateTitle:s},l&&o.a.createElement(M,null,r?o.a.createElement(k.a,{name:r},l):l),i&&o.a.createElement(A,null,i)),a,(t||n)&&o.a.createElement(N,null,t,n&&o.a.createElement(T.a,{defaultPlacement:d,toggle:f},n)))}F.propTypes=$;var V=F,q=n(11),W=n.n(q),K=c.a.div.withConfig({displayName:"CardStyles__Styled",componentId:"ola3x0-0"})(["",";flex-direction:column;align-items:stretch;min-width:100px;flex:1;vertical-align:top;"," transition:height ",",width ",",min-width ",",max-width ",",margin ",",box-shadow ",",border-color ",";"," &[data-clickable='true']{cursor:pointer;"," &:hover{","}&:focus{","}}",""],p.mixins.reset("inline-flex"),Object(p.pick)({enterprise:Object(l.css)(["background-color:",";border:1px solid transparent;"],p.variables.backgroundColor),prisma:Object(l.css)(["background-color:",";border-radius:",";box-shadow:",";"],p.variables.backgroundColorSection,p.variables.borderRadius,p.variables.embossShadow)}),"0.2s","0.2s","0.2s","0.2s","0.2s","0.2s","0.2s",(function(e){return e.$cardHasBorder&&Object(p.pick)({enterprise:Object(l.css)(["border-color:",";"],p.variables.borderLightColor)})}),(function(e){return e.$selected&&Object(p.pick)({enterprise:Object(l.css)(["border-color:",";"],p.variables.focusColor),prisma:Object(l.css)(["background-color:",";"],p.mixins.overlayColors(p.variables.backgroundColorSection,p.variables.interactiveColorOverlaySelected))})}),Object(p.pick)({enterprise:Object(l.css)(["box-shadow:",";"],p.variables.overlayShadow),prisma:Object(l.css)(["box-shadow:",";background-color:",";"],p.variables.embossShadow,p.mixins.overlayColors(p.variables.backgroundColorSection,p.variables.interactiveColorOverlayHover))}),Object(p.pick)({enterprise:Object(l.css)(["box-shadow:",";"],p.variables.focusShadow),prisma:Object(l.css)(["box-shadow:",";background-color:",";"],p.variables.embossShadow,p.mixins.overlayColors(p.variables.backgroundColorSection,p.variables.interactiveColorOverlayHover))}),(function(e){return e.rendersAsButton&&Object(l.css)(["& ","{flex-basis:0;}"],f)})),U=K.withComponent(W.a),G=c.a.div.withConfig({displayName:"CardStyles__StyledFirefoxFlexHack",componentId:"ola3x0-1"})(["display:flex;flex:1 1 auto;flex-direction:column;align-items:stretch;justify-content:stretch;height:100%;",""],Object(p.pick)({prisma:Object(l.css)(["border-radius:",";"],p.variables.borderRadius)}));function Z(e){return(Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function X(){return(X=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var se={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),margin:i.a.number,maxWidth:i.a.oneOfType([i.a.number,i.a.string]),minWidth:i.a.oneOfType([i.a.number,i.a.string]),onClick:i.a.func,openInNewContext:i.a.bool,selected:i.a.bool,showBorder:i.a.bool,to:i.a.string,value:i.a.any};function ue(e){var t=e.margin,n=e.maxWidth,r=e.minWidth,o=e.selected,a=e.showBorder,i=e.style,l=ce(e,["margin","maxWidth","minWidth","selected","showBorder","style"]);return[{showBorder:a,selected:o,"data-test":"card",style:function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var f={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},b={Enterprise:i.a.func,enterpriseSize:i.a.oneOfType([i.a.number,i.a.string]),enterpriseWidth:i.a.oneOfType([i.a.number,i.a.string]),enterpriseHeight:i.a.oneOfType([i.a.number,i.a.string]),Prisma24:i.a.func.isRequired,Prisma20:i.a.func,Prisma16:i.a.func,prismaSize:i.a.oneOf(["medium","small"]),inline:i.a.bool,screenReaderText:i.a.string};function y(e){var t=e.Enterprise,n=e.Prisma24,r=e.Prisma20,a=e.Prisma16,i=e.prismaSize,b=e.inline,y=e.enterpriseSize,h=e.enterpriseWidth,v=e.enterpriseHeight,m=e.screenReaderText,g=p(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),O=Object(l.useSplunkTheme)(),x=O.family,j=O.density;if("enterprise"===x)return o.a.createElement(t,u({size:y,width:h,height:v,screenReaderText:m||null,hideDefaultTooltip:!0,inline:b},g));var w=function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var d={children:i.a.node,elementRef:i.a.oneOfType([i.a.func,i.a.object]),name:i.a.string.isRequired};function b(e){var t=e.children,n=e.elementRef,r=e.name,a=f(e,["children","elementRef","name"]);return o.a.createElement(u,p({"data-test":"anchor",ref:n},a,{name:r,href:"#".concat(r)}),t)}b.propTypes=d;var y=b},2:function(e,t){e.exports=n(0)},3:function(e,t){e.exports=n(1)}})},,function(e,t,n){"use strict";n.r(t),n.d(t,"withResizeDetector",(function(){return J}));var r=n(0),o=n.n(r),a=n(3),i=n.n(a),l=n(443);var c=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},s=n(444),u="object"==typeof self&&self&&self.Object===Object&&self,p=s.a||u||Function("return this")(),f=function(){return p.Date.now()},d=/\s/;var b=function(e){for(var t=e.length;t--&&d.test(e.charAt(t)););return t},y=/^\s+/;var h=function(e){return e?e.slice(0,b(e)+1).replace(y,""):e},v=p.Symbol,m=Object.prototype,g=m.hasOwnProperty,O=m.toString,x=v?v.toStringTag:void 0;var j=function(e){var t=g.call(e,x),n=e[x];try{e[x]=void 0;var r=!0}catch(e){}var o=O.call(e);return r&&(t?e[x]=n:delete e[x]),o},w=Object.prototype.toString;var C=function(e){return w.call(e)},S=v?v.toStringTag:void 0;var k=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":S&&S in Object(e)?j(e):C(e)};var P=function(e){return null!=e&&"object"==typeof e};var E=function(e){return"symbol"==typeof e||P(e)&&"[object Symbol]"==k(e)},_=/^[-+]0x[0-9a-f]+$/i,T=/^0b[01]+$/i,R=/^0o[0-7]+$/i,I=parseInt;var D=function(e){if("number"==typeof e)return e;if(E(e))return NaN;if(c(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=c(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=h(e);var n=T.test(e);return n||R.test(e)?I(e.slice(2),n?2:8):_.test(e)?NaN:+e},M=Math.max,A=Math.min;var L=function(e,t,n){var r,o,a,i,l,s,u=0,p=!1,d=!1,b=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var n=r,a=o;return r=o=void 0,u=t,i=e.apply(a,n)}function h(e){return u=e,l=setTimeout(m,t),p?y(e):i}function v(e){var n=e-s;return void 0===s||n>=t||n<0||d&&e-u>=a}function m(){var e=f();if(v(e))return g(e);l=setTimeout(m,function(e){var n=t-(e-s);return d?A(n,a-(e-u)):n}(e))}function g(e){return l=void 0,b&&r?y(e):(r=o=void 0,i)}function O(){var e=f(),n=v(e);if(r=arguments,o=this,s=e,n){if(void 0===l)return h(s);if(d)return clearTimeout(l),l=setTimeout(m,t),y(s)}return void 0===l&&(l=setTimeout(m,t)),i}return t=D(t)||0,c(n)&&(p=!!n.leading,a=(d="maxWait"in n)?M(D(n.maxWait)||0,t):a,b="trailing"in n?!!n.trailing:b),O.cancel=function(){void 0!==l&&clearTimeout(l),u=0,r=s=o=l=void 0},O.flush=function(){return void 0===l?i:g(f())},O};var N=function(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return c(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),L(e,t,{leading:r,maxWait:t,trailing:o})};var B=function(e){if(!c(e))return!1;var t=k(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t};function z(e){return(z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function H(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{handleWidth:!0,handleHeight:!0};return function(n){function r(){return $(this,r),q(this,W(r).apply(this,arguments))}return K(r,n),V(r,[{key:"render",value:function(){return o.a.createElement(Q,t,o.a.createElement(e,this.props))}}]),r}(r.Component)};t.default=Q},,function(e,t,n){"use strict";var r,o=new Uint8Array(16);function a(){if(!r&&!(r="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return r(o)}var i=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var l=function(e){return"string"==typeof e&&i.test(e)},c=[],s=0;s<256;++s)c.push((s+256).toString(16).substr(1));var u=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase();if(!l(n))throw TypeError("Stringified UUID is invalid");return n};t.a=function(e,t,n){var r=(e=e||{}).random||(e.rng||a)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var o=0;o<16;++o)t[n+o]=r[o];return t}return u(r)}}])]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL1RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtaWNvbnMvQ2hldnJvblJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvU3dpdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0NvbHVtbkxheW91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL2dldFRoZW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL2VudGVycHJpc2UvbGlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvcGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW1tdXRhYmlsaXR5LWhlbHBlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC11aS9UYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC11aS9Ub29sdGlwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3VpLXV0aWxzL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC11aS9SZXN1bHRzTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL29taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LWljb25zL0NoZWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0hlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9Ub2FzdE1lc3NhZ2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL2VudGVycHJpc2UvZGFyay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3RoZW1lcy9lbnRlcnByaXNlL2NvbXBhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvZW50ZXJwcmlzZS9jb21mb3J0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3RoZW1lcy9wcmlzbWEvbGlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvcHJpc21hL2RhcmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvdmFyaWFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtaWNvbnMvTW9yZVZlcnRpY2FsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0J1dHRvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvU2VsZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0NsZWFyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbkluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5c0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVCeVRhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzU2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9sYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZmxhdFJlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9mbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC11aS9TY3JvbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtaWNvbnMvVHJpYW5nbGVSaWdodFNtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL2dldFNldHRpbmdzRnJvbVRoZW1lZFByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL2VudGVycHJpc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvZW50ZXJwcmlzZS9wcmlzbWFBbGlhc2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL3ByaXNtYS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3RoZW1lcy9wcmlzbWEvY29tcGFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3RoZW1lcy9wcmlzbWEvY29tZm9ydGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvcHJpc21hL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvbWl4aW5zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL3BpY2tWYXJpYW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXRvYXN0LW5vdGlmaWNhdGlvbnMvbm9kZV9tb2R1bGVzL0BzcGx1bmsvdGhlbWVzL1NwbHVua1RoZW1lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9ub2RlX21vZHVsZXMvQHNwbHVuay90aGVtZXMvd2l0aFNwbHVua1RoZW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mbGlwLW1vdmUvZGlzdC9yZWFjdC1mbGlwLW1vdmUuZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtaWNvbnMvQ2hldnJvbkRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Jlc2l6ZS1vYnNlcnZlci1wb2x5ZmlsbC9kaXN0L1Jlc2l6ZU9ic2VydmVyLmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtaWNvbnMvU29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC1pY29ucy9Tb3J0ZWREb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LWljb25zL1NvcnRlZFVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LWljb25zL0luZm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvRGVmaW5pdGlvbkxpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtaWNvbnMvUGVuY2lsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LWljb25zL0Nsb25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LWljb25zL1RyYXNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0NvbGxhcHNpYmxlUGFuZWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvVHJhbnNpdGlvbk9wZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvQ29udHJvbEdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LWljb25zL1NlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0YXJ0Q2FzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDb21wb3VuZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVidXJyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlYnVyckxldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dvcmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FzY2lpV29yZHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzVW5pY29kZVdvcmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVdvcmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdXBwZXJGaXJzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDYXNlRmlyc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVUb0FycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvdWktdXRpbHMvdXNlckFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0NvbWJvQm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL011bHRpc2VsZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0NoaXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvdWktdXRpbHMvY29sb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvUmFkaW9CYXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvU3RhdGljQ29udGVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC11aS9QYWdpbmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvdWktdXRpbHMvZm9ybWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3VpLXV0aWxzL21hdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvdWktdXRpbHMvc3ByaW50Zi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC1pY29ucy9DaGV2cm9uTGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC1pY29ucy9Nb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9Ac3BsdW5rL3JlYWN0LXVpL0NhcmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BzcGx1bmsvcmVhY3QtdWkvQW5jaG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fcm9vdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL25vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL190cmltbWVkRW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fYmFzZVRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy90b051bWJlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbG9kYXNoLWVzL2RlYm91bmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gtZXMvdGhyb3R0bGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC1lcy9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZXNpemUtZGV0ZWN0b3IvbGliL2VzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JlZ2V4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9fZXNNb2R1bGUiLCJpc0FycmF5IiwiQXJyYXkiLCJnZXRDdXN0b21pemVkVGhlbWUiLCJhZGRUaGVtZURlZmF1bHRzIiwiX2xvZGFzaCIsIl9nZXRUaGVtZSIsIl9yZWYiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfcmVmJGZhbWlseSIsImZhbWlseSIsIl9yZWYkY29sb3JTY2hlbWUiLCJjb2xvclNjaGVtZSIsIl9yZWYkZGVuc2l0eSIsImRlbnNpdHkiLCJtZW1vaXplIiwic2V0dGluZ3MiLCJjdXN0b21pemVyIiwidmFyaWFibGVzIiwiX3JlZjIiLCJjb25jYXQiLCJtb2R1bGVzIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidCIsIm1vZGUiLCJucyIsImNyZWF0ZSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiMCIsIjEiLCIxMDQiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwic3JjX01lbnVfTWVudSIsIk1lbnVfSXRlbSIsIk1lbnVfSGVhZGluZyIsIk1lbnVfRGl2aWRlciIsImV4dGVybmFsX3JlYWN0XyIsImV4dGVybmFsX3JlYWN0X2RlZmF1bHQiLCJleHRlcm5hbF9wcm9wX3R5cGVzXyIsImV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCIsIm9taXRfIiwib21pdF9kZWZhdWx0IiwiZm9jdXNfIiwia2V5Ym9hcmRfIiwiZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfIiwiZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCIsInRoZW1lc18iLCJTdHlsZWQiLCJhIiwiZGl2Iiwid2l0aENvbmZpZyIsImRpc3BsYXlOYW1lIiwiY29tcG9uZW50SWQiLCJlbnRlcnByaXNlIiwiYm9yZGVyQ29sb3IiLCJwcmlzbWEiLCJuZXV0cmFsMjAwIiwiY29tZm9ydGFibGUiLCJjb21wYWN0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJzb3VyY2UiLCJhcHBseSIsInRoaXMiLCJEaXZpZGVyIiwib3RoZXJQcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJyb2xlIiwicHJvcFR5cGVzIiwiZmlsdGVyRmlyc3QiLCJmaWx0ZXJDb25zZWN1dGl2ZSIsImZpbHRlckxhc3QiLCJIZWFkaW5nXyIsIkhlYWRpbmdfZGVmYXVsdCIsInVzZVNwbHVua1RoZW1lXyIsInVzZVNwbHVua1RoZW1lX2RlZmF1bHQiLCJIZWFkaW5nU3R5bGVzX1N0eWxlZCIsInJlc2V0Iiwic3BhY2luZ1F1YXJ0ZXIiLCJzcGFjaW5nSGFsZiIsImJvcmRlciIsIlByaXNtYVNlY3Rpb25UaXRsZSIsImg1IiwiZm9udFNpemVTbWFsbCIsImxpbmVIZWlnaHQiLCJmb250V2VpZ2h0Qm9sZCIsIkhlYWRpbmdfZXh0ZW5kcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImtleXMiLCJpbmRleE9mIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzb3VyY2VTeW1ib2xLZXlzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJIZWFkaW5nX3Byb3BUeXBlcyIsImNoaWxkcmVuIiwibm9kZSIsInRpdGxlIiwiYm9vbCIsIkhlYWRpbmciLCJhcyIsInN0eWxlIiwibWFyZ2luIiwibGV2ZWwiLCJleHRlcm5hbF9sb2Rhc2hfIiwiQ2hlY2siLCJUcmlhbmdsZVJpZ2h0U21hbGxfIiwiVHJpYW5nbGVSaWdodFNtYWxsX2RlZmF1bHQiLCJUaGVtZWRJY29uIiwiU1ZHIiwiQ2FyZXRSaWdodF9leHRlbmRzIiwiUHJpc21hMjQiLCJ2aWV3Qm94IiwiZmlsbCIsIkNhcmV0UmlnaHQiLCJwcm9wcyIsIkVudGVycHJpc2UiLCJDaGV2cm9uUmlnaHQiLCJDbGlja2FibGVfIiwiQ2xpY2thYmxlX2RlZmF1bHQiLCJTd2l0Y2hfIiwiU3dpdGNoX2RlZmF1bHQiLCJpdGVtRGVzY3JpcHRpb24iLCJjb250ZW50Q29sb3JEZWZhdWx0IiwidGV4dEdyYXkiLCJTdHlsZWRJdGVtRGVzY3JpcHRpb25Cb3R0b20iLCJzcGFuIiwiU3R5bGVkSXRlbURlc2NyaXB0aW9uUmlnaHQiLCJzcGFjaW5nIiwiU3R5bGVkSXRlbVNlbGVjdGVkSWNvbiIsImNvbnRlbnRDb2xvckFjdGl2ZSIsImFjY2VudENvbG9yTDEwIiwiU3R5bGVkSXRlbUljb24iLCJjb250ZW50Q29sb3JNdXRlZCIsIlN0eWxlZENsaWNrYWJsZSIsImRhcmsiLCJncmF5OTYiLCJsaWdodCIsImdyYXk0NSIsIiRpc1NlbGVjdGFibGUiLCIkc2VsZWN0YWJsZUFwcGVhcmFuY2UiLCIkYWN0aXZlIiwiZm9jdXNTaGFkb3dJbnNldCIsImludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXIiLCJiYWNrZ3JvdW5kQ29sb3JIb3ZlciIsIl9yZWYzIiwiJHNlbGVjdGVkIiwib3ZlcmxheUNvbG9ycyIsImludGVyYWN0aXZlQ29sb3JPdmVybGF5U2VsZWN0ZWQiLCJpbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUFjdGl2ZSIsIl9yZWY0IiwiY29udGVudENvbG9yRGlzYWJsZWQiLCJncmF5ODAiLCJfcmVmNSIsIlN0eWxlZFN3aXRjaCIsIlN0eWxlZElubmVyV3JhcHBlciIsIlN0eWxlZFRpdGxlQW5kRGVzY3JpcHRpb25XcmFwcGVyIiwiX3JlZjYiLCIkdHJ1bmNhdGUiLCJTdHlsZWRMYWJlbCIsIl9yZWY3IiwiX3JlZjgiLCIkbWF0Y2hpbmciLCJTdHlsZWRNYXRjaCIsImFjY2VudENvbG9yIiwiU3R5bGVkU3VibWVudSIsInNwYWNpbmdTbWFsbCIsInVwZGF0ZVJlYWN0UmVmIiwiX3R5cGVvZiIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJJdGVtX2V4dGVuZHMiLCJJdGVtX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiSXRlbV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiX2RlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfc2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9jcmVhdGVTdXBlciIsIkRlcml2ZWQiLCJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsIkRhdGUiLCJ0b1N0cmluZyIsImUiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwicmVzdWx0IiwiU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJOZXdUYXJnZXQiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsIl9kZWZpbmVQcm9wZXJ0eSIsIkl0ZW1fcHJvcFR5cGVzIiwiYWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzdHJpbmciLCJkZXNjcmlwdGlvblBvc2l0aW9uIiwib25lT2YiLCJkaXNhYmxlZCIsImVsZW1lbnRSZWYiLCJvbmVPZlR5cGUiLCJmdW5jIiwiaGFzU3VibWVudSIsImljb24iLCJtYXRjaFJhbmdlcyIsImFycmF5T2YiLCJzaGFwZSIsInN0YXJ0IiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsImVuZCIsIm9uQ2xpY2siLCJvcGVuSW5OZXdDb250ZXh0Iiwic2VsZWN0YWJsZSIsInNlbGVjdGFibGVBcHBlYXJhbmNlIiwic2VsZWN0ZWQiLCJzcGx1bmtUaGVtZSIsInRvIiwidHJ1bmNhdGUiLCJJdGVtX0l0ZW0iLCJfQ29tcG9uZW50Iiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiVHlwZUVycm9yIiwiX2luaGVyaXRzIiwiSXRlbSIsIl9zdXBlciIsIl90aGlzIiwiaW5zdGFuY2UiLCJfY2xhc3NDYWxsQ2hlY2siLCJlbCIsInZhbGlkYXRlUHJvcHMiLCJfdGhpcyRlbCIsImZvY3VzIiwicGFyZW50RWwiLCJvZmZzZXRQYXJlbnQiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJvZmZzZXRUb3AiLCJfdGhpcyRwcm9wcyIsInNlZ21lbnRzIiwicHVzaCIsInN1YnN0cmluZyIsImZvckVhY2giLCJtYXRjaCIsImluZGV4IiwiX3RoaXMkcHJvcHMyIiwiaXNTZWxlY3RhYmxlIiwiZGVmYXVsdFJvbGUiLCJub25zZWxlY3RhYmxlIiwiY2hlY2ttYXJrIiwiY2hlY2tib3giLCJhcmlhUHJvcHMiLCJzZWxlY3RhYmxlUG9zaXRpb24iLCJkZXNjcmlwdGlvblJpZ2h0IiwiZGVzY3JpcHRpb25Cb3R0b20iLCJzZWxlY3RhYmxlQ2hlY2ttYXJrIiwiZW50ZXJwcmlzZVNpemUiLCJwcmlzbWFTaXplIiwiaW5saW5lIiwiaGFuZGxlTW91bnQiLCJpbnRlcmFjdGl2ZSIsInNlbGVjdGVkTGFiZWwiLCJ1bnNlbGVjdGVkTGFiZWwiLCJyZW5kZXJMYWJlbCIsIkl0ZW1XaXRoVGhlbWUiLCJTY3JvbGxfIiwiU2Nyb2xsX2RlZmF1bHQiLCJhZGphY2VudFNpYmxpbmdTdHlsZXMiLCJncmF5NjAiLCJNZW51U3R5bGVzX1N0eWxlZCIsImJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmRDb2xvclBvcHVwIiwiYm9yZGVyUmFkaXVzIiwiU3R5bGVkU2Nyb2xsIiwid2l0aENvbXBvbmVudCIsIk1lbnVfdHlwZW9mIiwiTWVudV9leHRlbmRzIiwiTWVudV9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIk1lbnVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIk1lbnVfZGVmaW5lUHJvcGVydGllcyIsIk1lbnVfc2V0UHJvdG90eXBlT2YiLCJNZW51X2NyZWF0ZVN1cGVyIiwiTWVudV9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJNZW51X2dldFByb3RvdHlwZU9mIiwiTWVudV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiTWVudV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJNZW51X2RlZmluZVByb3BlcnR5IiwiTWVudV9wcm9wVHlwZXMiLCJyZXRhaW5Gb2N1cyIsInN0b3BTY3JvbGxQcm9wYWdhdGlvbiIsIk1lbnVfTWVudSIsIk1lbnVfaW5oZXJpdHMiLCJNZW51IiwiTWVudV9jbGFzc0NhbGxDaGVjayIsInN0YXRlIiwiY29udGFpbmVyRWwiLCJoYW5kbGVLZXlEb3duIiwic2V0U3RhdGUiLCJuYXRpdmVFdmVudCIsInRhYmJhYmxlRWxlbWVudHMiLCJmaWx0ZXIiLCJjdXJyZW50SW5kZXgiLCJwcmV2ZW50RGVmYXVsdCIsImNoaWxkcmVuQ2xlYW5lZCIsInRvQXJyYXkiLCJyZWR1Y2UiLCJhY2MiLCJpdGVtIiwib3JpZ2luYWwiLCJ0eXBlIiwiY29uc2VjIiwib25LZXlEb3duIiwicmVmIiwiMTEiLCIxMiIsImN1cnJlbnQiLCIyIiwiMjUiLCJyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fIiwicmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0IiwiX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsIl9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvblJpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCIsIl9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18iLCJfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18iLCJQcmlzbWExNiIsIjI2IiwiMjgiLCIyOSIsIjMiLCIzNCIsIjQiLCI0MiIsIjQ1IiwiX3NwbHVua19yZWFjdF9pY29uc19DaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fIiwiX3NwbHVua19yZWFjdF9pY29uc19DaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCI1NiIsIjU5IiwiNiIsInN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJzdmciLCJzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCJ4bWxucyIsIjYwIiwiNyIsIkljb24iLCJwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCIsIl9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18iLCJvd25LZXlzIiwiZW51bWVyYWJsZU9ubHkiLCJzeW1ib2xzIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaW5saW5lU3R5bGVzIiwiZGlzcGxheSIsImZsZXgiLCJvdmVyZmxvdyIsInZlcnRpY2FsQWxpZ24iLCJibG9ja1N0eWxlcyIsImVudGVycHJpc2VXaWR0aCIsImVudGVycHJpc2VIZWlnaHQiLCJQcmlzbWEyMCIsInNjcmVlblJlYWRlclRleHQiLCJfdXNlU3BsdW5rVGhlbWUiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJoaWRlRGVmYXVsdFRvb2x0aXAiLCJwcmlzbWFQcm9wcyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX29iamVjdFNwcmVhZCIsIl9TVkciLCJkZWZhdWx0UHJvcHMiLCI4NCIsIjkiLCJhc3NpZ25WYWx1ZSIsImJhc2VBc3NpZ25WYWx1ZSIsImlzTmV3IiwibmV3VmFsdWUiLCIxMTEiLCJzcmNfVGV4dF9UZXh0IiwiZXh0ZXJuYWxfcmVhY3RfZXZlbnRfbGlzdGVuZXJfIiwiZXh0ZXJuYWxfcmVhY3RfZXZlbnRfbGlzdGVuZXJfZGVmYXVsdCIsInN0eWxlXyIsIlNjcmVlblJlYWRlckNvbnRlbnRfIiwiU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0IiwiaTE4bl8iLCJTZWFyY2hfIiwiU2VhcmNoX2RlZmF1bHQiLCJTZWFyY2giLCJDcm9zc01hcmsiLCJTVkdfIiwiU1ZHX2RlZmF1bHQiLCJJY29uT3V0bGluZWRIaWRlX2V4dGVuZHMiLCJUZXh0X0ljb25PdXRsaW5lZEhpZGUiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwiSWNvbk91dGxpbmVkVmlld19leHRlbmRzIiwiVGV4dF9JY29uT3V0bGluZWRWaWV3Iiwic3RhcnRDYXNlXyIsInN0YXJ0Q2FzZV9kZWZhdWx0IiwiQm94XyIsIkJveF9kZWZhdWx0IiwiU3R5bGVkQm94IiwiVGV4dFN0eWxlc19hZGRQYWRkaW5nIiwiYmFzZSIsIiRjdXN0b21TdHlsZSIsImN1c3RvbSIsImxlZnRJY29uUGFkZGluZyIsInBhZGRpbmciLCJwYWRkaW5nUmVzdWx0IiwicmlnaHRJY29uUGFkZGluZyIsImRpc2FibGVkU3R5bGVzIiwidGV4dERpc2FibGVkQ29sb3IiLCJncmF5OTIiLCJncmF5MjIiLCJncmF5MzAiLCJpbnRlcmFjdGl2ZUNvbG9yQm9yZGVyRGlzYWJsZWQiLCJTdHlsZWRDbGVhciIsIndoaXRlIiwiU3R5bGVkVmlzaWJpbGl0eVRvZ2dsZSIsImJ1dHRvbiIsImxpbmtDb2xvciIsImhvdmVyU2hhZG93IiwiZm9jdXNTaGFkb3ciLCJTdHlsZWRJbnB1dCIsImlucHV0IiwidHJhbnNwYXJlbnQiLCJncmF5MjAiLCJpbnRlcmFjdGl2ZUNvbG9yQm9yZGVyIiwidGV4dENvbG9yIiwic2Fuc0ZvbnRGYW1pbHkiLCJpbnB1dEhlaWdodCIsIiRyaWdodEljb25QYWRkaW5nIiwiJGFwcGVuZCIsIiRwcmVwZW5kIiwiaW50ZXJhY3RpdmVDb2xvckJvcmRlckhvdmVyIiwiaW50ZXJhY3RpdmVDb2xvclByaW1hcnkiLCJlcnJvckNvbG9yIiwiYWNjZW50Q29sb3JOZWdhdGl2ZSIsIiRzZWFyY2giLCJTdHlsZWRTZWFyY2hJY29uV3JhcHBlciIsIlN0eWxlZFBsYWNlaG9sZGVyIiwiJHJlbmRlclNlYXJjaEljb24iLCJUZXh0X2V4dGVuZHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIml0ZXIiLCJmcm9tIiwiX2l0ZXJhYmxlVG9BcnJheSIsIm1pbkxlbiIsInNsaWNlIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImxlbiIsImFycjIiLCJhcHBlYXJhbmNlIiwiYXBwZW5kIiwiYXV0b0NhcGl0YWxpemUiLCJhdXRvQ29tcGxldGUiLCJhdXRvQ29ycmVjdCIsImF1dG9Gb2N1cyIsImNhbkNsZWFyIiwiY2xhc3NOYW1lUHJpdmF0ZSIsImRlZmF1bHRWYWx1ZSIsImRlc2NyaWJlZEJ5IiwiZXJyb3IiLCJpbnB1dENsYXNzTmFtZSIsImlucHV0SWQiLCJpbnB1dFJlZiIsImlucHV0U3R5bGUiLCJsYWJlbGxlZEJ5IiwibWF4TGVuZ3RoIiwibXVsdGlsaW5lIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25TZWxlY3QiLCJwbGFjZWhvbGRlciIsInByZXBlbmQiLCJyb3dzTWF4Iiwicm93c01pbiIsInNwZWxsQ2hlY2siLCJ0YWJJbmRleCIsInBhc3N3b3JkVmlzaWJpbGl0eVRvZ2dsZSIsInVzZVN5bnRoZXRpY1BsYWNlaG9sZGVyIiwiVGV4dF9UZXh0IiwiVGV4dCIsInN5bmNIZWlnaHRXaXRoU2hhZG93IiwiX3RoaXMkcHJvcHMkb25DaGFuZ2UiLCJpc0NvbnRyb2xsZWQiLCJfdGhpcyRwcm9wcyRvbktleURvd24iLCJfdGhpcyRwcm9wcyRvblNlbGVjdCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzJG9uRm9jdXMiLCJfdGhpcyRwcm9wczQiLCJoYXNGb2N1cyIsIl90aGlzJHByb3BzJG9uQmx1ciIsIl90aGlzJHByb3BzNSIsIl90aGlzJHByb3BzJG9uQ2hhbmdlMiIsIl90aGlzJHByb3BzNiIsImhpZGVWaXNpYmlsaXR5IiwibmV3SGVpZ2h0Iiwic2hhZG93Iiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHRWYWx1ZSIsImdldFByb3BlcnR5VmFsdWUiLCJwYXJzZUludCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyQm90dG9tIiwic2Nyb2xsSGVpZ2h0IiwiaXNOYU4iLCJtYXhIZWlnaHQiLCJNYXRoIiwibWluIiwibWluSGVpZ2h0IiwibWF4IiwiY29udHJvbGxlZEV4dGVybmFsbHkiLCJ2YWxpZGF0ZVJvd3MiLCJoYW5kbGVSZXNpemUiLCJwcmV2UHJvcHMiLCJfdGhpcyRpbnB1dCIsImJsdXIiLCJfdGhpcyRpbnB1dDIiLCJfdGhpcyRpbnB1dDMiLCJzZWxlY3QiLCJfdGhpczIiLCJfdGhpcyRwcm9wczciLCJjbGFzc05hbWUiLCJpc1ByaXNtYSIsInZhbCIsImJveFByb3BzIiwiZGlzcGxheVZhbHVlIiwiY2xlYXJJY29uUGFkZGluZyIsInJlc2VydmVJY29uU3BhY2UiLCJkaXNwbGF5UHJvcHMiLCIkZXJyb3IiLCJwYXNzd29yZFZpc2liaWxpdHkiLCJjb21wdXRlZFR5cGUiLCJpbnB1dFByb3BzIiwiaWQiLCJoYW5kbGVJbnB1dENoYW5nZSIsImhhbmRsZUlucHV0S2V5RG93biIsImhhbmRsZUlucHV0U2VsZWN0IiwiaGFuZGxlSW5wdXRGb2N1cyIsImhhbmRsZUlucHV0Qmx1ciIsImhhbmRsZUlucHV0TW91bnQiLCJoYXZlU3ludGhldGljUGxhY2Vob2xkZXIiLCJzZWFyY2hJY29uUG9zaXRpb24iLCJwbGFjZWhvbGRlclBhZGRpbmciLCJzaG93Q2xlYXJJY29uIiwiZXllSWNvbiIsInBvc2l0aW9uIiwibGVmdCIsInRvcCIsInJlYWRPbmx5Iiwib25SZXNpemUiLCJvbk1vdXNlRG93biIsImhhbmRsZVBsYWNlaG9sZGVyTW91c2VEb3duIiwiaGFuZGxlQ2xlYXIiLCJoYW5kbGVWaXNpYmlsaXR5VG9nZ2xlIiwiJGRpc2FibGVkIiwiVGV4dFdpdGhUaGVtZSIsImNvbXBvbmVudFR5cGUiLCIxNCIsIjE1IiwiMjAiLCJfc3BsdW5rX3JlYWN0X2ljb25zX0Nsb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJfc3BsdW5rX3JlYWN0X2ljb25zX0Nsb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCIsIjIxIiwiMjMiLCIzNiIsIjUiLCI4IiwiOTgiLCI5OSIsIjQzIiwiX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18iLCJfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCIsImJhc2VUb1N0cmluZyIsIjEwIiwiMTM1Iiwic3JjX1N3aXRjaF9Td2l0Y2giLCJBbmltYXRpb25Ub2dnbGVfIiwiQW5pbWF0aW9uVG9nZ2xlX2RlZmF1bHQiLCJpZF8iLCJDaGVja18iLCJDaGVja19kZWZhdWx0IiwiQ2hlY2tJY29uIiwibWFyZ2luVG9wIiwiU3R5bGVkQ2hlY2tib3hDbGlja2FibGUiLCIkaW50ZXJhY3RpdmUiLCJiYWNrZ3JvdW5kQ29sb3JQYWdlIiwiZXJyb3JDb2xvckwzMCIsImludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kRGlzYWJsZWQiLCJTdHlsZWRDaGVja2JveFNwYW4iLCJTdHlsZWRTb21lIiwiU3R5bGVkSW5kaWNhdG9yIiwiZ3JheTk4IiwiJGRlbGF5IiwiZW1ib3NzU2hhZG93IiwiX3JlZjkiLCJjb2xvcldpdGhBbHBoYSIsImJvcmRlckxpZ2h0Q29sb3IiLCJfcmVmMTAiLCJTdHlsZWRUb2dnbGVPdXRsaW5lIiwiX3JlZjExIiwiX3JlZjEyIiwiU3R5bGVkVG9nZ2xlQ2xpY2thYmxlIiwiZm9jdXNDb2xvciIsIl9yZWYxMyIsImFjY2VudENvbG9yTDQwIiwiYWNjZW50Q29sb3JEMjAiLCJfcmVmMTQiLCJfcmVmMTUiLCJTdHlsZWRUb2dnbGVTcGFuIiwibGFiZWwiLCJfcmVmMTYiLCJzb21lU2VsZWN0ZWRMYWJlbCIsImFueSIsIlN0eWxlZENsaWNrYWJsZXMiLCJ0b2dnbGUiLCJTdHlsZWRTcGFucyIsIlN3aXRjaF9Td2l0Y2giLCJTd2l0Y2giLCJfdGhpcyRwcm9wcyRvbkNsaWNrIiwibGFiZWxJZCIsImNsaWNrYWJsZUlkIiwiX3RoaXMkdG9nZ2xlIiwibm9uVG9nZ2xlQ2hpbGRyZW4iLCJzdGF0ZUxhYmVscyIsInNvbWUiLCJzd2l0Y2hQcm9wcyIsImhhbmRsZUNvbnRhaW5lckNsaWNrIiwiU3R5bGVkU3BhbiIsInJlbmRlclRvZ2dsZSIsImRlbGF5IiwidG9nZ2xlQ2hpbGRyZW4iLCJGcmFnbWVudCIsInN3aXRjaFN0YXRlIiwiJHN3aXRjaFN0YXRlIiwib24iLCJvZmYiLCJodG1sRm9yIiwiMzEiLCIxMTAiLCJDb2x1bW5MYXlvdXRfQ29sdW1uTGF5b3V0IiwiQ29sdW1uTGF5b3V0X0NvbHVtbiIsIkNvbHVtbkxheW91dF9Sb3ciLCJ0eXBlcyIsImd1dHRlciIsImlzRmlyc3RDaGlsZCIsImlzTGFzdENoaWxkIiwiQ29sdW1uIiwiX3JlZiRzcGFuIiwiY2FsY1N0eWxlIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwiUm93U3R5bGVzX1N0eWxlZCIsIlN0eWxlZERpdmlkZXIiLCJSb3dfZXh0ZW5kcyIsIlJvd19vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIlJvd19vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiUm93X3Byb3BUeXBlcyIsImFsaWduSXRlbXMiLCJkaXZpZGVyIiwiUm93IiwiX3JlZiRhbGlnbkl0ZW1zIiwiY2xvbmVDb2x1bW4iLCJjb2x1bW4iLCJpZHgiLCJjb3VudCIsImluc2VydERpdmlkZXJzIiwicm93IiwiZ3V0dGVyU3R5bGUiLCJtYXJnaW5Cb3R0b20iLCJjaGlsZHJlbkNsb25lZCIsIm1hcCIsIkNvbHVtbkxheW91dFN0eWxlc19TdHlsZWQiLCJDb2x1bW5MYXlvdXRTdHlsZXNfU3R5bGVkRGl2aWRlciIsIkNvbHVtbkxheW91dF9leHRlbmRzIiwiQ29sdW1uTGF5b3V0X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiQ29sdW1uTGF5b3V0X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJDb2x1bW5MYXlvdXRfcHJvcFR5cGVzIiwiQ29sdW1uTGF5b3V0IiwiX3JlZiRkaXZpZGVyIiwiZ3V0dGVyUHJvcCIsImNsb25lUm93IiwiNDYiLCJhc3NlcnREZWZpbmVkIiwibXNnIiwiRXJyb3IiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJpc0FycmF5TGlrZSIsImZyZWVHbG9iYWwiLCJmcmVlRXhwb3J0cyIsIm5vZGVUeXBlIiwiZnJlZU1vZHVsZSIsImZyZWVQcm9jZXNzIiwicHJvY2VzcyIsIm5vZGVVdGlsIiwicmVxdWlyZSIsImJpbmRpbmciLCJvYmplY3RQcm90byIsIkN0b3IiLCJiYXNlS2V5c0luIiwiYXJyYXlGaWx0ZXIiLCJzdHViQXJyYXkiLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0U3ltYm9scyIsInN5bWJvbCIsImFycmF5IiwidmFsdWVzIiwib2Zmc2V0IiwiZ2V0UHJvdG90eXBlIiwib3ZlckFyZyIsIkRhdGFWaWV3IiwiTWFwIiwiUHJvbWlzZSIsIlNldCIsIldlYWtNYXAiLCJiYXNlR2V0VGFnIiwidG9Tb3VyY2UiLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJnZXRUYWciLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiVWludDhBcnJheSIsImFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsInNldCIsImlzS2V5Iiwic3RyaW5nVG9QYXRoIiwiaXNPYmplY3RMaWtlIiwiY2xlYXJHZXRUaGVtZUNhY2hlIiwiX21lbW9pemUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2VudGVycHJpc2UiLCJfcHJpc21hIiwiX3V0aWxzIiwiZ2V0VGhlbWVNZW1vaXplZCIsIl9hZGRUaGVtZURlZmF1bHRzIiwiZnJlZXplIiwiX2dldFRoZW1lTWVtb2l6ZWQkY2FjIiwiX2dldFRoZW1lTWVtb2l6ZWQkY2FjMiIsImNhY2hlIiwiY2xlYXIiLCJfZGVmYXVsdCIsImdyYXlzIiwiZ3JheTI1IiwiYmxhY2siLCJhY2NlbnRDb2xvcnMiLCJhY2NlbnRDb2xvckw1MCIsImFjY2VudENvbG9yTDMwIiwiYWNjZW50Q29sb3JMMjAiLCJhY2NlbnRDb2xvckQxMCIsImFjY2VudENvbG9yRDMwIiwiYWNjZW50Q29sb3JENDAiLCJhY2NlbnRDb2xvckQ1MCIsInVzYWdlQ29sb3JzIiwibGlua0NvbG9ySG92ZXIiLCJzaGFkb3dzIiwib3ZlcmxheVNoYWRvdyIsImJhY2tncm91bmRzIiwiZHJhZ2dhYmxlQmFja2dyb3VuZCIsImJvcmRlcnMiLCJmb250cyIsInNlcmlmRm9udEZhbWlseSIsIm1vbm9Gb250RmFtaWx5IiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHRTZW1pQm9sZCIsImJyYW5kQ29sb3JMNTAiLCJicmFuZENvbG9yTDQwIiwiYnJhbmRDb2xvckwzMCIsImJyYW5kQ29sb3JMMjAiLCJicmFuZENvbG9yTDEwIiwiYnJhbmRDb2xvciIsImJyYW5kQ29sb3JEMTAiLCJicmFuZENvbG9yRDIwIiwiYnJhbmRDb2xvckQzMCIsImJyYW5kQ29sb3JENDAiLCJicmFuZENvbG9yRDUwIiwiZXJyb3JDb2xvckw1MCIsImVycm9yQ29sb3JMNDAiLCJlcnJvckNvbG9yTDIwIiwiZXJyb3JDb2xvckwxMCIsImVycm9yQ29sb3JEMTAiLCJlcnJvckNvbG9yRDIwIiwiZXJyb3JDb2xvckQzMCIsImVycm9yQ29sb3JENDAiLCJlcnJvckNvbG9yRDUwIiwiYWxlcnRDb2xvckw1MCIsImFsZXJ0Q29sb3JMNDAiLCJhbGVydENvbG9yTDMwIiwiYWxlcnRDb2xvckwyMCIsImFsZXJ0Q29sb3JMMTAiLCJhbGVydENvbG9yIiwiYWxlcnRDb2xvckQxMCIsImFsZXJ0Q29sb3JEMjAiLCJhbGVydENvbG9yRDMwIiwiYWxlcnRDb2xvckQ0MCIsImFsZXJ0Q29sb3JENTAiLCJ3YXJuaW5nQ29sb3JMNTAiLCJ3YXJuaW5nQ29sb3JMNDAiLCJ3YXJuaW5nQ29sb3JMMzAiLCJ3YXJuaW5nQ29sb3JMMjAiLCJ3YXJuaW5nQ29sb3JMMTAiLCJ3YXJuaW5nQ29sb3IiLCJ3YXJuaW5nQ29sb3JEMTAiLCJ3YXJuaW5nQ29sb3JEMjAiLCJ3YXJuaW5nQ29sb3JEMzAiLCJ3YXJuaW5nQ29sb3JENDAiLCJ3YXJuaW5nQ29sb3JENTAiLCJzdWNjZXNzQ29sb3JMNTAiLCJzdWNjZXNzQ29sb3JMNDAiLCJzdWNjZXNzQ29sb3JMMzAiLCJzdWNjZXNzQ29sb3JMMjAiLCJzdWNjZXNzQ29sb3JMMTAiLCJzdWNjZXNzQ29sb3IiLCJzdWNjZXNzQ29sb3JEMTAiLCJzdWNjZXNzQ29sb3JEMjAiLCJzdWNjZXNzQ29sb3JEMzAiLCJzdWNjZXNzQ29sb3JENDAiLCJzdWNjZXNzQ29sb3JENTAiLCJpbmZvQ29sb3JMNTAiLCJpbmZvQ29sb3JMNDAiLCJpbmZvQ29sb3JMMzAiLCJpbmZvQ29sb3JMMjAiLCJpbmZvQ29sb3JMMTAiLCJpbmZvQ29sb3IiLCJpbmZvQ29sb3JEMTAiLCJpbmZvQ29sb3JEMjAiLCJpbmZvQ29sb3JEMzAiLCJpbmZvQ29sb3JENDAiLCJpbmZvQ29sb3JENTAiLCJjYXQxQ29sb3IiLCJjYXQxQ29sb3JMIiwiY2F0MkNvbG9yIiwiY2F0MkNvbG9yTCIsImNhdDNDb2xvciIsImNhdDNDb2xvckwiLCJjYXQ0Q29sb3IiLCJjYXQ0Q29sb3JMIiwiY2F0NUNvbG9yIiwiY2F0NUNvbG9yTCIsImNhdDZDb2xvciIsImNhdDZDb2xvckwiLCJjYXQ3Q29sb3IiLCJjYXQ3Q29sb3JMIiwiY2F0OENvbG9yIiwiY2F0OENvbG9yTCIsImNhdDlDb2xvciIsImNhdDlDb2xvckwiLCJjYXQxMENvbG9yIiwiY2F0MTBDb2xvckwiLCJjYXQxMUNvbG9yIiwiY2F0MTFDb2xvckwiLCJjYXQxMkNvbG9yIiwiY2F0MTJDb2xvckwiLCJjYXQxM0NvbG9yIiwiY2F0MTNDb2xvckwiLCJjYXQxNENvbG9yIiwiY2F0MTRDb2xvckwiLCJjYXQxNUNvbG9yIiwiY2F0MTVDb2xvckwiLCJjYXQxNkNvbG9yIiwiY2F0MTZDb2xvckwiLCJjYXQxN0NvbG9yIiwiY2F0MTdDb2xvckwiLCJjYXQxOENvbG9yIiwiY2F0MThDb2xvckwiLCJjYXQxOUNvbG9yIiwiY2F0MTlDb2xvckwiLCJjYXQyMENvbG9yIiwiY2F0MjBDb2xvckwiLCJjYXQyMUNvbG9yIiwiY2F0MjFDb2xvckwiLCJjYXQyMkNvbG9yIiwiY2F0MjJDb2xvckwiLCJjYXQyM0NvbG9yIiwiY2F0MjNDb2xvckwiLCJjYXQyNENvbG9yIiwiY2F0MjRDb2xvckwiLCJjYXQyNUNvbG9yIiwiY2F0MjVDb2xvckwiLCJjYXQyNkNvbG9yIiwiY2F0MjZDb2xvckwiLCJjYXQyN0NvbG9yIiwiY2F0MjdDb2xvckwiLCJjYXQyOENvbG9yIiwiY2F0MjhDb2xvckwiLCJjYXQyOUNvbG9yIiwiY2F0MjlDb2xvckwiLCJjYXQzMENvbG9yIiwiY2F0MzBDb2xvckwiLCJkaXZlcmdpbmcxQ29sb3JBIiwiZGl2ZXJnaW5nMUNvbG9yQiIsImRpdmVyZ2luZzJDb2xvckEiLCJkaXZlcmdpbmcyQ29sb3JCIiwiZGl2ZXJnaW5nM0NvbG9yQSIsImRpdmVyZ2luZzNDb2xvckIiLCJkaXZlcmdpbmc0Q29sb3JBIiwiZGl2ZXJnaW5nNENvbG9yQiIsImRpdmVyZ2luZzVDb2xvckEiLCJkaXZlcmdpbmc1Q29sb3JCIiwic3ludGF4Qmx1ZSIsInN5bnRheEJsdWVMaWdodCIsInN5bnRheEJyb3duIiwic3ludGF4R3JheSIsInN5bnRheEdyZWVuIiwic3ludGF4R3JlZW5MaWdodCIsInN5bnRheE9yYW5nZSIsInN5bnRheFBpbmsiLCJzeW50YXhQdXJwbGUiLCJzeW50YXhQdXJwbGVMaWdodCIsInN5bnRheFJlZCIsInN5bnRheFJlZExpZ2h0Iiwic3ludGF4VGVhbCIsInppbmRleEZpeGVkTmF2YmFyIiwiemluZGV4TW9kYWxCYWNrZHJvcCIsInppbmRleE1vZGFsIiwiemluZGV4UG9wb3ZlciIsInppbmRleFRvYXN0TWVzc2FnZXMiLCJpc0ludGVycG9sYXRpb25SZXN1bHQiLCJnZXRUaGVtZVZhcmlhbnQiLCJ2YWx1ZVRvS2V5IiwidHJlZSIsInRoZW1lIiwidHJlZUtleSIsInNoaWZ0IiwidGhlbWVLZXkiLCJ0cmVlVmFsdWUiLCJ0aGVtZUNsZWFuZWQiLCJzcGx1bmtUaGVtZVYxIiwic3RyaW5naWZpYWJsZSIsImlzUHJvZHVjdGlvbiIsImludmFyaWFudCIsImNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJzcGxpY2UiLCJnZXRBbGxLZXlzIiwiY29weSIsIkNvbnRleHQiLCJjb21tYW5kcyIsImRlZmF1bHRDb21tYW5kcyIsInVwZGF0ZSIsImV4dGVuZCIsImlzRXF1YWxzIiwieCIsInkiLCJuZXdDb250ZXh0IiwiZGlyZWN0aXZlIiwiZm4iLCIkc3BlYyIsInNwZWMiLCIkYXBwbHkiLCJqb2luIiwibmV4dE9iamVjdCIsIm9iamVjdFdhc05leHRPYmplY3QiLCJuZXh0VmFsdWVGb3JLZXkiLCJuZXh0T2JqZWN0VmFsdWUiLCIkcHVzaCIsImludmFyaWFudFB1c2hBbmRVbnNoaWZ0IiwiJHVuc2hpZnQiLCIkc3BsaWNlIiwib3JpZ2luYWxPYmplY3QiLCJpbnZhcmlhbnRTcGxpY2UiLCJpbnZhcmlhbnRTcGxpY2VzIiwiYXJncyIsIiRzZXQiLCJfbmV4dE9iamVjdCIsImludmFyaWFudFNldCIsIiR0b2dnbGUiLCJ0YXJnZXRzIiwiaW52YXJpYW50U3BlY0FycmF5IiwibmV4dE9iamVjdENvcHkiLCIkdW5zZXQiLCJfc3BlYyIsIiRhZGQiLCJpbnZhcmlhbnRNYXBPclNldCIsIl9hIiwiaGFzIiwiYWRkIiwiJHJlbW92ZSIsImRlbGV0ZSIsIiRtZXJnZSIsInNwZWNWYWx1ZSIsImRlZmF1bHRDb250ZXh0IiwiY29tbWFuZCIsInR5cGVPZlRhcmdldCIsImRlZmF1bHQiLCJDYXJldERvd24iLCJfc3BsdW5rX3JlYWN0X2ljb25zX0NhcmV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJfc3BsdW5rX3JlYWN0X2ljb25zX0NhcmV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCIsIk1vcmVWZXJ0aWNhbCIsIl9zcGx1bmtfcmVhY3RfaWNvbnNfTW9yZVZlcnRpY2FsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJfc3BsdW5rX3JlYWN0X2ljb25zX01vcmVWZXJ0aWNhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCJDaGV2cm9uRG93biIsIl9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkRvd25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsIl9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkRvd25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0Iiwic3JjX1RhYmxlX1RhYmxlIiwiVGFibGVfQm9keSIsIlRhYmxlX0NhcHRpb24iLCJUYWJsZV9DZWxsIiwiVGFibGVfSGVhZCIsIlRhYmxlX0hlYWRDZWxsIiwiVGFibGVfSGVhZERyb3Bkb3duQ2VsbCIsIlRhYmxlX1JvdyIsImV4dGVybmFsX3JlYWN0X3Jlc2l6ZV9kZXRlY3Rvcl8iLCJleHRlcm5hbF9yZWFjdF9yZXNpemVfZGV0ZWN0b3JfZGVmYXVsdCIsIlNjcm9sbENvbnRhaW5lckNvbnRleHRfIiwidGJvZHkiLCJhY3Rpb25zIiwibW92YWJsZUNvbHVtbnMiLCJyb3dFeHBhbnNpb24iLCJvblJlcXVlc3RNb3ZlUm93Iiwic3RyaXBlUm93cyIsIkJvZHlfQm9keSIsIkJvZHkiLCJkcmFnSW5kZXgiLCJkcmFnRGF0YUlkIiwiX3RoaXMkZWwkcGFyZW50RWxlbWVuIiwiX3RoaXMkZWwkcGFyZW50RWxlbWVuMiIsIl90aGlzJGVsMiIsInJlY3QiLCJwYXJlbnRFbGVtZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwicm93SGVpZ2h0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZURyYWdFbnRlciIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJvcCIsImhhbmRsZURyYWdFbmQiLCJkYXRhVHJhbnNmZXIiLCJkcm9wRWZmZWN0IiwiY2xpZW50WSIsInVwZGF0ZVNjcm9sbFBvc2l0aW9uIiwidXBkYXRlRHJhZ1Bvc2l0aW9uIiwiZHJhZ1Bvc2l0aW9uIiwiX3RoaXMkc3RhdGUiLCJndWlkZWxpbmVJbmRleCIsImNhbGN1bGF0ZUd1aWRlSW5kZXgiLCJfdGhpcyRwcm9wcyRvblJlcXVlc3QiLCJ0b0luZGV4IiwiZnJvbUluZGV4IiwiZGF0YUlkIiwiY2xlYW51cERyYWciLCJfdGhpcyRwcm9wcyRvblJlcXVlc3QyIiwidXBkYXRlRHJhZ1Bvc2l0aW9uSW1wbCIsInRyYWlsaW5nIiwiZXhwYW5kZWQiLCJfdGhpcyRzdGF0ZTIiLCJyb3dzIiwib3ZlckluZGV4IiwiYm90dG9tIiwiX3RoaXMkZWwzIiwiX3RoaXMkZWwzJHBhcmVudEVsZW1lIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNhbmNlbCIsIl90aGlzJHN0YXRlJGRyYWdEYXRhSSIsImd1aWRlbGluZVJvd0luZGV4IiwiYWN0aXZlRWxlbWVudElkIiwiZmlsdGVyZWRDaGlsZHJlbiIsImNoaWxkIiwic2hvd1Jvd0d1aWRlbGluZSIsInN0cmlwZSIsImV4cGFuZGFibGUiLCJkcmFnZ2FibGUiLCJvbkV4cGFuc2lvbiIsImhhbmRsZVJvd0V4cGFuc2lvbiIsIm9uRHJhZ1N0YXJ0IiwiaGFuZGxlRHJhZ1N0YXJ0IiwiZXhwYW5zaW9uUm93IiwiVGFibGVTdHlsZXNfU3R5bGVkIiwiU3R5bGVkVGFibGVDb250YWluZXIiLCJTdHlsZWRUYWJsZSIsInRhYmxlIiwiU3R5bGVkRG9ja2VkU2Nyb2xsYmFyIiwiU3R5bGVkRG9ja2VkU2Nyb2xsYmFyQ29udGVudCIsIlN0eWxlZFRhYmxlQ2FwdGlvbiIsImNhcHRpb24iLCJmb250U2l6ZUxhcmdlIiwic2lkZSIsIkNhcHRpb25fZXh0ZW5kcyIsIkNhcHRpb25fb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJDYXB0aW9uX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJDYXB0aW9uX3Byb3BUeXBlcyIsIkNhcHRpb24iLCJfcmVmJHNpZGUiLCJzcGx1bmtVaVR5cGUiLCJDZWxsU3R5bGVzX1N0eWxlZCIsInRkIiwiY2VudGVyIiwicmlnaHQiLCJleHBhbmQiLCJyb3dMaW5rIiwibGluayIsIiRjbGlja2FibGUiLCIkZXhwYW5kZWQiLCJDZWxsX3R5cGVvZiIsIkNlbGxfZXh0ZW5kcyIsIkNlbGxfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJDZWxsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJDZWxsX2NsYXNzQ2FsbENoZWNrIiwiQ2VsbF9kZWZpbmVQcm9wZXJ0aWVzIiwiQ2VsbF9zZXRQcm90b3R5cGVPZiIsIkNlbGxfY3JlYXRlU3VwZXIiLCJDZWxsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIkNlbGxfZ2V0UHJvdG90eXBlT2YiLCJDZWxsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIkNlbGxfZGVmaW5lUHJvcGVydHkiLCJDZWxsX3Byb3BUeXBlcyIsImFsaWduIiwiZGF0YSIsInZhcmlhbnQiLCJDZWxsX0NlbGwiLCJDZWxsX2luaGVyaXRzIiwiQ2VsbCIsIl9sZW4iLCJfa2V5IiwiY2xpY2thYmxlIiwiZGVmYXVsdEFwcGVhcmFuY2UiLCIkYWxpZ24iLCIkYXBwZWFyYW5jZSIsIiR2YXJpYW50IiwiaGFuZGxlQ2xpY2siLCJTb3J0XyIsIlNvcnRfZGVmYXVsdCIsIlNvcnRlZERvd25fIiwiU29ydGVkRG93bl9kZWZhdWx0IiwiU29ydGVkRG93bl9leHRlbmRzIiwiU29ydGVkRG93biIsIlNvcnRlZFVwXyIsIlNvcnRlZFVwX2RlZmF1bHQiLCJTb3J0ZWRVcF9leHRlbmRzIiwiU29ydGVkVXBfUHJpc21hMjQiLCJTb3J0ZWRVcF9QcmlzbWExNiIsIlNvcnRlZFVwIiwiU3R5bGVkRHJhZ0NvbnRhaW5lciIsIlN0eWxlZE1lbnVJY29uIiwiSGVhZElubmVyU3R5bGVzX1N0eWxlZCIsImNsZWFyZml4IiwiJGhhc0FjdGlvbnNIZWFkIiwiJGRyYWdnaW5nIiwiJGRyYWdnYWJsZSIsImludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kIiwiZHJhZ1NoYWRvdyIsIlN0eWxlZFNvcnRJY29uIiwiJHNvcnRlZCIsIlN0eWxlZFJlc2l6ZSIsIkhlYWRDZWxsU3R5bGVzX1N0eWxlZCIsInRoIiwiaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlEcmFnIiwiaW5mbyIsInRvZ2dsZUFsbCIsIlN0eWxlZEd1aWRlTGluZSIsImJlZm9yZSIsImFmdGVyIiwiUm93RHJhZ0NlbGxTdHlsZXNfU3R5bGVkIiwiUm93RHJhZ0NlbGxTdHlsZXNfU3R5bGVkR3VpZGVMaW5lIiwiU3R5bGVkRHJhZyIsIkRyYWdIYW5kbGVTdHlsZXNfU3R5bGVkRHJhZyIsIkRyYWdIYW5kbGVfcHJvcFR5cGVzIiwic2NyZWVuUmVhZGVyQ29udGVudCIsIkRyYWdIYW5kbGUiLCJUYWJsZV9EcmFnSGFuZGxlIiwiSGVhZElubmVyX2V4dGVuZHMiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwibmV4dCIsImRvbmUiLCJlcnIiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwiSGVhZElubmVyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiSGVhZElubmVyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJIZWFkSW5uZXJfcHJvcFR5cGVzIiwiY29sdW1uSWQiLCJoYXNBY3Rpb25zSGVhZCIsImlzTWVudSIsIm9uQXV0b3NpemVDb2x1bW4iLCJvbkRyYWdFbmQiLCJvblJlcXVlc3RSZXNpemUiLCJyZXNpemFibGUiLCJzb3J0RGlyIiwiSGVhZElubmVyIiwiX3JlZiRhbGlnbiIsIl9yZWYkaGFzQWN0aW9uc0hlYWQiLCJfcmVmJGlzTWVudSIsIl9yZWYkcmVzaXphYmxlIiwiX3JlZiRzb3J0RGlyIiwiX3JlZiR0cnVuY2F0ZSIsIl91c2VTdGF0ZTIiLCJjbG9uZUVsIiwic2V0Q2xvbmVFbCIsIl91c2VTdGF0ZTQiLCJpc1Jlc2l6aW5nIiwic2V0UmVzaXppbmciLCJfdXNlU3RhdGU2IiwiaXNEcmFnZ2luZyIsInNldElzRHJhZ2dpbmciLCJfdXNlU3RhdGU4Iiwic3RhcnRDbGllbnRYIiwic2V0U3RhcnRDbGllbnRYIiwiX3VzZVN0YXRlMTAiLCJzdGFydFdpZHRoIiwic2V0U3RhcnRXaWR0aCIsInJlbW92ZSIsIl9lbCR0ZXh0Q29udGVudCIsInNldERyYWdJbWFnZSIsImNsb25lIiwiY2xvbmVOb2RlIiwic2V0QXR0cmlidXRlIiwiZG9jdW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGllbnRYIiwiZWZmZWN0QWxsb3dlZCIsInNldERhdGEiLCJ0ZXh0Q29udGVudCIsIm9uTW91c2VVcCIsIm9uTW91c2VNb3ZlIiwiY2hhbmdlIiwibmV3V2lkdGgiLCJvbkRvdWJsZUNsaWNrIiwiJGZpbGwiLCJUYWJsZV9IZWFkSW5uZXIiLCJIZWFkQ2VsbF90eXBlb2YiLCJIZWFkQ2VsbF9leHRlbmRzIiwiSGVhZENlbGxfdG9Db25zdW1hYmxlQXJyYXkiLCJIZWFkQ2VsbF9hcnJheUxpa2VUb0FycmF5IiwiSGVhZENlbGxfYXJyYXlXaXRob3V0SG9sZXMiLCJIZWFkQ2VsbF9pdGVyYWJsZVRvQXJyYXkiLCJIZWFkQ2VsbF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIkhlYWRDZWxsX25vbkl0ZXJhYmxlU3ByZWFkIiwiSGVhZENlbGxfZGVmaW5lUHJvcGVydGllcyIsIkhlYWRDZWxsX3NldFByb3RvdHlwZU9mIiwiSGVhZENlbGxfY3JlYXRlU3VwZXIiLCJIZWFkQ2VsbF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJIZWFkQ2VsbF9nZXRQcm90b3R5cGVPZiIsIkhlYWRDZWxsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJIZWFkQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJIZWFkQ2VsbF9kZWZpbmVQcm9wZXJ0eSIsIkhlYWRDZWxsX3Byb3BUeXBlcyIsIm9uU29ydCIsIm9uUmVxdWVzdE1vdmVDb2x1bW4iLCJzaG93R3VpZGVsaW5lIiwic29ydEtleSIsInZpc2libGUiLCJIZWFkQ2VsbF9IZWFkQ2VsbCIsIkhlYWRDZWxsX2luaGVyaXRzIiwiSGVhZENlbGwiLCJIZWFkQ2VsbF9jbGFzc0NhbGxDaGVjayIsImdldEF0dHJpYnV0ZSIsIl9pbmRleCIsIl9jb2x1bW5JZCIsIl90aGlzJHByb3BzJG9uRHJhZ1N0YSIsImFzYyIsImRlc2MiLCJub25lIiwidHJ1bmNhdGVQcm9wIiwic29ydGFibGUiLCJoYXNPbkNsaWNrIiwibWVyZ2VkU3R5bGUiLCJzb3J0RGlyQXJpYU1hcHBpbmciLCIkcG9zaXRpb24iLCJJbmZvXyIsIkluZm9fZGVmYXVsdCIsIkhlYWRFeHBhbmRSb3dzSWNvbiIsIkJ1dHRvbl8iLCJCdXR0b25fZGVmYXVsdCIsIkRyb3Bkb3duXyIsIkRyb3Bkb3duX2RlZmF1bHQiLCJUb29sdGlwXyIsIlRvb2x0aXBfZGVmYXVsdCIsIlJvd0RyYWdDZWxsX3R5cGVvZiIsIlJvd0RyYWdDZWxsX2RlZmluZVByb3BlcnRpZXMiLCJSb3dEcmFnQ2VsbF9zZXRQcm90b3R5cGVPZiIsIlJvd0RyYWdDZWxsX2NyZWF0ZVN1cGVyIiwiUm93RHJhZ0NlbGxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUm93RHJhZ0NlbGxfZ2V0UHJvdG90eXBlT2YiLCJSb3dEcmFnQ2VsbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiUm93RHJhZ0NlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUm93RHJhZ0NlbGxfZGVmaW5lUHJvcGVydHkiLCJSb3dEcmFnQ2VsbF9wcm9wVHlwZXMiLCJyb3dTcGFuIiwiUm93RHJhZ0NlbGxfUm93RHJhZ0NlbGwiLCJSb3dEcmFnQ2VsbF9pbmhlcml0cyIsIlJvd0RyYWdDZWxsIiwiUm93RHJhZ0NlbGxfY2xhc3NDYWxsQ2hlY2siLCJfdGhpcyRlbCR0ZXh0Q29udGVudCIsInN0b3BQcm9wYWdhdGlvbiIsIl90aGlzJHByb3BzJG9uRHJhZ0VuZCIsImNvZGUiLCJfdGhpcyRjbG9uZUVsJHBhcmVudE4iLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJUYWJsZV9Sb3dEcmFnQ2VsbCIsIlN0eWxlZFN0cmlwZU5vbmUiLCJ0ciIsIiRleHBhbmRhYmxlIiwiU3R5bGVkU3RyaXBlT2RkIiwiU3R5bGVkU3RyaXBlRXZlbiIsIlN0eWxlZENlbGxTZWxlY3Rpb25EaXNhYmxlZCIsIlN0eWxlZENlbGxFeHBhbnNpb25EaXNhYmxlZCIsIlRvZ2dsZV9leHRlbmRzIiwiVG9nZ2xlX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiVG9nZ2xlX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJUb2dnbGVfcHJvcFR5cGVzIiwiYWxsUm93cyIsIlRvZ2dsZSIsIl9yZWYkYWxsUm93cyIsIl9yZWYkc2VsZWN0ZWQiLCJhcmlhTGFiZWwiLCIkYWxsUm93cyIsIlRhYmxlX1RvZ2dsZSIsIlJvd190eXBlb2YiLCJSb3dfY2xhc3NDYWxsQ2hlY2siLCJSb3dfZGVmaW5lUHJvcGVydGllcyIsIlJvd19zZXRQcm90b3R5cGVPZiIsIlJvd19jcmVhdGVTdXBlciIsIlJvd19pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSb3dfZ2V0UHJvdG90eXBlT2YiLCJSb3dfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlJvd19hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSb3dfZGVmaW5lUHJvcGVydHkiLCJTdHlsZWRTdHJpcGVDb21wb25lbnRzIiwib2RkIiwiZXZlbiIsImFjdGlvblByaW1hcnkiLCJlbGVtZW50IiwiYWN0aW9uc1NlY29uZGFyeSIsIm9uUmVxdWVzdFRvZ2dsZSIsIkFjdGlvbnNTZWNvbmRhcnlUb2dnbGUiLCJmb3J3YXJkUmVmIiwiY29udGVudCIsImNvbnRlbnRSZWxhdGlvbnNoaXAiLCJSb3dfUm93IiwiUm93X2luaGVyaXRzIiwidGFnTmFtZSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJfYWN0aW9uUHJpbWFyeSRwcm9wcyQiLCJfYWN0aW9uUHJpbWFyeSRwcm9wcyIsImNsb25lZEFjdGlvbnMiLCJhY3Rpb24iLCJfYWN0aW9uJHByb3BzJG9uQ2xpY2siLCJfYWN0aW9uJHByb3BzIiwiU3R5bGVkU3RyaXBlIiwiU3R5bGVkQ2VsbFRvZ2dsZSIsImRhdGFNb3ZhYmxlQ29sdW1uIiwiYWN0aW9uc1NlY29uZGFyeVRvZ2dsZSIsIiRyb3dTZWxlY3RlZCIsImhhbmRsZVRvZ2dsZSIsInJlbmRlckFjdGlvblByaW1hcnkiLCJyZW5kZXJBY3Rpb25zU2Vjb25kYXJ5IiwiSGVhZFN0eWxlc19TdHlsZWQiLCJ0aGVhZCIsIlN0eWxlZFRvZ2dsZUFsbCIsIlN0eWxlZEluZm8iLCJTdHlsZWREcmFnUm93IiwiSGVhZF90eXBlb2YiLCJIZWFkX2V4dGVuZHMiLCJIZWFkX2RlZmluZVByb3BlcnRpZXMiLCJIZWFkX3NldFByb3RvdHlwZU9mIiwiSGVhZF9jcmVhdGVTdXBlciIsIkhlYWRfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiSGVhZF9nZXRQcm90b3R5cGVPZiIsIkhlYWRfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIkhlYWRfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiSGVhZF9kZWZpbmVQcm9wZXJ0eSIsIkhlYWRfcHJvcFR5cGVzIiwiYWN0aW9uc0NvbHVtbldpZHRoIiwiaGFzRHJhZ0NvbHVtbiIsImhhc0luZm9Db2x1bW4iLCJvblJlcXVlc3RSZXNpemVDb2x1bW4iLCJvblJlcXVlc3RUb2dnbGVBbGxSb3dzIiwicm93U2VsZWN0aW9uIiwiSGVhZF9IZWFkIiwiSGVhZF9pbmhlcml0cyIsIkhlYWQiLCJIZWFkX2NsYXNzQ2FsbENoZWNrIiwiZHJhZ0NvbHVtbklkIiwiX3RoaXMkZWwkZmlyc3RFbGVtZW50IiwiX3RoaXMkZWwkZmlyc3RFbGVtZW50MiIsImZpcnN0RWxlbWVudENoaWxkIiwiY29tcHV0ZWRTdHlsZSIsImNsaWVudFdpZHRoIiwicGFyc2VGbG9hdCIsIl90aGlzJGVsJGZpcnN0RWxlbWVudDMiLCJfdGhpcyRlbDMkZmlyc3RFbGVtZW4iLCJjZWxscyIsImNlbGwiLCJjbG9uZWRDaGlsZHJlbiIsInRvZ2dsZVN0YXRlIiwiYWxsIiwiYXJpYUNoZWNrZWQiLCJkZWZhdWx0QWN0aW9uc0NvbHVtbldpZHRoIiwibWluV2lkdGgiLCJQb3BvdmVyXyIsIlBvcG92ZXJfZGVmYXVsdCIsIkhlYWREcm9wZG93bkNlbGxfdHlwZW9mIiwiSGVhZERyb3Bkb3duQ2VsbF9leHRlbmRzIiwiSGVhZERyb3Bkb3duQ2VsbF90b0NvbnN1bWFibGVBcnJheSIsIkhlYWREcm9wZG93bkNlbGxfYXJyYXlMaWtlVG9BcnJheSIsIkhlYWREcm9wZG93bkNlbGxfYXJyYXlXaXRob3V0SG9sZXMiLCJIZWFkRHJvcGRvd25DZWxsX2l0ZXJhYmxlVG9BcnJheSIsIkhlYWREcm9wZG93bkNlbGxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJIZWFkRHJvcGRvd25DZWxsX25vbkl0ZXJhYmxlU3ByZWFkIiwiSGVhZERyb3Bkb3duQ2VsbF9kZWZpbmVQcm9wZXJ0aWVzIiwiSGVhZERyb3Bkb3duQ2VsbF9zZXRQcm90b3R5cGVPZiIsIkhlYWREcm9wZG93bkNlbGxfY3JlYXRlU3VwZXIiLCJIZWFkRHJvcGRvd25DZWxsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIkhlYWREcm9wZG93bkNlbGxfZ2V0UHJvdG90eXBlT2YiLCJIZWFkRHJvcGRvd25DZWxsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJIZWFkRHJvcGRvd25DZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIkhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkiLCJwb3NzaWJsZUNsb3NlUmVhc29ucyIsIkhlYWREcm9wZG93bkNlbGxfcHJvcFR5cGVzIiwiY2FuQ292ZXJIZWFkIiwiY2xvc2VSZWFzb25zIiwiZGVmYXVsdFBsYWNlbWVudCIsImZvY3VzVG9nZ2xlUmVhc29ucyIsIm9uUmVxdWVzdENsb3NlIiwib25SZXF1ZXN0T3BlbiIsIm9wZW4iLCJyZXBvc2l0aW9uTW9kZSIsInRha2VGb2N1cyIsIkhlYWREcm9wZG93bkNlbGxfZGVmYXVsdFByb3BzIiwiSGVhZERyb3Bkb3duQ2VsbF9IZWFkRHJvcGRvd25DZWxsIiwiSGVhZERyb3Bkb3duQ2VsbF9pbmhlcml0cyIsIkhlYWREcm9wZG93bkNlbGwiLCJIZWFkRHJvcGRvd25DZWxsX2NsYXNzQ2FsbENoZWNrIiwicmVhc29uIiwiZXZlbnQiLCJpc09wZW4iLCJfdGhpcyRoYW5kbGVSZXF1ZXN0Q2wiLCJoYW5kbGVSZXF1ZXN0Q2xvc2UiLCJwb3BvdmVySWQiLCJjZWxsSWQiLCJfdGhpcyRzdGF0ZSRlbCIsIl9lbCRnZXRCb3VuZGluZ0NsaWVudCIsIl90aGlzMyIsImF1dG9DbG9zZVdoZW5PZmZTY3JlZW4iLCJhbmNob3IiLCJjYW5Db3ZlckFuY2hvciIsInBvaW50VG8iLCJoYW5kbGVDb250ZW50Q2xpY2siLCJIZWFkVGFibGVTdHlsZXNfU3R5bGVkIiwiU3R5bGVkRG9ja2VkQ29udGFpbmVyIiwiU3R5bGVkRml4ZWRDb250YWluZXIiLCJIZWFkVGFibGVfdHlwZW9mIiwiSGVhZFRhYmxlX2V4dGVuZHMiLCJIZWFkVGFibGVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJIZWFkVGFibGVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIkhlYWRUYWJsZV9jbGFzc0NhbGxDaGVjayIsIkhlYWRUYWJsZV9kZWZpbmVQcm9wZXJ0aWVzIiwiSGVhZFRhYmxlX3NldFByb3RvdHlwZU9mIiwiSGVhZFRhYmxlX2NyZWF0ZVN1cGVyIiwiSGVhZFRhYmxlX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIkhlYWRUYWJsZV9nZXRQcm90b3R5cGVPZiIsIkhlYWRUYWJsZV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiSGVhZFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIkhlYWRUYWJsZV9kZWZpbmVQcm9wZXJ0eSIsIkhlYWRUYWJsZV9wcm9wVHlwZXMiLCJjZWxsV2lkdGhzIiwiaGFzUm93RXhwYW5zaW9uIiwiaGFzUm93U2VsZWN0aW9uIiwiaGVhZFR5cGUiLCJob3Jpem9udGFsT2Zmc2V0IiwiaXNGaXhlZENvbHVtbiIsInRhYmxlU3R5bGUiLCJ0YWJsZVdpZHRoIiwidEhlYWQiLCJIZWFkVGFibGVfSGVhZFRhYmxlIiwiSGVhZFRhYmxlX2luaGVyaXRzIiwiSGVhZFRhYmxlIiwiaGVhZCIsIlN0eWxlZENvbnRhaW5lciIsImluZGV4T2Zmc2V0IiwiY2xvbmVkVEhlYWQiLCJoYW5kbGVIZWFkTW91bnQiLCJUYWJsZV9IZWFkVGFibGUiLCJUYWJsZV90eXBlb2YiLCJUYWJsZV9leHRlbmRzIiwiVGFibGVfdG9Db25zdW1hYmxlQXJyYXkiLCJUYWJsZV9hcnJheUxpa2VUb0FycmF5IiwiVGFibGVfYXJyYXlXaXRob3V0SG9sZXMiLCJUYWJsZV9pdGVyYWJsZVRvQXJyYXkiLCJUYWJsZV91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIlRhYmxlX25vbkl0ZXJhYmxlU3ByZWFkIiwiVGFibGVfZGVmaW5lUHJvcGVydGllcyIsIlRhYmxlX2NyZWF0ZUNsYXNzIiwiVGFibGVfc2V0UHJvdG90eXBlT2YiLCJUYWJsZV9jcmVhdGVTdXBlciIsIlRhYmxlX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlRhYmxlX2dldFByb3RvdHlwZU9mIiwiVGFibGVfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlRhYmxlX2RlZmluZVByb3BlcnR5IiwiVGFibGVfcHJvcFR5cGVzIiwiZG9ja09mZnNldCIsImRvY2tTY3JvbGxCYXIiLCJpbm5lclN0eWxlIiwib25TY3JvbGwiLCJvdXRlclN0eWxlIiwiVGFibGVfVGFibGUiLCJUYWJsZV9pbmhlcml0cyIsIlRhYmxlIiwiVGFibGVfY2xhc3NDYWxsQ2hlY2siLCJpc0lubGluZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZSIsInRhYmxlQ29udGFpbmVyIiwiZ2V0Q2VsbFdpZHRocyIsImhlYWRIZWlnaHQiLCJnZXRDbGllbnRIZWlnaHQiLCJ0YWJsZVRvcFdydFdpbmRvdyIsImdldE9mZnNldCIsInBhZ2VZT2Zmc2V0Iiwib2Zmc2V0SGVpZ2h0IiwidXBkYXRlRG9ja2VkSGVhZFN0YXRlIiwiX3RoaXMkcHJvcHMkb25TY3JvbGwiLCJpc0ZpeGVkIiwiaGVhZGVySXNEb2NrZWQiLCJzY3JvbGxMZWZ0IiwiZG9ja2VkU2Nyb2xsQmFyIiwic2Nyb2xsU291cmNlIiwiY29tcCIsImhlYWRUYWJsZSIsImhlYWRGb2N1c1N0YXRlIiwiYXBwbHlIZWFkRm9jdXNTdGF0ZSIsImdldEhlYWQiLCJfdGhpcyRoZWFkVGFibGUiLCJmb2N1c1N0YXRlIiwiZ2V0SGVhZEZvY3VzU3RhdGUiLCJoZWFkVGFibGVFbCIsInNjcm9sbEFkanVzdCIsIl90aGlzJHRhYmxlQ29udGFpbmVyIiwiX3dyYXBwZXIkcGFyZW50Tm9kZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ3cmFwcGVyIiwiX2hlYWQkZ2V0RWwiLCJfaGVhZCRnZXRFbDIiLCJoZWFkQ2VsbHMiLCJnZXRFbCIsImFjdGl2ZUhlYWRDZWxsSW5kZXgiLCJhY3RpdmVFbGVtZW50IiwicmVzaXplQnV0dG9ucyIsImFjdGl2ZVJlc2l6ZUJ1dHRvbkluZGV4IiwicGFnZVhPZmZzZXQiLCJfdGFyZ2V0RWwiLCJfdGFyZ2V0RWwkZm9jdXMiLCJ0YXJnZXRFbCIsIl9oZWFkJGdldEVsMyIsIl9oZWFkJGdldEVsNCIsImhhbmRsZVNjcm9sbCIsInZhbGlkQWN0aW9ucyIsImhhbmRsZUF1dG9zaXplQ29sdW1uIiwidGFibGVUb3AiLCJpbm5lckhlaWdodCIsInNob3dEb2NrZWRIZWFkZXIiLCJzaG93Rml4ZWQiLCJoYW5kbGVIZWFkVGFibGVNb3VudCIsIm9uS2V5VXAiLCJoYW5kbGVIZWFkVGFibGVLZXlVcCIsImhhbmRsZUhlYWRUYWJsZUVsZW1lbnRNb3VudCIsInNob3dEb2NrZWRTY3JvbGxCYXIiLCJzaGlmdFBvc2l0aW9uIiwiX3RoaXMkaGVhZCRnZXRFbCRvZmZzIiwiX3RoaXMkaGVhZCRnZXRFbCIsImF2YWlsYWJsZVNwYWNlIiwiaGFuZGxlRG9ja2VkU2Nyb2xsQmFyU2Nyb2xsIiwidEJvZHkiLCJ0Q2FwdGlvbiIsImNyZWF0ZUhlYWQiLCJjcmVhdGVCb2R5IiwicmVuZGVySGVhZFRhYmxlIiwiZGVmYXVsdFNjcm9sbENvbnRhaW5lciIsImNvbnRleHQiLCJzY3JvbGxDb250YWluZXIiLCJoYW5kbGVXaWR0aCIsImhhbmRsZUNvbnRhaW5lclNjcm9sbCIsInJlbmRlckRvY2tlZFNjcm9sbGJhciIsIjEyNCIsInNyY19Ub29sdGlwX1Rvb2x0aXAiLCJJbmZvSWNvbiIsIlN0eWxlZElubGluZSIsIlN0eWxlZFRvZ2dsZSIsIlN0eWxlZFRvZ2dsZUlubGluZSIsIlN0eWxlZENvbnRlbnQiLCJTdHlsZWRCdXR0b24iLCJUb29sdGlwX2V4dGVuZHMiLCJjbG9zZURlbGF5Iiwib3BlbkRlbGF5IiwiVG9vbHRpcF9Ub29sdGlwIiwiVG9vbHRpcCIsImhhbmRsZU1vdXNlRW50ZXIiLCJoYW5kbGVNb3VzZUxlYXZlIiwiaGFuZGxlTW91c2VFbnRlclBvcG92ZXIiLCJoYW5kbGVNb3VzZUxlYXZlUG9wb3ZlciIsInBvcG92ZXJFbCIsImhhbmRsZVJlcXVlc3RPcGVuIiwibGFzdENsb3NlUmVhc29uIiwidGltZW91dCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJmaW5hbERlbGF5IiwiYXJpYUlkIiwiY2xvbmVQcm9wcyIsImhhc0NvbnRlbnQiLCJvcGVuUmVuZGVyIiwiU3R5bGVkQ29tcCIsIlN0eWxlZFRvZ2dsZUNvbXAiLCJwbGFjZW1lbnQiLCJoYW5kbGVGb2N1cyIsImhhbmRsZUJsdXIiLCJoYW5kbGVQb3BvdmVyT25SZXF1ZXN0Q2xvc2UiLCJoYW5kbGVQb3BvdmVyTW91bnQiLCIkaXNMYWJlbCIsIlRvb2x0aXBXaXRoVGhlbWUiLCIxOCIsInN0cmluZ1RvS2V5d29yZHMiLCJ0ZXN0UGhyYXNlIiwia2V5d29yZExvY2F0aW9uc0FsbCIsImtleXdvcmRMb2NhdGlvbnMiLCJwaHJhc2UiLCJrZXl3b3JkcyIsIm1hdGNoZXMiLCJfbWF0Y2hlcyQiLCJsb2NhdGlvbnMiLCJwdXNoTG9jYXRpb24iLCJmaWx0ZXJCeUtleXdvcmRzIiwiaXRlbXMiLCJmaWx0ZXJQaHJhc2UiLCJ2YWx1ZUdldHRlciIsImlzU3RyaW5nIiwid29yZCIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImV2ZXJ5Iiwia2V5d29yZCIsImluY2x1ZGVzIiwic29ydCIsImIiLCIxMyIsIjE1OCIsInNyY19SZXN1bHRzTWVudV9SZXN1bHRzTWVudSIsInVzZXJBZ2VudF8iLCJNZW51XyIsIk1lbnVfZGVmYXVsdCIsIldhaXRTcGlubmVyXyIsIldhaXRTcGlubmVyX2RlZmF1bHQiLCJTdHlsZWRGb290ZXIiLCIkcGxhY2VtZW50IiwiU3R5bGVkTG9hZGluZyIsImxpIiwiU3R5bGVkV2FpdCIsIlN0eWxlZExvYWRpbmdNZXNzYWdlIiwiYW5pbWF0ZUxvYWRpbmciLCJjaGlsZHJlblN0YXJ0IiwiZm9vdGVyTWVzc2FnZSIsImlzTG9hZGluZyIsImxvYWRpbmdNZXNzYWdlIiwibm9PcHRpb25zTWVzc2FnZSIsIm9uU2Nyb2xsQm90dG9tIiwiUmVzdWx0c01lbnVfUmVzdWx0c01lbnUiLCJSZXN1bHRzTWVudSIsIm1lbnVFbCIsIndpbmRvd1RvcCIsImRvY3VtZW50RWxlbWVudCIsImJvdHRvbVNjcm9sbE1lbnUiLCJzY3JvbGxCb3R0b21PZmZzZXQiLCJoYW5kbGVTY3JvbGxCb3R0b20iLCJjdXJyZW50Q2hpbGRyZW5Db3VudCIsImNoaWxkcmVuQ291bnQiLCJtZW51TWF4SGVpZ2h0IiwibnVtYmVyT2ZJdGVtc0xvYWRlZCIsInNjcm9sbEJvdHRvbVRyaWdnZXJlZCIsIml0ZW1NaW5IZWlnaHQiLCJvdGhlckVsZW1lbnRzSGVpZ2h0IiwibmV3TWVudU1heEhlaWdodCIsImFicyIsImhhbmRsZVNjcm9sbEJvdHRvbU9uRnVsbE1lbnUiLCJfdGhpcyRwcm9wcyRvblNjcm9sbEIiLCJoYXNSZXN1bHRzIiwib25XaGVlbCIsImhhbmRsZVdoZWVsTWVudSIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsInJlbmRlckZvb3Rlck1lc3NhZ2UiLCJmbGV4RGlyZWN0aW9uIiwiaGFuZGxlTWVudU1vdW50IiwiOTAiLCI5MSIsImFycmF5TWFwIiwiYmFzZUNsb25lIiwiYmFzZVVuc2V0IiwiY2FzdFBhdGgiLCJjb3B5T2JqZWN0IiwiY3VzdG9tT21pdENsb25lIiwiZmxhdFJlc3QiLCJnZXRBbGxLZXlzSW4iLCJvbWl0IiwicGF0aHMiLCJpc0RlZXAiLCJwYXRoIiwiQ0xPTkVfREVFUF9GTEFHIiwiaXRlcmF0ZWUiLCJlcSIsIm9ialZhbHVlIiwiZ2V0TmF0aXZlIiwiYmFzZVRpbWVzIiwiaXNBcmd1bWVudHMiLCJpc0J1ZmZlciIsImlzSW5kZXgiLCJpc1R5cGVkQXJyYXkiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJTdHJpbmciLCJiYXNlSXNBcmd1bWVudHMiLCJyb290Iiwic3R1YkZhbHNlIiwiQnVmZmVyIiwidHJhbnNmb3JtIiwiYXJnIiwiaXNGdW5jdGlvbiIsImlzTGVuZ3RoIiwiYXJyYXlQdXNoIiwiZ2V0U3ltYm9sc0luIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsImJhc2VHZXRBbGxLZXlzIiwia2V5c0luIiwiaXNTeW1ib2wiLCI0MCIsIjE0OSIsIkhlYWRpbmdfSGVhZGluZyIsInNlY3Rpb24iLCJTdHlsZWRIMSIsImgxIiwiaDIiLCJoMyIsImg0IiwiJGlzU2VjdGlvbiIsImZvbnRTaXplWFhMYXJnZSIsImZvbnRTaXplWExhcmdlIiwiZm9udFNpemUiLCJhc0VsZW1lbnQiLCJsZXZlbFRvRWxlbWVudCIsInNzIiwiX3JlZiRsZXZlbCIsImNoYXJBdCIsIlRPQVNUX1RZUEVTIiwiVE9BU1RfUE9TSVRJT05TIiwiSU5GTyIsIldBUk5JTkciLCJTVUNDRVNTIiwiRVJST1IiLCJUT1BfTEVGVCIsIlRPUF9DRU5URVIiLCJUT1BfUklHSFQiLCJCT1RUT01fTEVGVCIsIkJPVFRPTV9DRU5URVIiLCJCT1RUT01fUklHSFQiLCJfcGlja1ZhcmlhbnQiLCJfcGlja1ZhcmlhbnQyIiwiX3BpY2tWYXJpYW50MyIsIkxheWVyXyIsIkxheWVyX2RlZmF1bHQiLCJUb2FzdGVyXyIsIlRvYXN0ZXJfZGVmYXVsdCIsIkNsb3NlXyIsIkNsb3NlX2RlZmF1bHQiLCJJbmZvQ2lyY2xlXyIsIkluZm9DaXJjbGVfZGVmYXVsdCIsIlN1Y2Nlc3NfIiwiU3VjY2Vzc19kZWZhdWx0IiwiRXJyb3JfIiwiRXJyb3JfZGVmYXVsdCIsIldhcm5pbmdfIiwiV2FybmluZ19kZWZhdWx0IiwiVG9hc3RDb25zdGFudHMiLCJleHRlcm5hbF9yZWFjdF9mbGlwX21vdmVfIiwiZXh0ZXJuYWxfcmVhY3RfZmxpcF9tb3ZlX2RlZmF1bHQiLCJfdGVtcGxhdGVPYmplY3QxNSIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJfdGVtcGxhdGVPYmplY3QxNCIsIl90ZW1wbGF0ZU9iamVjdDEzIiwiX3RlbXBsYXRlT2JqZWN0MTIiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEwIiwiX3RlbXBsYXRlT2JqZWN0OSIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QiLCJzdHJpbmdzIiwicmF3IiwiU3R5bGVkVG9hc3QiLCJTdHlsZWRNZXNzYWdlIiwiU3R5bGVkSWNvbiIsImFjY2VudENvbG9yV2FybmluZyIsImFjY2VudENvbG9yUG9zaXRpdmUiLCJjb250ZW50Q29sb3JJbnZlcnRlZCIsIlN0eWxlZFRvYXN0Q29udGVudCIsIlN0eWxlZEFjdGlvbkJ1dHRvbiIsIlN0eWxlZEZsaXBNb3ZlIiwidG9wQ2VudGVyIiwidG9wUmlnaHQiLCJ0b3BMZWZ0IiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwiYm90dG9tQ2VudGVyIiwiU3R5bGVkTGF5ZXIiLCJUb2FzdEljb25fUHJpc21hSWNvbiIsIlRvYXN0SWNvbl9Ub2FzdEljb24iLCJUb2FzdEljb25fZ2V0UHJpc21hSWNvbiIsIlRvYXN0SWNvbl9nZXRFbnRlcnByaXNlSWNvbiIsIiR0eXBlIiwic3JjX1RvYXN0SWNvbiIsIlRvYXN0X2RlZmluZVByb3BlcnR5IiwiVG9hc3RfVG9hc3QiLCJfUmVhY3QkQ29tcG9uZW50IiwiVG9hc3QiLCJhdXRvRGlzbWlzcyIsInBhdXNlIiwicmVzdW1lIiwiZnVsZmlsbEFjdGlvbkNhbGxiYWNrIiwia2V5Q29kZSIsInJlcXVlc3RIaWRlIiwiY2FsbGJhY2siLCJyZW1haW5pbmciLCJ0aW1lcklkIiwib25SZXF1ZXN0SGlkZSIsIlRpbWVyIiwiZGlzbWlzc09uQWN0aW9uQ2xpY2siLCJsYW5nIiwibmF2aWdhdG9yIiwibGFuZ3VhZ2UiLCJ1c2VyTGFuZ3VhZ2UiLCJhY3Rpb25CdG4iLCJvbkFjdGlvbkNsaWNrIiwiaGFuZGxlQWN0aW9uQnV0dG9uS2V5RG93biIsImRpc21pc3MiLCJjb2xvciIsImN1cnNvciIsImZvY3VzYWJsZSIsImhhbmRsZUNsb3NlS2V5RG93biIsImRpc21pc3NQbGFjZWhvbGRlciIsInRvYXN0Q29udGVudCIsIkNvbXBvbmVudCIsInNyY19Ub2FzdCIsIlRvYXN0TWVzc2FnZXNJbnRlcm5hbF90eXBlb2YiLCJUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZXh0ZW5kcyIsIlRvYXN0TWVzc2FnZXNJbnRlcm5hbF9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIlRvYXN0TWVzc2FnZXNJbnRlcm5hbF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiVG9hc3RNZXNzYWdlc0ludGVybmFsX2RlZmluZVByb3BlcnRpZXMiLCJUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfc2V0UHJvdG90eXBlT2YiLCJUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfY3JlYXRlU3VwZXIiLCJUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiVG9hc3RNZXNzYWdlc0ludGVybmFsX2dldFByb3RvdHlwZU9mIiwiVG9hc3RNZXNzYWdlc0ludGVybmFsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiVG9hc3RNZXNzYWdlc0ludGVybmFsX2RlZmluZVByb3BlcnR5IiwiVE9QX0VOVEVSX0FOSU1BVElPTiIsIm9wYWNpdHkiLCJCT1RUT01fRU5URVJfQU5JTUFUSU9OIiwiVG9hc3RNZXNzYWdlc0ludGVybmFsX1RvYXN0TWVzc2FnZXNJbnRlcm5hbCIsIlRvYXN0TWVzc2FnZXNJbnRlcm5hbF9pbmhlcml0cyIsIlRvYXN0TWVzc2FnZXNJbnRlcm5hbCIsIlRvYXN0TWVzc2FnZXNJbnRlcm5hbF9jbGFzc0NhbGxDaGVjayIsInRvYXN0IiwicG9zaXRpb25Jc1RvcCIsInRvYXN0cyIsImZvY3VzZWRUb2FzdENhbmRpZGF0ZSIsImZvY3VzZWRUb2FzdCIsInRvYXN0VG9SZW1vdmUiLCJhbmltYXRpb25EdXJhdGlvbiIsImVudGVyQW5pbWF0aW9uIiwiaGFuZGxlTW9kYWxNb3VudCIsImhhbmRsZU1vZGFsS2V5RG93biIsImFwcGVhckFuaW1hdGlvbiIsImxlYXZlQW5pbWF0aW9uIiwiZHVyYXRpb24iLCJlYXNpbmciLCJ2ZXJ0aWNhbEFsaWdubWVudCIsInRpbWVPdXQiLCJoYW5kbGVSZXF1ZXN0SGlkZSIsImhhbmRsZVRvYXN0Rm9jdXMiLCJoYW5kbGVUb2FzdEJsdXIiLCJhZGRDcmVhdGVMaXN0ZW5lciIsImhhbmRsZVRvYXN0Q3JlYXRlIiwicmVtb3ZlQ3JlYXRlTGlzdGVuZXIiLCJpbmRleFRvUmVtb3ZlIiwiZXNjYXBlVG9DbG9zZVRvYXN0cyIsInJlbmRlciIsInJlbmRlckxheWVyIiwic3JjX1RvYXN0TWVzc2FnZXNJbnRlcm5hbCIsIlRvYXN0TWVzc2FnZXNfVG9hc3RNZXNzYWdlcyIsIl9saWdodCIsImJvcmRlckRhcmtDb2xvciIsImJvcmRlckRhcmsiLCJib3JkZXJMaWdodCIsImFjY2VudENvbG9yQWxlcnQiLCJzdGF0dXNDb2xvckluZm8iLCJzdGF0dXNDb2xvck5vcm1hbCIsInN0YXR1c0NvbG9yTG93Iiwic3RhdHVzQ29sb3JNZWRpdW0iLCJzdGF0dXNDb2xvckhpZ2giLCJzdGF0dXNDb2xvckNyaXRpY2FsIiwibW9kYWxTaGFkb3ciLCJiYWNrZ3JvdW5kQ29sb3JTZWN0aW9uIiwiYmFja2dyb3VuZENvbG9yU2lkZWJhciIsImJhY2tncm91bmRDb2xvck5hdmlnYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3JGbG9hdGluZyIsImJhY2tncm91bmRDb2xvckRpYWxvZyIsImJhY2tncm91bmRDb2xvclNjcmltIiwibmV1dHJhbDEwMCIsIm5ldXRyYWwzMDAiLCJuZXV0cmFsNDAwIiwibmV1dHJhbDUwMCIsImNsZWFyVmFyaWFibGVzQ2FjaGUiLCJnZXRUaGVtZVZhcmlhYmxlTWVtb2l6ZWQiLCJfZ2V0VGhlbWVWYXJpYWJsZU1lbW8iLCJfZ2V0VGhlbWVWYXJpYWJsZU1lbW8yIiwiY3VycmVudFZhbHVlIiwiX3JlZjIkdGhlbWUiLCJfcmVhY3QiLCJfc3R5bGVkQ29tcG9uZW50cyIsInVzZUNvbnRleHQiLCJUaGVtZUNvbnRleHQiLCJfcmVmJHNwbHVua1RoZW1lViIsInJlc3QiLCIxNDgiLCJCdXR0b25Hcm91cF9CdXR0b25Hcm91cCIsIkJ1dHRvbkdyb3VwIiwicmVIYXNVbmljb2RlIiwiUmVnRXhwIiwib2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIjEyNSIsInNyY19TZWxlY3RfU2VsZWN0IiwiU2VsZWN0X09wdGlvbiIsImZpbHRlcl8iLCJMaW5rXyIsIkxpbmtfZGVmYXVsdCIsIlJlc3VsdHNNZW51XyIsIlJlc3VsdHNNZW51X2RlZmF1bHQiLCJUZXh0XyIsIlRleHRfZGVmYXVsdCIsImhpZGRlbiIsIk9wdGlvbl9PcHRpb24iLCJfUHVyZUNvbXBvbmVudCIsIk9wdGlvbiIsIl90aGlzJGMiLCJzY3JvbGxJbnRvVmlld0lmTmVlZGVkIiwiX3RoaXMkYzIiLCJTdHlsZWRCdXR0b25Ub2dnbGUiLCJTdHlsZWRGaWx0ZXIiLCJTdHlsZWRMaW5rSWNvbiIsIlN0eWxlZExpbmtDYXJldCIsIlNlbGVjdF90eXBlb2YiLCJTZWxlY3RfZGVmaW5lUHJvcGVydHkiLCJTZWxlY3RfZXh0ZW5kcyIsIlNlbGVjdF9kZWZpbmVQcm9wZXJ0aWVzIiwiU2VsZWN0X2NyZWF0ZUNsYXNzIiwiU2VsZWN0X3NldFByb3RvdHlwZU9mIiwiU2VsZWN0X2NyZWF0ZVN1cGVyIiwiU2VsZWN0X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlNlbGVjdF9nZXRQcm90b3R5cGVPZiIsIlNlbGVjdF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlNlbGVjdF9wcm9wVHlwZXMiLCJpc0xvYWRpbmdPcHRpb25zIiwibGFiZWxUZXh0IiwibWVudVN0eWxlIiwib25DbG9zZSIsIm9uRmlsdGVyQ2hhbmdlIiwib25PcGVuIiwicHJlZml4TGFiZWwiLCJzdWZmaXhMYWJlbCIsIlNlbGVjdF9kZWZhdWx0UHJvcHMiLCJTZWxlY3RfU2VsZWN0IiwiU2VsZWN0X2luaGVyaXRzIiwiU2VsZWN0IiwiU2VsZWN0X2NsYXNzQ2FsbENoZWNrIiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsIl9zdGF0ZSRhY3RpdmVJbmRleCIsImFjdGl2ZUluZGV4IiwiYXZhaWxhYmxlT3B0aW9uQ291bnQiLCJfc3RhdGUkYWN0aXZlSW5kZXgyIiwiYWN0aXZlVmFsdWUiLCJzZWxlY3RWYWx1ZSIsIl90aGlzJHByb3BzJG9uRmlsdGVyQyIsImZpbHRlcktleXdvcmQiLCJzZWxlY3RlZE9wdGlvbiIsIl90aGlzJHByb3BzJG9uT3BlbiIsInNlbGVjdGVkT3B0aW9uSW5kZXgiLCJfdGhpcyRwcm9wcyRvbkNsb3NlIiwidmFsaWRhdGVBcHBlYXJhbmNlIiwibWVudUlkIiwiYWN0aXZlSXRlbUlkIiwiZ2V0Q3VycmVudFZhbHVlIiwiX3RoaXMkZHJvcGRvd24iLCJkcm9wZG93biIsImhhbmRsZVRleHRDaGFuZ2UiLCJoYW5kbGVUZXh0S2V5RG93biIsImhhbmRsZVRleHRLZXlVcCIsImlzT3B0aW9uIiwiaXNBbnlWYWx1ZVNlbGVjdGVkIiwic3RyaW5nTGFiZWwiLCJoYW5kbGVTZWxlY3RlZEl0ZW1Nb3VudCIsImhhbmRsZUl0ZW1DbGljayIsImZpbmFsQ2hpbGRyZW4iLCJoYW5kbGVBY3RpdmVPcHRpb25Nb3VudCIsImNyZWF0ZU1lbnUiLCJhbmNob3JXaWR0aCIsInJlbmRlckZpbHRlciIsIm1heFdpZHRoIiwiMTYiLCIxNyIsIjIyIiwiMjQiLCIzMiIsIjM1IiwiMzkiLCJTdGFjayIsImFycmF5RWFjaCIsImJhc2VBc3NpZ24iLCJiYXNlQXNzaWduSW4iLCJjbG9uZUJ1ZmZlciIsImNvcHlBcnJheSIsImNvcHlTeW1ib2xzIiwiY29weVN5bWJvbHNJbiIsImluaXRDbG9uZUFycmF5IiwiaW5pdENsb25lQnlUYWciLCJpbml0Q2xvbmVPYmplY3QiLCJpc01hcCIsImlzT2JqZWN0IiwiaXNTZXQiLCJjbG9uZWFibGVUYWdzIiwiYml0bWFzayIsInN0YWNrIiwiaXNGbGF0IiwiaXNGdWxsIiwidGFnIiwiaXNGdW5jIiwic3RhY2tlZCIsInN1YlZhbHVlIiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsInN0YWNrU2V0IiwiZW50cmllcyIsIl9fZGF0YV9fIiwiTWFwQ2FjaGUiLCJwYWlycyIsIkxBUkdFX0FSUkFZX1NJWkUiLCJyZUlzVWludCIsImJhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJub2RlSXNUeXBlZEFycmF5IiwidHlwZWRBcnJheVRhZ3MiLCJpc1Byb3RvdHlwZSIsIm5hdGl2ZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJpc1Byb3RvIiwiYWxsb2NVbnNhZmUiLCJidWZmZXIiLCJwcmVkaWNhdGUiLCJyZXNJbmRleCIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZURhdGFWaWV3IiwiY2xvbmVSZWdFeHAiLCJjbG9uZVN5bWJvbCIsImNsb25lVHlwZWRBcnJheSIsImRhdGFWaWV3IiwiYnl0ZU9mZnNldCIsInJlRmxhZ3MiLCJyZWdleHAiLCJleGVjIiwibGFzdEluZGV4Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwidmFsdWVPZiIsInR5cGVkQXJyYXkiLCJiYXNlQ3JlYXRlIiwib2JqZWN0Q3JlYXRlIiwicHJvdG8iLCJiYXNlSXNNYXAiLCJub2RlSXNNYXAiLCJiYXNlSXNTZXQiLCJub2RlSXNTZXQiLCJsYXN0IiwicGFyZW50IiwidG9LZXkiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwibWVtb2l6ZUNhcHBlZCIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJjaGFyQ29kZUF0IiwicXVvdGUiLCJzdWJTdHJpbmciLCJzeW1ib2xUb1N0cmluZyIsImJhc2VHZXQiLCJiYXNlU2xpY2UiLCJpc1BsYWluT2JqZWN0IiwiZnVuY1Byb3RvIiwiRnVuY3Rpb24iLCJmdW5jVG9TdHJpbmciLCJvYmplY3RDdG9yU3RyaW5nIiwiZmxhdHRlbiIsIm92ZXJSZXN0Iiwic2V0VG9TdHJpbmciLCJiYXNlRmxhdHRlbiIsImlzRmxhdHRlbmFibGUiLCJkZXB0aCIsImlzU3RyaWN0Iiwic3ByZWFkYWJsZVN5bWJvbCIsImlzQ29uY2F0U3ByZWFkYWJsZSIsIm5hdGl2ZU1heCIsIm90aGVyQXJncyIsInRoaXNBcmciLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsImNvbnN0YW50IiwiaWRlbnRpdHkiLCJuYXRpdmVOb3ciLCJub3ciLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCIxMzYiLCJzcmNfU2Nyb2xsX1Njcm9sbCIsIkFuaW1hdGlvbl8iLCJkZWZhdWx0TGVmdCIsImRlZmF1bHRUb3AiLCJJbm5lcl9Jbm5lciIsIklubmVyIiwic2Nyb2xsV2lkdGgiLCJkZWx0YVgiLCJtYXhMZWZ0IiwiZGVsdGFZIiwibWF4VG9wIiwiZGVmYXVsdFdpbmRvd092ZXJmbG93WCIsIm92ZXJmbG93WCIsImRlZmF1bHRXaW5kb3dPdmVyZmxvd1kiLCJvdmVyZmxvd1kiLCJwcmV2U3RhdGUiLCJUYWciLCJoYW5kbGVXaGVlbCIsInBhc3NpdmUiLCJTY3JvbGxfSW5uZXIiLCJTdHlsZWRJbm5lciIsIlNjcm9sbF90eXBlb2YiLCJTY3JvbGxfZXh0ZW5kcyIsIlNjcm9sbF9kZWZpbmVQcm9wZXJ0aWVzIiwiU2Nyb2xsX3NldFByb3RvdHlwZU9mIiwiU2Nyb2xsX2NyZWF0ZVN1cGVyIiwiU2Nyb2xsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlNjcm9sbF9nZXRQcm90b3R5cGVPZiIsIlNjcm9sbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiU2Nyb2xsX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlNjcm9sbF9kZWZpbmVQcm9wZXJ0eSIsIlNjcm9sbF9wcm9wVHlwZXMiLCJvblNjcm9sbENvbXBsZXRlIiwiU2Nyb2xsX1Njcm9sbCIsIlNjcm9sbF9pbmhlcml0cyIsIlNjcm9sbCIsIlNjcm9sbF9jbGFzc0NhbGxDaGVjayIsIl90aGlzJHByb3BzJG9uU2Nyb2xsQyIsImN1cnJlbnRMZWZ0IiwiY3VycmVudFRhcmdldCIsImN1cnJlbnRUb3AiLCJ0YXJnZXRTY3JvbGwiLCJvblJlc3QiLCJoYW5kbGVSZXN0IiwiY29uZmlnIiwicHJlY2lzaW9uIiwicmVuZGVySW5uZXIiLCIyNyIsIjMzIiwiMTY3IiwiVHJpYW5nbGVSaWdodFNtYWxsIiwiX2V4cG9ydE5hbWVzIiwiZ2V0U2V0dGluZ3NGcm9tVGhlbWVkUHJvcHMiLCJnZXRUaGVtZSIsIm1peGlucyIsInBpY2siLCJwaWNrVmFyaWFudCIsIlNwbHVua1RoZW1lUHJvdmlkZXIiLCJ1c2VTcGx1bmtUaGVtZSIsIndpdGhTcGx1bmtUaGVtZSIsIl9nZXRTZXR0aW5nc0Zyb21UaGVtZWRQcm9wcyIsIl9taXhpbnMiLCJfcGljayIsIl9TcGx1bmtUaGVtZVByb3ZpZGVyIiwiX3dpdGhTcGx1bmtUaGVtZSIsIl92YXJpYWJsZXMiLCJfdHlwZXMiLCJfcHJvcHMkdGhlbWUiLCJfZGFyayIsIl9jb21wYWN0IiwiX2NvbWZvcnRhYmxlIiwiX3ByaXNtYUFsaWFzZXMiLCJjcyIsInBhIiwiX3Rpbnljb2xvciIsInNldEFscGhhIiwidG9SZ2JTdHJpbmciLCJtaXgiLCJzcGFjaW5nWFNtYWxsIiwic3BhY2luZ01lZGl1bSIsInNwYWNpbmdMYXJnZSIsInNwYWNpbmdYTGFyZ2UiLCJzcGFjaW5nWFhMYXJnZSIsInNwYWNpbmdYWFhMYXJnZSIsIl9iYXNlIiwiY29sb3JTY2hlbWVWYXJzIiwiZGVuc2l0eVZhcnMiLCJlbGxpcHNpcyIsInByaW50V2lkdGgxMDBQZXJjZW50IiwicHJpbnRIaWRlIiwicHJpbnROb0JhY2tncm91bmQiLCJwcmludFdyYXBBbGwiLCJfY29sb3JCbGVuZCIsImNzcyIsInRleHRPdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJiYWNrZ3JvdW5kIiwid29yZEJyZWFrIiwid29yZFdyYXAiLCJvdmVyZmxvd1dyYXAiLCJjbGlwIiwiYzEiLCJjMiIsImMxVmFsdWUiLCJjMlZhbHVlIiwiYzMiLCJub3JtYWwiLCJ0b1JnYiIsImFscGhhIiwiY29sb3JWYWx1ZSIsInByb3BOYW1lIiwidmFyaWFudEtleSIsInN1YlRyZWUiLCJhZGRpdGlvbmFsVGhlbWVQcm9wZXJ0aWVzIiwiY3VzdG9taXplVGhlbWUiLCJfcmVmMiRzcGx1bmtUaGVtZVYiLCJjb21wb3NlZFRoZW1lIiwiVGhlbWVQcm92aWRlciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiQ29tcG9uZW50V2l0aFNwbHVua1RoZW1lIiwidGhlbWVTZXR0aW5ncyIsIndhcm5PbmNlIiwiaGFzV2FybmVkIiwiY29uc29sZSIsIndhcm4iLCJwYXJlbnROb2RlUG9zaXRpb25TdGF0aWMiLCJjaGlsZElzRGlzYWJsZWQiLCJlbnRlclByZXNldHMiLCJlbGV2YXRvciIsImZhZGUiLCJhY2NvcmRpb25WZXJ0aWNhbCIsInRyYW5zZm9ybU9yaWdpbiIsImFjY29yZGlvbkhvcml6b250YWwiLCJsZWF2ZVByZXNldHMiLCJhcHBlYXJQcmVzZXRzIiwiZmluZCIsIl9pc0FycmF5IiwiaHlwaGVuYXRlIiwic3RyIiwiY2xhc3NDYWxsQ2hlY2siLCJpbmhlcml0cyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJwcm9wQ29udmVydGVyIiwiQ29tcG9zZWRDb21wb25lbnQiLCJfY2xhc3MiLCJfdGVtcCIsIkZsaXBNb3ZlUHJvcENvbnZlcnRlciIsImNoZWNrQ2hpbGRyZW4iLCJjb252ZXJ0UHJvcHMiLCJ3b3JraW5nUHJvcHMiLCJvblN0YXJ0Iiwib25GaW5pc2giLCJvblN0YXJ0QWxsIiwib25GaW5pc2hBbGwiLCJ0eXBlTmFtZSIsImRpc2FibGVBbGxBbmltYXRpb25zIiwiZ2V0UG9zaXRpb24iLCJtYWludGFpbkNvbnRhaW5lckhlaWdodCIsImNvbnZlcnRUaW1pbmdQcm9wIiwic3RhZ2dlckR1cmF0aW9uQnkiLCJzdGFnZ2VyRGVsYXlCeSIsImNvbnZlcnRBbmltYXRpb25Qcm9wIiwiZGVsZWdhdGVkIiwicHJpbWFyeVByb3BLZXlzIiwiZGVsZWdhdGVkUHJvcHMiLCJhdHRycyIsInByb3AiLCJyYXdWYWx1ZSIsImFuaW1hdGlvbiIsInByZXNldHMiLCJhcHBseVN0eWxlc1RvRE9NTm9kZSIsImRvbU5vZGUiLCJzdHlsZXMiLCJzZXRQcm9wZXJ0eSIsImdldFBvc2l0aW9uRGVsdGEiLCJjaGlsZERvbU5vZGUiLCJkZWZhdWx0Qm94Iiwib2xkUmVsYXRpdmVCb3giLCJjaGlsZEJvdW5kaW5nQm94IiwicGFyZW50Qm94IiwicGFyZW50Qm91bmRpbmdCb3giLCJuZXdBYnNvbHV0ZUJveCIsIm5ld1JlbGF0aXZlQm94IiwiY3JlYXRlVHJhbnNpdGlvblN0cmluZyIsInRyYW5zaXRpb25FbmQiLCJ0cmFuc2l0aW9ucyIsInRyYW5zaXRpb24iLCJ3aGljaFRyYW5zaXRpb25FdmVudCIsIm5vQnJvd3NlclN1cHBvcnQiLCJnZXRLZXkiLCJjaGlsZERhdGEiLCJnZXRFbGVtZW50Q2hpbGRyZW4iLCJlbmhhbmNlZEZsaXBNb3ZlIiwiRmxpcE1vdmUiLCJhcHBlYXJpbmciLCJjaGlsZHJlbkRhdGEiLCJwYXJlbnREYXRhIiwiYm91bmRpbmdCb3giLCJoZWlnaHRQbGFjZWhvbGRlckRhdGEiLCJyZW1haW5pbmdBbmltYXRpb25zIiwiY2hpbGRyZW5Ub0FuaW1hdGUiLCJmaW5kRE9NQ29udGFpbmVyIiwiZmluZERPTU5vZGUiLCJIVE1MRWxlbWVudCIsInJ1bkFuaW1hdGlvbiIsImR5bmFtaWNDaGlsZHJlbiIsImRvZXNDaGlsZE5lZWRUb0JlQW5pbWF0ZWQiLCJjaGlsZHJlbkluaXRpYWxTdHlsZXMiLCJjb21wdXRlSW5pdGlhbFN0eWxlcyIsImFuaW1hdGVDaGlsZCIsImNhbGxDaGlsZHJlbkhvb2siLCJnZXRDaGlsZERhdGEiLCJpc0FwcGVhcmluZ1dpdGhBbmltYXRpb24iLCJpc0VudGVyaW5nV2l0aEFuaW1hdGlvbiIsImVudGVyaW5nIiwiaXNMZWF2aW5nV2l0aEFuaW1hdGlvbiIsImxlYXZpbmciLCJfZ2V0UG9zaXRpb25EZWx0YSIsImRYIiwiZFkiLCJjb21wb25lbnREaWRNb3VudCIsImlzQW5pbWF0aW9uRGlzYWJsZWQiLCJwcmVwRm9yQW5pbWF0aW9uIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldmlvdXNQcm9wcyIsIm5vdEJvdGhBcnJheXMiLCJkaWZmZXJlbnRMZW5ndGhzIiwiYXJyYXlzRXF1YWwiLCJjYWxjdWxhdGVOZXh0U2V0T2ZDaGlsZHJlbiIsIm5leHRDaGlsZHJlbiIsInVwZGF0ZWRDaGlsZHJlbiIsIm5leHRDaGlsZCIsImZpbmRDaGlsZEJ5S2V5IiwiaXNFbnRlcmluZyIsIm51bU9mQ2hpbGRyZW5MZWF2aW5nIiwibmV4dENoaWxkSW5kZXgiLCJfcHJvcHMiLCJsZWF2aW5nQ2hpbGQiLCJjb21wdXRlZCIsIm1hcmdpbnMiLCJfYmFiZWxIZWxwZXJzJGV4dGVuZHMiLCJwcm9wZXJ0eVZhbCIsIk51bWJlciIsInJlbW92ZU5vZGVGcm9tRE9NRmxvdyIsInBhcmVudERvbU5vZGUiLCJyZWR1Y3Rpb25JbkhlaWdodCIsInVwZGF0ZUhlaWdodFBsYWNlaG9sZGVyIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXh0UHJvcHMiLCJ1cGRhdGVCb3VuZGluZ0JveENhY2hlcyIsImNoaWxkSW5pdGlhbFN0eWxlcyIsIl90aGlzNCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImJpbmRUcmFuc2l0aW9uRW5kSGFuZGxlciIsIl90aGlzNSIsInRyYW5zaXRpb25FbmRIYW5kbGVyIiwiZXYiLCJ0cmlnZ2VyRmluaXNoSG9va3MiLCJyZW1vdmVDaGlsZERhdGEiLCJfdGhpczYiLCJob29rIiwiX3RoaXM3IiwiZWxlbWVudHMiLCJkb21Ob2RlcyIsImNoaWxkS2V5IiwiaGFzQ2hpbGREYXRhIiwiX3RoaXM4IiwiY2hpbGRyZW5Cb3VuZGluZ0JveGVzIiwiX2dldFBvc2l0aW9uIiwiZ2V0UmVsYXRpdmVCb3VuZGluZ0JveCIsInNldENoaWxkRGF0YSIsIl9nZXRQb3NpdGlvbkRlbHRhMiIsImNyZWF0ZUhlaWdodFBsYWNlaG9sZGVyIiwiX3RoaXM5IiwicGxhY2Vob2xkZXJUeXBlIiwidmlzaWJpbGl0eSIsImNoaWxkcmVuV2l0aFJlZnMiLCJfdGhpczEwIiwiZm91bmROb2RlIiwiTm9kZSIsIlRFWFRfTk9ERSIsImdldE5hdGl2ZU5vZGUiLCJfdGhpczExIiwiX3Byb3BzMiIsIjQxIiwiTWFwU2hpbSIsImdldEluZGV4IiwiZW50cnkiLCJjbGFzc18xIiwiX19lbnRyaWVzX18iLCJjdHgiLCJpc0Jyb3dzZXIiLCJnbG9iYWwkMSIsImdsb2JhbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSQxIiwidHJhbnNpdGlvbktleXMiLCJtdXRhdGlvbk9ic2VydmVyU3VwcG9ydGVkIiwiTXV0YXRpb25PYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyQ29udHJvbGxlciIsImNvbm5lY3RlZF8iLCJtdXRhdGlvbkV2ZW50c0FkZGVkXyIsIm11dGF0aW9uc09ic2VydmVyXyIsIm9ic2VydmVyc18iLCJvblRyYW5zaXRpb25FbmRfIiwicmVmcmVzaCIsImxlYWRpbmdDYWxsIiwidHJhaWxpbmdDYWxsIiwibGFzdENhbGxUaW1lIiwicmVzb2x2ZVBlbmRpbmciLCJwcm94eSIsInRpbWVvdXRDYWxsYmFjayIsInRpbWVTdGFtcCIsInRocm90dGxlIiwiYWRkT2JzZXJ2ZXIiLCJvYnNlcnZlciIsImNvbm5lY3RfIiwicmVtb3ZlT2JzZXJ2ZXIiLCJvYnNlcnZlcnMiLCJkaXNjb25uZWN0XyIsInVwZGF0ZU9ic2VydmVyc18iLCJhY3RpdmVPYnNlcnZlcnMiLCJnYXRoZXJBY3RpdmUiLCJoYXNBY3RpdmUiLCJicm9hZGNhc3RBY3RpdmUiLCJvYnNlcnZlIiwiYXR0cmlidXRlcyIsImNoaWxkTGlzdCIsImNoYXJhY3RlckRhdGEiLCJzdWJ0cmVlIiwiZGlzY29ubmVjdCIsIl9iIiwicHJvcGVydHlOYW1lIiwiZ2V0SW5zdGFuY2UiLCJpbnN0YW5jZV8iLCJkZWZpbmVDb25maWd1cmFibGUiLCJnZXRXaW5kb3dPZiIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsImVtcHR5UmVjdCIsImNyZWF0ZVJlY3RJbml0IiwidG9GbG9hdCIsImdldEJvcmRlcnNTaXplIiwicG9zaXRpb25zIiwiZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCIsInBhZGRpbmdzIiwicG9zaXRpb25zXzEiLCJnZXRQYWRkaW5ncyIsImhvcml6UGFkIiwidmVydFBhZCIsImJveFNpemluZyIsInJvdW5kIiwiaXNEb2N1bWVudEVsZW1lbnQiLCJ2ZXJ0U2Nyb2xsYmFyIiwiaG9yaXpTY3JvbGxiYXIiLCJpc1NWR0dyYXBoaWNzRWxlbWVudCIsIlNWR0dyYXBoaWNzRWxlbWVudCIsIlNWR0VsZW1lbnQiLCJnZXRCQm94IiwiZ2V0Q29udGVudFJlY3QiLCJiYm94IiwiZ2V0U1ZHQ29udGVudFJlY3QiLCJSZXNpemVPYnNlcnZhdGlvbiIsImJyb2FkY2FzdFdpZHRoIiwiYnJvYWRjYXN0SGVpZ2h0IiwiY29udGVudFJlY3RfIiwiaXNBY3RpdmUiLCJicm9hZGNhc3RSZWN0IiwiUmVzaXplT2JzZXJ2ZXJFbnRyeSIsInJlY3RJbml0IiwiQ29uc3RyIiwiY29udGVudFJlY3QiLCJET01SZWN0UmVhZE9ubHkiLCJSZXNpemVPYnNlcnZlclNQSSIsImNvbnRyb2xsZXIiLCJjYWxsYmFja0N0eCIsImFjdGl2ZU9ic2VydmF0aW9uc18iLCJvYnNlcnZhdGlvbnNfIiwiY2FsbGJhY2tfIiwiY29udHJvbGxlcl8iLCJjYWxsYmFja0N0eF8iLCJFbGVtZW50Iiwib2JzZXJ2YXRpb25zIiwidW5vYnNlcnZlIiwiY2xlYXJBY3RpdmUiLCJvYnNlcnZhdGlvbiIsIlJlc2l6ZU9ic2VydmVyIiwibWV0aG9kIiwiMTQ2IiwiU29ydCIsIjE0NyIsInN0cm9rZSIsIjg2IiwiSW5mbyIsImN4IiwiY3kiLCIxMTIiLCJEZWZpbml0aW9uTGlzdF9EZWZpbml0aW9uTGlzdCIsIkRlZmluaXRpb25MaXN0X0Rlc2NyaXB0aW9uIiwiRGVmaW5pdGlvbkxpc3RfVGVybSIsImRkIiwiRGVzY3JpcHRpb24iLCJEZWZpbml0aW9uTGlzdFN0eWxlc19TdHlsZWQiLCJkbCIsIlRlcm1TdHlsZXNfU3R5bGVkIiwiZHQiLCJyZXBlYXQiLCJUZXJtX2V4dGVuZHMiLCJUZXJtX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiVGVybV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiVGVybV9wcm9wVHlwZXMiLCJUZXJtIiwiRGVmaW5pdGlvbkxpc3RfZXh0ZW5kcyIsIkRlZmluaXRpb25MaXN0X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiRGVmaW5pdGlvbkxpc3Rfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIkRlZmluaXRpb25MaXN0X3Byb3BUeXBlcyIsInRlcm1XaWR0aCIsIkRlZmluaXRpb25MaXN0IiwiX3JlZjIkdGVybVdpZHRoIiwicHJvY2Vzc0NoaWxkcmVuIiwiMTE4IiwiUGVuY2lsIiwiNTMiLCJDbG9uZSIsIjE2MCIsIlRyYXNoIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJ0aGVuIiwiYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyYWJsZVRvQXJyYXkiLCJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIm5vbkl0ZXJhYmxlU3ByZWFkIiwiYXJyYXlMaWtlVG9BcnJheSIsInJ1bnRpbWUiLCJPcCIsImhhc093biIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJkZWZpbmUiLCJ3cmFwIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiX2ludm9rZSIsImRvbmVSZXN1bHQiLCJkZWxlZ2F0ZSIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsIkNvbnRpbnVlU2VudGluZWwiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJlY29yZCIsInRyeUNhdGNoIiwibWFrZUludm9rZU1ldGhvZCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJHcCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIkFzeW5jSXRlcmF0b3IiLCJQcm9taXNlSW1wbCIsInByZXZpb3VzUHJvbWlzZSIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiaW52b2tlIiwiX19hd2FpdCIsInVud3JhcHBlZCIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwiaXRlcmFibGUiLCJpdGVyYXRvck1ldGhvZCIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJjdG9yIiwibWFyayIsImF3cmFwIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJzdG9wIiwicm9vdFJlY29yZCIsInJ2YWwiLCJleGNlcHRpb24iLCJoYW5kbGUiLCJsb2MiLCJjYXVnaHQiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImZpbmlzaCIsInRocm93biIsImRlbGVnYXRlWWllbGQiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJhY2NpZGVudGFsU3RyaWN0TW9kZSIsIjE1NSIsInNyY19Db2xsYXBzaWJsZVBhbmVsX0NvbGxhcHNpYmxlUGFuZWwiLCJUcmFuc2l0aW9uT3Blbl8iLCJUcmFuc2l0aW9uT3Blbl9kZWZhdWx0IiwiU3R5bGVkVGl0bGVXaXRoQWN0aW9ucyIsIlN0eWxlZENsaWNrYWJsZUljb24iLCJTdHlsZWRUaXRsZUNsaWNrYWJsZSIsIlN0eWxlZEhlYWRpbmdDb250ZW50IiwiJHRpdGxlV2l0aEFjdGlvbnMiLCJTdHlsZWREZXNjcmlwdGlvbiIsImlubmVyQm9keVN0eWxlcyIsImRlZmF1bHRPcGVuIiwiaGVhZGluZ0xldmVsIiwicGFuZWxJZCIsInRpdGxlV2l0aEFjdGlvbnMiLCJDb2xsYXBzaWJsZVBhbmVsX0NvbGxhcHNpYmxlUGFuZWwiLCJDb2xsYXBzaWJsZVBhbmVsIiwiYW5pbWF0aW5nIiwiY29udGFpbmVySWQiLCJ0b2dnbGVJZCIsIiRvcGVuIiwib3V0ZXJJZCIsInRhYmxlTGF5b3V0Iiwib25BbmltYXRpb25FbmQiLCJoYW5kbGVBbmltYXRpb25FbmQiLCI0NCIsIjE0NSIsInNyY19UcmFuc2l0aW9uT3Blbl9UcmFuc2l0aW9uT3BlbiIsInJlbmRlcnByb3BzX2Nqc18iLCIkaGlkZU92ZXJmbG93IiwiYW5pbWF0ZU9uTW91bnQiLCJpbm5lckNsYXNzTmFtZSIsIm91dGVyQ2xhc3NOYW1lIiwiVHJhbnNpdGlvbk9wZW5fVHJhbnNpdGlvbk9wZW4iLCJUcmFuc2l0aW9uT3BlbiIsIm9mZnNldFdpZHRoIiwiZ2V0VmFsdWUiLCJpbm5lckVsIiwiX3RoaXMkcHJvcHMkb25BbmltYXRpIiwiZGltZW5zaW9uIiwiaGFuZGxlVGFiIiwicHJldk9wZW4iLCJhbmltYXRlVG8iLCJpbW1lZGlhdGUiLCJpbnRlcm5hbFJlbmRlciIsIjM4Iiwic3JjX0NvbnRyb2xHcm91cF9Db250cm9sR3JvdXAiLCJTdHlsZWRDb250cm9sc1N0YWNrQm94IiwiU3R5bGVkTGFiZWxXcmFwcGVyIiwiU3R5bGVkTGFiZWxXcmFwcGVyTGVmdCIsIlN0eWxlZEhlbHAiLCJjb250cm9sc0xheW91dCIsImhlbHAiLCJoaWRlTGFiZWwiLCJsYWJlbEZvciIsImxhYmVsUG9zaXRpb24iLCJsYWJlbFdpZHRoIiwidG9vbHRpcCIsIkNvbnRyb2xHcm91cF9Db250cm9sR3JvdXAiLCJDb250cm9sR3JvdXAiLCJjb21wb25lbnRzIiwiZmlyc3RDaGlsZCIsImZpcnN0VGV4dCIsImhhc0lucHV0SWQiLCJoZWxwSWQiLCJpc0NvbXBhY3QiLCJ2YWxpZENoaWxkcmVuIiwid3JpdGFibGVPdGhlclByb3BzIiwic3RhY2tNYXJnaW5Cb3R0b20iLCJjaGlsZHJlbkZvcm1hdHRlZCIsInNob3VsZEFwcGx5UHJvcCIsImZsZXhHcm93IiwiZGVmYXVsdExpbmtlZElkIiwiZ2V0TGlua2VkSWQiLCJsYWJlbFdpZHRoU3R5bGUiLCJsYWJlbFdpZHRoU3RyaW5nIiwibGFiZWxNYXJnaW4iLCJjb250ZW50TWFyZ2luU3R5bGUiLCJTdHlsZWRDb250cm9sc0NvbXBvbmVudCIsIlN0eWxlZExhYmVsV3JhcHBlckNvbXBvbmVudCIsInN0eWxlZExhYmVsIiwiJHRvb2x0aXAiLCJDb250cm9sR3JvdXBXaXRoVGhlbWUiLCIxNDAiLCJjcmVhdGVDb21wb3VuZGVyIiwidXBwZXJGaXJzdCIsInN0YXJ0Q2FzZSIsImFycmF5UmVkdWNlIiwiZGVidXJyIiwid29yZHMiLCJyZUFwb3MiLCJhY2N1bXVsYXRvciIsImluaXRBY2N1bSIsImRlYnVyckxldHRlciIsInJlTGF0aW4iLCJyZUNvbWJvTWFyayIsImJhc2VQcm9wZXJ0eU9mIiwiYXNjaWlXb3JkcyIsImhhc1VuaWNvZGVXb3JkIiwidW5pY29kZVdvcmRzIiwicGF0dGVybiIsImd1YXJkIiwicmVBc2NpaVdvcmQiLCJyZUhhc1VuaWNvZGVXb3JkIiwicnNCcmVha1JhbmdlIiwicnNNYXRoT3BSYW5nZSIsInJzQnJlYWsiLCJyc0RpZ2l0cyIsInJzRGluZ2JhdCIsInJzTG93ZXIiLCJyc01pc2MiLCJyc1JlZ2lvbmFsIiwicnNTdXJyUGFpciIsInJzVXBwZXIiLCJyc01pc2NMb3dlciIsInJzTWlzY1VwcGVyIiwicmVPcHRNb2QiLCJyc01vZGlmaWVyIiwicnNTZXEiLCJyc0Vtb2ppIiwicmVVbmljb2RlV29yZCIsImNyZWF0ZUNhc2VGaXJzdCIsImNhc3RTbGljZSIsImhhc1VuaWNvZGUiLCJzdHJpbmdUb0FycmF5IiwibWV0aG9kTmFtZSIsInN0clN5bWJvbHMiLCJjaHIiLCJhc2NpaVRvQXJyYXkiLCJ1bmljb2RlVG9BcnJheSIsInNwbGl0IiwicnNBc3RyYWwiLCJyc0NvbWJvIiwicnNGaXR6IiwicnNOb25Bc3RyYWwiLCJyc1N5bWJvbCIsInJlVW5pY29kZSIsImlzSUUxMSIsInVzZXJBZ2VudCIsInNyY19Db21ib0JveF9Db21ib0JveCIsIkNvbWJvQm94X09wdGlvbiIsIl90aGlzJGl0ZW0iLCJkaXNwbGF5TGFiZWwiLCJDb21ib0JveF90eXBlb2YiLCJDb21ib0JveF9leHRlbmRzIiwiQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkiLCJDb21ib0JveF9kZWZpbmVQcm9wZXJ0aWVzIiwiQ29tYm9Cb3hfc2V0UHJvdG90eXBlT2YiLCJDb21ib0JveF9jcmVhdGVTdXBlciIsIkNvbWJvQm94X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIkNvbWJvQm94X2dldFByb3RvdHlwZU9mIiwiQ29tYm9Cb3hfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIkNvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIkNvbWJvQm94X3Byb3BUeXBlcyIsImNvbnRyb2xsZWRGaWx0ZXIiLCJDb21ib0JveF9kZWZhdWx0UHJvcHMiLCJDb21ib0JveF9Db21ib0JveCIsIkNvbWJvQm94X2luaGVyaXRzIiwiQ29tYm9Cb3giLCJDb21ib0JveF9jbGFzc0NhbGxDaGVjayIsInRleHRJbnB1dCIsImZvY3VzQ2FsbGVkSW50ZXJuYWxseSIsInR5cGVkVmFsdWUiLCJoYW5kbGVDaGFuZ2UiLCJjbG9zZSIsIm51bU9wdGlvbnMiLCJhY3RpdmVPcHRpb24iLCJldmVudEtleUNvZGUiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJiZWZvcmVMYXN0Q2hpbGQiLCJpbml0aWFsT3B0aW9ucyIsImhhc0V4YWN0TWF0Y2giLCJvcHRpb24iLCJ1bnNoaWZ0IiwiZ2V0RGlzcGxheVZhbHVlIiwib3B0aW9ucyIsIm1hdGNoUmFuZ2VQaHJhc2UiLCJtYXRjaFJhbmdlc1Byb3AiLCJvcHRpb25Gb3JWYWx1ZSIsIl90aGlzMiRwcm9wcyRvbk9wZW4iLCJfdGhpczIkcHJvcHMiLCJfdGhpczMkcHJvcHMkb25DbG9zZSIsIl90aGlzMyRwcm9wcyIsIl90aGlzJHRleHRJbnB1dCIsImN1cnJlbnREaXNwbGF5VmFsdWUiLCJoYW5kbGVJbnB1dENsaWNrIiwicmVuZGVyTWVudSIsIjExMyIsInNyY19NdWx0aXNlbGVjdF9NdWx0aXNlbGVjdCIsIk11bHRpc2VsZWN0X09wdGlvbiIsInNlbGVjdGVkQXBwZWFyYW5jZSIsInNlbGVjdGVkQmFja2dyb3VuZENvbG9yIiwic2VsZWN0ZWRGb3JlZ3JvdW5kQ29sb3IiLCJhYm92ZSIsImJlbG93IiwiU3R5bGVkQ291bnQiLCJTdHlsZWRUb2dnbGVBbGxDb250cm9scyIsIkNvbXBhY3RfdHlwZW9mIiwiQ29tcGFjdF9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIkNvbXBhY3Rfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIkNvbXBhY3RfZXh0ZW5kcyIsIkNvbXBhY3RfZGVmaW5lUHJvcGVydGllcyIsIkNvbXBhY3Rfc2V0UHJvdG90eXBlT2YiLCJDb21wYWN0X2NyZWF0ZVN1cGVyIiwiQ29tcGFjdF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJDb21wYWN0X2dldFByb3RvdHlwZU9mIiwiQ29tcGFjdF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJDb21wYWN0X2RlZmluZVByb3BlcnR5IiwiQ29tcGFjdF9wcm9wVHlwZXMiLCJhbGxvd05ld1ZhbHVlcyIsImRlZmF1bHRWYWx1ZXMiLCJ0YWJDb25maXJtc05ld1ZhbHVlIiwiQ29tcGFjdF9kZWZhdWx0UHJvcHMiLCJDb21wYWN0X0NvbXBhY3QiLCJDb21wYWN0X2luaGVyaXRzIiwiQ29tcGFjdCIsIkNvbXBhY3RfY2xhc3NDYWxsQ2hlY2siLCJfdGhpcyRnZXRDdXJyZW50VmFsdWUiLCJnZXRDdXJyZW50VmFsdWVzIiwiZGlzcGxheWVkVmFsdWVzIiwiQ2hpbGRyZW4iLCJ0b2dnbGVWYWx1ZSIsIl90aGlzJGdldEN1cnJlbnRWYWx1ZTIiLCJ0ZXh0SGFzRm9jdXMiLCJfdGhpcyRnZXRDdXJyZW50VmFsdWUzIiwiX3RoaXMkcHJvcHMkb25GaWx0ZXJDMiIsInRvcFZhbHVlcyIsIl90aGlzJHByb3BzOCIsIl90aGlzJHByb3BzOSIsImZvdW5kRXhhY3RNYXRjaCIsIl90aGlzJHByb3BzMTAiLCJjdXJyZW50VmFsdWVzIiwic2VsZWN0ZWRPcHRpb25Db3VudCIsImNoaWxkcmVuVG9wQ291bnQiLCJjbG9uZWRJdGVtIiwiaGFuZGxlTWVudU9wdGlvbkNsaWNrIiwiaXNUb3BWYWx1ZSIsInJlbmRlckNvbnRyb2xzIiwiaGFzQ2hpbGRyZW4iLCJfdGhpcyRnZXRDdXJyZW50VmFsdWU0IiwiX3RoaXMkcHJvcHMkb25DaGFuZ2UzIiwiX3RoaXMkcHJvcHMxMSIsIm5ld1ZhbHVlcyIsInNlbGVjdENvbnRyb2xzIiwiaGFuZGxlU2VsZWN0QWxsIiwiaGFuZGxlQ2xlYXJBbGwiLCJoYW5kbGVUZXh0Rm9jdXMiLCJoYW5kbGVUZXh0Qmx1ciIsIl90aGlzJGdldEN1cnJlbnRWYWx1ZTUiLCJfdGhpcyRwcm9wczEyIiwiY2hpbGRyZW5BcnJheSIsImJ1dHRvbkxhYmVsIiwib3JpZyIsIm1hdGNoZWRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsIk11bHRpc2VsZWN0X0NvbXBhY3QiLCJDaGlwXyIsIkNoaXBfZGVmYXVsdCIsIiRoYXNmb2N1cyIsIiRwb3BvdmVyT3BlbiIsIlN0eWxlZElucHV0V3JhcHBlciIsIlN0eWxlZE92ZXJsYXkiLCIkcG9wb3Zlcm9wZW4iLCJOb3JtYWxfdHlwZW9mIiwiTm9ybWFsX3RvQ29uc3VtYWJsZUFycmF5IiwiTm9ybWFsX2FycmF5TGlrZVRvQXJyYXkiLCJOb3JtYWxfYXJyYXlXaXRob3V0SG9sZXMiLCJOb3JtYWxfaXRlcmFibGVUb0FycmF5IiwiTm9ybWFsX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiTm9ybWFsX25vbkl0ZXJhYmxlU3ByZWFkIiwiTm9ybWFsX2RlZmluZVByb3BlcnR5IiwiTm9ybWFsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiTm9ybWFsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJOb3JtYWxfZXh0ZW5kcyIsIk5vcm1hbF9kZWZpbmVQcm9wZXJ0aWVzIiwiTm9ybWFsX3NldFByb3RvdHlwZU9mIiwiTm9ybWFsX2NyZWF0ZVN1cGVyIiwiTm9ybWFsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIk5vcm1hbF9nZXRQcm90b3R5cGVPZiIsIk5vcm1hbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiTm9ybWFsX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIk5vcm1hbF9wcm9wVHlwZXMiLCJ1c2VDbGlja2F3YXlPdmVybGF5IiwiTm9ybWFsX2RlZmF1bHRQcm9wcyIsIk5vcm1hbF9Ob3JtYWwiLCJOb3JtYWxfaW5oZXJpdHMiLCJOb3JtYWwiLCJOb3JtYWxfY2xhc3NDYWxsQ2hlY2siLCJyZW1vdmVWYWx1ZSIsImFkZFZhbHVlIiwiX3RoaXMkaW5wdXQ0IiwiX3RoaXMkcHJvcHMkb25GaWx0ZXJDMyIsImdldEVsZW1lbnRCeUlkIiwiYmx1clRvIiwicmVsYXRlZFRhcmdldCIsImlzQmx1clRvT3duT3B0aW9uIiwiY29udGFpbnMiLCJfdGhpcyRpbnB1dDUiLCJsb2FkaW5nTW9yZU1lc3NhZ2UiLCJzZWxlY3RlZEl0ZW1zIiwic2VsZWN0ZWRJdGVtIiwib25SZXF1ZXN0UmVtb3ZlIiwiaGFuZGxlUmVxdWVzdFJlbW92ZSIsImZvcmVncm91bmRDb2xvciIsInNlbGVjdGVkSW5kZXgiLCJjaGlsZHJlbkZpbHRlcmVkIiwiY2hpbGRyZW5JdGVtIiwiX2l0ZW0kcHJvcHMiLCJpdGVtQ2hpbGRyZW4iLCJpdGVtU3VwcG9ydHNNYXRjaFJhbmdlcyIsIm1hdGNoUmFuZ2VzQ2FsYyIsImlucHV0V2lkdGgiLCJyZW5kZXJCdXR0b25zIiwiZmxleEJhc2lzIiwiTXVsdGlzZWxlY3RfTm9ybWFsIiwiTXVsdGlzZWxlY3RfdHlwZW9mIiwiTXVsdGlzZWxlY3RfZXh0ZW5kcyIsIk11bHRpc2VsZWN0X2NsYXNzQ2FsbENoZWNrIiwiTXVsdGlzZWxlY3RfZGVmaW5lUHJvcGVydGllcyIsIk11bHRpc2VsZWN0X3NldFByb3RvdHlwZU9mIiwiTXVsdGlzZWxlY3RfY3JlYXRlU3VwZXIiLCJNdWx0aXNlbGVjdF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJNdWx0aXNlbGVjdF9nZXRQcm90b3R5cGVPZiIsIk11bHRpc2VsZWN0X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJNdWx0aXNlbGVjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJNdWx0aXNlbGVjdF9kZWZpbmVQcm9wZXJ0eSIsIk11bHRpc2VsZWN0X3Byb3BUeXBlcyIsIk11bHRpc2VsZWN0X2RlZmF1bHRQcm9wcyIsIk11bHRpc2VsZWN0X011bHRpc2VsZWN0IiwiTXVsdGlzZWxlY3RfaW5oZXJpdHMiLCJNdWx0aXNlbGVjdCIsIjg3IiwiMTQxIiwiQ2hpcF9DaGlwIiwiY29sb3JfIiwiU3R5bGVkQmFzaWMiLCJzdWNjZXNzIiwid2FybmluZyIsIm91dGxpbmUiLCIkYmFja2dyb3VuZENvbG9yIiwiJGZvcmVncm91bmRDb2xvciIsIlN0eWxlZFJlbW92ZSIsImdldFNoYXJlZFByb3BzIiwiQ2hpcEludGVyYWN0aXZlIiwiX2dldFNoYXJlZFByb3BzMiIsInNoYXJlZFByb3BzIiwib3duUHJvcHMiLCJvdGhlclNoYXJlZFByb3BzIiwiaGFuZGxlUmVtb3ZlQ2xpY2siLCJDaGlwTm9uSW50ZXJhY3RpdmUiLCJfZ2V0U2hhcmVkUHJvcHM0IiwiQ2hpcCIsImlzSW50ZXJhY3RpdmUiLCIzMCIsImlzVmFsaWRIZXhDb2xvciIsImV4cGFuZFNob3J0SGFuZEhleCIsInN0YXJ0c1dpdGhQb3VuZCIsInN0YXJ0c1dpdGgiLCJ2YWx1ZVdpdGhvdXRQb3VuZCIsImlzU2hvcnRoYW5kZWQiLCJfdmFsdWVXaXRob3V0UG91bmQiLCJnIiwiX3ZhbHVlV2l0aG91dFBvdW5kJCIsInNpeEhleGFkZWNpbWFsIiwiaXNDU1NDb2xvciIsImV4dGVuZGVkQ29sb3JLZXl3b3JkcyIsIjEyMSIsInNyY19SYWRpb0Jhcl9SYWRpb0JhciIsIlJhZGlvQmFyX09wdGlvbiIsIkJ1dHRvbkdyb3VwXyIsIkJ1dHRvbkdyb3VwX2RlZmF1bHQiLCJTdHlsZWRSYWRpb0JhciIsIlJhZGlvQmFyX2V4dGVuZHMiLCJSYWRpb0Jhcl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIlJhZGlvQmFyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJSYWRpb0Jhcl9wcm9wVHlwZXMiLCJSYWRpb0Jhcl9SYWRpb0JhciIsIlJhZGlvQmFyIiwic2VsZWN0ZWRWYWx1ZSIsIlJhZGlvQmFyV2l0aFRoZW1lT3B0aW9uIiwiODkiLCIxMzgiLCJTdGF0aWNDb250ZW50X1N0YXRpY0NvbnRlbnQiLCJTdGF0aWNDb250ZW50IiwiX3JlZiRpbmxpbmUiLCJfcmVmJHNpemUiLCIxMTYiLCJQYWdpbmF0b3JfUGFnaW5hdG9yIiwiZm9ybWF0XyIsIk1vcmVfIiwiTW9yZV9kZWZhdWx0IiwiTW9yZSIsIkJ1dHRvblNpbXBsZV8iLCJCdXR0b25TaW1wbGVfZGVmYXVsdCIsIlN0eWxlZEJ1dHRvblNpbXBsZSIsIlN0eWxlZFByZXZOZXh0IiwiQnV0dG9uX2V4dGVuZHMiLCJwYWdlIiwiQnV0dG9uX1BhZ2luYXRvckJ1dHRvbiIsIlBhZ2luYXRvckJ1dHRvbiIsIkJ1dHRvbiIsIkNoZXZyb25MZWZ0IiwiU3R5bGVkQ2hldnJvbkxlZnQiLCJTdHlsZWRDaGV2cm9uUmlnaHQiLCJTdHlsZWRFbGxpcHNpc1dyYXBwZXIiLCJQYWdpbmF0b3JfZXh0ZW5kcyIsIlBhZ2luYXRvcl9wcm9wVHlwZXMiLCJhbHdheXNTaG93TGFzdFBhZ2VMaW5rIiwibnVtUGFnZUxpbmtzIiwidG90YWxQYWdlcyIsIlBhZ2luYXRvciIsImZpcnN0UGFnZSIsImxhc3RQYWdlIiwiX3JlZiRjdXJyZW50IiwiX3JlZiRhbHdheXNTaG93TGFzdFBhIiwiX3JlZiRudW1QYWdlTGlua3MiLCJudW1MaW5rcyIsImxvTWlkIiwiY2VpbCIsImhpTWlkIiwicGFnZXMiLCJpc0N1cnJlbnQiLCJwYWdlTnVtYmVyIiwiMzciLCI1MCIsIl9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkxlZnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsIl9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkxlZnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0IiwiNTEiLCI4OCIsInNwcmludGYiLCJhYmJyZXZpYXRlTnVtYmVyIiwibG9jYWxlIiwidG9OdW1iZXIiLCJ0b0xvY2FsZVN0cmluZyIsIl9pMThuIiwiXyIsIl9tYXRoIiwicm91bmRUb0RlY2ltYWwiLCJieXRlc1RvRmlsZVNpemUiLCJieXRlcyIsImtiRmlsZVNpemUiLCJSYW5nZUVycm9yIiwiZmxvb3IiLCJtYkZpbGVTaXplIiwiZ2JGaWxlU2l6ZSIsInRiRmlsZVNpemUiLCJzbWFydFRyaW0iLCJtYXhDaGFyc0Zyb21TdHJpbmciLCJfcmVmJHByZWNvbXBvc2VkIiwicHJlY29tcG9zZWQiLCJtaWRwb2ludCIsInRvUmVtb3ZlIiwibHN0cmlwIiwicnN0cmlwIiwiX3NwcmludGYiLCJzcHJpbnRmRm9ybWF0Iiwic3ByaW50ZlBhcnNlIiwic3RyaWN0UGFyc2VGbG9hdCIsImRlY2ltYWxPclNjaWVudGlmaWNSZWdleCIsIk5hTiIsImV4cCIsImZsb29yUG93ZXJPZlRlbiIsInBvdyIsImxvZyIsIkxOMTAiLCJpc0xlc3NUaGFuTWluU2FmZUludCIsImlzTnVtYmVyIiwiaXNHcmVhdGVyVGhhbk1heFNhZmVJbnQiLCJyZSIsIm5vdFR5cGUiLCJub3RQcmltaXRpdmUiLCJudW1lcmljQXJnIiwianNvbiIsInRleHQiLCJtb2R1bG8iLCJrZXlBY2Nlc3MiLCJpbmRleEFjY2VzcyIsInNpZ24iLCJwYXJzZVRyZWUiLCJhcmd2IiwiayIsInBoIiwicGFkIiwicGFkQ2hhcmFjdGVyIiwicGFkTGVuZ3RoIiwiaXNQb3NpdGl2ZSIsInRyZWVMZW5ndGgiLCJvdXRwdXQiLCJwYXJhbU5vIiwiZnJvbUNoYXJDb2RlIiwidG9FeHBvbmVudGlhbCIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiIsInRvVXBwZXJDYXNlIiwicGFkQ2hhciIsInNwcmludGZQYXJzZUNhY2hlIiwiZm10IiwiYXJnTmFtZXMiLCJTeW50YXhFcnJvciIsInJlcGxhY2VtZW50RmllbGQiLCJmaWVsZE1hdGNoIiwiZmllbGRMaXN0IiwiMTA3Iiwic3JjX0NhcmRfQ2FyZCIsIkNhcmRfSGVhZGVyIiwiQ2FyZF9Cb2R5IiwiQ2FyZF9Gb290ZXIiLCJGb290ZXJTdHlsZXNfU3R5bGVkQm94IiwiJHNob3dUb3BCb3JkZXIiLCJGb290ZXJfZXh0ZW5kcyIsIkZvb3Rlcl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIkZvb3Rlcl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiRm9vdGVyX3Byb3BUeXBlcyIsInNob3dCb3JkZXIiLCJGb290ZXIiLCJfcmVmJHNob3dCb3JkZXIiLCJBbmNob3JfIiwiQW5jaG9yX2RlZmF1bHQiLCJTdHlsZWRUaXRsZSIsIlN0eWxlZFN1YnRpdGxlIiwiU3R5bGVkVGl0bGVDb250YWluZXIiLCIkdHJ1bmNhdGVUaXRsZSIsIlN0eWxlZEFjdGlvbkNvbnRhaW5lciIsIkhlYWRlclN0eWxlc19TdHlsZWRCb3giLCJIZWFkZXJfZXh0ZW5kcyIsIkhlYWRlcl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIkhlYWRlcl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiSGVhZGVyX3Byb3BUeXBlcyIsInN1YnRpdGxlIiwidHJ1bmNhdGVUaXRsZSIsIkhlYWRlciIsIl9yZWYkdHJ1bmNhdGVUaXRsZSIsIiRjYXJkSGFzQm9yZGVyIiwicmVuZGVyc0FzQnV0dG9uIiwiU3R5bGVkRmlyZWZveEZsZXhIYWNrIiwiQ2FyZF9leHRlbmRzIiwiQ2FyZF9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIkNhcmRfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIkNhcmRfcHJvcFR5cGVzIiwiQ2FyZF9DYXJkIiwiQ2FyZCIsIl9zaGFyZWRQcm9wcyIsIl9vd25Qcm9wcyIsIl9zZWxlY3RlZCIsIl9zaG93Qm9yZGVyIiwiX2NoaWxkcmVuIiwiX2VsZW1lbnRSZWYiLCJfb3RoZXJQcm9wcyIsImhhbmRsZUNhcmRDbGljayIsIjUyIiwiNzEiLCIxNTQiLCJBbmNob3JfQW5jaG9yIiwiU3R5bGVkQW5jaG9yIiwiQW5jaG9yIiwiaHJlZiIsImZyZWVTZWxmIiwicmVXaGl0ZXNwYWNlIiwicmVUcmltU3RhcnQiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwiaXNPd24iLCJ1bm1hc2tlZCIsInJlSXNCYWRIZXgiLCJyZUlzQmluYXJ5IiwicmVJc09jdGFsIiwiZnJlZVBhcnNlSW50Iiwib3RoZXIiLCJpc0JpbmFyeSIsIm5hdGl2ZU1pbiIsIndhaXQiLCJsYXN0QXJncyIsImxhc3RUaGlzIiwibWF4V2FpdCIsImxhc3RJbnZva2VUaW1lIiwibGVhZGluZyIsIm1heGluZyIsImludm9rZUZ1bmMiLCJ0aW1lIiwibGVhZGluZ0VkZ2UiLCJ0aW1lckV4cGlyZWQiLCJzaG91bGRJbnZva2UiLCJ0aW1lU2luY2VMYXN0Q2FsbCIsInRyYWlsaW5nRWRnZSIsInRpbWVXYWl0aW5nIiwicmVtYWluaW5nV2FpdCIsImRlYm91bmNlZCIsImlzSW52b2tpbmciLCJmbHVzaCIsImxpc3RNb2RlIiwiZGVib3VuY2UiLCJSZXNpemVEZXRlY3RvciIsInJlc2l6YWJsZUVsZW1lbnRJZCIsIm90aGVyRWxlbWVudCIsImhhbmRsZUhlaWdodCIsIl9lbnRyeSRjb250ZW50UmVjdCIsIm5vdGlmeVdpZHRoIiwibm90aWZ5SGVpZ2h0Iiwic2tpcE9uTW91bnQiLCJhbmltYXRpb25GcmFtZUlEIiwiY29udmVydENoaWxkcmVuVG9BcnJheSIsInJlZnJlc2hNb2RlIiwicmVmcmVzaFJhdGUiLCJyZWZyZXNoT3B0aW9ucyIsInJlc2l6ZUhhbmRsZXIiLCJjcmVhdGVSZXNpemVIYW5kbGVyIiwicm8iLCJyZXNpemFibGVFbGVtZW50IiwiZ2V0RWxlbWVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlUmVuZGVyUHJvcCIsInJlbmRlckNoaWxkcmVuIiwiV3JhcHBlZENvbXBvbmVudCIsIlJlc2l6ZURldGVjdG9ySE9DIiwiZ2V0UmFuZG9tVmFsdWVzIiwicm5kczgiLCJybmciLCJjcnlwdG8iLCJtc0NyeXB0byIsInV1aWQiLCJieXRlVG9IZXgiLCJzdWJzdHIiLCJidWYiLCJybmRzIiwicmFuZG9tIl0sIm1hcHBpbmdzIjoieUZBZUFBLEVBQU9DLFFBZlAsU0FBeUJDLEVBQUtDLEVBQUtDLEdBWWpDLE9BWElELEtBQU9ELEVBQ1RHLE9BQU9DLGVBQWVKLEVBQUtDLEVBQUssQ0FDOUJDLE1BQU9BLEVBQ1BHLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxVQUFVLElBR1pQLEVBQUlDLEdBQU9DLEVBR05GLEdBSVRGLEVBQU9DLFFBQWlCLFFBQUlELEVBQU9DLFFBQVNELEVBQU9DLFFBQVFTLFlBQWEsRyxjQ2V4RVYsRUFBT0MsUUFKUCxTQUFzQkcsR0FDcEIsT0FBZ0IsTUFBVEEsR0FBaUMsaUJBQVRBLEksY0MzQmpDLElBeUJJTyxFQUFVQyxNQUFNRCxRQUVwQlgs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QU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDeEQsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN4RCxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUMxQixJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFDekMsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDdkUsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDdkUsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN4RCxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUN6QyxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFDekMsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQ3pDLElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUN6QyxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDeEQsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQ3pDLElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUN6QyxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDdEYsSUFBVSxJQUFNLElBQVUs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RUFBUyxJQUFNeWhGLEVBQVU1eUYsRUFBSW1SLEVBQVMsSUFBTSxJQUFNeWhGLEVBQVU1eUYsRUFBSW1SLEVBQVMsSUFBTXloRixFQUFVNXlGLEVBQUltUixFQUFTLElBQU0sSUFBTXloRixFQUFVNXlGLEVBQUltUixFQUFTLEtBQU95aEYsRUFBVTV5RixFQUFJbVIsRUFBUyxLQUFPeWhGLEVBQVU1eUYsRUFBSW1SLEVBQVMsS0FBT3loRixFQUFVNXlGLEVBQUltUixFQUFTLEtBQU95aEYsRUFBVTV5RixFQUFJbVIsRUFBUyxLQUFPeWhGLEVBQVU1eUYsRUFBSW1SLEVBQVMsTUFBTXc2QixjQU16ZixJQUFLLEVBQVNnbkQsR0FDWixNQUFNNWdHLFVBQVUsK0JBR2xCLE9BQU80Z0csR0VITSxJQXBCZixTQUFZOWIsRUFBU2ljLEVBQUszaEYsR0FFeEIsSUFBSTRoRixHQURKbGMsRUFBVUEsR0FBVyxJQUNGbWMsU0FBV25jLEVBQVEyYixLQUFPQSxLQUs3QyxHQUhBTyxFQUFLLEdBQWUsR0FBVkEsRUFBSyxHQUFZLEdBQzNCQSxFQUFLLEdBQWUsR0FBVkEsRUFBSyxHQUFZLElBRXZCRCxFQUFLLENBQ1AzaEYsRUFBU0EsR0FBVSxFQUVuQixJQUFLLElBQUkvdEIsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ3hCMHZHLEVBQUkzaEYsRUFBUy90QixHQUFLMnZHLEVBQUszdkcsR0FHekIsT0FBTzB2RyxFQUdULE9BQU8sRUFBVUMiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0Q3VzdG9taXplZFRoZW1lID0gZXhwb3J0cy5hZGRUaGVtZURlZmF1bHRzID0gdm9pZCAwO1xuXG52YXIgX2xvZGFzaCA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5cbnZhciBfZ2V0VGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2dldFRoZW1lXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogQWNjZXB0cyBhIHRoZW1lIG9iamVjdCBhbmQgcmV0dXJucyBzdXBwb3J0ZWQgdmFsdWVzIGFuZCBkZWZhdWx0cy5cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBhZGRUaGVtZURlZmF1bHRzID0gZnVuY3Rpb24gYWRkVGhlbWVEZWZhdWx0cygpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgX3JlZiRmYW1pbHkgPSBfcmVmLmZhbWlseSxcbiAgICAgIGZhbWlseSA9IF9yZWYkZmFtaWx5ID09PSB2b2lkIDAgPyAncHJpc21hJyA6IF9yZWYkZmFtaWx5LFxuICAgICAgX3JlZiRjb2xvclNjaGVtZSA9IF9yZWYuY29sb3JTY2hlbWUsXG4gICAgICBjb2xvclNjaGVtZSA9IF9yZWYkY29sb3JTY2hlbWUgPT09IHZvaWQgMCA/ICdkYXJrJyA6IF9yZWYkY29sb3JTY2hlbWUsXG4gICAgICBfcmVmJGRlbnNpdHkgPSBfcmVmLmRlbnNpdHksXG4gICAgICBkZW5zaXR5ID0gX3JlZiRkZW5zaXR5ID09PSB2b2lkIDAgPyAnY29tZm9ydGFibGUnIDogX3JlZiRkZW5zaXR5O1xuXG4gIHJldHVybiB7XG4gICAgZmFtaWx5OiBmYW1pbHksXG4gICAgY29sb3JTY2hlbWU6IGNvbG9yU2NoZW1lLFxuICAgIGRlbnNpdHk6IGRlbnNpdHlcbiAgfTtcbn07XG5cbmV4cG9ydHMuYWRkVGhlbWVEZWZhdWx0cyA9IGFkZFRoZW1lRGVmYXVsdHM7XG5cbmZ1bmN0aW9uIGdldEN1c3RvbWl6ZWRUaGVtZVVubWVtbyhzZXR0aW5ncywgY3VzdG9taXplcikge1xuICB2YXIgdmFyaWFibGVzID0gKDAsIF9nZXRUaGVtZVtcImRlZmF1bHRcIl0pKHNldHRpbmdzKTtcblxuICBpZiAoIWN1c3RvbWl6ZXIpIHtcbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgcmV0dXJuIGN1c3RvbWl6ZXIodmFyaWFibGVzKTtcbn1cbi8qKlxuICogQWNjZXB0cyBhIHRoZW1lIG9iamVjdCBhbmQgY3VzdG9taXplciwgYW5kIHJldHVybnMgc3VwcG9ydGVkIHZhbHVlcyBhbmQgZGVmYXVsdHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cblxudmFyIGdldEN1c3RvbWl6ZWRUaGVtZSA9ICgwLCBfbG9kYXNoLm1lbW9pemUpKGdldEN1c3RvbWl6ZWRUaGVtZVVubWVtbywgZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgZmFtaWx5ID0gX3JlZjIuZmFtaWx5LFxuICAgICAgY29sb3JTY2hlbWUgPSBfcmVmMi5jb2xvclNjaGVtZSxcbiAgICAgIGRlbnNpdHkgPSBfcmVmMi5kZW5zaXR5O1xuXG4gIHZhciBjdXN0b21pemVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBcIlwiLmNvbmNhdChmYW1pbHksIFwiLVwiKS5jb25jYXQoY29sb3JTY2hlbWUsIFwiLVwiKS5jb25jYXQoZGVuc2l0eSwgXCItXCIpLmNvbmNhdCghIWN1c3RvbWl6ZXIpO1xufSk7XG5leHBvcnRzLmdldEN1c3RvbWl6ZWRUaGVtZSA9IGdldEN1c3RvbWl6ZWRUaGVtZTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEwNCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEwNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIHNyY19NZW51X01lbnU7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSXRlbVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIE1lbnVfSXRlbTsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIZWFkaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gTWVudV9IZWFkaW5nOyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRpdmlkZXJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBNZW51X0RpdmlkZXI7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImxvZGFzaC9vbWl0XCJcbnZhciBvbWl0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xudmFyIG9taXRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ob21pdF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9mb2N1c1wiXG52YXIgZm9jdXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2tleWJvYXJkXCJcbnZhciBrZXlib2FyZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzXCJcbnZhciB0aGVtZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTWVudS9EaXZpZGVyU3R5bGVzLnRzXG5cblxudmFyIFN0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkRpdmlkZXJTdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJsM3pmaDMtMFwiXG59KShbXCJib3JkZXItdG9wOjFweCBzb2xpZCBcIiwgXCI7XCIsIFwiXCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLm5ldXRyYWwyMDBcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm1hcmdpbjo4cHggMDtcIl0pLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm1hcmdpbjo2cHggMDtcIl0pXG4gIH1cbn0pKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTWVudS9EaXZpZGVyLnRzeFxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cbnZhciBwcm9wVHlwZXMgPSB7fTtcblxuLyoqXG4gKiBBIG5vbi1pbnRlcmFjdGl2ZSBtZW51IGl0ZW0gdXNlZCB0byB2aXN1YWxseSBzZXBhcmF0ZSBncm91cHMgb2YgaXRlbXMgaW4gdGhlIG1lbnUuXG4gKi9cbmZ1bmN0aW9uIERpdmlkZXIoX3JlZikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIERpdmlkZXJQcm9wc0Jhc2VcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWQsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdFwiOiBcImRpdmlkZXJcIixcbiAgICByb2xlOiBcInNlcGFyYXRvclwiXG4gIH0sIG90aGVyUHJvcHMpKTtcbn1cblxuRGl2aWRlci5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG4vKiBSZW1vdmUgdGhlIGl0ZW0gaWYgaXQgaXMgdGhlIGZpcnN0IGl0ZW0gYWZ0ZXIgZmlsdGVyaW5nICovXG5cbkRpdmlkZXIuZmlsdGVyRmlyc3QgPSB0cnVlO1xuLyogUmVtb3ZlIGNvbnNlY3V0aXZlIGl0ZW1zIHdpdGggZmlsdGVyQ29uc2VjdXRpdmUgPSB0cnVlIChEaXZpZGVycyBhbmQgSGVhZGluZ3MpICovXG5cbkRpdmlkZXIuZmlsdGVyQ29uc2VjdXRpdmUgPSB0cnVlO1xuLyogUmVtb3ZlIHRoZSBpdGVtIGlmIGl0IGlzIHRoZSBsYXN0IGl0ZW0gYWZ0ZXIgZmlsdGVyaW5nLiAqL1xuXG5EaXZpZGVyLmZpbHRlckxhc3QgPSB0cnVlO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgTWVudV9EaXZpZGVyID0gKERpdmlkZXIpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvSGVhZGluZ1wiXG52YXIgSGVhZGluZ18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcbnZhciBIZWFkaW5nX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEhlYWRpbmdfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lXCJcbnZhciB1c2VTcGx1bmtUaGVtZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcbnZhciB1c2VTcGx1bmtUaGVtZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih1c2VTcGx1bmtUaGVtZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NZW51L0hlYWRpbmdTdHlsZXMudHNcblxuXG52YXIgSGVhZGluZ1N0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkaW5nU3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwibWNkMndzLTBcIlxufSkoW1wiXCIsIFwiIGJvcmRlci10b3A6MXB4IHNvbGlkIHRyYW5zcGFyZW50O3BhZGRpbmc6XCIsIFwiOyY6bm90KDpmaXJzdC1jaGlsZCl7XCIsIFwiO31cIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJcIiwgXCIgXCIsIFwiIDZweFwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nUXVhcnRlciwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nSGFsZiksXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiAnMTNweCAxNnB4IDEwcHggMTZweCcsXG4gICAgY29tcGFjdDogJzlweCAxNnB4IDZweCAxNnB4J1xuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci10b3A6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXIpLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLXRvcDoxcHggc29saWQgXCIsIFwiO21hcmdpbi10b3A6NnB4O3BhZGRpbmctdG9wOjE5cHg7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLm5ldXRyYWwyMDApLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci10b3A6MXB4IHNvbGlkIFwiLCBcIjttYXJnaW4tdG9wOjZweDtwYWRkaW5nLXRvcDoxNXB4O1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5uZXV0cmFsMjAwKVxuICB9XG59KSk7XG52YXIgUHJpc21hU2VjdGlvblRpdGxlID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmg1LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkaW5nU3R5bGVzX19QcmlzbWFTZWN0aW9uVGl0bGVcIixcbiAgY29tcG9uZW50SWQ6IFwibWNkMndzLTFcIlxufSkoW1wiXCIsIFwiIGZvbnQtc2l6ZTpcIiwgXCI7bGluZS1oZWlnaHQ6XCIsIFwiO2ZvbnQtd2VpZ2h0OlwiLCBcIjtsZXR0ZXItc3BhY2luZzowLjAyZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnYmxvY2snKSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmVIZWlnaHQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFdlaWdodEJvbGQpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NZW51L0hlYWRpbmcudHN4XG5mdW5jdGlvbiBIZWFkaW5nX2V4dGVuZHMoKSB7IEhlYWRpbmdfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBIZWFkaW5nX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG5cblxudmFyIEhlYWRpbmdfcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgdGl0bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xcbn07XG5cbi8qKlxuICogQSBub24taW50ZXJhY3RpdmUgYE1lbnVgIGl0ZW0gdXNlZCB0byBzZXBhcmF0ZSBhbmQgbGFiZWwgZ3JvdXBzIG9mIGBNZW51YCBpdGVtcy5cbiAqL1xuZnVuY3Rpb24gSGVhZGluZyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNoaWxkcmVuXCIsIFwidGl0bGVcIl0pO1xuXG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSB1c2VTcGx1bmtUaGVtZV9kZWZhdWx0KCkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHk7XG5cbiAgcmV0dXJuIGZhbWlseSA9PT0gJ3ByaXNtYScgPyAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoSGVhZGluZ1N0eWxlc19TdHlsZWQsIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQcmlzbWFTZWN0aW9uVGl0bGUsIEhlYWRpbmdfZXh0ZW5kcyh7XG4gICAgYXM6IHRpdGxlID8gJ2g0JyA6ICdoNScsXG4gICAgXCJkYXRhLXRlc3RcIjogXCJoZWFkaW5nXCJcbiAgfSwgb3RoZXJQcm9wcyksIGNoaWxkcmVuKSkgOiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoSGVhZGluZ1N0eWxlc19TdHlsZWQsIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChIZWFkaW5nX2RlZmF1bHQuYSwgSGVhZGluZ19leHRlbmRzKHtcbiAgICBzdHlsZToge1xuICAgICAgbWFyZ2luOiAwXG4gICAgfSxcbiAgICBsZXZlbDogdGl0bGUgPyA0IDogJ3NzJyxcbiAgICBcImRhdGEtdGVzdFwiOiBcImhlYWRpbmdcIlxuICB9LCBvdGhlclByb3BzKSwgY2hpbGRyZW4pKTtcbn1cblxuSGVhZGluZy5wcm9wVHlwZXMgPSBIZWFkaW5nX3Byb3BUeXBlcztcbi8qIFJlbW92ZSBjb25zZWN1dGl2ZSBpdGVtcyB3aXRoIGZpbHRlckNvbnNlY3V0aXZlID0gdHJ1ZSAoRGl2aWRlcnMgYW5kIEhlYWRpbmdzKSAqL1xuXG5IZWFkaW5nLmZpbHRlckNvbnNlY3V0aXZlID0gdHJ1ZTtcbi8qIFJlbW92ZSB0aGUgaXRlbSBpZiBpdCBpcyB0aGUgbGFzdCBpdGVtIGFmdGVyIGZpbHRlcmluZy4gKi9cblxuSGVhZGluZy5maWx0ZXJMYXN0ID0gdHJ1ZTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIE1lbnVfSGVhZGluZyA9IChIZWFkaW5nKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2ljb25zL0NoZWNrLnRzeFxudmFyIENoZWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LWljb25zL1RyaWFuZ2xlUmlnaHRTbWFsbFwiXG52YXIgVHJpYW5nbGVSaWdodFNtYWxsXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xudmFyIFRyaWFuZ2xlUmlnaHRTbWFsbF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihUcmlhbmdsZVJpZ2h0U21hbGxfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9UaGVtZWRJY29uLnRzeFxudmFyIFRoZW1lZEljb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2ljb25zL1NWRy50c3hcbnZhciBTVkcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9pY29ucy9DYXJldFJpZ2h0LnRzeFxuZnVuY3Rpb24gQ2FyZXRSaWdodF9leHRlbmRzKCkgeyBDYXJldFJpZ2h0X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gQ2FyZXRSaWdodF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuXG5cbmZ1bmN0aW9uIFByaXNtYTI0KF9yZWYpIHtcbiAgdmFyIG90aGVyUHJvcHMgPSBDYXJldFJpZ2h0X2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBDYXJldFJpZ2h0X2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNzcwMDQgMTYuNDk4NUM4Ljc3MDA0IDE2LjkzMTMgOS4yODI0MSAxNy4xNTk3IDkuNjA0MjUgMTYuODcwNEwxNC42MTI2IDEyLjM2OTZDMTQuODMzNyAxMi4xNzA5IDE0LjgzMzYgMTEuODI0MyAxNC42MTI1IDExLjYyNTdMOS42MDQxMiA3LjEyNzQ0QzkuMjgyMjUgNi44MzgzNCA4Ljc3MDAyIDcuMDY2NzggOC43NzAwMiA3LjQ5OTQzTDguNzcwMDQgMTYuNDk4NVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ2FyZXRSaWdodChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRoZW1lZEljb25bXCJhXCIgLyogZGVmYXVsdCAqL10sIENhcmV0UmlnaHRfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogVHJpYW5nbGVSaWdodFNtYWxsX2RlZmF1bHQuYSxcbiAgICBQcmlzbWEyNDogUHJpc21hMjRcbiAgfSwgcHJvcHMpKTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvQ2hldnJvblJpZ2h0LnRzeFxudmFyIENoZXZyb25SaWdodCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIlxudmFyIENsaWNrYWJsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBDbGlja2FibGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQ2xpY2thYmxlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1N3aXRjaFwiXG52YXIgU3dpdGNoXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjApO1xudmFyIFN3aXRjaF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTd2l0Y2hfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTWVudS9JdGVtU3R5bGVzLnRzXG5cblxuXG5cbnZhciBpdGVtRGVzY3JpcHRpb24gPSBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7Zm9udC1zaXplOlwiLCBcIjtsaW5lLWhlaWdodDpcIiwgXCI7b3ZlcmZsb3c6aW5oZXJpdDt3aGl0ZS1zcGFjZTppbmhlcml0O3RleHQtb3ZlcmZsb3c6aW5oZXJpdDtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGVmYXVsdCxcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0R3JheVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFNpemVTbWFsbCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogJzE2cHgnXG59KSk7XG52YXIgU3R5bGVkSXRlbURlc2NyaXB0aW9uQm90dG9tID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLnNwYW4ud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkl0ZW1TdHlsZXNfX1N0eWxlZEl0ZW1EZXNjcmlwdGlvbkJvdHRvbVwiLFxuICBjb21wb25lbnRJZDogXCJzYy00a2MwNTMtMFwiXG59KShbXCJcIiwgXCI7ZGlzcGxheTpibG9jaztcIl0sIGl0ZW1EZXNjcmlwdGlvbik7XG52YXIgU3R5bGVkSXRlbURlc2NyaXB0aW9uUmlnaHQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuc3Bhbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSXRlbVN0eWxlc19fU3R5bGVkSXRlbURlc2NyaXB0aW9uUmlnaHRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNGtjMDUzLTFcIlxufSkoW1wiXCIsIFwiO2Zsb2F0OnJpZ2h0O3BhZGRpbmctbGVmdDpcIiwgXCI7bWF4LXdpZHRoOjUwJTt0ZXh0LWFsaWduOnJpZ2h0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIl0sIGl0ZW1EZXNjcmlwdGlvbiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nKTtcbnZhciBTdHlsZWRJdGVtU2VsZWN0ZWRJY29uID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSXRlbVN0eWxlc19fU3R5bGVkSXRlbVNlbGVjdGVkSWNvblwiLFxuICBjb21wb25lbnRJZDogXCJzYy00a2MwNTMtMlwiXG59KShbXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgXCIgY29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicmlnaHQ6MTZweDtcIl0pLFxuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ0b3A6NXB4O3JpZ2h0OjNweDtsZWZ0OjhweDtcIl0pXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmUsXG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JMMTBcbn0pKTtcbnZhciBTdHlsZWRJdGVtSWNvbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJJdGVtU3R5bGVzX19TdHlsZWRJdGVtSWNvblwiLFxuICBjb21wb25lbnRJZDogXCJzYy00a2MwNTMtM1wiXG59KShbXCJmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6XCIsIFwiO21pbi13aWR0aDoxMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOlwiLCBcIjtcIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6ICc4cHgnLFxuICBlbnRlcnByaXNlOiAnM3B4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6ICdpbml0aWFsJyxcbiAgZW50ZXJwcmlzZTogJ21pZGRsZSdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjttaW4td2lkdGg6MjRweDttaW4taGVpZ2h0OjI0cHg7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkKSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7bWluLXdpZHRoOjIwcHg7bWluLWhlaWdodDoyMHB4O1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JNdXRlZClcbiAgfSxcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCk7XCJdKVxufSkpO1xudmFyIFN0eWxlZENsaWNrYWJsZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShDbGlja2FibGVfZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSXRlbVN0eWxlc19fU3R5bGVkQ2xpY2thYmxlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTRrYzA1My00XCJcbn0pKFtcImRpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6XCIsIFwiO3dvcmQtd3JhcDpicmVhay13b3JkO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCU7cGFkZGluZzpcIiwgXCI7XCIsIFwiIFwiLCBcIiAmOm5vdChbZGlzYWJsZWRdKXsmOmhvdmVye2JhY2tncm91bmQ6XCIsIFwiO1wiLCBcIn0mOmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OlwiLCBcIjtcIiwgXCJ9XCIsIFwiIFwiLCBcIn0mW2Rpc2FibGVkXXtjb2xvcjpcIiwgXCI7Y3Vyc29yOm5vdC1hbGxvd2VkO1wiLCBcIixcIiwgXCJ7Y29sb3I6aW5oZXJpdDt9XCIsIFwie2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjpcIiwgXCI7fVwiLCBcIn1cIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlLFxuICBlbnRlcnByaXNlOiB7XG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTYsXG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTQ1XG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6ICcxMHB4IDE2cHggMTBweCAxNnB4JyxcbiAgICBjb21wYWN0OiAnNnB4IDE2cHggNnB4IDE2cHgnXG4gIH0sXG4gIGVudGVycHJpc2U6ICc2cHggMTBweCA2cHggMTBweCdcbn0pLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJGlzU2VsZWN0YWJsZSA9IF9yZWYuJGlzU2VsZWN0YWJsZSxcbiAgICAgICRzZWxlY3RhYmxlQXBwZWFyYW5jZSA9IF9yZWYuJHNlbGVjdGFibGVBcHBlYXJhbmNlO1xuICByZXR1cm4gJGlzU2VsZWN0YWJsZSAmJiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmctcmlnaHQ6NDRweDtcIiwgXCJcIl0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAkc2VsZWN0YWJsZUFwcGVhcmFuY2UgPT09ICdjaGVja2JveCcgJiYgJ3BhZGRpbmctbGVmdDogNDJweDsnO1xuICAgIH0pLFxuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6XCIsIFwiO1wiXSwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICRzZWxlY3RhYmxlQXBwZWFyYW5jZSA9PT0gJ2NoZWNrYm94JyA/ICczMnB4JyA6ICcyOHB4JztcbiAgICB9KVxuICB9KTtcbn0sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGFjdGl2ZSA9IF9yZWYyLiRhY3RpdmU7XG4gIHJldHVybiAkYWN0aXZlICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJveC1zaGFkb3c6XCIsIFwiO2JhY2tncm91bmQ6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvd0luc2V0LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlIb3ZlclxuICB9KSk7XG59LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXIsXG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9ySG92ZXJcbn0pLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyICRzZWxlY3RlZCA9IF9yZWYzLiRzZWxlY3RlZDtcbiAgcmV0dXJuICRzZWxlY3RlZCAmJiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQ6XCIsIFwiO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5vdmVybGF5Q29sb3JzKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlTZWxlY3RlZCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyKSlcbiAgfSk7XG59LCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93SW5zZXQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQ6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6YWN0aXZle2JhY2tncm91bmQ6XCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlBY3RpdmUpXG59KSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciAkc2VsZWN0ZWQgPSBfcmVmNC4kc2VsZWN0ZWQ7XG4gIHJldHVybiAkc2VsZWN0ZWQgJiYgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJiYWNrZ3JvdW5kOlwiLCBcIjsmOmFjdGl2ZXtiYWNrZ3JvdW5kOlwiLCBcIjt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5U2VsZWN0ZWQsIHRoZW1lc19bXCJtaXhpbnNcIl0ub3ZlcmxheUNvbG9ycyh0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5U2VsZWN0ZWQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlBY3RpdmUpKVxuICB9KTtcbn0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWQsXG4vKiBzYy1zZWwgKi9cblN0eWxlZEl0ZW1EZXNjcmlwdGlvbkJvdHRvbSxcbi8qIHNjLXNlbCAqL1xuU3R5bGVkSXRlbURlc2NyaXB0aW9uUmlnaHQsXG4vKiBzYy1zZWwgKi9cblN0eWxlZEl0ZW1TZWxlY3RlZEljb24sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWQsXG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTgwXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJiA+ICogPiBcIiwgXCJ7Y29sb3I6XCIsIFwiO31cIl0sXG4gIC8qIHNjLXNlbCAqL1xuICBTdHlsZWRJdGVtSWNvbiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZClcbn0pLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgdmFyICRzZWxlY3RlZCA9IF9yZWY1LiRzZWxlY3RlZDtcbiAgcmV0dXJuICRzZWxlY3RlZCAmJiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIlwiLCBcIntjb2xvcjpcIiwgXCI7fVwiXSxcbiAgICAvKiBzYy1zZWwgKi9cbiAgICBTdHlsZWRJdGVtSWNvbiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmUpXG4gIH0pO1xufSk7XG52YXIgU3R5bGVkU3dpdGNoID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFN3aXRjaF9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJJdGVtU3R5bGVzX19TdHlsZWRTd2l0Y2hcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNGtjMDUzLTVcIlxufSkoW1wicG9zaXRpb246YWJzb2x1dGU7bGVmdDpcIiwgXCI7dG9wOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6ICcxNnB4JyxcbiAgZW50ZXJwcmlzZTogJzhweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6ICcycHgnLFxuICAgIGNvbXBhY3Q6ICctMnB4J1xuICB9LFxuICBlbnRlcnByaXNlOiAnMHB4J1xufSkpO1xudmFyIFN0eWxlZElubmVyV3JhcHBlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJJdGVtU3R5bGVzX19TdHlsZWRJbm5lcldyYXBwZXJcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNGtjMDUzLTZcIlxufSkoW1wiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7XCJdKTtcbnZhciBTdHlsZWRUaXRsZUFuZERlc2NyaXB0aW9uV3JhcHBlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJJdGVtU3R5bGVzX19TdHlsZWRUaXRsZUFuZERlc2NyaXB0aW9uV3JhcHBlclwiLFxuICBjb21wb25lbnRJZDogXCJzYy00a2MwNTMtN1wiXG59KShbXCJtYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO2FsaWduLXNlbGY6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpub3JtYWw7XCIsIFwiXCJdLCBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgdmFyICR0cnVuY2F0ZSA9IF9yZWY2LiR0cnVuY2F0ZTtcbiAgcmV0dXJuICR0cnVuY2F0ZSAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7XCJdKTtcbn0pO1xudmFyIFN0eWxlZExhYmVsID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSXRlbVN0eWxlc19fU3R5bGVkTGFiZWxcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNGtjMDUzLThcIlxufSkoW1wib3ZlcmZsb3c6aW5oZXJpdDt3aGl0ZS1zcGFjZTppbmhlcml0O3RleHQtb3ZlcmZsb3c6aW5oZXJpdDttYXgtd2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7XCIsIFwiIFwiLCBcIlwiXSwgZnVuY3Rpb24gKF9yZWY3KSB7XG4gIHZhciAkdHJ1bmNhdGUgPSBfcmVmNy4kdHJ1bmNhdGU7XG4gIHJldHVybiAkdHJ1bmNhdGUgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTpibG9jaztjbGVhcjpib3RoO1wiXSk7XG59LCBmdW5jdGlvbiAoX3JlZjgpIHtcbiAgdmFyICRtYXRjaGluZyA9IF9yZWY4LiRtYXRjaGluZztcbiAgcmV0dXJuICRtYXRjaGluZyAmJiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQpXG4gIH0pO1xufSk7XG52YXIgU3R5bGVkTWF0Y2ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuc3Bhbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSXRlbVN0eWxlc19fU3R5bGVkTWF0Y2hcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNGtjMDUzLTlcIlxufSkoW1wiY29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmUsXG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3Jcbn0pKTtcbnZhciBTdHlsZWRTdWJtZW51ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLnNwYW4ud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkl0ZW1TdHlsZXNfX1N0eWxlZFN1Ym1lbnVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNGtjMDUzLTEwXCJcbn0pKFtcImZsb2F0OnJpZ2h0O3BhZGRpbmctbGVmdDpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nU21hbGwsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6ICdpbmhlcml0JyxcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0R3JheVxufSkpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL3VwZGF0ZVJlYWN0UmVmLnRzXG52YXIgdXBkYXRlUmVhY3RSZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTWVudS9JdGVtLnRzeFxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBJdGVtX2V4dGVuZHMoKSB7IEl0ZW1fZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBJdGVtX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBJdGVtX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBJdGVtX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBJdGVtX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgSXRlbV9wcm9wVHlwZXMgPSB7XG4gIGFjdGl2ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGRlc2NyaXB0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGRlc2NyaXB0aW9uUG9zaXRpb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsncmlnaHQnLCAnYm90dG9tJ10pLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgaGFzU3VibWVudTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaWNvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgbWF0Y2hSYW5nZXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFycmF5T2YoZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc2hhcGUoe1xuICAgIHN0YXJ0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBlbmQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pKSxcbiAgb25DbGljazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb3BlbkluTmV3Q29udGV4dDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgcm9sZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydtZW51aXRlbScsICdtZW51aXRlbXJhZGlvJywgJ21lbnVpdGVtY2hlY2tib3gnLCAnbGlzdGJveGl0ZW0nLCAnb3B0aW9uJ10pLFxuICBzZWxlY3RhYmxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBzZWxlY3RhYmxlQXBwZWFyYW5jZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydjaGVja21hcmsnLCAnY2hlY2tib3gnXSksXG4gIHNlbGVjdGVkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBzcGx1bmtUaGVtZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICB0bzogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICB0cnVuY2F0ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbFxufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGl2ZTogZmFsc2UsXG4gIGRlc2NyaXB0aW9uUG9zaXRpb246ICdib3R0b20nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGhhc1N1Ym1lbnU6IGZhbHNlLFxuICBvcGVuSW5OZXdDb250ZXh0OiBmYWxzZSxcbiAgc2VsZWN0YWJsZTogZmFsc2UsXG4gIHNlbGVjdGFibGVBcHBlYXJhbmNlOiAnY2hlY2ttYXJrJyxcbiAgc2VsZWN0ZWQ6IGZhbHNlLFxuICB0cnVuY2F0ZTogZmFsc2Vcbn07XG5cbnZhciBJdGVtX0l0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEl0ZW0sIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoSXRlbSk7XG5cbiAgX2NyZWF0ZUNsYXNzKEl0ZW0sIG51bGwsIFt7XG4gICAga2V5OiBcInZhbGlkYXRlUHJvcHNcIixcbiAgICAvLyBAZG9jcy1wcm9wcy10eXBlIEl0ZW1Qcm9wc0Jhc2VcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhwcm9wcykge1xuICAgICAgaWYgKGZhbHNlKSB7fVxuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIEl0ZW0ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSXRlbSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJlbFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VudFwiLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIF90aGlzLmVsID0gZWw7XG4gICAgICBPYmplY3QodXBkYXRlUmVhY3RSZWZbXCJhXCIgLyogdXBkYXRlUmVhY3RSZWYgKi9dKShfdGhpcy5wcm9wcy5lbGVtZW50UmVmLCBlbCk7XG4gICAgfSk7XG5cbiAgICBJdGVtLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhJdGVtLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgSXRlbS52YWxpZGF0ZVByb3BzKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIHZhciBfdGhpcyRlbDtcblxuICAgICAgKF90aGlzJGVsID0gdGhpcy5lbCkgPT09IG51bGwgfHwgX3RoaXMkZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGVsLmZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNjcm9sbEludG9WaWV3SWZOZWVkZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuZWw7XG5cbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50RWwgPSBlbC5vZmZzZXRQYXJlbnQ7XG5cbiAgICAgIGlmICghcGFyZW50RWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBCZWxvdyB0aGUgYm90dG9tIG9mIHRoZSBjb250YWluZXIuXG5cblxuICAgICAgaWYgKHBhcmVudEVsLnNjcm9sbFRvcCArIHBhcmVudEVsLmNsaWVudEhlaWdodCA8IGVsLm9mZnNldFRvcCArIGVsLmNsaWVudEhlaWdodCkge1xuICAgICAgICBwYXJlbnRFbC5zY3JvbGxUb3AgPSBlbC5vZmZzZXRUb3AgKyBlbC5jbGllbnRIZWlnaHQgLSBwYXJlbnRFbC5jbGllbnRIZWlnaHQ7IC8vIEFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lci5cbiAgICAgIH0gZWxzZSBpZiAocGFyZW50RWwuc2Nyb2xsVG9wID4gZWwub2Zmc2V0VG9wKSB7XG4gICAgICAgIHBhcmVudEVsLnNjcm9sbFRvcCA9IGVsLm9mZnNldFRvcDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTGFiZWwoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgbWF0Y2hSYW5nZXMgPSBfdGhpcyRwcm9wcy5tYXRjaFJhbmdlcztcblxuICAgICAgaWYgKCFtYXRjaFJhbmdlcyB8fCAhT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc1N0cmluZ1wiXSkoY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlZ21lbnRzID0gW107IC8vIGJlZm9yZSBmaXJzdCBtYXRjaC4gTWF5IGJlIGVtcHR5IHN0cmluZy5cblxuICAgICAgc2VnbWVudHMucHVzaChjaGlsZHJlbi5zdWJzdHJpbmcoMCwgbWF0Y2hSYW5nZXNbMF0uc3RhcnQpKTtcbiAgICAgIG1hdGNoUmFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xuICAgICAgICBzZWdtZW50cy5wdXNoKFxuICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgICAgICAgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTWF0Y2gsIHtcbiAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgIFwiZGF0YS10ZXN0XCI6IFwibWF0Y2hcIlxuICAgICAgICB9LCBjaGlsZHJlbi5zdWJzdHJpbmcobWF0Y2guc3RhcnQsIG1hdGNoLmVuZCkpKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBtYXRjaFJhbmdlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgc2VnbWVudHMucHVzaChjaGlsZHJlbi5zdWJzdHJpbmcobWF0Y2guZW5kLCBtYXRjaFJhbmdlc1tpbmRleCArIDFdLnN0YXJ0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudHMucHVzaChjaGlsZHJlbi5zdWJzdHJpbmcobWF0Y2guZW5kLCBjaGlsZHJlbi5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc2VnbWVudHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3RpdmUgPSBfdGhpcyRwcm9wczIuYWN0aXZlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGhhc1N1Ym1lbnUgPSBfdGhpcyRwcm9wczIuaGFzU3VibWVudSxcbiAgICAgICAgICBzZWxlY3RhYmxlID0gX3RoaXMkcHJvcHMyLnNlbGVjdGFibGUsXG4gICAgICAgICAgc2VsZWN0YWJsZUFwcGVhcmFuY2UgPSBfdGhpcyRwcm9wczIuc2VsZWN0YWJsZUFwcGVhcmFuY2UsXG4gICAgICAgICAgc2VsZWN0ZWQgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWQsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzMi5pY29uLFxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gX3RoaXMkcHJvcHMyLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMyLmRpc2FibGVkLFxuICAgICAgICAgIG1hdGNoUmFuZ2VzID0gX3RoaXMkcHJvcHMyLm1hdGNoUmFuZ2VzLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25DbGljayxcbiAgICAgICAgICByb2xlID0gX3RoaXMkcHJvcHMyLnJvbGUsXG4gICAgICAgICAgc3BsdW5rVGhlbWUgPSBfdGhpcyRwcm9wczIuc3BsdW5rVGhlbWUsXG4gICAgICAgICAgdG8gPSBfdGhpcyRwcm9wczIudG8sXG4gICAgICAgICAgdHJ1bmNhdGUgPSBfdGhpcyRwcm9wczIudHJ1bmNhdGUsXG4gICAgICAgICAgZGVzY3JpcHRpb25Qb3NpdGlvbiA9IF90aGlzJHByb3BzMi5kZXNjcmlwdGlvblBvc2l0aW9uLFxuICAgICAgICAgIG9wZW5Jbk5ld0NvbnRleHQgPSBfdGhpcyRwcm9wczIub3BlbkluTmV3Q29udGV4dCxcbiAgICAgICAgICBvdGhlclByb3BzID0gSXRlbV9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIFtcImFjdGl2ZVwiLCBcImNoaWxkcmVuXCIsIFwiaGFzU3VibWVudVwiLCBcInNlbGVjdGFibGVcIiwgXCJzZWxlY3RhYmxlQXBwZWFyYW5jZVwiLCBcInNlbGVjdGVkXCIsIFwiaWNvblwiLCBcImRlc2NyaXB0aW9uXCIsIFwiZGlzYWJsZWRcIiwgXCJtYXRjaFJhbmdlc1wiLCBcIm9uQ2xpY2tcIiwgXCJyb2xlXCIsIFwic3BsdW5rVGhlbWVcIiwgXCJ0b1wiLCBcInRydW5jYXRlXCIsIFwiZGVzY3JpcHRpb25Qb3NpdGlvblwiLCBcIm9wZW5Jbk5ld0NvbnRleHRcIl0pO1xuXG4gICAgICB2YXIgZmFtaWx5ID0gc3BsdW5rVGhlbWUuZmFtaWx5O1xuICAgICAgdmFyIGlzU2VsZWN0YWJsZSA9IHNlbGVjdGFibGUgfHwgc2VsZWN0ZWQ7XG4gICAgICB2YXIgZGVmYXVsdFJvbGUgPSB7XG4gICAgICAgIG5vbnNlbGVjdGFibGU6ICdtZW51aXRlbScsXG4gICAgICAgIGNoZWNrbWFyazogJ21lbnVpdGVtcmFkaW8nLFxuICAgICAgICBjaGVja2JveDogJ21lbnVpdGVtY2hlY2tib3gnXG4gICAgICB9W2lzU2VsZWN0YWJsZSA/IHNlbGVjdGFibGVBcHBlYXJhbmNlIDogJ25vbnNlbGVjdGFibGUnXTsgLy8gYXJpYS1jaGVja2VkIHVwZGF0ZXMgb25seSB3aXRoIGNoZWNrbWFyayBhcHBlYXJhbmNlIGZvciBub3cgU1VJLTI1NzhcblxuICAgICAgdmFyIGFyaWFQcm9wcyA9IHtcbiAgICAgICAgJ2FyaWEtaGFzcG9wdXAnOiBoYXNTdWJtZW51ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtY2hlY2tlZCc6IHNlbGVjdGFibGVBcHBlYXJhbmNlID09PSAnY2hlY2ttYXJrJyAmJiBzZWxlY3RlZCA/IHRydWUgOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICB2YXIgc2VsZWN0YWJsZVBvc2l0aW9uID0gZmFtaWx5ID09PSAncHJpc21hJyA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICB2YXIgZGVzY3JpcHRpb25SaWdodCA9IGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uUG9zaXRpb24gPT09ICdyaWdodCcgJiYgc2VsZWN0YWJsZVBvc2l0aW9uICE9PSAncmlnaHQnO1xuICAgICAgdmFyIGRlc2NyaXB0aW9uQm90dG9tID0gZGVzY3JpcHRpb24gJiYgIWRlc2NyaXB0aW9uUmlnaHQ7XG4gICAgICB2YXIgc2VsZWN0YWJsZUNoZWNrbWFyayA9IHNlbGVjdGVkICYmIHNlbGVjdGFibGVBcHBlYXJhbmNlID09PSAnY2hlY2ttYXJrJyAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVNlbGVjdGVkSWNvbiwgbnVsbCwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENoZWNrW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB7XG4gICAgICAgIGVudGVycHJpc2VTaXplOiAwLjg1LFxuICAgICAgICBwcmlzbWFTaXplOiBcInNtYWxsXCIsXG4gICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDbGlja2FibGUsIEl0ZW1fZXh0ZW5kcyh7XG4gICAgICAgICRpc1NlbGVjdGFibGU6IGlzU2VsZWN0YWJsZSxcbiAgICAgICAgJHNlbGVjdGFibGVBcHBlYXJhbmNlOiBzZWxlY3RhYmxlQXBwZWFyYW5jZSxcbiAgICAgICAgJHNlbGVjdGVkOiBzZWxlY3RlZCxcbiAgICAgICAgJGFjdGl2ZTogYWN0aXZlLFxuICAgICAgICBcImRhdGEtdGVzdC1zZWxlY3RlZFwiOiBpc1NlbGVjdGFibGUgPyBzZWxlY3RlZCA6IG51bGwsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiaXRlbVwiLFxuICAgICAgICBcImRhdGEtaGFzLWljb25cIjogISFpY29uLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgIHJvbGU6IHJvbGUgfHwgZGVmYXVsdFJvbGUsXG4gICAgICAgIHRvOiB0byxcbiAgICAgICAgdGl0bGU6IHRydW5jYXRlICYmIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaXNTdHJpbmdcIl0pKGNoaWxkcmVuKSA/IGNoaWxkcmVuIDogdW5kZWZpbmVkLFxuICAgICAgICBvcGVuSW5OZXdDb250ZXh0OiBvcGVuSW5OZXdDb250ZXh0XG4gICAgICB9LCBhcmlhUHJvcHMsIG90aGVyUHJvcHMsIHtcbiAgICAgICAgZWxlbWVudFJlZjogdGhpcy5oYW5kbGVNb3VudFxuICAgICAgfSksIHNlbGVjdGFibGVQb3NpdGlvbiA9PT0gJ2xlZnQnICYmIHNlbGVjdGFibGVDaGVja21hcmssIHNlbGVjdGFibGUgJiYgc2VsZWN0YWJsZUFwcGVhcmFuY2UgPT09ICdjaGVja2JveCcgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFN3aXRjaCwge1xuICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZCxcbiAgICAgICAgc2VsZWN0ZWRMYWJlbDogXCJTZWxlY3RlZFwiLFxuICAgICAgICB1bnNlbGVjdGVkTGFiZWw6IFwiXCIsXG4gICAgICAgIHZhbHVlOiBcIm1lbnUtaXRlbVwiXG4gICAgICB9KSwgaGFzU3VibWVudSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkU3VibWVudSwgbnVsbCwgZmFtaWx5ID09PSAncHJpc21hJyA/IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDYXJldFJpZ2h0LCBudWxsKSA6IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDaGV2cm9uUmlnaHRbXCJhXCIgLyogZGVmYXVsdCAqL10sIG51bGwpKSwgZGVzY3JpcHRpb25SaWdodCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbURlc2NyaXB0aW9uUmlnaHQsIHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJkZXNjcmlwdGlvblwiXG4gICAgICB9LCBkZXNjcmlwdGlvbiksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJbm5lcldyYXBwZXIsIG51bGwsIGljb24gJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEl0ZW1JY29uLCBudWxsLCBpY29uKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFRpdGxlQW5kRGVzY3JpcHRpb25XcmFwcGVyLCB7XG4gICAgICAgICR0cnVuY2F0ZTogdHJ1bmNhdGVcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbCwge1xuICAgICAgICAkdHJ1bmNhdGU6IHRydW5jYXRlLFxuICAgICAgICAkbWF0Y2hpbmc6ICEhbWF0Y2hSYW5nZXMsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwibGFiZWxcIlxuICAgICAgfSwgdGhpcy5yZW5kZXJMYWJlbCgpKSwgZGVzY3JpcHRpb25Cb3R0b20gJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEl0ZW1EZXNjcmlwdGlvbkJvdHRvbSwge1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImRlc2NyaXB0aW9uXCJcbiAgICAgIH0sIGRlc2NyaXB0aW9uKSksIHNlbGVjdGFibGVQb3NpdGlvbiA9PT0gJ3JpZ2h0JyAmJiBzZWxlY3RhYmxlQ2hlY2ttYXJrKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEl0ZW07XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShJdGVtX0l0ZW0sIFwicHJvcFR5cGVzXCIsIEl0ZW1fcHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KEl0ZW1fSXRlbSwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxudmFyIEl0ZW1XaXRoVGhlbWUgPSBPYmplY3QodGhlbWVzX1tcIndpdGhTcGx1bmtUaGVtZVwiXSkoSXRlbV9JdGVtKTtcbkl0ZW1XaXRoVGhlbWUucHJvcFR5cGVzID0gSXRlbV9JdGVtLnByb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIE1lbnVfSXRlbSA9IChJdGVtV2l0aFRoZW1lKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1Njcm9sbFwiXG52YXIgU2Nyb2xsXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xudmFyIFNjcm9sbF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTY3JvbGxfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTWVudS9NZW51U3R5bGVzLnRzXG5cblxuXG52YXIgYWRqYWNlbnRTaWJsaW5nU3R5bGVzID0gT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLXRvcDoxcHggc29saWQgXCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTYwLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubmV1dHJhbDIwMFxufSkpO1xudmFyIE1lbnVTdHlsZXNfU3R5bGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiTWVudVN0eWxlc19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFvbGZmcDktMFwiXG59KShbXCJcIiwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgXCI7bWluLXdpZHRoOjYwcHg7b3ZlcmZsb3c6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgXCIgJiArICZ7XCIsIFwifVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnYmxvY2snKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yUG9wdXBcbn0pLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlclJhZGl1cywgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzo4cHggMDtcIl0pXG59KSwgYWRqYWNlbnRTaWJsaW5nU3R5bGVzKTtcbnZhciBTdHlsZWRTY3JvbGwgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoTWVudVN0eWxlc19TdHlsZWQud2l0aENvbXBvbmVudChTY3JvbGxfZGVmYXVsdC5hKSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIk1lbnVTdHlsZXNfX1N0eWxlZFNjcm9sbFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xb2xmZnA5LTFcIlxufSkoW1wiXCIsIFwiICsgJiwmICsgXCIsIFwie1wiLCBcIn1cIl0sXG4vKiBzYy1zZWwgKi9cbk1lbnVTdHlsZXNfU3R5bGVkLFxuLyogc2Mtc2VsICovXG5NZW51U3R5bGVzX1N0eWxlZCwgYWRqYWNlbnRTaWJsaW5nU3R5bGVzKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTWVudS9NZW51LnRzeFxuZnVuY3Rpb24gTWVudV90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IE1lbnVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IE1lbnVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIE1lbnVfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gTWVudV9leHRlbmRzKCkgeyBNZW51X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gTWVudV9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gTWVudV9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gTWVudV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gTWVudV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gTWVudV9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIE1lbnVfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIE1lbnVfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBNZW51X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBNZW51X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIE1lbnVfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgTWVudV9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gTWVudV9zZXRQcm90b3R5cGVPZihvLCBwKSB7IE1lbnVfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIE1lbnVfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gTWVudV9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gTWVudV9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBNZW51X2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBNZW51X2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBNZW51X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBNZW51X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoTWVudV90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIE1lbnVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIE1lbnVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gTWVudV9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gTWVudV9nZXRQcm90b3R5cGVPZihvKSB7IE1lbnVfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gTWVudV9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBNZW51X2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgTWVudV9wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICByZXRhaW5Gb2N1czogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgc3RvcFNjcm9sbFByb3BhZ2F0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sXG59O1xudmFyIE1lbnVfZGVmYXVsdFByb3BzID0ge1xuICByZXRhaW5Gb2N1czogdHJ1ZSxcbiAgc3RvcFNjcm9sbFByb3BhZ2F0aW9uOiBmYWxzZVxufTtcblxudmFyIE1lbnVfTWVudSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBNZW51X2luaGVyaXRzKE1lbnUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBNZW51X2NyZWF0ZVN1cGVyKE1lbnUpO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgTWVudVByb3BzQmFzZVxuICBmdW5jdGlvbiBNZW51KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgTWVudV9jbGFzc0NhbGxDaGVjayh0aGlzLCBNZW51KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGFpbmVyRWw6IG51bGxcbiAgICB9O1xuICAgIF90aGlzLmhhbmRsZU1vdW50ID0gX3RoaXMuaGFuZGxlTW91bnQuYmluZChNZW51X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIF90aGlzLmhhbmRsZUtleURvd24gPSBfdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQoTWVudV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBNZW51X2NyZWF0ZUNsYXNzKE1lbnUsIFt7XG4gICAga2V5OiBcImhhbmRsZU1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vdW50KGVsKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY29udGFpbmVyRWw6IGVsXG4gICAgICB9KTtcbiAgICAgIE9iamVjdCh1cGRhdGVSZWFjdFJlZltcImFcIiAvKiB1cGRhdGVSZWFjdFJlZiAqL10pKHRoaXMucHJvcHMuZWxlbWVudFJlZiwgZWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVLZXlEb3duXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSkge1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLmNvbnRhaW5lckVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KSA9PT0gJ3RhYicgJiYgdGhpcy5wcm9wcy5yZXRhaW5Gb2N1cykge1xuICAgICAgICBPYmplY3QoZm9jdXNfW1wiaGFuZGxlVGFiXCJdKSh0aGlzLnN0YXRlLmNvbnRhaW5lckVsLCBlLm5hdGl2ZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpICE9PSAnZG93bicgJiYgT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpICE9PSAndXAnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gZ2V0U29ydGVkVGFiYmFibGVFbGVtZW50cyByZXR1cm5zIGFuIEVsZW1lbnRbXSwgYnV0IGZvY3VzKCkgb25seSBleGlzdHMgb24gSFRNTEVsZW1lbnQgKG9mZmljaWFsbHkpXG5cblxuICAgICAgdmFyIHRhYmJhYmxlRWxlbWVudHMgPSBPYmplY3QoZm9jdXNfW1wiZ2V0U29ydGVkVGFiYmFibGVFbGVtZW50c1wiXSkodGhpcy5zdGF0ZS5jb250YWluZXJFbCkuZmlsdGVyKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGVsLmZvY3VzID09PSAnZnVuY3Rpb24nO1xuICAgICAgfSk7XG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gdGFiYmFibGVFbGVtZW50cy5pbmRleE9mKGUudGFyZ2V0KTtcblxuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpID09PSAndXAnICYmIGN1cnJlbnRJbmRleCA+IDApIHtcbiAgICAgICAgdGFiYmFibGVFbGVtZW50c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3Qoa2V5Ym9hcmRfW1wia2V5Y29kZVwiXSkoZS5uYXRpdmVFdmVudCkgPT09ICdkb3duJyAmJiBjdXJyZW50SW5kZXggPCB0YWJiYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGFiYmFibGVFbGVtZW50c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZWxlbWVudFJlZiA9IF90aGlzJHByb3BzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgcmV0YWluRm9jdXMgPSBfdGhpcyRwcm9wcy5yZXRhaW5Gb2N1cyxcbiAgICAgICAgICBzdG9wU2Nyb2xsUHJvcGFnYXRpb24gPSBfdGhpcyRwcm9wcy5zdG9wU2Nyb2xsUHJvcGFnYXRpb24sXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IE1lbnVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiZWxlbWVudFJlZlwiLCBcInJldGFpbkZvY3VzXCIsIFwic3RvcFNjcm9sbFByb3BhZ2F0aW9uXCJdKTtcblxuICAgICAgdmFyIGNoaWxkcmVuQ2xlYW5lZCA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGl0ZW0sIGluZGV4LCBvcmlnaW5hbCkge1xuICAgICAgICAvKiBGaWx0ZXIgb3V0IGluaXRpYWwgRGl2aWRlcnNcbiAgICAgICAgICogUmVxdWlyZXMgcmVkdWNlKCkgb3ZlciBmaWx0ZXIoKSBiZWNhdXNlIGEgSGVhZGluZyBtYXkgaGF2ZSBiZWVuXG4gICAgICAgICAqIGJlZm9yZSB0aGUgRGl2aWRlci5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IE1lbnVfRGl2aWRlciAmJiBpdGVtLnR5cGUuZmlsdGVyRmlyc3QgJiYgYWNjLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0gLy8gRmlsdGVyIG91dCBjb25zZWN1dGl2ZSBEaXZpZGVycyBhbmQgSGVhZGluZ3NcblxuXG4gICAgICAgIGlmICgoaXRlbS50eXBlID09PSBNZW51X0RpdmlkZXIgfHwgaXRlbS50eXBlID09PSBNZW51X0hlYWRpbmcpICYmIGl0ZW0udHlwZS5maWx0ZXJDb25zZWN1dGl2ZSAmJiAhaXRlbS5wcm9wcy50aXRsZSAmJiBvcmlnaW5hbC5sZW5ndGggPiBpbmRleCArIDEpIHtcbiAgICAgICAgICB2YXIgY29uc2VjID0gb3JpZ2luYWxbaW5kZXggKyAxXTtcblxuICAgICAgICAgIGlmICgoY29uc2VjLnR5cGUgPT09IE1lbnVfRGl2aWRlciB8fCBjb25zZWMudHlwZSA9PT0gTWVudV9IZWFkaW5nKSAmJiBjb25zZWMudHlwZS5maWx0ZXJDb25zZWN1dGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRmlsdGVyIG91dCBsYXN0IERpdmlkZXJzIGFuZCBIZWFkaW5nc1xuXG5cbiAgICAgICAgaWYgKChpdGVtLnR5cGUgPT09IE1lbnVfRGl2aWRlciB8fCBpdGVtLnR5cGUgPT09IE1lbnVfSGVhZGluZykgJiYgaXRlbS50eXBlLmZpbHRlckxhc3QgJiYgaW5kZXggPT09IG9yaWdpbmFsLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgICByZXR1cm4gc3RvcFNjcm9sbFByb3BhZ2F0aW9uID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFNjcm9sbCwgTWVudV9leHRlbmRzKHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJtZW51XCIsXG4gICAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaGFuZGxlTW91bnQsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICByb2xlOiBcIm1lbnVcIixcbiAgICAgICAgc3RvcFNjcm9sbFByb3BhZ2F0aW9uOiB0cnVlXG4gICAgICB9LCBvbWl0X2RlZmF1bHQoKShvdGhlclByb3BzLCAndGFnTmFtZScpKSwgY2hpbGRyZW5DbGVhbmVkKSA6IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChNZW51U3R5bGVzX1N0eWxlZCwgTWVudV9leHRlbmRzKHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJtZW51XCIsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICByZWY6IHRoaXMuaGFuZGxlTW91bnQsXG4gICAgICAgIHJvbGU6IFwibWVudVwiXG4gICAgICB9LCBvdGhlclByb3BzKSwgY2hpbGRyZW5DbGVhbmVkKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTWVudTtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuTWVudV9kZWZpbmVQcm9wZXJ0eShNZW51X01lbnUsIFwicHJvcFR5cGVzXCIsIE1lbnVfcHJvcFR5cGVzKTtcblxuTWVudV9kZWZpbmVQcm9wZXJ0eShNZW51X01lbnUsIFwiZGVmYXVsdFByb3BzXCIsIE1lbnVfZGVmYXVsdFByb3BzKTtcblxuTWVudV9kZWZpbmVQcm9wZXJ0eShNZW51X01lbnUsIFwiSXRlbVwiLCBNZW51X0l0ZW0pO1xuXG5NZW51X2RlZmluZVByb3BlcnR5KE1lbnVfTWVudSwgXCJEaXZpZGVyXCIsIE1lbnVfRGl2aWRlcik7XG5cbk1lbnVfZGVmaW5lUHJvcGVydHkoTWVudV9NZW51LCBcIkhlYWRpbmdcIiwgTWVudV9IZWFkaW5nKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX01lbnVfTWVudSA9IChNZW51X01lbnUpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NZW51L2luZGV4LnRzXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQ2xpY2thYmxlXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVSZWFjdFJlZjsgfSk7XG4vKipcbiAqIFVwZGF0ZXMgYSBSZWFjdCByZWYuIENhbGxiYWNrIHJlZnMgYW5kIG9iamVjdCByZWZzIChmcm9tIGBjcmVhdGVSZWZgIGFuZCBgdXNlUmVmYCkgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gcmVmIC0gVGhlIFJlYWN0IGNhbGxiYWNrIG9yIG9iamVjdCByZWYuIENhbiBiZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gY3VycmVudCAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHJlZi5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlUmVhY3RSZWYocmVmLCBjdXJyZW50KSB7XG4gIGlmIChyZWYpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGN1cnJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgcHVibGljIHNpZ25hdHVyZSBvZiB0aGlzIHV0aWwgdXNlcyBSZWFjdC5SZWY8VD4gdG8gbWlycm9yIHRoZSB3YXkgUmVhY3QgdHlwZXMgcmVmcy5cbiAgICAgIC8vIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBzaWduYWwgXCJ3ZSB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nICdjdXJyZW50Jywgbm90IHlvdVwiLlxuICAgICAgcmVmLmN1cnJlbnQgPSBjdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgfVxuICB9XG59XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoZXZyb25SaWdodDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX0NoZXZyb25SaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX0NoZXZyb25SaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuXG5cbmZ1bmN0aW9uIFByaXNtYTI0KF9yZWYpIHtcbiAgdmFyIG90aGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgX3JlZik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNzg2MSAxMS45OTk5TDguNDg1ODcgNS42OTk3MkM4LjA5NTM0IDUuMzA5MiA4LjA5NTM0IDQuNjc2MDMgOC40ODU4NyA0LjI4NTUxQzguODc2MzkgMy44OTQ5OSA5LjUwOTU2IDMuODk0OTkgOS45MDAwOCA0LjI4NTUxTDE2LjU1MzggMTAuOTM5M0MxNy4xMzk2IDExLjUyNSAxNy4xMzk2IDEyLjQ3NDggMTYuNTUzOCAxMy4wNjA2TDkuOTAxNDIgMTkuNzEzQzkuNTEwOSAyMC4xMDM1IDguODc3NzMgMjAuMTAzNSA4LjQ4NzIxIDE5LjcxM0M4LjA5NjY5IDE5LjMyMjQgOC4wOTY2OSAxOC42ODkzIDguNDg3MjEgMTguMjk4OEwxNC43ODYxIDExLjk5OTlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFByaXNtYTE2KF9yZWYyKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYyKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS43MTA5IDcuOTk3Nkw1LjcxMDE3IDEzLjk5ODNMNC4yOTU5NyAxMi41ODQxTDguODg5MTQgNy45OTA5NUw0LjM0NDgyIDMuNDAzNjNMNS43NjU2NyAxLjk5NjA5TDExLjcxMDkgNy45OTc2WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBDaGV2cm9uUmlnaHQocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICBFbnRlcnByaXNlOiBfc3BsdW5rX3JlYWN0X2ljb25zX0NoZXZyb25SaWdodF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWExNjogUHJpc21hMTYsXG4gICAgUHJpc21hMjQ6IFByaXNtYTI0XG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9mb2N1c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL0NoZXZyb25SaWdodFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2gvb21pdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvQ2hlY2tcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoZWNrOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX0NoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuZnVuY3Rpb24gUHJpc21hMjQoX3JlZikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC43MDcxIDUuNTkyOTRDMjEuMDk3NyA1Ljk4MzQ3IDIxLjA5NzcgNi42MTY2MyAyMC43MDcxIDcuMDA3MTZMMTAuMTQ0NyAxNy41Njk1QzkuNTU4OTYgMTguMTU1MyA4LjYwOTIyIDE4LjE1NTMgOC4wMjM0MyAxNy41Njk1TDMuMjkyODkgMTIuODM5QzIuOTAyMzcgMTIuNDQ4NSAyLjkwMjM3IDExLjgxNTMgMy4yOTI4OSAxMS40MjQ4QzMuNjgzNDIgMTEuMDM0MyA0LjMxNjU4IDExLjAzNDMgNC43MDcxMSAxMS40MjQ4TDkuMDg0MDkgMTUuODAxOEwxOS4yOTI5IDUuNTkyOTRDMTkuNjgzNSA1LjIwMjQyIDIwLjMxNjYgNS4yMDI0MiAyMC43MDcxIDUuNTkyOTRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFByaXNtYTE2KF9yZWYyKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYyKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45OTkgNC43NTcxMkw2LjE3NzM2IDEyLjU3ODZMMS45OTU2MSA4LjM5NjkxTDMuNDA5ODEgNi45ODI2OUw2LjE3NzM3IDkuNzUwMjFMMTIuNTg0OCAzLjM0MjlMMTMuOTk5IDQuNzU3MTJaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIENoZWNrKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWExNjogUHJpc21hMTYsXG4gICAgUHJpc21hMjQ6IFByaXNtYTI0XG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9TY3JvbGxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9IZWFkaW5nXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNWRzsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cbnZhciBTdHlsZWQgPSBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdmcud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlNWR19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFiejByeWgtMFwiXG59KShbXCJmbGV4OjAgMCBhdXRvO1wiXSk7XG5mdW5jdGlvbiBTVkcocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfSwgcHJvcHMpKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDYwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1N3aXRjaFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJY29uOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTtcbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG52YXIgaW5saW5lU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgZmxleDogJzAgMCBhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbn07XG52YXIgYmxvY2tTdHlsZXMgPSB7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIG1hcmdpbjogJzAgYXV0bycsXG4gIG92ZXJmbG93OiAndmlzaWJsZSdcbn07XG52YXIgcHJvcFR5cGVzID0ge1xuICBFbnRlcnByaXNlOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIGVudGVycHJpc2VTaXplOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIGVudGVycHJpc2VXaWR0aDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBlbnRlcnByaXNlSGVpZ2h0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIFByaXNtYTI0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcbiAgUHJpc21hMjA6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgUHJpc21hMTY6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgcHJpc21hU2l6ZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSxcbiAgaW5saW5lOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmJvb2wsXG4gIHNjcmVlblJlYWRlclRleHQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgaW5saW5lOiB0cnVlLFxuICBwcmlzbWFTaXplOiAnbWVkaXVtJ1xufTtcbmZ1bmN0aW9uIEljb24oX3JlZikge1xuICB2YXIgRW50ZXJwcmlzZSA9IF9yZWYuRW50ZXJwcmlzZSxcbiAgICAgIFByaXNtYTI0ID0gX3JlZi5QcmlzbWEyNCxcbiAgICAgIFByaXNtYTIwID0gX3JlZi5QcmlzbWEyMCxcbiAgICAgIFByaXNtYTE2ID0gX3JlZi5QcmlzbWExNixcbiAgICAgIHByaXNtYVNpemUgPSBfcmVmLnByaXNtYVNpemUsXG4gICAgICBpbmxpbmUgPSBfcmVmLmlubGluZSxcbiAgICAgIGVudGVycHJpc2VTaXplID0gX3JlZi5lbnRlcnByaXNlU2l6ZSxcbiAgICAgIGVudGVycHJpc2VXaWR0aCA9IF9yZWYuZW50ZXJwcmlzZVdpZHRoLFxuICAgICAgZW50ZXJwcmlzZUhlaWdodCA9IF9yZWYuZW50ZXJwcmlzZUhlaWdodCxcbiAgICAgIHNjcmVlblJlYWRlclRleHQgPSBfcmVmLnNjcmVlblJlYWRlclRleHQsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcIkVudGVycHJpc2VcIiwgXCJQcmlzbWEyNFwiLCBcIlByaXNtYTIwXCIsIFwiUHJpc21hMTZcIiwgXCJwcmlzbWFTaXplXCIsIFwiaW5saW5lXCIsIFwiZW50ZXJwcmlzZVNpemVcIiwgXCJlbnRlcnByaXNlV2lkdGhcIiwgXCJlbnRlcnByaXNlSGVpZ2h0XCIsIFwic2NyZWVuUmVhZGVyVGV4dFwiXSk7XG5cbiAgdmFyIF91c2VTcGx1bmtUaGVtZSA9IE9iamVjdChfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1widXNlU3BsdW5rVGhlbWVcIl0pKCksXG4gICAgICBmYW1pbHkgPSBfdXNlU3BsdW5rVGhlbWUuZmFtaWx5LFxuICAgICAgZGVuc2l0eSA9IF91c2VTcGx1bmtUaGVtZS5kZW5zaXR5OyAvLyBFbnRlcnByaXNlIC0gYWxsIHZhcmlhbnRzXG5cblxuICBpZiAoZmFtaWx5ID09PSAnZW50ZXJwcmlzZScpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoRW50ZXJwcmlzZSwgX2V4dGVuZHMoe1xuICAgICAgc2l6ZTogZW50ZXJwcmlzZVNpemUsXG4gICAgICB3aWR0aDogZW50ZXJwcmlzZVdpZHRoLFxuICAgICAgaGVpZ2h0OiBlbnRlcnByaXNlSGVpZ2h0LFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dDogc2NyZWVuUmVhZGVyVGV4dCB8fCBudWxsLFxuICAgICAgaGlkZURlZmF1bHRUb29sdGlwOiB0cnVlLFxuICAgICAgaW5saW5lOiBpbmxpbmVcbiAgICB9LCBvdGhlclByb3BzKSk7XG4gIH1cblxuICB2YXIgcHJpc21hUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAnYXJpYS1sYWJlbCc6IHNjcmVlblJlYWRlclRleHQsXG4gICAgc3R5bGU6IGlubGluZSA/IGlubGluZVN0eWxlcyA6IGJsb2NrU3R5bGVzXG4gIH0sIG90aGVyUHJvcHMpOyAvLyBQcmlzbWEgLSBzbWFsbCtjb21wYWN0LCBzbWFsbCtjb21mb3J0YWJsZVxuXG5cbiAgaWYgKHByaXNtYVNpemUgPT09ICdzbWFsbCcpIHtcbiAgICB2YXIgU1ZHID0gUHJpc21hMTYgfHwgUHJpc21hMjQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNWRywgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IFwiMTZcIixcbiAgICAgIGhlaWdodDogXCIxNlwiXG4gICAgfSwgcHJpc21hUHJvcHMpKTtcbiAgfSAvLyBQcmlzbWEgLSBtZWRpdW0rY29tcGFjdFxuXG5cbiAgaWYgKGRlbnNpdHkgPT09ICdjb21wYWN0Jykge1xuICAgIHZhciBfU1ZHID0gUHJpc21hMjAgfHwgUHJpc21hMjQ7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWRywgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IFwiMjBcIixcbiAgICAgIGhlaWdodDogXCIyMFwiXG4gICAgfSwgcHJpc21hUHJvcHMpKTtcbiAgfSAvLyBQcmlzbWEgLSBtZWRpdW0rY29tZm9ydGFibGVcblxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQcmlzbWEyNCwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgaGVpZ2h0OiBcIjI0XCJcbiAgfSwgcHJpc21hUHJvcHMpKTtcbn1cbkljb24ucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuSWNvbi5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9UcmlhbmdsZVJpZ2h0U21hbGxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2tleWJvYXJkXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG5cbiIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTExKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTExOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gc3JjX1RleHRfVGV4dDsgfSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdFwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBleHRlcm5hbF9yZWFjdF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicHJvcC10eXBlc1wiXG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcHJvcF90eXBlc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3QtZXZlbnQtbGlzdGVuZXJcIlxudmFyIGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9zdHlsZVwiXG52YXIgc3R5bGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1NjcmVlblJlYWRlckNvbnRlbnRcIlxudmFyIFNjcmVlblJlYWRlckNvbnRlbnRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG52YXIgU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTY3JlZW5SZWFkZXJDb250ZW50Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIlxudmFyIGkxOG5fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU2VhcmNoXCJcbnZhciBTZWFyY2hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OCk7XG52YXIgU2VhcmNoX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFNlYXJjaF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2ljb25zL1RoZW1lZEljb24udHN4XG52YXIgVGhlbWVkSWNvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvU1ZHLnRzeFxudmFyIFNWRyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2ljb25zL1NlYXJjaC50c3hcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSwzLjAwMTUgQzE0LjY0MjEsMy4wMDE1IDE4LDYuMzU5MyAxOCwxMC41MDE1IEMxOCwxMi4yMTEyIDE3LjQyNzksMTMuNzg3MyAxNi40NjQ3LDE1LjA0ODkgTDIwLjcwNzcsMTkuMjkyIEMyMS4wOTgzLDE5LjY4MjUgMjEuMDk4MywyMC4zMTU2IDIwLjcwNzcsMjAuNzA2MiBDMjAuMzE3MiwyMS4wOTY3IDE5LjY4NDEsMjEuMDk2NyAxOS4yOTM1LDIwLjcwNjIgTDE1LjA1MDksMTYuNDYzNSBDMTMuNzg4OCwxNy40MjgzIDEyLjIxMTMsMTguMDAxNSAxMC41LDE4LjAwMTUgQzYuMzU3OSwxOC4wMDE1IDMsMTQuNjQzNiAzLDEwLjUwMTUgQzMsNi4zNTkzIDYuMzU3OSwzLjAwMTUgMTAuNSwzLjAwMTUgWiBNMTAuNSw1LjAwMTUgQzcuNDYyNCw1LjAwMTUgNSw3LjQ2MzkgNSwxMC41MDE1IEM1LDEzLjUzOSA3LjQ2MjQsMTYuMDAxNSAxMC41LDE2LjAwMTUgQzEzLjUzNzYsMTYuMDAxNSAxNiwxMy41MzkgMTYsMTAuNTAxNSBDMTYsNy40NjM5IDEzLjUzNzYsNS4wMDE1IDEwLjUsNS4wMDE1IFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gUHJpc21hMTYoX3JlZjIpIHtcbiAgdmFyIG90aGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgX3JlZjIpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi44NTI3NywyLjAwMTUgQzkuNTMyODgsMi4wMDE1IDExLjcwNTUsNC4xNzQxIDExLjcwNTUsNi44NTQyIEMxMS43MDU1LDcuODQ2MyAxMS40MDc5LDguNzY4OCAxMC44OTcsOS41MzczIEwxMC45MjQ1LDkuNTA5OCBMMTQuMDAxOCwxMi41ODcxIEwxMi41ODc2LDE0LjAwMTQgTDkuNTEwMjUsMTAuOTI0IEw5LjUzNTg3LDEwLjg5ODQgQzguNzY3MzMsMTEuNDA5MyA3Ljg0NDgxLDExLjcwNyA2Ljg1Mjc3LDExLjcwNyBDNC4xNzI2NiwxMS43MDcgMiw5LjUzNDMgMiw2Ljg1NDIgQzIsNC4xNzQxIDQuMTcyNjYsMi4wMDE1IDYuODUyNzcsMi4wMDE1IFogTTYuODUyNzcsNC4wMDE1IEM1LjI3NzIzLDQuMDAxNSA0LDUuMjc4NyA0LDYuODU0MiBDNCw4LjQyOTggNS4yNzcyMyw5LjcwNyA2Ljg1Mjc3LDkuNzA3IEM4LjQyODMxLDkuNzA3IDkuNzA1NTQsOC40Mjk4IDkuNzA1NTQsNi44NTQyIEM5LjcwNTU0LDUuMjc4NyA4LjQyODMxLDQuMDAxNSA2Ljg1Mjc3LDQuMDAxNSBaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFNlYXJjaChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRoZW1lZEljb25bXCJhXCIgLyogZGVmYXVsdCAqL10sIF9leHRlbmRzKHtcbiAgICBFbnRlcnByaXNlOiBTZWFyY2hfZGVmYXVsdC5hLFxuICAgIFByaXNtYTE2OiBQcmlzbWExNixcbiAgICBQcmlzbWEyNDogUHJpc21hMjRcbiAgfSwgcHJvcHMpKTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvQ3Jvc3NNYXJrLnRzeFxudmFyIENyb3NzTWFyayA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UZXh0L3N5bmNIZWlnaHRXaXRoU2hhZG93LnRzXG4vLyBUaGlzIGZpbGUgd2FzIGFkYXB0ZWQgZnJvbSBbQ2FsbC1FbS1BbGwncyBtYXRlcmlhbC11aV0oaHR0cHM6Ly9naXRodWIuY29tL211aS1vcmcvbWF0ZXJpYWwtdWkpLFxuLy8gd2hpY2ggaXMgTUlULWxpY2Vuc2VkOlxuLy9cbi8vIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxNCBDYWxsLUVtLUFsbFxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuLy8gU09GVFdBUkUuXG4vL1xuLy8gRW5kIG9mIE1JVCBsaWNlbnNlIHRleHQuXG5mdW5jdGlvbiBzeW5jSGVpZ2h0V2l0aFNoYWRvdyhfcmVmKSB7XG4gIHZhciBoZWlnaHQgPSBfcmVmLmhlaWdodCxcbiAgICAgIG11bHRpbGluZSA9IF9yZWYubXVsdGlsaW5lLFxuICAgICAgcm93c01heCA9IF9yZWYucm93c01heCxcbiAgICAgIHJvd3NNaW4gPSBfcmVmLnJvd3NNaW4sXG4gICAgICBzaGFkb3cgPSBfcmVmLnNoYWRvdztcblxuICBpZiAobXVsdGlsaW5lICYmIHNoYWRvdykge1xuICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNoYWRvdyk7XG4gICAgdmFyIGxpbmVIZWlnaHRWYWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2xpbmUtaGVpZ2h0Jyk7IC8vIGpzZG9tIGRvZXMgbm90IHByb3Blcmx5IGluaGVyaXQvcmUtY2FsY3VsYXRlIHRoZSBsaW5lLWhlaWdodCBwcm9wZXJ0eSBzbyB3ZSBza2lwIGluIHRoZXNlIGNhc2VzIFNVSS0xOTQzLCBTVUktMjQyOFxuXG4gICAgaWYgKGxpbmVIZWlnaHRWYWx1ZSA9PT0gJ2luaGVyaXQnIHx8IGxpbmVIZWlnaHRWYWx1ZSA9PT0gJ25vcm1hbCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgbGluZUhlaWdodCA9IHBhcnNlSW50KGxpbmVIZWlnaHRWYWx1ZSwgMTApO1xuICAgIHZhciBwYWRkaW5nVG9wID0gcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSwgMTApO1xuICAgIHZhciBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSwgMTApO1xuICAgIHZhciBib3JkZXJUb3AgPSBwYXJzZUludChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXdpZHRoJyksIDEwKTtcbiAgICB2YXIgYm9yZGVyQm90dG9tID0gcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpLCAxMCk7XG4gICAgdmFyIG5ld0hlaWdodCA9IHNoYWRvdy5zY3JvbGxIZWlnaHQgKyBib3JkZXJUb3AgKyBib3JkZXJCb3R0b207XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXG4gICAgLy8gTGV2ZXJhZ2UgdGhlIGdsb2JhbCBgaXNOYU5gIGhlcmUgZm9yIElFIHN1cHBvcnQsIHJhdGhlciB0aGFuIE51bWJlci5pc05hTi5cbiAgICAvLyBXZSBrbm93IG5ld0hlaWdodCBpcyBudW1lcmljIGJlY2F1c2Ugd2UgcGFyc2VJbnQoKSBhYm92ZSwgc28gYGlzTmFOYCBzaG91bGQgYmUgcmVsaWFibGUuXG5cbiAgICBpZiAobmV3SGVpZ2h0ID09PSB1bmRlZmluZWQgfHwgaXNOYU4obmV3SGVpZ2h0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAqL1xuXG5cbiAgICBpZiAocm93c01heCA+PSByb3dzTWluKSB7XG4gICAgICB2YXIgbWF4SGVpZ2h0ID0gcm93c01heCAqIGxpbmVIZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlclRvcCArIGJvcmRlckJvdHRvbSArIDE7IC8vIG5lZWQgb25lIGV4dHJhLlxuXG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsIG5ld0hlaWdodCk7XG4gICAgfVxuXG4gICAgdmFyIG1pbkhlaWdodCA9IHJvd3NNaW4gKiBsaW5lSGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJUb3AgKyBib3JkZXJCb3R0b20gKyAxOyAvLyBuZWVkIG9uZSBleHRyYS5cblxuICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgbmV3SGVpZ2h0KTtcblxuICAgIGlmIChoZWlnaHQgIT09IG5ld0hlaWdodCkge1xuICAgICAgcmV0dXJuIG5ld0hlaWdodDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL3VwZGF0ZVJlYWN0UmVmLnRzXG52YXIgdXBkYXRlUmVhY3RSZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHXCJcbnZhciBTVkdfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG52YXIgU1ZHX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFNWR18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UZXh0L0ljb25PdXRsaW5lZEhpZGUudHN4XG5mdW5jdGlvbiBJY29uT3V0bGluZWRIaWRlX2V4dGVuZHMoKSB7IEljb25PdXRsaW5lZEhpZGVfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBJY29uT3V0bGluZWRIaWRlX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuZnVuY3Rpb24gSWNvbk91dGxpbmVkSGlkZShwcm9wcykge1xuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gT2JqZWN0KHRoZW1lc19bXCJ1c2VTcGx1bmtUaGVtZVwiXSkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHksXG4gICAgICBkZW5zaXR5ID0gX3VzZVNwbHVua1RoZW1lLmRlbnNpdHk7XG5cbiAgaWYgKGZhbWlseSA9PT0gJ2VudGVycHJpc2UnKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTVkdfZGVmYXVsdC5hLCBJY29uT3V0bGluZWRIaWRlX2V4dGVuZHMoe1xuICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgIHNpemU6IDEsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnSGlkZSBwYXNzd29yZCcpXG4gICAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTQuMDA2OTEgMy44OTI4N0MzLjYxNjM4IDMuNTAyMzQgMi45ODMyMiAzLjUwMjM1IDIuNTkyNyAzLjg5Mjg3QzIuMjAyMTcgNC4yODM0IDIuMjAyMTcgNC45MTY1NiAyLjU5MjcgNS4zMDcwOEw0LjM1OTA4IDcuMDczNDZDMy42MzA0MyA3Ljc1MzAyIDIuOTkxNzQgOC41MjY3MSAyLjQ2MDg1IDkuMzc2MTJMMS4xODc5NCAxMS40MTI4QzAuOTYzMzkzIDExLjc3MjEgMC45NjMzOTUgMTIuMjI3OSAxLjE4Nzk0IDEyLjU4NzJMMi40NjA4NSAxNC42MjM5QzMuMzIxMyAxNi4wMDA2IDQuNDY0OTQgMTcuMTc4NCA1LjgxNTc2IDE4LjA3ODlMNS45NDkzMyAxOC4xNjc5QzcuNzQxMjEgMTkuMzYyNSA5Ljg0NjYgMjAgMTIuMDAwMiAyMEMxMy41MTE2IDIwIDE0Ljk5OTMgMTkuNjg2IDE2LjM3MTUgMTkuMDg1OEwxOC41OTgyIDIxLjMxMjVDMTguOTg4NyAyMS43MDMgMTkuNjIxOCAyMS43MDMgMjAuMDEyNCAyMS4zMTI1QzIwLjQwMjkgMjAuOTIyIDIwLjQwMjkgMjAuMjg4OCAyMC4wMTI0IDE5Ljg5ODNMNC4wMDY5MSAzLjg5Mjg3Wk0xNC44MjU3IDE3LjU0TDEzLjAzNTMgMTUuNzQ5NkMxMi43MDU2IDE1Ljg0MDUgMTIuMzU4MyAxNS44ODkgMTEuOTk5NyAxNS44ODlDOS44NTE5NiAxNS44ODkgOC4xMTA4NCAxNC4xNDc5IDguMTEwODQgMTIuMDAwMUM4LjExMDg0IDExLjY0MTUgOC4xNTkzNyAxMS4yOTQzIDguMjUwMjIgMTAuOTY0Nkw1Ljc3NDMzIDguNDg4NzFDNS4xNTE3OSA5LjA2MDc4IDQuNjA3MjkgOS43MTU0MSA0LjE1Njg1IDEwLjQzNjFMMy4xNzk0MyAxMkw0LjE1Njg1IDEzLjU2MzlDNC44NjY4NSAxNC42OTk5IDUuODEwNTMgMTUuNjcxNyA2LjkyNTE2IDE2LjQxNDhMNy4wNTg3MyAxNi41MDM4QzguNTIyMDggMTcuNDc5NCAxMC4yNDE1IDE4IDEyLjAwMDIgMThDMTIuOTY1OCAxOCAxMy45MTk2IDE3Ljg0MzEgMTQuODI1NyAxNy41NFpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICB9KSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICBkOiBcIk0xMC45NjU3IDguMjUwMTlMMTUuNzQ5NiAxMy4wMzQyQzE1Ljg0MDIgMTIuNzA0OSAxNS44ODg2IDEyLjM1ODEgMTUuODg4NiAxMi4wMDAxQzE1Ljg4ODYgOS44NTIzMiAxNC4xNDc1IDguMTExMjEgMTEuOTk5NyA4LjExMTIxQzExLjY0MTcgOC4xMTEyMSAxMS4yOTQ5IDguMTU5NTkgMTAuOTY1NyA4LjI1MDE5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH0pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGQ6IFwiTTE5Ljg0MzUgMTMuNTYzOUMxOS4zOTMyIDE0LjI4NDQgMTguODQ4OCAxNC45MzkgMTguMjI2NCAxNS41MTA5TDE5LjY0MTcgMTYuOTI2MkMyMC4zNzAyIDE2LjI0NjcgMjEuMDA4NyAxNS40NzMxIDIxLjUzOTUgMTQuNjIzOUwyMi44MTI0IDEyLjU4NzJDMjMuMDM3IDEyLjIyNzkgMjMuMDM3IDExLjc3MjEgMjIuODEyNCAxMS40MTI4TDIxLjUzOTUgOS4zNzYxMkMyMC42NzkxIDcuOTk5NDIgMTkuNTM1NCA2LjgyMTY0IDE4LjE4NDYgNS45MjExTDE4LjA1MSA1LjgzMjA1QzE2LjI1OTEgNC42Mzc0NiAxNC4xNTM4IDQgMTIuMDAwMiA0QzEwLjQ4OSA0IDkuMDAxNDkgNC4zMTM4OSA3LjYyOTQxIDQuOTEzOTJMOS4xNzUyNSA2LjQ1OTc3QzEwLjA4MTEgNi4xNTY4NyAxMS4wMzQ3IDYgMTIuMDAwMiA2QzEzLjc1ODkgNiAxNS40NzgzIDYuNTIwNTkgMTYuOTQxNiA3LjQ5NjE1TDE3LjA3NTIgNy41ODUyQzE4LjE4OTggOC4zMjgyOSAxOS4xMzM1IDkuMzAwMTMgMTkuODQzNSAxMC40MzYxTDIwLjgyMDkgMTJMMTkuODQzNSAxMy41NjM5WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH0pKTtcbiAgfVxuXG4gIHZhciBzaXplID0gZGVuc2l0eSA9PT0gJ2NvbXBhY3QnID8gJzIwJyA6ICcyNCc7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICB9XG4gIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIE9iamVjdChpMThuX1tcIl9cIl0pKCdIaWRlIHBhc3N3b3JkJykpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMDA2OTEgMy44OTI4N0MzLjYxNjM4IDMuNTAyMzQgMi45ODMyMiAzLjUwMjM1IDIuNTkyNyAzLjg5Mjg3QzIuMjAyMTcgNC4yODM0IDIuMjAyMTcgNC45MTY1NiAyLjU5MjcgNS4zMDcwOEw0LjM1OTA4IDcuMDczNDZDMy42MzA0MyA3Ljc1MzAyIDIuOTkxNzQgOC41MjY3MSAyLjQ2MDg1IDkuMzc2MTJMMS4xODc5NCAxMS40MTI4QzAuOTYzMzkzIDExLjc3MjEgMC45NjMzOTUgMTIuMjI3OSAxLjE4Nzk0IDEyLjU4NzJMMi40NjA4NSAxNC42MjM5QzMuMzIxMyAxNi4wMDA2IDQuNDY0OTQgMTcuMTc4NCA1LjgxNTc2IDE4LjA3ODlMNS45NDkzMyAxOC4xNjc5QzcuNzQxMjEgMTkuMzYyNSA5Ljg0NjYgMjAgMTIuMDAwMiAyMEMxMy41MTE2IDIwIDE0Ljk5OTMgMTkuNjg2IDE2LjM3MTUgMTkuMDg1OEwxOC41OTgyIDIxLjMxMjVDMTguOTg4NyAyMS43MDMgMTkuNjIxOCAyMS43MDMgMjAuMDEyNCAyMS4zMTI1QzIwLjQwMjkgMjAuOTIyIDIwLjQwMjkgMjAuMjg4OCAyMC4wMTI0IDE5Ljg5ODNMNC4wMDY5MSAzLjg5Mjg3Wk0xNC44MjU3IDE3LjU0TDEzLjAzNTMgMTUuNzQ5NkMxMi43MDU2IDE1Ljg0MDUgMTIuMzU4MyAxNS44ODkgMTEuOTk5NyAxNS44ODlDOS44NTE5NiAxNS44ODkgOC4xMTA4NCAxNC4xNDc5IDguMTEwODQgMTIuMDAwMUM4LjExMDg0IDExLjY0MTUgOC4xNTkzNyAxMS4yOTQzIDguMjUwMjIgMTAuOTY0Nkw1Ljc3NDMzIDguNDg4NzFDNS4xNTE3OSA5LjA2MDc4IDQuNjA3MjkgOS43MTU0MSA0LjE1Njg1IDEwLjQzNjFMMy4xNzk0MyAxMkw0LjE1Njg1IDEzLjU2MzlDNC44NjY4NSAxNC42OTk5IDUuODEwNTMgMTUuNjcxNyA2LjkyNTE2IDE2LjQxNDhMNy4wNTg3MyAxNi41MDM4QzguNTIyMDggMTcuNDc5NCAxMC4yNDE1IDE4IDEyLjAwMDIgMThDMTIuOTY1OCAxOCAxMy45MTk2IDE3Ljg0MzEgMTQuODI1NyAxNy41NFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC45NjU3IDguMjUwMTlMMTUuNzQ5NiAxMy4wMzQyQzE1Ljg0MDIgMTIuNzA0OSAxNS44ODg2IDEyLjM1ODEgMTUuODg4NiAxMi4wMDAxQzE1Ljg4ODYgOS44NTIzMiAxNC4xNDc1IDguMTExMjEgMTEuOTk5NyA4LjExMTIxQzExLjY0MTcgOC4xMTEyMSAxMS4yOTQ5IDguMTU5NTkgMTAuOTY1NyA4LjI1MDE5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5Ljg0MzUgMTMuNTYzOUMxOS4zOTMyIDE0LjI4NDQgMTguODQ4OCAxNC45MzkgMTguMjI2NCAxNS41MTA5TDE5LjY0MTcgMTYuOTI2MkMyMC4zNzAyIDE2LjI0NjcgMjEuMDA4NyAxNS40NzMxIDIxLjUzOTUgMTQuNjIzOUwyMi44MTI0IDEyLjU4NzJDMjMuMDM3IDEyLjIyNzkgMjMuMDM3IDExLjc3MjEgMjIuODEyNCAxMS40MTI4TDIxLjUzOTUgOS4zNzYxMkMyMC42NzkxIDcuOTk5NDIgMTkuNTM1NCA2LjgyMTY0IDE4LjE4NDYgNS45MjExTDE4LjA1MSA1LjgzMjA1QzE2LjI1OTEgNC42Mzc0NiAxNC4xNTM4IDQgMTIuMDAwMiA0QzEwLjQ4OSA0IDkuMDAxNDkgNC4zMTM4OSA3LjYyOTQxIDQuOTEzOTJMOS4xNzUyNSA2LjQ1OTc3QzEwLjA4MTEgNi4xNTY4NyAxMS4wMzQ3IDYgMTIuMDAwMiA2QzEzLjc1ODkgNiAxNS40NzgzIDYuNTIwNTkgMTYuOTQxNiA3LjQ5NjE1TDE3LjA3NTIgNy41ODUyQzE4LjE4OTggOC4zMjgyOSAxOS4xMzM1IDkuMzAwMTMgMTkuODQzNSAxMC40MzYxTDIwLjgyMDkgMTJMMTkuODQzNSAxMy41NjM5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUZXh0X0ljb25PdXRsaW5lZEhpZGUgPSAoSWNvbk91dGxpbmVkSGlkZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UZXh0L0ljb25PdXRsaW5lZFZpZXcudHN4XG5mdW5jdGlvbiBJY29uT3V0bGluZWRWaWV3X2V4dGVuZHMoKSB7IEljb25PdXRsaW5lZFZpZXdfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBJY29uT3V0bGluZWRWaWV3X2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuZnVuY3Rpb24gSWNvbk91dGxpbmVkVmlldyhwcm9wcykge1xuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gT2JqZWN0KHRoZW1lc19bXCJ1c2VTcGx1bmtUaGVtZVwiXSkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHksXG4gICAgICBkZW5zaXR5ID0gX3VzZVNwbHVua1RoZW1lLmRlbnNpdHk7XG5cbiAgaWYgKGZhbWlseSA9PT0gJ2VudGVycHJpc2UnKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTVkdfZGVmYXVsdC5hLCBJY29uT3V0bGluZWRWaWV3X2V4dGVuZHMoe1xuICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgIHNpemU6IDEsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnVmlldyBwYXNzd29yZCcpXG4gICAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTE1Ljc3NDUgMTEuODY1NEMxNS43NzQ1IDE0LjAxMzIgMTQuMDMzNCAxNS43NTQzIDExLjg4NTcgMTUuNzU0M0M5LjczNzg4IDE1Ljc1NDMgNy45OTY3NyAxNC4wMTMyIDcuOTk2NzcgMTEuODY1NEM3Ljk5Njc3IDkuNzE3NjIgOS43Mzc4OCA3Ljk3NjUgMTEuODg1NyA3Ljk3NjVDMTQuMDMzNCA3Ljk3NjUgMTUuNzc0NSA5LjcxNzYyIDE1Ljc3NDUgMTEuODY1NFpNMTMuNzc0NSAxMS44NjU0QzEzLjc3NDUgMTIuOTA4NiAxMi45Mjg5IDEzLjc1NDMgMTEuODg1NyAxMy43NTQzQzEwLjg0MjQgMTMuNzU0MyA5Ljk5Njc3IDEyLjkwODYgOS45OTY3NyAxMS44NjU0QzkuOTk2NzcgMTAuODIyMiAxMC44NDI0IDkuOTc2NSAxMS44ODU3IDkuOTc2NUMxMi45Mjg5IDkuOTc2NSAxMy43NzQ1IDEwLjgyMjIgMTMuNzc0NSAxMS44NjU0WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH0pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTExLjg4NTkgMy44NjUzNkM5LjczMjM1IDMuODY1MzYgNy42MjY5NSA0LjUwMjgyIDUuODM1MDcgNS42OTc0MUw1LjcwMTUgNS43ODY0NkM0LjM1MDY4IDYuNjg3IDMuMjA3MDQgNy44NjQ3NyAyLjM0NjYgOS4yNDE0OEwxLjA3MzY5IDExLjI3ODFDMC44NDkxMzYgMTEuNjM3NCAwLjg0OTEzNyAxMi4wOTMzIDEuMDczNjkgMTIuNDUyNkwyLjM0NjYgMTQuNDg5MkMzLjIwNzA0IDE1Ljg2NTkgNC4zNTA2OCAxNy4wNDM3IDUuNzAxNSAxNy45NDQzTDUuODM1MDcgMTguMDMzM0M3LjYyNjk1IDE5LjIyNzkgOS43MzIzNSAxOS44NjU0IDExLjg4NTkgMTkuODY1NEMxNC4wMzk1IDE5Ljg2NTQgMTYuMTQ0OSAxOS4yMjc5IDE3LjkzNjggMTguMDMzM0wxOC4wNzAzIDE3Ljk0NDNDMTkuNDIxMiAxNy4wNDM3IDIwLjU2NDggMTUuODY1OSAyMS40MjUyIDE0LjQ4OTJMMjIuNjk4MiAxMi40NTI2QzIyLjkyMjcgMTIuMDkzMyAyMi45MjI3IDExLjYzNzQgMjIuNjk4MiAxMS4yNzgxTDIxLjQyNTIgOS4yNDE0OEMyMC41NjQ4IDcuODY0NzcgMTkuNDIxMiA2LjY4NyAxOC4wNzAzIDUuNzg2NDVMMTcuOTM2OCA1LjY5NzQxQzE2LjE0NDkgNC41MDI4MiAxNC4wMzk1IDMuODY1MzYgMTEuODg1OSAzLjg2NTM2Wk02Ljk0NDQ3IDcuMzYxNTFDOC40MDc4MiA2LjM4NTk0IDEwLjEyNzIgNS44NjUzNiAxMS44ODU5IDUuODY1MzZDMTMuNjQ0NiA1Ljg2NTM2IDE1LjM2NCA2LjM4NTk0IDE2LjgyNzQgNy4zNjE1MUwxNi45NjA5IDcuNDUwNTZDMTguMDc1NiA4LjE5MzY0IDE5LjAxOTMgOS4xNjU0OSAxOS43MjkzIDEwLjMwMTVMMjAuNzA2NyAxMS44NjU0TDE5LjcyOTMgMTMuNDI5MkMxOS4wMTkzIDE0LjU2NTIgMTguMDc1NiAxNS41MzcxIDE2Ljk2MDkgMTYuMjgwMkwxNi44Mjc0IDE2LjM2OTJDMTUuMzY0IDE3LjM0NDggMTMuNjQ0NiAxNy44NjU0IDExLjg4NTkgMTcuODY1NEMxMC4xMjcyIDE3Ljg2NTQgOC40MDc4MiAxNy4zNDQ4IDYuOTQ0NDcgMTYuMzY5Mkw2LjgxMDkgMTYuMjgwMkM1LjY5NjI3IDE1LjUzNzEgNC43NTI1OSAxNC41NjUyIDQuMDQyNTkgMTMuNDI5MkwzLjA2NTE3IDExLjg2NTRMNC4wNDI1OSAxMC4zMDE1QzQuNzUyNTkgOS4xNjU0OSA1LjY5NjI3IDguMTkzNjQgNi44MTA5IDcuNDUwNTZMNi45NDQ0NyA3LjM2MTUxWlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH0pKTtcbiAgfVxuXG4gIHZhciBzaXplID0gZGVuc2l0eSA9PT0gJ2NvbXBhY3QnID8gJzIwJyA6ICcyNCc7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICB9XG4gIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInRpdGxlXCIsIG51bGwsIE9iamVjdChpMThuX1tcIl9cIl0pKCdWaWV3IHBhc3N3b3JkJykpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1Ljc3NDUgMTEuODY1NEMxNS43NzQ1IDE0LjAxMzIgMTQuMDMzNCAxNS43NTQzIDExLjg4NTcgMTUuNzU0M0M5LjczNzg4IDE1Ljc1NDMgNy45OTY3NyAxNC4wMTMyIDcuOTk2NzcgMTEuODY1NEM3Ljk5Njc3IDkuNzE3NjIgOS43Mzc4OCA3Ljk3NjUgMTEuODg1NyA3Ljk3NjVDMTQuMDMzNCA3Ljk3NjUgMTUuNzc0NSA5LjcxNzYyIDE1Ljc3NDUgMTEuODY1NFpNMTMuNzc0NSAxMS44NjU0QzEzLjc3NDUgMTIuOTA4NiAxMi45Mjg5IDEzLjc1NDMgMTEuODg1NyAxMy43NTQzQzEwLjg0MjQgMTMuNzU0MyA5Ljk5Njc3IDEyLjkwODYgOS45OTY3NyAxMS44NjU0QzkuOTk2NzcgMTAuODIyMiAxMC44NDI0IDkuOTc2NSAxMS44ODU3IDkuOTc2NUMxMi45Mjg5IDkuOTc2NSAxMy43NzQ1IDEwLjgyMjIgMTMuNzc0NSAxMS44NjU0WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuODg1OSAzLjg2NTM2QzkuNzMyMzUgMy44NjUzNiA3LjYyNjk1IDQuNTAyODIgNS44MzUwNyA1LjY5NzQxTDUuNzAxNSA1Ljc4NjQ2QzQuMzUwNjggNi42ODcgMy4yMDcwNCA3Ljg2NDc3IDIuMzQ2NiA5LjI0MTQ4TDEuMDczNjkgMTEuMjc4MUMwLjg0OTEzNiAxMS42Mzc0IDAuODQ5MTM3IDEyLjA5MzMgMS4wNzM2OSAxMi40NTI2TDIuMzQ2NiAxNC40ODkyQzMuMjA3MDQgMTUuODY1OSA0LjM1MDY4IDE3LjA0MzcgNS43MDE1IDE3Ljk0NDNMNS44MzUwNyAxOC4wMzMzQzcuNjI2OTUgMTkuMjI3OSA5LjczMjM1IDE5Ljg2NTQgMTEuODg1OSAxOS44NjU0QzE0LjAzOTUgMTkuODY1NCAxNi4xNDQ5IDE5LjIyNzkgMTcuOTM2OCAxOC4wMzMzTDE4LjA3MDMgMTcuOTQ0M0MxOS40MjEyIDE3LjA0MzcgMjAuNTY0OCAxNS44NjU5IDIxLjQyNTIgMTQuNDg5MkwyMi42OTgyIDEyLjQ1MjZDMjIuOTIyNyAxMi4wOTMzIDIyLjkyMjcgMTEuNjM3NCAyMi42OTgyIDExLjI3ODFMMjEuNDI1MiA5LjI0MTQ4QzIwLjU2NDggNy44NjQ3NyAxOS40MjEyIDYuNjg3IDE4LjA3MDMgNS43ODY0NUwxNy45MzY4IDUuNjk3NDFDMTYuMTQ0OSA0LjUwMjgyIDE0LjAzOTUgMy44NjUzNiAxMS44ODU5IDMuODY1MzZaTTYuOTQ0NDcgNy4zNjE1MUM4LjQwNzgyIDYuMzg1OTQgMTAuMTI3MiA1Ljg2NTM2IDExLjg4NTkgNS44NjUzNkMxMy42NDQ2IDUuODY1MzYgMTUuMzY0IDYuMzg1OTQgMTYuODI3NCA3LjM2MTUxTDE2Ljk2MDkgNy40NTA1NkMxOC4wNzU2IDguMTkzNjQgMTkuMDE5MyA5LjE2NTQ5IDE5LjcyOTMgMTAuMzAxNUwyMC43MDY3IDExLjg2NTRMMTkuNzI5MyAxMy40MjkyQzE5LjAxOTMgMTQuNTY1MiAxOC4wNzU2IDE1LjUzNzEgMTYuOTYwOSAxNi4yODAyTDE2LjgyNzQgMTYuMzY5MkMxNS4zNjQgMTcuMzQ0OCAxMy42NDQ2IDE3Ljg2NTQgMTEuODg1OSAxNy44NjU0QzEwLjEyNzIgMTcuODY1NCA4LjQwNzgyIDE3LjM0NDggNi45NDQ0NyAxNi4zNjkyTDYuODEwOSAxNi4yODAyQzUuNjk2MjcgMTUuNTM3MSA0Ljc1MjU5IDE0LjU2NTIgNC4wNDI1OSAxMy40MjkyTDMuMDY1MTcgMTEuODY1NEw0LjA0MjU5IDEwLjMwMTVDNC43NTI1OSA5LjE2NTQ5IDUuNjk2MjcgOC4xOTM2NCA2LjgxMDkgNy40NTA1Nkw2Ljk0NDQ3IDcuMzYxNTFaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRleHRfSWNvbk91dGxpbmVkVmlldyA9IChJY29uT3V0bGluZWRWaWV3KTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2gvc3RhcnRDYXNlXCJcbnZhciBzdGFydENhc2VfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XG52YXIgc3RhcnRDYXNlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHN0YXJ0Q2FzZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCJcbnZhciBCb3hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBCb3hfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQm94Xyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RleHQvVGV4dFN0eWxlcy50c1xuXG5cblxuXG52YXIgU3R5bGVkQm94ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKEJveF9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUZXh0U3R5bGVzX19TdHlsZWRCb3hcIixcbiAgY29tcG9uZW50SWQ6IFwiZWc3bjZ0LTBcIlxufSkoW1wiZmxleC1ncm93OjE7ZmxleC1zaHJpbms6MTtwb3NpdGlvbjpyZWxhdGl2ZTsmW2RhdGEtaW5saW5lXXt3aWR0aDoyMzBweDtmbGV4LWJhc2lzOjIzMHB4O1tkYXRhLWlubGluZV0gKyAme21hcmdpbi1sZWZ0OlwiLCBcIjt9fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ0hhbGYsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nU21hbGxcbn0pKTtcblxudmFyIFRleHRTdHlsZXNfYWRkUGFkZGluZyA9IGZ1bmN0aW9uIGFkZFBhZGRpbmcocHJvcGVydHksIHR5cGUsIGJhc2UpIHtcbiAgcmV0dXJuIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIlwiLCBcIjpcIiwgXCI7XCJdLFxuICAvKiBzYy1wcm9wICovXG4gIHByb3BlcnR5LCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciAkY3VzdG9tU3R5bGUgPSBfcmVmLiRjdXN0b21TdHlsZTtcbiAgICB2YXIgY3VzdG9tID0gJGN1c3RvbVN0eWxlICYmICRjdXN0b21TdHlsZVtcInBhZGRpbmdcIi5jb25jYXQoc3RhcnRDYXNlX2RlZmF1bHQoKSh0eXBlKSldIHx8ICcwcHgnO1xuICAgIHJldHVybiBjdXN0b20gPyBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjYWxjKFwiLCBcIiArIFwiLCBcIilcIl0sIGJhc2UsIGN1c3RvbSkgOiBiYXNlO1xuICB9KTtcbn07XG5cbnZhciBsZWZ0SWNvblBhZGRpbmcgPSBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJcIiwgXCJcIl0sIGZ1bmN0aW9uIChwcm9wcykge1xuICB2YXIgcGFkZGluZyA9IE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIHByaXNtYToge1xuICAgICAgY29tcGFjdDogJzM1cHgnLFxuICAgICAgY29tZm9ydGFibGU6ICczOXB4J1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICB2YXIgcGFkZGluZ1Jlc3VsdCA9IHBhZGRpbmcocHJvcHMpO1xuICAgIHJldHVybiBUZXh0U3R5bGVzX2FkZFBhZGRpbmcoJ3BhZGRpbmctbGVmdCcsICdsZWZ0JywgcGFkZGluZ1Jlc3VsdCk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59KTtcbnZhciByaWdodEljb25QYWRkaW5nID0gT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiXCIsIFwiXCJdLCBmdW5jdGlvbiAocHJvcHMpIHtcbiAgdmFyIHBhZGRpbmcgPSBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBjb21mb3J0YWJsZTogJzI4cHgnLFxuICAgICAgY29tcGFjdDogJzI0cHgnXG4gICAgfSxcbiAgICBwcmlzbWE6IHtcbiAgICAgIGNvbWZvcnRhYmxlOiAnNDBweCcsXG4gICAgICBjb21wYWN0OiAnMzZweCdcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgdmFyIHBhZGRpbmdSZXN1bHQgPSBwYWRkaW5nKHByb3BzKTtcbiAgICByZXR1cm4gVGV4dFN0eWxlc19hZGRQYWRkaW5nKCdwYWRkaW5nLXJpZ2h0JywgJ3JpZ2h0JywgcGFkZGluZ1Jlc3VsdCk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59KTtcbnZhciBkaXNhYmxlZFN0eWxlcyA9IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiYsJlt0eXBlXXtjb2xvcjpcIiwgXCI7Jjo6cGxhY2Vob2xkZXJ7Y29sb3I6XCIsIFwiO31cIiwgXCIgYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7Y3Vyc29yOm5vdC1hbGxvd2VkO31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHREaXNhYmxlZENvbG9yLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWRcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0RGlzYWJsZWRDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRpc2FibGVkXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBsaWdodDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Ym9yZGVyLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTk2LCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5MiksXG4gICAgZGFyazogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Ym9yZGVyLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTIyLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXkzMClcbiAgfSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQm9yZGVyRGlzYWJsZWQpXG59KSk7XG52YXIgU3R5bGVkQ2xlYXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuc3Bhbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGV4dFN0eWxlc19fU3R5bGVkQ2xlYXJcIixcbiAgY29tcG9uZW50SWQ6IFwiZWc3bjZ0LTFcIlxufSkoW1wiXCIsIFwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDpcIiwgXCI7Zm9udC1zaXplOjAuODMzMzNlbTtjb2xvcjpcIiwgXCI7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxO3BhZGRpbmc6XCIsIFwiO1wiLCBcIlwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnaW5saW5lJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMnB4JyxcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6ICc4cHgnLFxuICAgIGNvbXBhY3Q6ICc2cHgnXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk2MCxcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLndoaXRlXG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBjb21mb3J0YWJsZTogJzhweCcsXG4gICAgY29tcGFjdDogJzdweCdcbiAgfSxcbiAgcHJpc21hOiAwXG59KSwgZnVuY3Rpb24gKHByb3BzKSB7XG4gIHZhciBwYWRkaW5nID0gT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogJzFweCcsXG4gICAgcHJpc21hOiAnOHB4J1xuICB9KTtcblxuICBpZiAocGFkZGluZykge1xuICAgIHZhciBwYWRkaW5nUmVzdWx0ID0gcGFkZGluZyhwcm9wcyk7XG4gICAgcmV0dXJuIFRleHRTdHlsZXNfYWRkUGFkZGluZygncmlnaHQnLCAncmlnaHQnLCBwYWRkaW5nUmVzdWx0KTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn0pO1xudmFyIFN0eWxlZFZpc2liaWxpdHlUb2dnbGUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuYnV0dG9uLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUZXh0U3R5bGVzX19TdHlsZWRWaXNpYmlsaXR5VG9nZ2xlXCIsXG4gIGNvbXBvbmVudElkOiBcImVnN242dC0yXCJcbn0pKFtcIlwiLCBcIjtwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOlwiLCBcIjt0b3A6XCIsIFwiO2JvcmRlci1yYWRpdXM6XCIsIFwiO3JpZ2h0OlwiLCBcIjtjb2xvcjpcIiwgXCI7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxOyY6aG92ZXJ7Y29sb3I6XCIsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiLCBcIn0mOmZvY3Vze2JveC1zaGFkb3c6XCIsIFwiO1wiLCBcIn1cIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2lubGluZScpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGNvbWZvcnRhYmxlOiAnNXB4IDhweCcsXG4gICAgY29tcGFjdDogJzNweCA3cHgnXG4gIH0sXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiAnMnB4JyxcbiAgICBjb21wYWN0OiAnMXB4J1xuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICcxcHgnLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzZweCcsXG4gICAgY29tcGFjdDogJzVweCdcbiAgfVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlclJhZGl1cyxcbiAgcHJpc21hOiAnNTAlJ1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMXB4JyxcbiAgcHJpc21hOiAnOHB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRHcmF5LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWRcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGlua0NvbG9yLFxuICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLndoaXRlXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9ySG92ZXIsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm94LXNoYWRvdzpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmhvdmVyU2hhZG93KVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3csIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyKVxufSkpO1xuLyogU29tZSBvZiB0aGVzZSBuZWVkIGdyZWF0ZXIgc3BlY2lmaWNpdHkgdGhhbiBpbnB1dFt0eXBlPXRleHRdICovXG5cbnZhciBTdHlsZWRJbnB1dCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5pbnB1dC53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGV4dFN0eWxlc19fU3R5bGVkSW5wdXRcIixcbiAgY29tcG9uZW50SWQ6IFwiZWc3bjZ0LTNcIlxufSkoW1wiJiwmW3R5cGVde2JhY2tncm91bmQtY29sb3I6XCIsIFwiO2JvcmRlcjoxcHggc29saWQgXCIsIFwiO2JvcmRlci1yYWRpdXM6XCIsIFwiO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtjb2xvcjpcIiwgXCI7ZGlzcGxheTpibG9jaztmb250LWZhbWlseTpcIiwgXCI7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDttYXJnaW46MDttaW4taGVpZ2h0OlwiLCBcIjt3aWR0aDoxMDAlO1wiLCBcIiBcIiwgXCIgICBcIiwgXCIgcG9zaXRpb246cmVsYXRpdmU7XCIsIFwiIFwiLCBcIiAmOmhvdmVyOm5vdChbZGlzYWJsZWRdKXtib3JkZXItY29sb3I6XCIsIFwiO30mOmZvY3VzOm5vdChbZGlzYWJsZWRdKXtcIiwgXCIgb3V0bGluZTowO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTt6LWluZGV4OjE7fVwiLCBcIiAmOjotbXMtY2xlYXJ7ZGlzcGxheTpub25lO3dpZHRoOjA7aGVpZ2h0OjA7fSY6OnBsYWNlaG9sZGVye2NvbG9yOlwiLCBcIjtvcGFjaXR5OjE7fVwiLCBcIiBcIiwgXCJ9dGV4dGFyZWEme3Jlc2l6ZTpub25lO292ZXJmbG93OmF1dG87fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS53aGl0ZSxcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXkyMlxuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udHJhbnNwYXJlbnRcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlckNvbG9yLFxuICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTIwXG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQm9yZGVyXG59KSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJSYWRpdXMsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckFjdGl2ZVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc2Fuc0ZvbnRGYW1pbHksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW5wdXRIZWlnaHQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmctdG9wOlwiLCBcIjtwYWRkaW5nLWJvdHRvbTpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdRdWFydGVyLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdRdWFydGVyKSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLXRvcDozcHg7cGFkZGluZy1ib3R0b206M3B4O1wiXSlcbiAgfSxcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmctdG9wOjdweDtwYWRkaW5nLWJvdHRvbTo3cHg7XCJdKSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLXRvcDo1cHg7cGFkZGluZy1ib3R0b206NXB4O1wiXSlcbiAgfVxufSksIGZ1bmN0aW9uIChwcm9wcykge1xuICB2YXIgcGFkZGluZyA9IE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ0hhbGYsXG4gICAgcHJpc21hOiAnMTRweCdcbiAgfSk7XG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICB2YXIgcGFkZGluZ1Jlc3VsdCA9IHBhZGRpbmcocHJvcHMpO1xuICAgIHJldHVybiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJcIiwgXCI7XCIsIFwiO1wiXSwgVGV4dFN0eWxlc19hZGRQYWRkaW5nKCdwYWRkaW5nLXJpZ2h0JywgJ3JpZ2h0JywgcGFkZGluZ1Jlc3VsdCksIFRleHRTdHlsZXNfYWRkUGFkZGluZygncGFkZGluZy1sZWZ0JywgJ2xlZnQnLCBwYWRkaW5nUmVzdWx0KSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59LCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyICRyaWdodEljb25QYWRkaW5nID0gX3JlZjIuJHJpZ2h0SWNvblBhZGRpbmc7XG4gIHJldHVybiAkcmlnaHRJY29uUGFkZGluZyAmJiByaWdodEljb25QYWRkaW5nO1xufSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciAkYXBwZW5kID0gX3JlZjMuJGFwcGVuZDtcbiAgcmV0dXJuICRhcHBlbmQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wibWFyZ2luLXJpZ2h0Oi0xcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1yaWdodDpub25lO1wiXSk7XG59LCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyICRwcmVwZW5kID0gX3JlZjQuJHByZXBlbmQ7XG4gIHJldHVybiAkcHJlcGVuZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO1wiXSk7XG59LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlcixcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXkyMFxuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJvcmRlckhvdmVyXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJveC1zaGFkb3c6XCIsIFwiO2NvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3csIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udGV4dENvbG9yKSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO2NvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvclByaW1hcnksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckZXJyb3InLCB7XG4gIFwidHJ1ZVwiOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImLCY6aG92ZXJ7Ym9yZGVyLWNvbG9yOlwiLCBcIjtjb2xvcjpcIiwgXCI7fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lcnJvckNvbG9yLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlXG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVycm9yQ29sb3IsXG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckFjdGl2ZVxuICB9KSksXG4gIFwiZmFsc2VcIjoge1xuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSArIFwiLCBcInsmOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpe2Rpc3BsYXk6bm9uZTt9fVwiXSxcbiAgICAvKiBzYy1zZWwgKi9cbiAgICBTdHlsZWRDbGVhcilcbiAgfVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQsIGZ1bmN0aW9uIChfcmVmNSkge1xuICB2YXIgZGlzYWJsZWQgPSBfcmVmNS5kaXNhYmxlZDtcbiAgcmV0dXJuIGRpc2FibGVkICYmIGRpc2FibGVkU3R5bGVzO1xufSwgZnVuY3Rpb24gKF9yZWY2KSB7XG4gIHZhciAkc2VhcmNoID0gX3JlZjYuJHNlYXJjaDtcbiAgcmV0dXJuICRzZWFyY2ggJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiXCIsIFwiO1wiLCBcIjtcIl0sIHJpZ2h0SWNvblBhZGRpbmcsIGxlZnRJY29uUGFkZGluZyk7XG59KTtcbnZhciBTdHlsZWRTZWFyY2hJY29uV3JhcHBlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUZXh0U3R5bGVzX19TdHlsZWRTZWFyY2hJY29uV3JhcHBlclwiLFxuICBjb21wb25lbnRJZDogXCJlZzduNnQtNFwiXG59KShbXCJjb2xvcjpcIiwgXCI7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7XCIsIFwiOyZbZGlzYWJsZWRde1wiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk2MCxcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLndoaXRlXG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JNdXRlZFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInRvcDo4cHg7cmlnaHQ6OHB4O1wiXSksXG4gICAgY29tcGFjdDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widG9wOjZweDtyaWdodDo2cHg7XCJdKVxuICB9LFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widG9wOjhweDtsZWZ0OjhweDtcIl0pLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInRvcDo2cHg7bGVmdDo4cHg7XCJdKVxuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZClcbn0pKTtcbnZhciBTdHlsZWRQbGFjZWhvbGRlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUZXh0U3R5bGVzX19TdHlsZWRQbGFjZWhvbGRlclwiLFxuICBjb21wb25lbnRJZDogXCJlZzduNnQtNVwiXG59KShbXCJjb2xvcjpcIiwgXCI7cG9zaXRpb246YWJzb2x1dGU7bWF4LXdpZHRoOjEwMCU7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt6LWluZGV4OjE7XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udGV4dEdyYXksXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JNdXRlZFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInRvcDo3cHg7XCIsIFwiXCJdLCBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgIHZhciBwYWRkaW5nID0gcHJvcHMuJHJlbmRlclNlYXJjaEljb24gPyBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICAgICAgZW50ZXJwcmlzZTogJzExcHgnLFxuICAgICAgICBwcmlzbWE6ICc0MHB4J1xuICAgICAgfSkgOiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICAgICAgZW50ZXJwcmlzZTogJzExcHgnLFxuICAgICAgICBwcmlzbWE6ICcxNnB4J1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYWRkaW5nKSB7XG4gICAgICAgIHZhciBwYWRkaW5nUmVzdWx0ID0gcGFkZGluZyhwcm9wcyk7XG4gICAgICAgIHJldHVybiBUZXh0U3R5bGVzX2FkZFBhZGRpbmcoJ2xlZnQnLCAnbGVmdCcsIHBhZGRpbmdSZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSksXG4gICAgY29tcGFjdDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widG9wOjVweDtcIiwgXCI7XCJdLCBUZXh0U3R5bGVzX2FkZFBhZGRpbmcoJ2xlZnQnLCAnbGVmdCcsICc3cHgnKSlcbiAgfSxcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInRvcDoxMHB4O2xlZnQ6XCIsIFwiO1wiXSwgZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICB2YXIgJHJlbmRlclNlYXJjaEljb24gPSBfcmVmNy4kcmVuZGVyU2VhcmNoSWNvbjtcbiAgICAgIHJldHVybiAkcmVuZGVyU2VhcmNoSWNvbiA/ICc0MHB4JyA6ICcxNHB4JztcbiAgICB9KSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ0b3A6NnB4O2xlZnQ6XCIsIFwiO1wiXSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gICAgICB2YXIgJHJlbmRlclNlYXJjaEljb24gPSBfcmVmOC4kcmVuZGVyU2VhcmNoSWNvbjtcbiAgICAgIHJldHVybiAkcmVuZGVyU2VhcmNoSWNvbiA/ICc0MHB4JyA6ICcxNHB4JztcbiAgICB9KVxuICB9XG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RleHQvVGV4dC50c3hcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gVGV4dF9leHRlbmRzKCkgeyBUZXh0X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gVGV4dF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqIEBwdWJsaWMgKi9cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgYXBwZWFyYW5jZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydkZWZhdWx0JywgJ3NlYXJjaCddKSxcbiAgYXBwZW5kOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBhdXRvQ2FwaXRhbGl6ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBhdXRvQ29tcGxldGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgYXV0b0NvcnJlY3Q6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgYXV0b0ZvY3VzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBjYW5DbGVhcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBjbGFzc05hbWVQcml2YXRlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGRlZmF1bHRWYWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkZXNjcmliZWRCeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZXJyb3I6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGlubGluZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGlucHV0Q2xhc3NOYW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGlucHV0SWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgaW5wdXRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIGlucHV0U3R5bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdCxcbiAgbGFiZWxsZWRCeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBtYXhMZW5ndGg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgbXVsdGlsaW5lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBuYW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIG9uQmx1cjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25DaGFuZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uRm9jdXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uS2V5RG93bjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25TZWxlY3Q6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIHByZXBlbmQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHJvd3NNYXg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgcm93c01pbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuICBzcGVsbENoZWNrOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICB0YWJJbmRleDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBzcGx1bmtUaGVtZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICB0eXBlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ3RleHQnLCAncGFzc3dvcmQnXSksXG4gIHBhc3N3b3JkVmlzaWJpbGl0eVRvZ2dsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgdXNlU3ludGhldGljUGxhY2Vob2xkZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHZhbHVlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmdcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBhcHBlYXJhbmNlOiAnZGVmYXVsdCcsXG4gIGFwcGVuZDogZmFsc2UsXG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGNhbkNsZWFyOiBmYWxzZSxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBlcnJvcjogZmFsc2UsXG4gIGlubGluZTogZmFsc2UsXG4gIGlucHV0U3R5bGU6IHt9LFxuICBtdWx0aWxpbmU6IGZhbHNlLFxuICBwbGFjZWhvbGRlcjogJycsXG4gIHByZXBlbmQ6IGZhbHNlLFxuICByb3dzTWF4OiA4LFxuICByb3dzTWluOiAyLFxuICB0YWJJbmRleDogMCxcbiAgdHlwZTogJ3RleHQnLFxuICBwYXNzd29yZFZpc2liaWxpdHlUb2dnbGU6IGZhbHNlLFxuICB1c2VTeW50aGV0aWNQbGFjZWhvbGRlcjogZmFsc2Vcbn07XG5cbi8qKiBOb3RlOiBUZXh0IHBsYWNlcyByb2xlIGFuZCBhcmlhIHByb3BzIG9udG8gdGhlIGlucHV0LiBBbGwgb3RoZXIgcHJvcHMgYXJlIHBsYWNlZCBvbiB0aGUgd3JhcHBlci4gKi9cbnZhciBUZXh0X1RleHQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFRleHQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVGV4dCk7XG5cbiAgX2NyZWF0ZUNsYXNzKFRleHQsIG51bGwsIFt7XG4gICAga2V5OiBcInZhbGlkYXRlUm93c1wiLFxuICAgIC8vIEBkb2NzLXByb3BzLXR5cGUgVGV4dFByb3BzQmFzZVxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZVJvd3MoX3JlZikge1xuICAgICAgdmFyIHJvd3NNaW4gPSBfcmVmLnJvd3NNaW4sXG4gICAgICAgICAgcm93c01heCA9IF9yZWYucm93c01heDtcblxuICAgICAgaWYgKGZhbHNlKSB7fVxuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFRleHQocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250cm9sbGVkRXh0ZXJuYWxseVwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNoYWRvd1wiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVSZXNpemVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc3luY0hlaWdodFdpdGhTaGFkb3coKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dE1vdW50XCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgX3RoaXMuaW5wdXQgPSBlbDtcbiAgICAgIE9iamVjdCh1cGRhdGVSZWFjdFJlZltcImFcIiAvKiB1cGRhdGVSZWFjdFJlZiAqL10pKF90aGlzLnByb3BzLmlucHV0UmVmLCBlbCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSW5wdXRDaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNoYW5nZSwgX3RoaXMkcHJvcHM7XG5cbiAgICAgIHZhciB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdmFyIG5hbWUgPSBfdGhpcy5wcm9wcy5uYW1lO1xuXG4gICAgICBpZiAoIV90aGlzLmlzQ29udHJvbGxlZCgpKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2hhbmdlLmNhbGwoX3RoaXMkcHJvcHMsIGUsIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dEtleURvd25cIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbktleURvd24sIF90aGlzJHByb3BzMjtcblxuICAgICAgKF90aGlzJHByb3BzJG9uS2V5RG93biA9IChfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcykub25LZXlEb3duKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbktleURvd24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uS2V5RG93bi5jYWxsKF90aGlzJHByb3BzMiwgZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSW5wdXRTZWxlY3RcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvblNlbGVjdCwgX3RoaXMkcHJvcHMzO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25TZWxlY3QgPSAoX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMpLm9uU2VsZWN0KSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25TZWxlY3QuY2FsbChfdGhpcyRwcm9wczMsIGUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUlucHV0Rm9jdXNcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkZvY3VzLCBfdGhpcyRwcm9wczQ7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25Gb2N1cyA9IChfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcykub25Gb2N1cykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25Gb2N1cy5jYWxsKF90aGlzJHByb3BzNCwgZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSW5wdXRCbHVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25CbHVyLCBfdGhpcyRwcm9wczU7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgKF90aGlzJHByb3BzJG9uQmx1ciA9IChfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcykub25CbHVyKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQmx1ci5jYWxsKF90aGlzJHByb3BzNSwgZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xlYXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIE9ubHkgcmVzcG9uZCB0byBsZWZ0IG1vdXNlIGJ1dHRvbi5cbiAgICAgIGlmIChlLmJ1dHRvbiA9PT0gMCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DaGFuZ2UyLCBfdGhpcyRwcm9wczY7XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgdmFsdWUgPSAnJztcbiAgICAgICAgdmFyIG5hbWUgPSBfdGhpcy5wcm9wcy5uYW1lO1xuXG4gICAgICAgIGlmICghX3RoaXMuaXNDb250cm9sbGVkKCkpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZTIgPSAoX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMpLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNoYW5nZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2hhbmdlMi5jYWxsKF90aGlzJHByb3BzNiwgZSwge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVZpc2liaWxpdHlUb2dnbGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGlkZVZpc2liaWxpdHk6ICFzdGF0ZS5oaWRlVmlzaWJpbGl0eVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlUGxhY2Vob2xkZXJNb3VzZURvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZm9jdXMoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzeW5jSGVpZ2h0V2l0aFNoYWRvd1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmV3SGVpZ2h0ID0gc3luY0hlaWdodFdpdGhTaGFkb3coe1xuICAgICAgICBoZWlnaHQ6IF90aGlzLnN0YXRlLmhlaWdodCxcbiAgICAgICAgbXVsdGlsaW5lOiBfdGhpcy5wcm9wcy5tdWx0aWxpbmUsXG4gICAgICAgIHJvd3NNYXg6IF90aGlzLnByb3BzLnJvd3NNYXgsXG4gICAgICAgIHJvd3NNaW46IF90aGlzLnByb3BzLnJvd3NNaW4sXG4gICAgICAgIHNoYWRvdzogX3RoaXMuc2hhZG93XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5ld0hlaWdodCAhPT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhlaWdodDogbmV3SGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX3RoaXMuY29udHJvbGxlZEV4dGVybmFsbHkgPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImhhc1wiXSkocHJvcHMsICd2YWx1ZScpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgdmFsdWU6IHByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJyxcbiAgICAgIGhpZGVWaXNpYmlsaXR5OiB0cnVlXG4gICAgfTtcblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIFRleHQudmFsaWRhdGVSb3dzKHByb3BzKTtcbiAgICBfdGhpcy5oYW5kbGVSZXNpemUgPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcInRocm90dGxlXCJdKShfdGhpcy5oYW5kbGVSZXNpemUsIDEwMCk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFRleHQsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJkZWZlclwiXSkodGhpcy5zeW5jSGVpZ2h0V2l0aFNoYWRvdyk7IC8vIHdhaXQgZm9yIHN0eWxlcyB0byBsb2FkXG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5tdWx0aWxpbmUpIHtcbiAgICAgICAgdGhpcy5zeW5jSGVpZ2h0V2l0aFNoYWRvdygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICAgIGlmIChmYWxzZSkge31cblxuICAgICAgVGV4dC52YWxpZGF0ZVJvd3ModGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzQ29udHJvbGxlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NvbnRyb2xsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVkRXh0ZXJuYWxseTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmx1clwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgdmFyIF90aGlzJGlucHV0O1xuXG4gICAgICAoX3RoaXMkaW5wdXQgPSB0aGlzLmlucHV0KSA9PT0gbnVsbCB8fCBfdGhpcyRpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaW5wdXQuYmx1cigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQbGFjZSBmb2N1cyBvbiB0aGUgaW5wdXQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIHZhciBfdGhpcyRpbnB1dDI7XG5cbiAgICAgIChfdGhpcyRpbnB1dDIgPSB0aGlzLmlucHV0KSA9PT0gbnVsbCB8fCBfdGhpcyRpbnB1dDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGlucHV0Mi5mb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZWxlY3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KCkge1xuICAgICAgdmFyIF90aGlzJGlucHV0MztcblxuICAgICAgKF90aGlzJGlucHV0MyA9IHRoaXMuaW5wdXQpID09PSBudWxsIHx8IF90aGlzJGlucHV0MyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaW5wdXQzLnNlbGVjdCgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFwcGVhcmFuY2UgPSBfdGhpcyRwcm9wczcuYXBwZWFyYW5jZSxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczcuYXBwZW5kLFxuICAgICAgICAgIGF1dG9DYXBpdGFsaXplID0gX3RoaXMkcHJvcHM3LmF1dG9DYXBpdGFsaXplLFxuICAgICAgICAgIGF1dG9Db21wbGV0ZSA9IF90aGlzJHByb3BzNy5hdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0NvcnJlY3QgPSBfdGhpcyRwcm9wczcuYXV0b0NvcnJlY3QsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHM3LmF1dG9Gb2N1cyxcbiAgICAgICAgICBjYW5DbGVhciA9IF90aGlzJHByb3BzNy5jYW5DbGVhcixcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczcuY2xhc3NOYW1lLFxuICAgICAgICAgIGNsYXNzTmFtZVByaXZhdGUgPSBfdGhpcyRwcm9wczcuY2xhc3NOYW1lUHJpdmF0ZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzNy5kaXNhYmxlZCxcbiAgICAgICAgICBkZXNjcmliZWRCeSA9IF90aGlzJHByb3BzNy5kZXNjcmliZWRCeSxcbiAgICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHM3LmVsZW1lbnRSZWYsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczcuZXJyb3IsXG4gICAgICAgICAgaW5saW5lID0gX3RoaXMkcHJvcHM3LmlubGluZSxcbiAgICAgICAgICBpbnB1dENsYXNzTmFtZSA9IF90aGlzJHByb3BzNy5pbnB1dENsYXNzTmFtZSxcbiAgICAgICAgICBpbnB1dElkID0gX3RoaXMkcHJvcHM3LmlucHV0SWQsXG4gICAgICAgICAgaW5wdXRTdHlsZSA9IF90aGlzJHByb3BzNy5pbnB1dFN0eWxlLFxuICAgICAgICAgIGxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wczcubGFiZWxsZWRCeSxcbiAgICAgICAgICBtdWx0aWxpbmUgPSBfdGhpcyRwcm9wczcubXVsdGlsaW5lLFxuICAgICAgICAgIG1heExlbmd0aCA9IF90aGlzJHByb3BzNy5tYXhMZW5ndGgsXG4gICAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzNy5uYW1lLFxuICAgICAgICAgIHBhc3N3b3JkVmlzaWJpbGl0eVRvZ2dsZSA9IF90aGlzJHByb3BzNy5wYXNzd29yZFZpc2liaWxpdHlUb2dnbGUsXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczcucGxhY2Vob2xkZXIsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzNy5wcmVwZW5kLFxuICAgICAgICAgIHNwZWxsQ2hlY2sgPSBfdGhpcyRwcm9wczcuc3BlbGxDaGVjayxcbiAgICAgICAgICBzcGx1bmtUaGVtZSA9IF90aGlzJHByb3BzNy5zcGx1bmtUaGVtZSxcbiAgICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzNy50YWJJbmRleCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzNy50aXRsZSxcbiAgICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHM3LnR5cGUsXG4gICAgICAgICAgdXNlU3ludGhldGljUGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczcudXNlU3ludGhldGljUGxhY2Vob2xkZXIsXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwcm9wczcudmFsdWUsXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczcsIFtcImFwcGVhcmFuY2VcIiwgXCJhcHBlbmRcIiwgXCJhdXRvQ2FwaXRhbGl6ZVwiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Db3JyZWN0XCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2FuQ2xlYXJcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsYXNzTmFtZVByaXZhdGVcIiwgXCJkaXNhYmxlZFwiLCBcImRlc2NyaWJlZEJ5XCIsIFwiZWxlbWVudFJlZlwiLCBcImVycm9yXCIsIFwiaW5saW5lXCIsIFwiaW5wdXRDbGFzc05hbWVcIiwgXCJpbnB1dElkXCIsIFwiaW5wdXRTdHlsZVwiLCBcImxhYmVsbGVkQnlcIiwgXCJtdWx0aWxpbmVcIiwgXCJtYXhMZW5ndGhcIiwgXCJuYW1lXCIsIFwicGFzc3dvcmRWaXNpYmlsaXR5VG9nZ2xlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJwcmVwZW5kXCIsIFwic3BlbGxDaGVja1wiLCBcInNwbHVua1RoZW1lXCIsIFwidGFiSW5kZXhcIiwgXCJ0aXRsZVwiLCBcInR5cGVcIiwgXCJ1c2VTeW50aGV0aWNQbGFjZWhvbGRlclwiLCBcInZhbHVlXCJdKTtcblxuICAgICAgdmFyIGZhbWlseSA9IHNwbHVua1RoZW1lLmZhbWlseTtcbiAgICAgIHZhciBpc1ByaXNtYSA9IGZhbWlseSA9PT0gJ3ByaXNtYSc7XG5cbiAgICAgIHZhciBhcmlhUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wicGlja0J5XCJdKShvdGhlclByb3BzLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ3JvbGUnIHx8IGtleS5pbmRleE9mKCdhcmlhLScpID09PSAwO1xuICAgICAgfSkpLCB7fSwge1xuICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGRlc2NyaWJlZEJ5LFxuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxsZWRCeSxcbiAgICAgICAgJ2FyaWEtaW52YWxpZCc6IGVycm9yIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtbXVsdGlsaW5lJzogbXVsdGlsaW5lXG4gICAgICB9KTtcblxuICAgICAgdmFyIGJveFByb3BzID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKShvdGhlclByb3BzLCBbJ2lucHV0UmVmJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uS2V5RG93bicsICdvblNlbGVjdCcsICdyb3dzTWF4JywgJ3Jvd3NNaW4nXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wia2V5c1wiXSkoYXJpYVByb3BzKSkpKTtcbiAgICAgIHZhciBkaXNwbGF5VmFsdWUgPSB0aGlzLmlzQ29udHJvbGxlZCgpID8gdmFsdWUgOiB0aGlzLnN0YXRlLnZhbHVlO1xuICAgICAgdmFyIGNsZWFySWNvblBhZGRpbmcgPSAhZGlzYWJsZWQgJiYgKGNhbkNsZWFyIHx8IGFwcGVhcmFuY2UgPT09ICdzZWFyY2gnKTtcbiAgICAgIHZhciByZXNlcnZlSWNvblNwYWNlID0gZGlzcGxheVZhbHVlICYmIGNsZWFySWNvblBhZGRpbmcgfHwgcGFzc3dvcmRWaXNpYmlsaXR5VG9nZ2xlIHx8IHVuZGVmaW5lZDsgLy8gVGhlc2UgcHJvcHMgYXJlIHVzZWQgYnkgYm90aCB0aGUgaW5wdXQgYW5kIGl0cyBzaGFkb3cuXG5cbiAgICAgIHZhciBkaXNwbGF5UHJvcHMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogT2JqZWN0KHN0eWxlX1tcInRvQ2xhc3NOYW1lXCJdKShjbGFzc05hbWUsIGlucHV0Q2xhc3NOYW1lKSxcbiAgICAgICAgJGFwcGVuZDogYXBwZW5kIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgJGVycm9yOiBlcnJvcixcbiAgICAgICAgJHByZXBlbmQ6IHByZXBlbmQgfHwgdW5kZWZpbmVkLFxuICAgICAgICB2YWx1ZTogZGlzcGxheVZhbHVlXG4gICAgICB9O1xuICAgICAgdmFyIHBhc3N3b3JkVmlzaWJpbGl0eSA9IHRoaXMuc3RhdGUuaGlkZVZpc2liaWxpdHkgPyAncGFzc3dvcmQnIDogJ3RleHQnO1xuICAgICAgdmFyIGNvbXB1dGVkVHlwZSA9IHBhc3N3b3JkVmlzaWJpbGl0eVRvZ2dsZSA/IHBhc3N3b3JkVmlzaWJpbGl0eSA6IHR5cGU7XG5cbiAgICAgIHZhciBpbnB1dFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRpc3BsYXlQcm9wcyksIGFyaWFQcm9wcyksIHt9LCB7XG4gICAgICAgICdkYXRhLXRlc3QnOiAndGV4dGJveCcsXG4gICAgICAgICRjdXN0b21TdHlsZTogaW5wdXRTdHlsZSxcbiAgICAgICAgYXV0b0NhcGl0YWxpemU6IGF1dG9DYXBpdGFsaXplLFxuICAgICAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICAgICAgYXV0b0NvcnJlY3Q6IGF1dG9Db3JyZWN0LFxuICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgaWQ6IGlucHV0SWQsXG4gICAgICAgIG1heExlbmd0aDogbWF4TGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgJiYgIXVzZVN5bnRoZXRpY1BsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlSW5wdXRLZXlEb3duLFxuICAgICAgICBvblNlbGVjdDogdGhpcy5oYW5kbGVJbnB1dFNlbGVjdCxcbiAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVJbnB1dEZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlSW5wdXRCbHVyLFxuICAgICAgICByZWY6IHRoaXMuaGFuZGxlSW5wdXRNb3VudCxcbiAgICAgICAgcm9sZTogJ3RleHRib3gnLFxuICAgICAgICBzcGVsbENoZWNrOiBzcGVsbENoZWNrLFxuICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLnN0YXRlLmhlaWdodFxuICAgICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKGlucHV0U3R5bGUsIFsncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0J10pKSxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgIHR5cGU6IG11bHRpbGluZSA/IG51bGwgOiBjb21wdXRlZFR5cGVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaGF2ZVN5bnRoZXRpY1BsYWNlaG9sZGVyID0gdXNlU3ludGhldGljUGxhY2Vob2xkZXIgJiYgcGxhY2Vob2xkZXIgJiYgIWRpc3BsYXlWYWx1ZTtcbiAgICAgIHZhciBzZWFyY2hJY29uUG9zaXRpb24gPSBpc1ByaXNtYSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB2YXIgcGxhY2Vob2xkZXJQYWRkaW5nID0gYXBwZWFyYW5jZSA9PT0gJ3NlYXJjaCcgJiYgKCFkaXNwbGF5VmFsdWUgJiYgc2VhcmNoSWNvblBvc2l0aW9uICE9PSAnbGVmdCcgfHwgc2VhcmNoSWNvblBvc2l0aW9uID09PSAnbGVmdCcpO1xuICAgICAgdmFyIHNob3dDbGVhckljb24gPSBpc1ByaXNtYSA/IGNsZWFySWNvblBhZGRpbmcgJiYgISFkaXNwbGF5VmFsdWUgOiBjbGVhckljb25QYWRkaW5nICYmICEhZGlzcGxheVZhbHVlICYmICh0aGlzLnN0YXRlLmhhc0ZvY3VzIHx8IGFwcGVhcmFuY2UgPT09ICdzZWFyY2gnKTtcbiAgICAgIHZhciBleWVJY29uID0gdGhpcy5zdGF0ZS5oaWRlVmlzaWJpbGl0eSA/IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUZXh0X0ljb25PdXRsaW5lZFZpZXcsIG51bGwpIDogLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRleHRfSWNvbk91dGxpbmVkSGlkZSwgbnVsbCk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEJveCwgVGV4dF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBPYmplY3Qoc3R5bGVfW1widG9DbGFzc05hbWVcIl0pKGNsYXNzTmFtZSwgY2xhc3NOYW1lUHJpdmF0ZSksXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwidGV4dFwiLFxuICAgICAgICBcImRhdGEtdGVzdC12YWx1ZVwiOiBkaXNwbGF5VmFsdWUsXG4gICAgICAgIGVsZW1lbnRSZWY6IGVsZW1lbnRSZWYsXG4gICAgICAgIGlubGluZTogaW5saW5lXG4gICAgICB9LCBib3hQcm9wcyksICFkaXNhYmxlZCAmJiBtdWx0aWxpbmUgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZElucHV0LCBUZXh0X2V4dGVuZHMoe1xuICAgICAgICAkY3VzdG9tU3R5bGU6IGlucHV0U3R5bGUsXG4gICAgICAgICRzZWFyY2g6IGFwcGVhcmFuY2UgPT09ICdzZWFyY2gnLFxuICAgICAgICBhczogXCJ0ZXh0YXJlYVwiXG4gICAgICB9LCBkaXNwbGF5UHJvcHMsIHtcbiAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgb25DaGFuZ2U6IGV4dGVybmFsX2xvZGFzaF9bXCJub29wXCJdLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgIGxlZnQ6IC0xMDAwMCxcbiAgICAgICAgICB0b3A6IC0xMDAwMFxuICAgICAgICB9LFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGVsKSB7XG4gICAgICAgICAgX3RoaXMyLnNoYWRvdyA9IGVsO1xuICAgICAgICB9XG4gICAgICB9KSksIGRpc2FibGVkID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZElucHV0LCBUZXh0X2V4dGVuZHMoe1xuICAgICAgICAkY3VzdG9tU3R5bGU6IGlucHV0U3R5bGUsXG4gICAgICAgICRyaWdodEljb25QYWRkaW5nOiByZXNlcnZlSWNvblNwYWNlLFxuICAgICAgICAkc2VhcmNoOiBhcHBlYXJhbmNlID09PSAnc2VhcmNoJyxcbiAgICAgICAgYXM6IG11bHRpbGluZSA/ICd0ZXh0YXJlYScgOiB1bmRlZmluZWQsXG4gICAgICAgIGNsYXNzTmFtZTogT2JqZWN0KHN0eWxlX1tcInRvQ2xhc3NOYW1lXCJdKShjbGFzc05hbWUsIGNsYXNzTmFtZVByaXZhdGUpLFxuICAgICAgICBcImRhdGEtbXVsdGlsaW5lXCI6IG11bHRpbGluZSB8fCBudWxsLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImRpc2FibGVkLXRleHRib3hcIixcbiAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICBzdHlsZTogbXVsdGlsaW5lID8ge1xuICAgICAgICAgIGhlaWdodDogdGhpcy5zdGF0ZS5oZWlnaHRcbiAgICAgICAgfSA6IHVuZGVmaW5lZCAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYWNjZXB0OiB0eXBlIG9ubHkgZXhpc3RzIG9uIGlucHV0IChzZWUgXCJhc1wiIHByb3ApXG4gICAgICAgICxcbiAgICAgICAgdHlwZTogbXVsdGlsaW5lID8gdW5kZWZpbmVkIDogY29tcHV0ZWRUeXBlLFxuICAgICAgICB2YWx1ZTogZGlzcGxheVZhbHVlLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgJiYgIXVzZVN5bnRoZXRpY1BsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlZjogbXVsdGlsaW5lID8gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgX3RoaXMyLnNoYWRvdyA9IGVsO1xuICAgICAgICB9IDogdW5kZWZpbmVkXG4gICAgICB9LCBhcmlhUHJvcHMpKSA6IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJbnB1dCwgVGV4dF9leHRlbmRzKHtcbiAgICAgICAgJHJpZ2h0SWNvblBhZGRpbmc6IHJlc2VydmVJY29uU3BhY2UsXG4gICAgICAgICRzZWFyY2g6IGFwcGVhcmFuY2UgPT09ICdzZWFyY2gnLFxuICAgICAgICBhczogbXVsdGlsaW5lID8gJ3RleHRhcmVhJyA6IHVuZGVmaW5lZFxuICAgICAgfSwgaW5wdXRQcm9wcykpLCAhZGlzYWJsZWQgJiYgbXVsdGlsaW5lICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChleHRlcm5hbF9yZWFjdF9ldmVudF9saXN0ZW5lcl9kZWZhdWx0LmEsIHtcbiAgICAgICAgdGFyZ2V0OiBcIndpbmRvd1wiLFxuICAgICAgICBvblJlc2l6ZTogdGhpcy5oYW5kbGVSZXNpemVcbiAgICAgIH0pLCBoYXZlU3ludGhldGljUGxhY2Vob2xkZXIgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNjcmVlblJlYWRlckNvbnRlbnRfZGVmYXVsdC5hLCBudWxsLCBwbGFjZWhvbGRlciksIGhhdmVTeW50aGV0aWNQbGFjZWhvbGRlciAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkUGxhY2Vob2xkZXIsIHtcbiAgICAgICAgJGN1c3RvbVN0eWxlOiBpbnB1dFN0eWxlLFxuICAgICAgICAkcmVuZGVyU2VhcmNoSWNvbjogcGxhY2Vob2xkZXJQYWRkaW5nLFxuICAgICAgICBcImRhdGEtcm9sZVwiOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZVBsYWNlaG9sZGVyTW91c2VEb3duLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWVcbiAgICAgIH0sIHBsYWNlaG9sZGVyKSwgc2hvd0NsZWFySWNvbiAmJiAhcGFzc3dvcmRWaXNpYmlsaXR5VG9nZ2xlICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDbGVhciwge1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImNsZWFyXCIsXG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLmhhbmRsZUNsZWFyLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgICRjdXN0b21TdHlsZTogaW5wdXRTdHlsZVxuICAgICAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENyb3NzTWFya1tcImFcIiAvKiBkZWZhdWx0ICovXSwge1xuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBlbnRlcnByaXNlU2l6ZTogMSxcbiAgICAgICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0NsZWFyJylcbiAgICAgIH0pKSwgcGFzc3dvcmRWaXNpYmlsaXR5VG9nZ2xlICYmICFkaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVmlzaWJpbGl0eVRvZ2dsZSwge1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInBhc3N3b3JkLXRvZ2dsZVwiLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZVZpc2liaWxpdHlUb2dnbGVcbiAgICAgIH0sIGV5ZUljb24pLCBhcHBlYXJhbmNlID09PSAnc2VhcmNoJyAmJiBwbGFjZWhvbGRlclBhZGRpbmcgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFNlYXJjaEljb25XcmFwcGVyLCB7XG4gICAgICAgICRjdXN0b21TdHlsZTogaW5wdXRTdHlsZSxcbiAgICAgICAgJGRpc2FibGVkOiBkaXNhYmxlZFxuICAgICAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNlYXJjaCwge1xuICAgICAgICBlbnRlcnByaXNlU2l6ZTogXCIxNnB4XCIsXG4gICAgICAgIGlubGluZTogZmFsc2VcbiAgICAgIH0pKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUZXh0O1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoVGV4dF9UZXh0LCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoVGV4dF9UZXh0LCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG5fZGVmaW5lUHJvcGVydHkoVGV4dF9UZXh0LCBcImNvbXBvbmVudFR5cGVcIiwgJ1RleHQnKTtcblxudmFyIFRleHRXaXRoVGhlbWVCYXNlID0gT2JqZWN0KHRoZW1lc19bXCJ3aXRoU3BsdW5rVGhlbWVcIl0pKFRleHRfVGV4dCk7XG52YXIgVGV4dFdpdGhUaGVtZSA9IFRleHRXaXRoVGhlbWVCYXNlO1xuVGV4dFdpdGhUaGVtZS5wcm9wVHlwZXMgPSBUZXh0X1RleHQucHJvcFR5cGVzO1xuVGV4dFdpdGhUaGVtZS5jb21wb25lbnRUeXBlID0gVGV4dF9UZXh0LmNvbXBvbmVudFR5cGU7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfVGV4dF9UZXh0ID0gKFRleHRXaXRoVGhlbWUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGV4dC9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXBkYXRlUmVhY3RSZWY7IH0pO1xuLyoqXG4gKiBVcGRhdGVzIGEgUmVhY3QgcmVmLiBDYWxsYmFjayByZWZzIGFuZCBvYmplY3QgcmVmcyAoZnJvbSBgY3JlYXRlUmVmYCBhbmQgYHVzZVJlZmApIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHJlZiAtIFRoZSBSZWFjdCBjYWxsYmFjayBvciBvYmplY3QgcmVmLiBDYW4gYmUgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICogQHBhcmFtIGN1cnJlbnQgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSByZWYuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVJlYWN0UmVmKHJlZiwgY3VycmVudCkge1xuICBpZiAocmVmKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihjdXJyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIHB1YmxpYyBzaWduYXR1cmUgb2YgdGhpcyB1dGlsIHVzZXMgUmVhY3QuUmVmPFQ+IHRvIG1pcnJvciB0aGUgd2F5IFJlYWN0IHR5cGVzIHJlZnMuXG4gICAgICAvLyB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gc2lnbmFsIFwid2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyAnY3VycmVudCcsIG5vdCB5b3VcIi5cbiAgICAgIHJlZi5jdXJyZW50ID0gY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1NjcmVlblJlYWRlckNvbnRlbnRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZXZlbnQtbGlzdGVuZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ3Jvc3NNYXJrOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2xvc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2xvc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX0Nsb3NlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuZnVuY3Rpb24gUHJpc21hMjQoX3JlZikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjcwNzExIDUuMjkyODlDNi4zMTY1OCA0LjkwMjM3IDUuNjgzNDIgNC45MDIzNyA1LjI5Mjg5IDUuMjkyODlDNC45MDIzNyA1LjY4MzQyIDQuOTAyMzcgNi4zMTY1OCA1LjI5Mjg5IDYuNzA3MTFMMTAuNTg1OCAxMkw1LjI5MjkgMTcuMjkyOUM0LjkwMjM4IDE3LjY4MzQgNC45MDIzOCAxOC4zMTY2IDUuMjkyOSAxOC43MDcxQzUuNjgzNDIgMTkuMDk3NiA2LjMxNjU5IDE5LjA5NzYgNi43MDcxMSAxOC43MDcxTDEyIDEzLjQxNDJMMTcuMjkyOSAxOC43MDcxQzE3LjY4MzQgMTkuMDk3NiAxOC4zMTY2IDE5LjA5NzYgMTguNzA3MSAxOC43MDcxQzE5LjA5NzYgMTguMzE2NiAxOS4wOTc2IDE3LjY4MzQgMTguNzA3MSAxNy4yOTI5TDEzLjQxNDIgMTJMMTguNzA3MSA2LjcwNzExQzE5LjA5NzYgNi4zMTY1OCAxOS4wOTc2IDUuNjgzNDIgMTguNzA3MSA1LjI5Mjg5QzE4LjMxNjYgNC45MDIzNyAxNy42ODM0IDQuOTAyMzcgMTcuMjkyOSA1LjI5Mjg5TDEyIDEwLjU4NThMNi43MDcxMSA1LjI5Mjg5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBQcmlzbWExNihfcmVmMikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmMik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMjAyNCAyLjY5MDA5QzEyLjUwOTIgMi4zODMyNSAxMy4wMDY3IDIuMzgzMjUgMTMuMzEzNiAyLjY5MDA5QzEzLjYyMDQgMi45OTY5MyAxMy42MjA0IDMuNDk0NDIgMTMuMzEzNiAzLjgwMTI2TDkuMTE3MjEgNy45OTc2MkwxMy4zMTE0IDEyLjE5MThDMTMuNjIwNiAxMi41MDEgMTMuNjIwNiAxMy4wMDIzIDEzLjMxMTQgMTMuMzExNEMxMy4wMDIzIDEzLjYyMDYgMTIuNTAxIDEzLjYyMDYgMTIuMTkxOCAxMy4zMTE0TDcuOTk3NjIgOS4xMTcyMUwzLjg4NSAxMy4yMjk4QzMuNTc4MTYgMTMuNTM2NyAzLjA4MDY3IDEzLjUzNjcgMi43NzM4MyAxMy4yMjk4QzIuNDY2OTkgMTIuOTIzIDIuNDY2OTkgMTIuNDI1NSAyLjc3MzgzIDEyLjExODdMNi44ODY0NSA4LjAwNjA0TDIuNjkxODMgMy44MTE0MkMyLjM4MjY3IDMuNTAyMjYgMi4zODI2NyAzLjAwMSAyLjY5MTgzIDIuNjkxODNDMy4wMDEgMi4zODI2NyAzLjUwMjI2IDIuMzgyNjcgMy44MTE0MiAyLjY5MTgzTDguMDA2MDQgNi44ODY0NkwxMi4yMDI0IDIuNjkwMDlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIENyb3NzTWFyayhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIEVudGVycHJpc2U6IF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2xvc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEsXG4gICAgUHJpc21hMTY6IFByaXNtYTE2LFxuICAgIFByaXNtYTI0OiBQcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvQ2xvc2VcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL3N0eWxlXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNWRzsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cbnZhciBTdHlsZWQgPSBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdmcud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlNWR19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFiejByeWgtMFwiXG59KShbXCJmbGV4OjAgMCBhdXRvO1wiXSk7XG5mdW5jdGlvbiBTVkcocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfSwgcHJvcHMpKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJY29uOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTtcbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG52YXIgaW5saW5lU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgZmxleDogJzAgMCBhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbn07XG52YXIgYmxvY2tTdHlsZXMgPSB7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIG1hcmdpbjogJzAgYXV0bycsXG4gIG92ZXJmbG93OiAndmlzaWJsZSdcbn07XG52YXIgcHJvcFR5cGVzID0ge1xuICBFbnRlcnByaXNlOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIGVudGVycHJpc2VTaXplOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIGVudGVycHJpc2VXaWR0aDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBlbnRlcnByaXNlSGVpZ2h0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIFByaXNtYTI0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcbiAgUHJpc21hMjA6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgUHJpc21hMTY6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgcHJpc21hU2l6ZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSxcbiAgaW5saW5lOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmJvb2wsXG4gIHNjcmVlblJlYWRlclRleHQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgaW5saW5lOiB0cnVlLFxuICBwcmlzbWFTaXplOiAnbWVkaXVtJ1xufTtcbmZ1bmN0aW9uIEljb24oX3JlZikge1xuICB2YXIgRW50ZXJwcmlzZSA9IF9yZWYuRW50ZXJwcmlzZSxcbiAgICAgIFByaXNtYTI0ID0gX3JlZi5QcmlzbWEyNCxcbiAgICAgIFByaXNtYTIwID0gX3JlZi5QcmlzbWEyMCxcbiAgICAgIFByaXNtYTE2ID0gX3JlZi5QcmlzbWExNixcbiAgICAgIHByaXNtYVNpemUgPSBfcmVmLnByaXNtYVNpemUsXG4gICAgICBpbmxpbmUgPSBfcmVmLmlubGluZSxcbiAgICAgIGVudGVycHJpc2VTaXplID0gX3JlZi5lbnRlcnByaXNlU2l6ZSxcbiAgICAgIGVudGVycHJpc2VXaWR0aCA9IF9yZWYuZW50ZXJwcmlzZVdpZHRoLFxuICAgICAgZW50ZXJwcmlzZUhlaWdodCA9IF9yZWYuZW50ZXJwcmlzZUhlaWdodCxcbiAgICAgIHNjcmVlblJlYWRlclRleHQgPSBfcmVmLnNjcmVlblJlYWRlclRleHQsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcIkVudGVycHJpc2VcIiwgXCJQcmlzbWEyNFwiLCBcIlByaXNtYTIwXCIsIFwiUHJpc21hMTZcIiwgXCJwcmlzbWFTaXplXCIsIFwiaW5saW5lXCIsIFwiZW50ZXJwcmlzZVNpemVcIiwgXCJlbnRlcnByaXNlV2lkdGhcIiwgXCJlbnRlcnByaXNlSGVpZ2h0XCIsIFwic2NyZWVuUmVhZGVyVGV4dFwiXSk7XG5cbiAgdmFyIF91c2VTcGx1bmtUaGVtZSA9IE9iamVjdChfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1widXNlU3BsdW5rVGhlbWVcIl0pKCksXG4gICAgICBmYW1pbHkgPSBfdXNlU3BsdW5rVGhlbWUuZmFtaWx5LFxuICAgICAgZGVuc2l0eSA9IF91c2VTcGx1bmtUaGVtZS5kZW5zaXR5OyAvLyBFbnRlcnByaXNlIC0gYWxsIHZhcmlhbnRzXG5cblxuICBpZiAoZmFtaWx5ID09PSAnZW50ZXJwcmlzZScpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoRW50ZXJwcmlzZSwgX2V4dGVuZHMoe1xuICAgICAgc2l6ZTogZW50ZXJwcmlzZVNpemUsXG4gICAgICB3aWR0aDogZW50ZXJwcmlzZVdpZHRoLFxuICAgICAgaGVpZ2h0OiBlbnRlcnByaXNlSGVpZ2h0LFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dDogc2NyZWVuUmVhZGVyVGV4dCB8fCBudWxsLFxuICAgICAgaGlkZURlZmF1bHRUb29sdGlwOiB0cnVlLFxuICAgICAgaW5saW5lOiBpbmxpbmVcbiAgICB9LCBvdGhlclByb3BzKSk7XG4gIH1cblxuICB2YXIgcHJpc21hUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAnYXJpYS1sYWJlbCc6IHNjcmVlblJlYWRlclRleHQsXG4gICAgc3R5bGU6IGlubGluZSA/IGlubGluZVN0eWxlcyA6IGJsb2NrU3R5bGVzXG4gIH0sIG90aGVyUHJvcHMpOyAvLyBQcmlzbWEgLSBzbWFsbCtjb21wYWN0LCBzbWFsbCtjb21mb3J0YWJsZVxuXG5cbiAgaWYgKHByaXNtYVNpemUgPT09ICdzbWFsbCcpIHtcbiAgICB2YXIgU1ZHID0gUHJpc21hMTYgfHwgUHJpc21hMjQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNWRywgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IFwiMTZcIixcbiAgICAgIGhlaWdodDogXCIxNlwiXG4gICAgfSwgcHJpc21hUHJvcHMpKTtcbiAgfSAvLyBQcmlzbWEgLSBtZWRpdW0rY29tcGFjdFxuXG5cbiAgaWYgKGRlbnNpdHkgPT09ICdjb21wYWN0Jykge1xuICAgIHZhciBfU1ZHID0gUHJpc21hMjAgfHwgUHJpc21hMjQ7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWRywgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IFwiMjBcIixcbiAgICAgIGhlaWdodDogXCIyMFwiXG4gICAgfSwgcHJpc21hUHJvcHMpKTtcbiAgfSAvLyBQcmlzbWEgLSBtZWRpdW0rY29tZm9ydGFibGVcblxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQcmlzbWEyNCwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgaGVpZ2h0OiBcIjI0XCJcbiAgfSwgcHJpc21hUHJvcHMpKTtcbn1cbkljb24ucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuSWNvbi5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0JveFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NlYXJjaFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2gvc3RhcnRDYXNlXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQzKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NWR0ludGVybmFsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGV2cm9uUmlnaHQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuZnVuY3Rpb24gQ2hldnJvblJpZ2h0KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ0NoZXZyb24gUmlnaHQnKSxcbiAgICB2aWV3Qm94OiBcIjAgMCA4ODUgMTUwMFwiXG4gIH0sIHByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMzQuNTkgMGw3NTAgNzUwLTc1MS4wMjggNzUwTDAgMTM2NS40MSA2MTUuNDEgNzUwIDAgMTM0LjU5XCJcbiAgfSkpO1xufVxuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuXG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEzNSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2lkXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQ2xpY2thYmxlXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTM1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gc3JjX1N3aXRjaF9Td2l0Y2g7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQW5pbWF0aW9uVG9nZ2xlXCJcbnZhciBBbmltYXRpb25Ub2dnbGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG52YXIgQW5pbWF0aW9uVG9nZ2xlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEFuaW1hdGlvblRvZ2dsZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9TY3JlZW5SZWFkZXJDb250ZW50XCJcbnZhciBTY3JlZW5SZWFkZXJDb250ZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIFNjcmVlblJlYWRlckNvbnRlbnRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oU2NyZWVuUmVhZGVyQ29udGVudF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2lkXCJcbnZhciBpZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtaWNvbnMvQ2hlY2tcIlxudmFyIENoZWNrXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xudmFyIENoZWNrX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKENoZWNrXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1N3aXRjaC9DaGVja0ljb24udHN4XG5cblxuXG5mdW5jdGlvbiBDaGVja0ljb24oKSB7XG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSBPYmplY3QodGhlbWVzX1tcInVzZVNwbHVua1RoZW1lXCJdKSgpLFxuICAgICAgZmFtaWx5ID0gX3VzZVNwbHVua1RoZW1lLmZhbWlseTtcblxuICBpZiAoZmFtaWx5ID09PSAnZW50ZXJwcmlzZScpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENoZWNrX2RlZmF1bHQuYSwge1xuICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgIHNpemU6IFwiMTJweFwiLFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dDogbnVsbCxcbiAgICAgIGhpZGVEZWZhdWx0VG9vbHRpcDogdHJ1ZSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIG1hcmdpblRvcDogJzFweCdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgIHdpZHRoOiBcIjEyXCIsXG4gICAgaGVpZ2h0OiBcIjEyXCIsXG4gICAgdmlld0JveDogXCItMSAtMiAxMSAxMFwiLFxuICAgIHN0eWxlOiB7XG4gICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgfSxcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNzA3MTEgMC4yOTI4OTNDOS4wOTc2MyAwLjY4MzQxNyA5LjA5NzYzIDEuMzE2NTggOC43MDcxMSAxLjcwNzExTDQuMzIxMzIgNi4wOTI5QzMuNzM1NTkgNi42Nzg2MiAyLjc4NTk2IDYuNjc4NjkgMi4yMDAxNSA2LjA5MzA1TDAuMjkyOTk3IDQuMTg2NDZDLTAuMDk3NTg0NSAzLjc5NTk5IC0wLjA5NzY3NzYgMy4xNjI4MiAwLjI5Mjc4OSAyLjc3MjI0QzAuNjgzMjU2IDIuMzgxNjYgMS4zMTY0MiAyLjM4MTU3IDEuNzA3IDIuNzcyMDNMMy4yNjA2MSA0LjMyNTE4TDcuMjkyODkgMC4yOTI4OTNDNy42ODM0MiAtMC4wOTc2MzExIDguMzE2NTggLTAuMDk3NjMxMSA4LjcwNzExIDAuMjkyODkzWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0JveFwiXG52YXIgQm94XyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgQm94X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEJveF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIlxudmFyIENsaWNrYWJsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBDbGlja2FibGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQ2xpY2thYmxlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1N3aXRjaC9Td2l0Y2hTdHlsZXMudHNcblxuXG5cblxudmFyIGRpYW1ldGVyID0gJzE4cHgnO1xudmFyIHRvZ2dsZURpYW1ldGVyID0gJzIwcHgnO1xudmFyIFN0eWxlZEJveCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShCb3hfZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiU3dpdGNoU3R5bGVzX19TdHlsZWRCb3hcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtODQ0aWV1LTBcIlxufSkoW1wiZGlzcGxheTppbmxpbmU7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6XCIsIFwiO2ZsZXgtc2hyaW5rOjA7cGFkZGluZzpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHN3aXRjaFN0YXRlJywge1xuICBlcnJvcjoge1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZXJyb3JDb2xvcixcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JOZWdhdGl2ZVxuICB9LFxuICBkaXNhYmxlZDoge1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udGV4dERpc2FibGVkQ29sb3IsXG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRpc2FibGVkXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYygoXCIsIFwiIC0gXCIsIFwiKSAvIDIpIDBcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW5wdXRIZWlnaHQsIGRpYW1ldGVyKSxcbiAgcHJpc21hOiB7XG4gICAgY29tcGFjdDogJzZweCAwJyxcbiAgICBjb21mb3J0YWJsZTogJzEwcHggMCdcbiAgfVxufSkpO1xudmFyIFN0eWxlZENoZWNrYm94Q2xpY2thYmxlID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKENsaWNrYWJsZV9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTd2l0Y2hTdHlsZXNfX1N0eWxlZENoZWNrYm94Q2xpY2thYmxlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTg0NGlldS0xXCJcbn0pKFtcIlwiLCBcIiBwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDpcIiwgXCI7aGVpZ2h0OlwiLCBcIjtsaW5lLWhlaWdodDpcIiwgXCI7cGFkZGluZzoycHg7Ym9yZGVyLXJhZGl1czoycHg7Y3Vyc29yOnBvaW50ZXI7ZmxleDowIDAgYXV0bztib3JkZXI6XCIsIFwiO2NvbG9yOlwiLCBcIjtcIiwgXCIgJjpmb2N1c3tib3gtc2hhZG93OlwiLCBcIjt9XCIsIFwiIFwiLCBcIiAmW2Rpc2FibGVkXXtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOlwiLCBcIjtcIiwgXCJ9XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdpbmxpbmUnKSwgZGlhbWV0ZXIsIGRpYW1ldGVyLCBkaWFtZXRlciwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGxpZ2h0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCIxcHggc29saWQgXCIsIFwiXCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk0NSksXG4gICAgZGFyazogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiMXB4IHNvbGlkIFwiLCBcIlwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5ODApXG4gIH0pLFxuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIjJweCBzb2xpZCBcIiwgXCJcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk0NSxcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk4MFxuICB9KSxcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLndoaXRlXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widG9wOjFweDtwYWRkaW5nOjFweDtib3JkZXItcmFkaXVzOjNweDtcIiwgXCIgXCIsIFwiXCJdLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciAkaW50ZXJhY3RpdmUgPSBfcmVmLiRpbnRlcmFjdGl2ZTtcbiAgICByZXR1cm4gJGludGVyYWN0aXZlICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6bm90KFtkaXNhYmxlZF0pOm5vdCg6Zm9jdXMpOmhvdmVye2JveC1zaGFkb3c6MCAwIDAgMnB4IFwiLCBcIiwwIDAgMCA1cHggXCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yUGFnZSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyKTtcbiAgfSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyICRzZWxlY3RlZCA9IF9yZWYyLiRzZWxlY3RlZDtcbiAgICByZXR1cm4gISRzZWxlY3RlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOm5vdChbZGlzYWJsZWRdKTpub3QoOmZvY3VzKTpob3Zlcntib3JkZXItY29sb3I6XCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGVmYXVsdCk7XG4gIH0pXG59KSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvdywgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciAkc2VsZWN0ZWQgPSBfcmVmMy4kc2VsZWN0ZWQ7XG4gIHJldHVybiAkc2VsZWN0ZWQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjpub3QoW2Rpc2FibGVkXSl7Ym9yZGVyLWNvbG9yOlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5NDUsXG4gICAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk4MFxuICAgIH0sXG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JQcmltYXJ5XG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiAnI25vbmUnLFxuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiXCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yUHJpbWFyeSlcbiAgfSkpO1xufSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciAkZXJyb3IgPSBfcmVmNC4kZXJyb3I7XG4gIHJldHVybiAkZXJyb3IgJiYgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgICBsaWdodDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjpub3QoW2Rpc2FibGVkXSl7Ym9yZGVyLWNvbG9yOlwiLCBcIjtjb2xvcjpcIiwgXCI7XCIsIFwifVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lcnJvckNvbG9yTDMwLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVycm9yQ29sb3IsIGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICB2YXIgJHNlbGVjdGVkID0gX3JlZjUuJHNlbGVjdGVkO1xuICAgICAgICByZXR1cm4gJHNlbGVjdGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVycm9yQ29sb3IpO1xuICAgICAgfSksXG4gICAgICBkYXJrOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZXJyb3JDb2xvcilcbiAgICB9KSxcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6bm90KFtkaXNhYmxlZF0pe2JvcmRlci1jb2xvcjpcIiwgXCI7XCIsIFwifVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlLCBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciAkc2VsZWN0ZWQgPSBfcmVmNi4kc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gJHNlbGVjdGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlKTtcbiAgICB9KVxuICB9KTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTgwLFxuICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTQ1XG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZFxufSksIGZ1bmN0aW9uIChfcmVmNykge1xuICB2YXIgJHNlbGVjdGVkID0gX3JlZjcuJHNlbGVjdGVkO1xuICByZXR1cm4gJHNlbGVjdGVkICYmIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZERpc2FibGVkKVxuICB9KTtcbn0pO1xudmFyIFN0eWxlZENoZWNrYm94U3BhbiA9IFN0eWxlZENoZWNrYm94Q2xpY2thYmxlLndpdGhDb21wb25lbnQoJ3NwYW4nKTtcbnZhciBTdHlsZWRTb21lID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiU3dpdGNoU3R5bGVzX19TdHlsZWRTb21lXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTg0NGlldS0yXCJcbn0pKFtcImRpc3BsYXk6YmxvY2s7bWFyZ2luOlwiLCBcIjtoZWlnaHQ6XCIsIFwiO3dpZHRoOlwiLCBcIjtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOjFweDtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMnB4JyxcbiAgcHJpc21hOiAnNXB4IDJweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYyhcIiwgXCIgLSAxMHB4KTtcIl0sIGRpYW1ldGVyKSxcbiAgcHJpc21hOiAnMnB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjYWxjKFwiLCBcIiAtIDEwcHgpO1wiXSwgZGlhbWV0ZXIpLFxuICBwcmlzbWE6ICc4cHgnXG59KSk7XG52YXIgU3R5bGVkSW5kaWNhdG9yID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiU3dpdGNoU3R5bGVzX19TdHlsZWRJbmRpY2F0b3JcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtODQ0aWV1LTNcIlxufSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Ym9yZGVyLWNvbG9yOlwiLCBcIjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyLXdpZHRoOjFweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7XCIsIFwiO1wiLCBcIiBcIiwgXCIgXCIsIFwiXCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5OCxcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk4MFxuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ud2hpdGVcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRyYW5zcGFyZW50XG59KSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gIHZhciAkZGVsYXkgPSBfcmVmOC4kZGVsYXk7XG4gIHJldHVybiAkZGVsYXkgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widHJhbnNpdGlvbjpsZWZ0IFwiLCBcIjtcIl0sICRkZWxheSk7XG59LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wid2lkdGg6XCIsIFwiO2hlaWdodDpcIiwgXCI7Ym9yZGVyLXN0eWxlOnNvbGlkO1wiXSwgZGlhbWV0ZXIsIGRpYW1ldGVyKSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O21hcmdpbjoycHg7Ym9yZGVyLXN0eWxlOm5vbmU7Ym94LXNoYWRvdzpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVtYm9zc1NoYWRvdylcbn0pLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgdmFyICRkaXNhYmxlZCA9IF9yZWY5LiRkaXNhYmxlZDtcbiAgcmV0dXJuICRkaXNhYmxlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO2JvcmRlci1zdHlsZTpzb2xpZDtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGxpZ2h0OiB0aGVtZXNfW1wibWl4aW5zXCJdLmNvbG9yV2l0aEFscGhhKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyTGlnaHRDb2xvciwgMC44KSxcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTIyXG4gICAgfSxcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udHJhbnNwYXJlbnRcbiAgfSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTQ1XG4gICAgfSxcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJtaXhpbnNcIl0uY29sb3JXaXRoQWxwaGEodGhlbWVzX1tcInZhcmlhYmxlc1wiXS53aGl0ZSwgMC4zKVxuICB9KSk7XG59LCBmdW5jdGlvbiAoX3JlZjEwKSB7XG4gIHZhciAkc2VsZWN0ZWQgPSBfcmVmMTAuJHNlbGVjdGVkO1xuICByZXR1cm4gJHNlbGVjdGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImxlZnQ6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYygxMDAlIC0gXCIsIFwiICsgMXB4KVwiXSwgZGlhbWV0ZXIpLFxuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYygxMDAlIC0gXCIsIFwiICsgMXB4KVwiXSwgdG9nZ2xlRGlhbWV0ZXIpXG4gIH0pKTtcbn0pO1xudmFyIFN0eWxlZFRvZ2dsZU91dGxpbmUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTd2l0Y2hTdHlsZXNfX1N0eWxlZFRvZ2dsZU91dGxpbmVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtODQ0aWV1LTRcIlxufSkoW1wicG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtcIiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgXCI7dG9wOi0xcHg7cmlnaHQ6LTFweDtib3R0b206LTFweDtsZWZ0Oi0xcHg7ei1pbmRleDoxO1wiLCBcIiBcIiwgXCJcIl0sIGZ1bmN0aW9uIChfcmVmMTEpIHtcbiAgdmFyICRkZWxheSA9IF9yZWYxMS4kZGVsYXk7XG4gIHJldHVybiAkZGVsYXkgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1widHJhbnNpdGlvbjpib3JkZXItY29sb3IgXCIsIFwiO1wiXSwgJGRlbGF5KTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjYWxjKFwiLCBcIiAqIDAuNSlcIl0sIGRpYW1ldGVyKSxcbiAgcHJpc21hOiAnMTVweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJtYXJnaW46LTZweDtcIl0pXG59KSwgZnVuY3Rpb24gKF9yZWYxMikge1xuICB2YXIgJGVycm9yID0gX3JlZjEyLiRlcnJvcjtcbiAgcmV0dXJuICRlcnJvciAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lcnJvckNvbG9yLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50cmFuc3BhcmVudFxuICB9KSk7XG59KTtcbnZhciBTdHlsZWRUb2dnbGVDbGlja2FibGUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQ2xpY2thYmxlX2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlN3aXRjaFN0eWxlc19fU3R5bGVkVG9nZ2xlQ2xpY2thYmxlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTg0NGlldS01XCJcbn0pKFtcInBvc2l0aW9uOnJlbGF0aXZlO1wiLCBcIiBib3JkZXItcmFkaXVzOlwiLCBcIjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgXCIsIFwiO2ZsZXg6MCAwIGF1dG87Ym9yZGVyOjFweCBzb2xpZCBcIiwgXCI7XCIsIFwiICY6bm90KFtkaXNhYmxlZF0peyY6Zm9jdXN7b3V0bGluZTowO2JveC1zaGFkb3c6XCIsIFwiO1wiLCBcIn0mOmhvdmVyIFwiLCBcIntiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9Jjpob3ZlciBcIiwgXCJ7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7fX07JltkaXNhYmxlZF17Ym9yZGVyOjFweCBzb2xpZCBcIiwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCIsIFwiIFwiLCBcIn1cIiwgXCI7XCIsIFwiXCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgbGlnaHQ6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIndpZHRoOmNhbGMoXCIsIFwiICogMik7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7aGVpZ2h0OlwiLCBcIjtcIl0sIGRpYW1ldGVyLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5OCwgZGlhbWV0ZXIpLFxuICAgIGRhcms6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIndpZHRoOmNhbGMoXCIsIFwiICogMik7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7aGVpZ2h0OlwiLCBcIjtcIl0sIGRpYW1ldGVyLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk0NSwgZGlhbWV0ZXIpXG4gIH0pLFxuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIndpZHRoOjMycHg7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7aGVpZ2h0OlwiLCBcIjt0b3A6MXB4O1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JNdXRlZCwgdG9nZ2xlRGlhbWV0ZXIpXG59KSwgZGlhbWV0ZXIsIGZ1bmN0aW9uIChwcm9wcykge1xuICByZXR1cm4gcHJvcHMuJGRlbGF5O1xufSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyQ29sb3IsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50cmFuc3BhcmVudFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3gtc2hhZG93Omluc2V0IDAgMnB4IDAgcmdiYSgwLDAsMCwwLjEpO1wiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiXCIsIFwiLGluc2V0IDAgMnB4IDAgcmdiYSgwLDAsMCwwLjEpO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvdyksXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvd1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCI+IFwiLCBcIntib3JkZXItY29sb3I6XCIsIFwiO31cIl0sXG4gIC8qIHNjLXNlbCAqL1xuICBTdHlsZWRUb2dnbGVPdXRsaW5lLCB0aGVtZXNfW1wibWl4aW5zXCJdLmNvbG9yV2l0aEFscGhhKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNDb2xvciwgMC44KSlcbn0pLFxuLyogc2Mtc2VsICovXG5TdHlsZWRJbmRpY2F0b3IsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTYsXG4gICAgZGFyazogJyNiMWJjYzcnXG4gIH0pLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ud2hpdGVcbn0pLFxuLyogc2Mtc2VsICovXG5TdHlsZWRUb2dnbGVPdXRsaW5lLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXJcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlckxpZ2h0Q29sb3IsXG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJDb2xvclxuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udHJhbnNwYXJlbnRcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5NixcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXkzMFxuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmREaXNhYmxlZFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3gtc2hhZG93Omluc2V0IDAgMnB4IDAgcmdiYSgwLDAsMCwwLjA2KTtcIl0pXG59KSwgZnVuY3Rpb24gKF9yZWYxMykge1xuICB2YXIgJHNlbGVjdGVkID0gX3JlZjEzLiRzZWxlY3RlZDtcbiAgcmV0dXJuICRzZWxlY3RlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yTDQwLFxuICAgICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvckQyMFxuICAgIH0pLFxuICAgIHByaXNtYTogdGhlbWVzX1tcIm1peGluc1wiXS5jb2xvcldpdGhBbHBoYSh0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JQcmltYXJ5LCAwLjcpXG4gIH0pKTtcbn0sIGZ1bmN0aW9uIChfcmVmMTQpIHtcbiAgdmFyICRzZWxlY3RlZCA9IF9yZWYxNC4kc2VsZWN0ZWQ7XG4gIHJldHVybiAkc2VsZWN0ZWQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLWNvbG9yOlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JMMTAsXG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRyYW5zcGFyZW50XG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yTDEwLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yUHJpbWFyeVxuICB9KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3gtc2hhZG93OlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZW1ib3NzU2hhZG93KVxuICB9KSk7XG59LCBmdW5jdGlvbiAoX3JlZjE1KSB7XG4gIHZhciAkZXJyb3IgPSBfcmVmMTUuJGVycm9yO1xuICByZXR1cm4gJGVycm9yICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1jb2xvcjpcIiwgXCI7XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lcnJvckNvbG9yLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50cmFuc3BhcmVudFxuICB9KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JOZWdhdGl2ZSlcbiAgfSkpO1xufSk7XG52YXIgU3R5bGVkVG9nZ2xlU3BhbiA9IFN0eWxlZFRvZ2dsZUNsaWNrYWJsZS53aXRoQ29tcG9uZW50KCdzcGFuJyk7XG52YXIgU3R5bGVkTGFiZWwgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEubGFiZWwud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlN3aXRjaFN0eWxlc19fU3R5bGVkTGFiZWxcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtODQ0aWV1LTZcIlxufSkoW1wiXCIsIFwiIGZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OlwiLCBcIjtjb2xvcjppbmhlcml0O1wiLCBcIjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2lubGluZS1ibG9jaycpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiXCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nUXVhcnRlciksXG4gIHByaXNtYTogJzhweCdcbn0pLCBmdW5jdGlvbiAoX3JlZjE2KSB7XG4gIHZhciAkZGlzYWJsZWQgPSBfcmVmMTYuJGRpc2FibGVkO1xuICByZXR1cm4gISRkaXNhYmxlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjdXJzb3I6cG9pbnRlcjtcIl0pO1xufSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1N3aXRjaC9Td2l0Y2gudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICBhcHBlYXJhbmNlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ3JhZGlvJywgJ2NoZWNrYm94JywgJ3RvZ2dsZSddKSxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGRpc2FibGVkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBlcnJvcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgaW5saW5lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBpbnRlcmFjdGl2ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgbGFiZWxsZWRCeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBvbkNsaWNrOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBzZWxlY3RlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoW3RydWUsIGZhbHNlLCAnc29tZSddKSxcbiAgc2VsZWN0ZWRMYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBzb21lU2VsZWN0ZWRMYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICB1bnNlbGVjdGVkTGFiZWw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgdmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFueVxufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGFwcGVhcmFuY2U6ICdjaGVja2JveCcsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZXJyb3I6IGZhbHNlLFxuICBpbmxpbmU6IGZhbHNlLFxuICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgc2VsZWN0ZWQ6IGZhbHNlLFxuICBzZWxlY3RlZExhYmVsOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnU2VsZWN0ZWQnKSxcbiAgc29tZVNlbGVjdGVkTGFiZWw6IE9iamVjdChpMThuX1tcIl9cIl0pKCdTb21lIHNlbGVjdGVkJyksXG4gIHVuc2VsZWN0ZWRMYWJlbDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ05vdCBzZWxlY3RlZCcpXG59O1xuLy8gdW5jbGVhciB3aHkgdGhlIG1hbnVhbCByZWYgaXMgbmVlZGVkIGhlcmUgKG9ubHkgZm9yIHN0eWxlZC1jb21wb25lbnRzKVxudmFyIFN0eWxlZENsaWNrYWJsZXMgPSB7XG4gIGNoZWNrYm94OiBTdHlsZWRDaGVja2JveENsaWNrYWJsZSxcbiAgdG9nZ2xlOiBTdHlsZWRUb2dnbGVDbGlja2FibGVcbn07XG52YXIgU3R5bGVkU3BhbnMgPSB7XG4gIGNoZWNrYm94OiBTdHlsZWRDaGVja2JveFNwYW4sXG4gIHRvZ2dsZTogU3R5bGVkVG9nZ2xlU3BhblxufTtcbi8qKlxuICogYFN3aXRjaGAgaXMgYSBiYXNpYyBmb3JtIGNvbnRyb2wgd2l0aCBhbiBvbi9vZmYgc3RhdGUuXG4gKi9cblxudmFyIFN3aXRjaF9Td2l0Y2ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN3aXRjaCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTd2l0Y2gpO1xuXG4gIF9jcmVhdGVDbGFzcyhTd2l0Y2gsIG51bGwsIFt7XG4gICAga2V5OiBcInZhbGlkYXRlUHJvcHNcIixcbiAgICAvLyBAZG9jcy1wcm9wcy10eXBlIFN3aXRjaFByb3BzQmFzZVxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWYpIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IF9yZWYuc2VsZWN0ZWQsXG4gICAgICAgICAgYXBwZWFyYW5jZSA9IF9yZWYuYXBwZWFyYW5jZTtcblxuICAgICAgaWYgKGZhbHNlKSB7fVxuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTd2l0Y2gpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xpY2thYmxlSWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsYWJlbElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbXBvbmVudERpZFVwZGF0ZVwiLCBTd2l0Y2gudmFsaWRhdGVQcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ29udGFpbmVyQ2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNsaWNrLCBfdGhpcyRwcm9wczI7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMudmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWQgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZDtcbiAgICAgIChfdGhpcyRwcm9wcyRvbkNsaWNrID0gKF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzKS5vbkNsaWNrKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrLmNhbGwoX3RoaXMkcHJvcHMyLCBlLCB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHNhZmUgZHVlIHRvIGluZGl2aWR1YWwgcHJvcCBpbnRlcmZhY2VzXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5sYWJlbElkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgnbGFiZWwnKTtcbiAgICBfdGhpcy5jbGlja2FibGVJZCA9IE9iamVjdChpZF9bXCJjcmVhdGVET01JRFwiXSkoJ2NsaWNrYWJsZScpO1xuICAgIFN3aXRjaC52YWxpZGF0ZVByb3BzKHByb3BzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoU3dpdGNoLCBbe1xuICAgIGtleTogXCJmb2N1c1wiLFxuXG4gICAgLyoqXG4gICAgICogUGxhY2UgZm9jdXMgb24gdGhlIHRvZ2dsZS5cbiAgICAgKi9cbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICB2YXIgX3RoaXMkdG9nZ2xlO1xuXG4gICAgICAoX3RoaXMkdG9nZ2xlID0gdGhpcy50b2dnbGUpID09PSBudWxsIHx8IF90aGlzJHRvZ2dsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkdG9nZ2xlLmZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXBwZWFyYW5jZSA9IF90aGlzJHByb3BzMy5hcHBlYXJhbmNlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMzLmRpc2FibGVkLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMzLmVycm9yLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMzLmlkLFxuICAgICAgICAgIGlubGluZSA9IF90aGlzJHByb3BzMy5pbmxpbmUsXG4gICAgICAgICAgaW50ZXJhY3RpdmUgPSBfdGhpcyRwcm9wczMuaW50ZXJhY3RpdmUsXG4gICAgICAgICAgbGFiZWxsZWRCeSA9IF90aGlzJHByb3BzMy5sYWJlbGxlZEJ5LFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczMub25DbGljayxcbiAgICAgICAgICBzZWxlY3RlZCA9IF90aGlzJHByb3BzMy5zZWxlY3RlZCxcbiAgICAgICAgICBzZWxlY3RlZExhYmVsID0gX3RoaXMkcHJvcHMzLnNlbGVjdGVkTGFiZWwsXG4gICAgICAgICAgc29tZVNlbGVjdGVkTGFiZWwgPSBfdGhpcyRwcm9wczMuc29tZVNlbGVjdGVkTGFiZWwsXG4gICAgICAgICAgdW5zZWxlY3RlZExhYmVsID0gX3RoaXMkcHJvcHMzLnVuc2VsZWN0ZWRMYWJlbCxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzMy52YWx1ZSxcbiAgICAgICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgW1wiYXBwZWFyYW5jZVwiLCBcImNoaWxkcmVuXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImlkXCIsIFwiaW5saW5lXCIsIFwiaW50ZXJhY3RpdmVcIiwgXCJsYWJlbGxlZEJ5XCIsIFwib25DbGlja1wiLCBcInNlbGVjdGVkXCIsIFwic2VsZWN0ZWRMYWJlbFwiLCBcInNvbWVTZWxlY3RlZExhYmVsXCIsIFwidW5zZWxlY3RlZExhYmVsXCIsIFwidmFsdWVcIl0pO1xuXG4gICAgICB2YXIgbGFiZWxJZCA9IGxhYmVsbGVkQnk7IC8vIGNvbnN1bWVyIGRlZmluZWQgZXh0ZXJuYWwgbGFiZWxcblxuICAgICAgdmFyIGNsaWNrYWJsZUlkID0gaWQ7IC8vIGNvbnN1bWVyIGRlZmluZWQgaWRcbiAgICAgIC8vIGlmIGhhcyBpbnRlcm5hbCBsYWJlbCBkZWZpbmVkIHdpdGggY2hpbGRyZW4uLi4uXG5cbiAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICBsYWJlbElkID0gdGhpcy5sYWJlbElkOyAvLyBtdXN0IHVzZSBnZW5lcmF0ZWQgbGFiZWxJZFxuXG4gICAgICAgIGNsaWNrYWJsZUlkID0gaWQgfHwgdGhpcy5jbGlja2FibGVJZDsgLy8gbXVzdCBoYXZlIGFuIGlkXG4gICAgICB9XG5cbiAgICAgIHZhciBhcmlhQ2hlY2tlZCA9IHNlbGVjdGVkID09PSAnc29tZScgPyAnbWl4ZWQnIDogc2VsZWN0ZWQ7XG4gICAgICB2YXIgc3RhdGVMYWJlbHMgPSB7XG4gICAgICAgIFwidHJ1ZVwiOiBzZWxlY3RlZExhYmVsLFxuICAgICAgICBcImZhbHNlXCI6IHVuc2VsZWN0ZWRMYWJlbCxcbiAgICAgICAgc29tZTogc29tZVNlbGVjdGVkTGFiZWxcbiAgICAgIH07XG4gICAgICB2YXIgc3dpdGNoUHJvcHMgPSB7XG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgJGludGVyYWN0aXZlOiBpbnRlcmFjdGl2ZSxcbiAgICAgICAgJGVycm9yOiBlcnJvcixcbiAgICAgICAgJHNlbGVjdGVkOiBzZWxlY3RlZCA9PT0gJ3NvbWUnIHx8IHNlbGVjdGVkLFxuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogaW50ZXJhY3RpdmUgPyBsYWJlbElkIDogdW5kZWZpbmVkLFxuICAgICAgICAnYXJpYS1jaGVja2VkJzogaW50ZXJhY3RpdmUgPyBhcmlhQ2hlY2tlZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtaW52YWxpZCc6IGVycm9yID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaWQ6IGNsaWNrYWJsZUlkLFxuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihjKSB7XG4gICAgICAgICAgX3RoaXMyLnRvZ2dsZSA9IGM7XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiBzdGF0ZUxhYmVsc1tcIlwiLmNvbmNhdChzZWxlY3RlZCldLFxuICAgICAgICBvbkNsaWNrOiBkaXNhYmxlZCB8fCAhaW50ZXJhY3RpdmUgPyB1bmRlZmluZWQgOiB0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrLFxuICAgICAgICAnZGF0YS10ZXN0JzogJ2J1dHRvbicsXG4gICAgICAgICdkYXRhLXNlbGVjdGVkJzogc2VsZWN0ZWRcbiAgICAgIH07XG4gICAgICB2YXIgU3R5bGVkQ2xpY2thYmxlID0gU3R5bGVkQ2xpY2thYmxlc1thcHBlYXJhbmNlXTtcbiAgICAgIHZhciBTdHlsZWRTcGFuID0gU3R5bGVkU3BhbnNbYXBwZWFyYW5jZV07XG5cbiAgICAgIHZhciByZW5kZXJUb2dnbGUgPSBmdW5jdGlvbiByZW5kZXJUb2dnbGUoZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgdG9nZ2xlQ2hpbGRyZW4gPSAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSW5kaWNhdG9yLCB7XG4gICAgICAgICAgICAkZGVsYXk6IGRlbGF5LFxuICAgICAgICAgICAgJGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICRlcnJvcjogIWRpc2FibGVkICYmIGVycm9yLFxuICAgICAgICAgICAgJHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgICAgICAgIH0pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVG9nZ2xlT3V0bGluZSwge1xuICAgICAgICAgICAgJGRlbGF5OiBkZWxheSxcbiAgICAgICAgICAgICRlcnJvcjogIWRpc2FibGVkICYmIGVycm9yXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZSA/IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDbGlja2FibGUsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIHJvbGU6IFwic3dpdGNoXCJcbiAgICAgICAgICB9LCBzd2l0Y2hQcm9wcywge1xuICAgICAgICAgICAgJGRlbGF5OiBkZWxheVxuICAgICAgICAgIH0pLCB0b2dnbGVDaGlsZHJlbikgOiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkU3BhbiwgX2V4dGVuZHMoe30sIHN3aXRjaFByb3BzLCB7XG4gICAgICAgICAgICAkZGVsYXk6IGRlbGF5XG4gICAgICAgICAgfSksIHRvZ2dsZUNoaWxkcmVuKTtcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZW5kZXJOb25Ub2dnbGUgPSBmdW5jdGlvbiByZW5kZXJOb25Ub2dnbGUoKSB7XG4gICAgICAgIHZhciBub25Ub2dnbGVDaGlsZHJlbiA9IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChleHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuRnJhZ21lbnQsIG51bGwsIHNlbGVjdGVkID09PSB0cnVlICYmIGFwcGVhcmFuY2UgPT09ICdjaGVja2JveCcgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENoZWNrSWNvbiwgbnVsbCksIHNlbGVjdGVkID09PSAnc29tZScgJiYgYXBwZWFyYW5jZSA9PT0gJ2NoZWNrYm94JyAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkU29tZSwgbnVsbCkpO1xuICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmUgPyAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2xpY2thYmxlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJkYXRhLWNsaWNrYWJsZVwiOiB0cnVlLFxuICAgICAgICAgIHJvbGU6IGFwcGVhcmFuY2VcbiAgICAgICAgfSwgc3dpdGNoUHJvcHMpLCBub25Ub2dnbGVDaGlsZHJlbikgOiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkU3Bhbiwgc3dpdGNoUHJvcHMsIG5vblRvZ2dsZUNoaWxkcmVuKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzd2l0Y2hTdGF0ZSA9IGRpc2FibGVkICYmICdkaXNhYmxlZCcgfHwgZXJyb3IgJiYgJ2Vycm9yJyB8fCBudWxsO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRCb3gsIF9leHRlbmRzKHtcbiAgICAgICAgZmxleDogdHJ1ZSxcbiAgICAgICAgaW5saW5lOiBpbmxpbmUsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwic3dpdGNoXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXNlbGVjdGVkXCI6IHNlbGVjdGVkLFxuICAgICAgICBcImRhdGEtdGVzdC12YWx1ZVwiOiB2YWx1ZSxcbiAgICAgICAgXCJkYXRhLXRlc3QtZXJyb3JcIjogZXJyb3IgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBcImRhdGEtZXJyb3JcIjogZXJyb3IgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBcImRhdGEtZGlzYWJsZWRcIjogZGlzYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAkc3dpdGNoU3RhdGU6IHN3aXRjaFN0YXRlXG4gICAgICB9LCBvdGhlclByb3BzKSwgYXBwZWFyYW5jZSA9PT0gJ3RvZ2dsZScgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEFuaW1hdGlvblRvZ2dsZV9kZWZhdWx0LmEsIHtcbiAgICAgICAgb246IHJlbmRlclRvZ2dsZSgnMjAwbXMnKSxcbiAgICAgICAgb2ZmOiByZW5kZXJUb2dnbGUoKVxuICAgICAgfSksIGFwcGVhcmFuY2UgIT09ICd0b2dnbGUnICYmIHJlbmRlck5vblRvZ2dsZSgpLCBpbnRlcmFjdGl2ZSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0LmEsIG51bGwsIHN0YXRlTGFiZWxzW1wiXCIuY29uY2F0KHNlbGVjdGVkKV0pLCBjaGlsZHJlbiAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTGFiZWwsIHtcbiAgICAgICAgJGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJsYWJlbFwiLFxuICAgICAgICBpZDogbGFiZWxJZCxcbiAgICAgICAgaHRtbEZvcjogY2xpY2thYmxlSWQsXG4gICAgICAgIFwiZGF0YS1kaXNhYmxlZFwiOiBkaXNhYmxlZCB8fCBudWxsXG4gICAgICB9LCBjaGlsZHJlbikpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTd2l0Y2g7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShTd2l0Y2hfU3dpdGNoLCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoU3dpdGNoX1N3aXRjaCwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1N3aXRjaF9Td2l0Y2ggPSAoU3dpdGNoX1N3aXRjaCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Td2l0Y2gvaW5kZXgudHNcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9TY3JlZW5SZWFkZXJDb250ZW50XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDMxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0FuaW1hdGlvblRvZ2dsZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL0NoZWNrXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9Cb3hcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gQ29sdW1uTGF5b3V0X0NvbHVtbkxheW91dDsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJDb2x1bW5cIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBDb2x1bW5MYXlvdXRfQ29sdW1uOyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIlJvd1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIENvbHVtbkxheW91dF9Sb3c7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lXCJcbnZhciB1c2VTcGx1bmtUaGVtZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcbnZhciB1c2VTcGx1bmtUaGVtZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih1c2VTcGx1bmtUaGVtZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwibG9kYXNoXCJcbnZhciBleHRlcm5hbF9sb2Rhc2hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NvbHVtbkxheW91dC9Db2x1bW5TdHlsZXMudHNcblxuXG52YXIgU3R5bGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ29sdW1uU3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXBjaHo5OC0wXCJcbn0pKFtcIlwiLCBcIjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJykpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL3R5cGVzLnRzXG52YXIgdHlwZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29sdW1uTGF5b3V0L0NvbHVtbi50c3hcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGd1dHRlcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgaXNGaXJzdENoaWxkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgaXNMYXN0Q2hpbGQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHNwYW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcblxuICAvKiogQHByaXZhdGUuICovXG4gIHN0eWxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3Rcbn07XG5cbmZ1bmN0aW9uIENvbHVtbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBlbGVtZW50UmVmID0gX3JlZi5lbGVtZW50UmVmLFxuICAgICAgZ3V0dGVyID0gX3JlZi5ndXR0ZXIsXG4gICAgICBfcmVmJHNwYW4gPSBfcmVmLnNwYW4sXG4gICAgICBzcGFuID0gX3JlZiRzcGFuID09PSB2b2lkIDAgPyAxIDogX3JlZiRzcGFuLFxuICAgICAgaXNGaXJzdENoaWxkID0gX3JlZi5pc0ZpcnN0Q2hpbGQsXG4gICAgICBpc0xhc3RDaGlsZCA9IF9yZWYuaXNMYXN0Q2hpbGQsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNoaWxkcmVuXCIsIFwiZWxlbWVudFJlZlwiLCBcImd1dHRlclwiLCBcInNwYW5cIiwgXCJpc0ZpcnN0Q2hpbGRcIiwgXCJpc0xhc3RDaGlsZFwiLCBcInN0eWxlXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIENvbHVtblByb3BzQmFzZVxuICB2YXIgd2lkdGggPSBndXR0ZXIgPyBcImNhbGMoKDEwMCUgLSBcIi5jb25jYXQoMTEgKiBndXR0ZXIsIFwicHgpICogXCIpLmNvbmNhdChzcGFuIC8gMTIsIFwiICsgKFwiKS5jb25jYXQoZ3V0dGVyLCBcInB4ICogXCIpLmNvbmNhdChzcGFuIC0gMSwgXCIpKVwiKSA6IFwiXCIuY29uY2F0KDEwMCAvIDEyICogc3BhbiwgXCIlXCIpO1xuICBPYmplY3QodHlwZXNbXCJhXCIgLyogYXNzZXJ0RGVmaW5lZCAqL10pKGd1dHRlcik7XG4gIHZhciBjYWxjU3R5bGUgPSB7XG4gICAgbWFyZ2luTGVmdDogaXNGaXJzdENoaWxkID8gdW5kZWZpbmVkIDogZ3V0dGVyIC8gMixcbiAgICBtYXJnaW5SaWdodDogaXNMYXN0Q2hpbGQgPyB1bmRlZmluZWQgOiBndXR0ZXIgLyAyLFxuICAgIGZsZXg6IFwiXCIuY29uY2F0KHNwYW4sIFwiIFwiKS5jb25jYXQoc3BhbiwgXCIgYXV0b1wiKSxcbiAgICAvLyBtYXkgYWNjb21tb2RhdGUgc21hbGwgcm91bmRpbmcgZXJyb3JzIGFuZCBkaXZpZGVyc1xuICAgIHdpZHRoOiB3aWR0aFxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10ZXN0XCI6IFwiY29sdW1uXCIsXG4gICAgcmVmOiBlbGVtZW50UmVmLFxuICAgIHN0eWxlOiBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImRlZmF1bHRzXCJdKSh7fSwgc3R5bGUsIGNhbGNTdHlsZSlcbiAgfSwgb3RoZXJQcm9wcyksIGNoaWxkcmVuKTtcbn1cblxuQ29sdW1uLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIENvbHVtbkxheW91dF9Db2x1bW4gPSAoQ29sdW1uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NvbHVtbkxheW91dC9Sb3dTdHlsZXMudHNcblxuXG52YXIgUm93U3R5bGVzX1N0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlJvd1N0eWxlc19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTEyMW50ZHMtMFwiXG59KShbXCJcIiwgXCI7ZmxleC1mbG93OnJvdyBub3dyYXA7JltkYXRhLWFsaWduLWl0ZW1zPSdzdGFydCdde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7fSZbZGF0YS1hbGlnbi1pdGVtcz0nZW5kJ117YWxpZ24taXRlbXM6ZmxleC1lbmQ7fSZbZGF0YS1hbGlnbi1pdGVtcz0nY2VudGVyJ117YWxpZ24taXRlbXM6Y2VudGVyO30mW2RhdGEtYWxpZ24taXRlbXM9J3N0cmV0Y2gnXXthbGlnbi1pdGVtczpzdHJldGNoO31cIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2ZsZXgnKSk7XG52YXIgU3R5bGVkRGl2aWRlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlJvd1N0eWxlc19fU3R5bGVkRGl2aWRlclwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xMjFudGRzLTFcIlxufSkoW1wiYm9yZGVyLWxlZnQ6MXB4IHNvbGlkIFwiLCBcIjtmbGV4OjAgMCAxO2FsaWduLXNlbGY6c3RyZXRjaDtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubmV1dHJhbDIwMCxcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5MixcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk2MFxuICB9XG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NvbHVtbkxheW91dC9Sb3cudHN4XG5mdW5jdGlvbiBSb3dfZXh0ZW5kcygpIHsgUm93X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gUm93X2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBSb3dfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IFJvd19vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gUm93X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG5cblxudmFyIFJvd19wcm9wVHlwZXMgPSB7XG4gIGFsaWduSXRlbXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdzdHJldGNoJ10pLFxuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGRpdmlkZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBndXR0ZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcblxuICAvKiogQHByaXZhdGUuICovXG4gIGlzRmlyc3RDaGlsZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGlzTGFzdENoaWxkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgc3R5bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdFxufTtcblxuZnVuY3Rpb24gUm93KF9yZWYpIHtcbiAgdmFyIF9yZWYkYWxpZ25JdGVtcyA9IF9yZWYuYWxpZ25JdGVtcyxcbiAgICAgIGFsaWduSXRlbXMgPSBfcmVmJGFsaWduSXRlbXMgPT09IHZvaWQgMCA/ICdzdHJldGNoJyA6IF9yZWYkYWxpZ25JdGVtcyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGRpdmlkZXIgPSBfcmVmLmRpdmlkZXIsXG4gICAgICBlbGVtZW50UmVmID0gX3JlZi5lbGVtZW50UmVmLFxuICAgICAgZ3V0dGVyID0gX3JlZi5ndXR0ZXIsXG4gICAgICBpc0ZpcnN0Q2hpbGQgPSBfcmVmLmlzRmlyc3RDaGlsZCxcbiAgICAgIGlzTGFzdENoaWxkID0gX3JlZi5pc0xhc3RDaGlsZCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIG90aGVyUHJvcHMgPSBSb3dfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiYWxpZ25JdGVtc1wiLCBcImNoaWxkcmVuXCIsIFwiZGl2aWRlclwiLCBcImVsZW1lbnRSZWZcIiwgXCJndXR0ZXJcIiwgXCJpc0ZpcnN0Q2hpbGRcIiwgXCJpc0xhc3RDaGlsZFwiLCBcInN0eWxlXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIFJvd1Byb3BzQmFzZVxuICBpZiAoZmFsc2UpIHsgdmFyIHRvdGFsOyB9XG5cbiAgdmFyIGNsb25lQ29sdW1uID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZUNhbGxiYWNrXCJdKShmdW5jdGlvbiAoY29sdW1uLCBpZHgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL09iamVjdChleHRlcm5hbF9yZWFjdF9bXCJjbG9uZUVsZW1lbnRcIl0pKGNvbHVtbiwge1xuICAgICAgZ3V0dGVyOiBndXR0ZXIsXG4gICAgICBpc0ZpcnN0Q2hpbGQ6IGlkeCA9PT0gMCxcbiAgICAgIGlzTGFzdENoaWxkOiBpZHggPT09IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLmNvdW50KGNoaWxkcmVuKSAtIDFcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuLCBndXR0ZXJdKTtcbiAgdmFyIGluc2VydERpdmlkZXJzID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZUNhbGxiYWNrXCJdKShmdW5jdGlvbiAoYWNjLCByb3csIGlkeCwgb3JpZ2luYWwpIHtcbiAgICBhY2MucHVzaChyb3cpO1xuXG4gICAgaWYgKGRpdmlkZXIgJiYgaWR4IDwgb3JpZ2luYWwubGVuZ3RoIC0gMSkge1xuICAgICAgYWNjLnB1c2goIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWREaXZpZGVyLCB7XG4gICAgICAgIGtleTogXCJcIi5jb25jYXQoaWR4LCBcIi1kaXZpZGVyXCIpXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW2RpdmlkZXJdKTtcbiAgT2JqZWN0KHR5cGVzW1wiYVwiIC8qIGFzc2VydERlZmluZWQgKi9dKShndXR0ZXIpO1xuICB2YXIgZ3V0dGVyU3R5bGUgPSB7XG4gICAgbWFyZ2luVG9wOiBpc0ZpcnN0Q2hpbGQgPyB1bmRlZmluZWQgOiBndXR0ZXIgLyAyLFxuICAgIG1hcmdpbkJvdHRvbTogaXNMYXN0Q2hpbGQgPyB1bmRlZmluZWQgOiBndXR0ZXIgLyAyXG4gIH07XG4gIHZhciBjaGlsZHJlbkNsb25lZCA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSkubWFwKGNsb25lQ29sdW1uKS5yZWR1Y2UoaW5zZXJ0RGl2aWRlcnMsIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChSb3dTdHlsZXNfU3R5bGVkLCBSb3dfZXh0ZW5kcyh7XG4gICAgc3R5bGU6IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiZGVmYXVsdHNcIl0pKHt9LCBzdHlsZSwgZ3V0dGVyU3R5bGUpLFxuICAgIFwiZGF0YS1hbGlnbi1pdGVtc1wiOiBhbGlnbkl0ZW1zLFxuICAgIFwiZGF0YS10ZXN0XCI6IFwicm93XCIsXG4gICAgcmVmOiBlbGVtZW50UmVmXG4gIH0sIG90aGVyUHJvcHMpLCBjaGlsZHJlbkNsb25lZCk7XG59XG5cblJvdy5wcm9wVHlwZXMgPSBSb3dfcHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQ29sdW1uTGF5b3V0X1JvdyA9IChSb3cpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29sdW1uTGF5b3V0L0NvbHVtbkxheW91dFN0eWxlcy50c1xuXG5cbnZhciBDb2x1bW5MYXlvdXRTdHlsZXNfU3R5bGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ29sdW1uTGF5b3V0U3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtM2VhdHh6LTBcIlxufSkoW1wiXCIsIFwiO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2ZsZXgnKSk7XG52YXIgQ29sdW1uTGF5b3V0U3R5bGVzX1N0eWxlZERpdmlkZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb2x1bW5MYXlvdXRTdHlsZXNfX1N0eWxlZERpdmlkZXJcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtM2VhdHh6LTFcIlxufSkoW1wiYm9yZGVyLXRvcDoxcHggc29saWQgXCIsIFwiO2hlaWdodDowO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5uZXV0cmFsMjAwLFxuICBlbnRlcnByaXNlOiB7XG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTkyLFxuICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTYwXG4gIH1cbn0pKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29sdW1uTGF5b3V0L0NvbHVtbkxheW91dC50c3hcbmZ1bmN0aW9uIENvbHVtbkxheW91dF9leHRlbmRzKCkgeyBDb2x1bW5MYXlvdXRfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBDb2x1bW5MYXlvdXRfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIENvbHVtbkxheW91dF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gQ29sdW1uTGF5b3V0X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBDb2x1bW5MYXlvdXRfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cblxuXG5cbnZhciBDb2x1bW5MYXlvdXRfcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZGl2aWRlcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydub25lJywgJ3ZlcnRpY2FsJywgJ2hvcml6b250YWwnXSksXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGd1dHRlcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyXG59O1xuXG4vKipcbiAqIGBDb2x1bW5MYXlvdXRgIHByb3ZpZGVzIHNpbXBsZSBBUEkgZm9yIGxheWluZyBvdXQgY29udGVudCBpbnRvIGNvbHVtbnMuIEl0IGlzIGJhc2VkIG9uIGZsZXhib3hcbiAqIGFuZCBoYXMgMTIgY29sdW1ucy5cbiAqL1xuZnVuY3Rpb24gQ29sdW1uTGF5b3V0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkZGl2aWRlciA9IF9yZWYuZGl2aWRlcixcbiAgICAgIGRpdmlkZXIgPSBfcmVmJGRpdmlkZXIgPT09IHZvaWQgMCA/ICdub25lJyA6IF9yZWYkZGl2aWRlcixcbiAgICAgIGVsZW1lbnRSZWYgPSBfcmVmLmVsZW1lbnRSZWYsXG4gICAgICBndXR0ZXJQcm9wID0gX3JlZi5ndXR0ZXIsXG4gICAgICBvdGhlclByb3BzID0gQ29sdW1uTGF5b3V0X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNoaWxkcmVuXCIsIFwiZGl2aWRlclwiLCBcImVsZW1lbnRSZWZcIiwgXCJndXR0ZXJcIl0pO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgQ29sdW1uTGF5b3V0UHJvcHNCYXNlXG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSB1c2VTcGx1bmtUaGVtZV9kZWZhdWx0KCkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHksXG4gICAgICBkZW5zaXR5ID0gX3VzZVNwbHVua1RoZW1lLmRlbnNpdHk7XG5cbiAgdmFyIGNsb25lUm93ID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZUNhbGxiYWNrXCJdKShmdW5jdGlvbiAocm93LCBpZHgpIHtcbiAgICB2YXIgaXNGaXJzdENoaWxkID0gaWR4ID09PSAwO1xuICAgIHZhciBpc0xhc3RDaGlsZCA9IGlkeCA9PT0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0uY291bnQoY2hpbGRyZW4pIC0gMTtcbiAgICB2YXIgZ3V0dGVyID0gZ3V0dGVyUHJvcDtcblxuICAgIGlmIChndXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZhbWlseSA9PT0gJ3ByaXNtYScpIHtcbiAgICAgICAgaWYgKGRlbnNpdHkgPT09ICdjb21wYWN0Jykge1xuICAgICAgICAgIGd1dHRlciA9IDE2O1xuICAgICAgICB9IGVsc2UgaWYgKGRlbnNpdHkgPT09ICdjb21mb3J0YWJsZScpIHtcbiAgICAgICAgICBndXR0ZXIgPSAyNDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmYW1pbHkgPT09ICdlbnRlcnByaXNlJykge1xuICAgICAgICBndXR0ZXIgPSAzMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL09iamVjdChleHRlcm5hbF9yZWFjdF9bXCJjbG9uZUVsZW1lbnRcIl0pKHJvdywge1xuICAgICAgZ3V0dGVyOiBndXR0ZXIsXG4gICAgICBkaXZpZGVyOiBkaXZpZGVyID09PSAndmVydGljYWwnLFxuICAgICAgaXNGaXJzdENoaWxkOiBpc0ZpcnN0Q2hpbGQsXG4gICAgICBpc0xhc3RDaGlsZDogaXNMYXN0Q2hpbGRcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuLCBkZW5zaXR5LCBkaXZpZGVyLCBmYW1pbHksIGd1dHRlclByb3BdKTtcbiAgdmFyIGluc2VydERpdmlkZXJzID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZUNhbGxiYWNrXCJdKShmdW5jdGlvbiAoYWNjLCByb3csIGlkeCwgb3JpZ2luYWwpIHtcbiAgICBhY2MucHVzaChyb3cpO1xuXG4gICAgaWYgKGRpdmlkZXIgPT09ICdob3Jpem9udGFsJyAmJiBpZHggPCBvcmlnaW5hbC5sZW5ndGggLSAxKSB7XG4gICAgICBhY2MucHVzaCggLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENvbHVtbkxheW91dFN0eWxlc19TdHlsZWREaXZpZGVyLCB7XG4gICAgICAgIGtleTogXCJcIi5jb25jYXQoaWR4LCBcIi1kaXZpZGVyXCIpXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW2RpdmlkZXJdKTtcbiAgdmFyIGNoaWxkcmVuQ2xvbmVkID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKS5tYXAoY2xvbmVSb3cpLnJlZHVjZShpbnNlcnREaXZpZGVycywgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENvbHVtbkxheW91dFN0eWxlc19TdHlsZWQsIENvbHVtbkxheW91dF9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdFwiOiBcImNvbHVtbi1sYXlvdXRcIixcbiAgICByZWY6IGVsZW1lbnRSZWZcbiAgfSwgb3RoZXJQcm9wcyksIGNoaWxkcmVuQ2xvbmVkKTtcbn1cblxuQ29sdW1uTGF5b3V0LnByb3BUeXBlcyA9IENvbHVtbkxheW91dF9wcm9wVHlwZXM7XG5Db2x1bW5MYXlvdXQuUm93ID0gQ29sdW1uTGF5b3V0X1JvdztcbkNvbHVtbkxheW91dC5Db2x1bW4gPSBDb2x1bW5MYXlvdXRfQ29sdW1uO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQ29sdW1uTGF5b3V0X0NvbHVtbkxheW91dCA9IChDb2x1bW5MYXlvdXQpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Db2x1bW5MYXlvdXQvaW5kZXgudHNcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhc3NlcnREZWZpbmVkOyB9KTtcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvMzEyNDUgZm9yIGRldGFpbHNcbi8vIHJlZ2FyZGluZyB0aGUgY3NzIHByb3AuIGNlcnRhaW4gKHZlcnNpb25zIG9mKSBsaWJyYXJpZXMgaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGF0aW9uXG4vLyAtIHN1Y2ggYXMgc3Rvcnlib29rLT5lbW90aW9uIC0gaW50cm9kdWNlIHRoZSBjc3MgcHJvcCB1c2luZyBhIGdsb2JhbCBhdWdtZW50YXRpb24sXG4vLyB3aGljaCBjYXVzZXMgdGhlIHByb3AgdG8gZW5kIHVwIGluIG91ciBkZWNsYXJhdGlvbiBmaWxlcyAodmlhIEpTWC5JbnRyaW5zaWNFbGVtZW50cykuXG4vLyBpdCdzIGRpZmZpY3VsdCB0byBjb250cm9sIGFsbCBuZXN0ZWQgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciB0eXBlcywgd2hpY2ggaXMgd2h5IHRoZVxuLy8gY3NzIHByb3AgaXMgb21pdHRlZCBpbiB0aGUgdHdvIHByb3AgaGVscGVycyBhYm92ZSAtIHRoaXMgZW5zdXJlcyB0aGUgY3NzIHByb3AgaXNuJ3Rcbi8vIGVycm9uZW91c2x5IGluY2x1ZGVkIGluIHJlYWN0LXVpJ3MgcHVibGljIGFwaS5cbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvcHVsbC8xMjI1M1xuLy8gc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0zLTcuaHRtbFxuZnVuY3Rpb24gYXNzZXJ0RGVmaW5lZCh2YWwsIG1zZykge1xuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyAhPT0gbnVsbCAmJiBtc2cgIT09IHZvaWQgMCA/IG1zZyA6ICdVbmV4cGVjdGVkIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gIH1cbn1cblxuXG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsZWFyR2V0VGhlbWVDYWNoZSA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX21lbW9pemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvbWVtb2l6ZVwiKSk7XG5cbnZhciBfZW50ZXJwcmlzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZW50ZXJwcmlzZVwiKSk7XG5cbnZhciBfcHJpc21hID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wcmlzbWFcIikpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLyoqXG4gKiAqKk5PVEU6KiogVXNlIGNhc2VzIGZvciB0aGlzIGZ1bmN0aW9uIGFyZSBsaW1pdGVkLiBJbnN0ZWFkLCB1c2UgYHVzZVNwbHVua1RoZW1lYCBpbiBSZWFjdCBjb21wb25lbnRzIGFuZCBgdmFyaWFibGVzYCBpbiBzdHlsZWQtY29tcG9uZW50cycgQ1NTLlxuICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIG91dHNpZGUgb2YgUmVhY3QgYW5kIHN0eWxlZC1jb21wb25lbnRzLlxuICogQGZpbGVcbiAqL1xuXG4vKipcbiAqIFRoZSBgZ2V0VGhlbWVgIGZ1bmN0aW9uIHJldHVybnMgYWxsIHRoZW1lIHZhcmlhYmxlcyBmb3IgYSBnaXZlbiB0aGVtZS4gVGhpcyBmdW5jdGlvbiBpcyBtZW1vaXplZC5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IGdldFRoZW1lIGZyb20gJ0BzcGx1bmsvdGhlbWVzL2dldFRoZW1lJztcbiAqXG4gKiBjb25zdCBiYXNlVGhlbWUgPSBnZXRUaGVtZSh7ZmFtaWx5OiAncHJpc21hJywgY29sb3JTY2hlbWU6ICdsaWdodCcsIGRlbnNpdHk6ICdjb21wYWN0JyB9KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhiYXNlVGhlbWUuZmFtaWx5LCBiYXNlVGhlbWUuZm9jdXNDb2xvcik7XG4gKiBgYGBcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgdGhlbWUgYXMgZGVmaW5lZCBiZWxvdy5cbiAqIEBwYXJhbSB7J3ByaXNtYScgfCAnZW50ZXJwcmlzZSd9IFtvcHRpb25zLmZhbWlseSA9ICdwcmlzbWEnXVxuICogQHBhcmFtIHsnZGFyaycgfCAnbGlnaHQnfSBbb3B0aW9ucy5jb2xvclNjaGVtZSA9ICdkYXJrJ11cbiAqIEBwYXJhbSB7J2NvbWZvcnRhYmxlJyB8ICdjb21wYWN0J30gW29wdGlvbnMuZGVuc2l0eSA9ICdjb21mb3J0YWJsZSddXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBIGZsYXQgb2JqZWN0IG9mIGFsbCB2YXJpYWJsZXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZ2V0VGhlbWUoKSB7XG4gIHZhciBzZXR0aW5ncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgdmFyIF9hZGRUaGVtZURlZmF1bHRzID0gKDAsIF91dGlscy5hZGRUaGVtZURlZmF1bHRzKShzZXR0aW5ncyksXG4gICAgICBmYW1pbHkgPSBfYWRkVGhlbWVEZWZhdWx0cy5mYW1pbHksXG4gICAgICBjb2xvclNjaGVtZSA9IF9hZGRUaGVtZURlZmF1bHRzLmNvbG9yU2NoZW1lLFxuICAgICAgZGVuc2l0eSA9IF9hZGRUaGVtZURlZmF1bHRzLmRlbnNpdHk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoX29iamVjdFNwcmVhZCh7XG4gICAgY29sb3JTY2hlbWU6IGNvbG9yU2NoZW1lLFxuICAgIGRlbnNpdHk6IGRlbnNpdHksXG4gICAgZmFtaWx5OiBmYW1pbHlcbiAgfSwgZmFtaWx5ID09PSAnZW50ZXJwcmlzZScgPyAoMCwgX2VudGVycHJpc2VbXCJkZWZhdWx0XCJdKSh7XG4gICAgY29sb3JTY2hlbWU6IGNvbG9yU2NoZW1lLFxuICAgIGRlbnNpdHk6IGRlbnNpdHlcbiAgfSkgOiAoMCwgX3ByaXNtYVtcImRlZmF1bHRcIl0pKHtcbiAgICBjb2xvclNjaGVtZTogY29sb3JTY2hlbWUsXG4gICAgZGVuc2l0eTogZGVuc2l0eVxuICB9KSkpO1xufVxuXG52YXIgZ2V0VGhlbWVNZW1vaXplZCA9ICgwLCBfbWVtb2l6ZVtcImRlZmF1bHRcIl0pKGdldFRoZW1lLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIGZhbWlseSA9IF9yZWYuZmFtaWx5LFxuICAgICAgY29sb3JTY2hlbWUgPSBfcmVmLmNvbG9yU2NoZW1lLFxuICAgICAgZGVuc2l0eSA9IF9yZWYuZGVuc2l0eTtcblxuICByZXR1cm4gXCJcIi5jb25jYXQoZmFtaWx5KS5jb25jYXQoY29sb3JTY2hlbWUpLmNvbmNhdChkZW5zaXR5KTtcbn0pO1xuXG52YXIgY2xlYXJHZXRUaGVtZUNhY2hlID0gZnVuY3Rpb24gY2xlYXJHZXRUaGVtZUNhY2hlKCkge1xuICB2YXIgX2dldFRoZW1lTWVtb2l6ZWQkY2FjLCBfZ2V0VGhlbWVNZW1vaXplZCRjYWMyO1xuXG4gIHJldHVybiAoX2dldFRoZW1lTWVtb2l6ZWQkY2FjID0gKF9nZXRUaGVtZU1lbW9pemVkJGNhYzIgPSBnZXRUaGVtZU1lbW9pemVkLmNhY2hlKS5jbGVhcikgPT09IG51bGwgfHwgX2dldFRoZW1lTWVtb2l6ZWQkY2FjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZ2V0VGhlbWVNZW1vaXplZCRjYWMuY2FsbChfZ2V0VGhlbWVNZW1vaXplZCRjYWMyKTtcbn07XG5cbmV4cG9ydHMuY2xlYXJHZXRUaGVtZUNhY2hlID0gY2xlYXJHZXRUaGVtZUNhY2hlO1xudmFyIF9kZWZhdWx0ID0gZ2V0VGhlbWVNZW1vaXplZDtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBkcmFnSGFuZGxlID0gXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBMlNVUkJWSGdCN2RLaEVRQWdEQVBBaERueERNQWNESUJuVDFwWlYxRlJrM2U1M0VXRmMrMlA0TjNEbUxOK29LaC9RQURxQitJTVVLRVFEL0NldWVBQUFBQUFTVVZPUks1Q1lJST1cIjsgLy8gc2VlIGJhYmVsLXBsdWdpbi1iYXNlNjQtcG5naW1wb3J0IHtcblxuLyoqXG4gKiAjIEJyYW5kIENvbG9yc1xuICpcbiAqICBAY29sb3JTZXRcbiAqL1xuXG52YXIgYnJhbmRDb2xvcnMgPSB7XG4gIGJyYW5kQ29sb3JMNTA6ICcjZjVmYmY1JyxcbiAgYnJhbmRDb2xvckw0MDogJyNkZmYyZGYnLFxuICBicmFuZENvbG9yTDMwOiAnI2JlZTZiZScsXG4gIGJyYW5kQ29sb3JMMjA6ICcjOWVkOTllJyxcbiAgYnJhbmRDb2xvckwxMDogJyM3ZWNkN2UnLFxuICBicmFuZENvbG9yOiAnIzVjYzA1YycsXG4gIGJyYW5kQ29sb3JEMTA6ICcjNDliODQ5JyxcbiAgYnJhbmRDb2xvckQyMDogJyM0MGE1NDAnLFxuICBicmFuZENvbG9yRDMwOiAnIzM4OTAzOCcsXG4gIGJyYW5kQ29sb3JENDA6ICcjMzA3YjMwJyxcbiAgYnJhbmRDb2xvckQ1MDogJyMyODY3MjgnXG59O1xuLyoqXG4gKiAjIEdyYXlzY2FsZSBDb2xvcnNcbiAqXG4gKiBAY29sb3JTZXRcbiAqL1xuXG52YXIgZ3JheXMgPSB7XG4gIHdoaXRlOiAnI2ZmZmZmZicsXG4gIGdyYXk5ODogJyNmN2Y4ZmEnLFxuICBncmF5OTY6ICcjZjJmNGY1JyxcbiAgZ3JheTkyOiAnI2UxZTZlYicsXG4gIGdyYXk4MDogJyNjM2NiZDQnLFxuICBncmF5NjA6ICcjODE4ZDk5JyxcbiAgZ3JheTQ1OiAnIzVjNjc3MycsXG4gIGdyYXkzMDogJyMzYzQ0NGQnLFxuICBncmF5MjU6ICcjMzEzNzNlJyxcbiAgZ3JheTIyOiAnIzJiMzAzMycsXG4gIGdyYXkyMDogJyMxNzFkMjEnLFxuICBibGFjazogJyMwMDAwMDAnXG59O1xuLyoqXG4gKiAjIEFjY2VudCBDb2xvcnNcbiAqXG4gKiBAY29sb3JTZXRcbiAqL1xuXG52YXIgYWNjZW50Q29sb3JzID0ge1xuICBhY2NlbnRDb2xvckw1MDogJyNlY2Y4ZmYnLFxuICBhY2NlbnRDb2xvckw0MDogJyNiZmU5ZmYnLFxuICBhY2NlbnRDb2xvckwzMDogJyM3ZWQyZmYnLFxuICBhY2NlbnRDb2xvckwyMDogJyMzZWJjZmYnLFxuICBhY2NlbnRDb2xvckwxMDogJyMwMGE0ZmQnLFxuICBhY2NlbnRDb2xvcjogJyMwMDdhYmQnLFxuICBhY2NlbnRDb2xvckQxMDogJyMwMDZlYWEnLFxuICBhY2NlbnRDb2xvckQyMDogJyMwMDYyOTcnLFxuICBhY2NlbnRDb2xvckQzMDogJyMwMDU2ODQnLFxuICBhY2NlbnRDb2xvckQ0MDogJyMwMDRhNzEnLFxuICBhY2NlbnRDb2xvckQ1MDogJyMwMDNkNWUnXG59O1xuLyoqXG4gKiAjIEVycm9yIENvbG9yc1xuICpcbiAqIEBjb2xvclNldFxuICovXG5cbnZhciBlcnJvckNvbG9ycyA9IHtcbiAgZXJyb3JDb2xvckw1MDogJyNmY2VkZWMnLFxuICBlcnJvckNvbG9yTDQwOiAnI2Y4ZGNkOScsXG4gIGVycm9yQ29sb3JMMzA6ICcjZjFiOWIzJyxcbiAgZXJyb3JDb2xvckwyMDogJyNlYTk1OGQnLFxuICBlcnJvckNvbG9yTDEwOiAnI2UzNzI2NycsXG4gIGVycm9yQ29sb3I6ICcjZGM0ZTQxJyxcbiAgZXJyb3JDb2xvckQxMDogJyNjODQ1MzUnLFxuICBlcnJvckNvbG9yRDIwOiAnI2IyM2QzMCcsXG4gIGVycm9yQ29sb3JEMzA6ICcjOWMzNTI5JyxcbiAgZXJyb3JDb2xvckQ0MDogJyM4NTJkMjQnLFxuICBlcnJvckNvbG9yRDUwOiAnIzZmMjYxZCdcbn07XG4vKipcbiAqICMgQWxlcnQgQ29sb3JzXG4gKlxuICogQGNvbG9yU2V0XG4gKiAqL1xuXG52YXIgYWxlcnRDb2xvcnMgPSB7XG4gIGFsZXJ0Q29sb3JMNTA6ICcjZmVmM2VjJyxcbiAgYWxlcnRDb2xvckw0MDogJyNmZGU2ZDknLFxuICBhbGVydENvbG9yTDMwOiAnI2ZhY2RiMycsXG4gIGFsZXJ0Q29sb3JMMjA6ICcjZjdiNDhjJyxcbiAgYWxlcnRDb2xvckwxMDogJyNmNDliNjYnLFxuICBhbGVydENvbG9yOiAnI2YxODEzZicsXG4gIGFsZXJ0Q29sb3JEMTA6ICcjZGE3NDJlJyxcbiAgYWxlcnRDb2xvckQyMDogJyNjMjY3MmEnLFxuICBhbGVydENvbG9yRDMwOiAnI2FhNWEyNScsXG4gIGFsZXJ0Q29sb3JENDA6ICcjOTE0ZDFmJyxcbiAgYWxlcnRDb2xvckQ1MDogJyM3OTQwMWEnXG59O1xuLyoqXG4gKiAjIFdhcm5pbmcgQ29sb3JzXG4gKlxuICogIEBjb2xvclNldFxuICovXG5cbnZhciB3YXJuaW5nQ29sb3JzID0ge1xuICB3YXJuaW5nQ29sb3JMNTA6ICcjZmZmOWViJyxcbiAgd2FybmluZ0NvbG9yTDQwOiAnI2ZlZjJkNycsXG4gIHdhcm5pbmdDb2xvckwzMDogJyNmZGU1YWUnLFxuICB3YXJuaW5nQ29sb3JMMjA6ICcjZmJkODg2JyxcbiAgd2FybmluZ0NvbG9yTDEwOiAnI2ZhY2I1ZCcsXG4gIHdhcm5pbmdDb2xvcjogJyNmOGJlMzQnLFxuICB3YXJuaW5nQ29sb3JEMTA6ICcjZTBhYzE2JyxcbiAgd2FybmluZ0NvbG9yRDIwOiAnI2M3OTkxNScsXG4gIHdhcm5pbmdDb2xvckQzMDogJyNhZTg2MTMnLFxuICB3YXJuaW5nQ29sb3JENDA6ICcjOTU3MzEyJyxcbiAgd2FybmluZ0NvbG9yRDUwOiAnIzdkNjAwZidcbn07XG4vKipcbiAqICMgU3VjY2VzcyBDb2xvcnNcbiAqXG4gKiBAY29sb3JTZXRcbiAqL1xuXG52YXIgc3VjY2Vzc0NvbG9ycyA9IHtcbiAgc3VjY2Vzc0NvbG9yTDUwOiAnI2VlZjZlZScsXG4gIHN1Y2Nlc3NDb2xvckw0MDogJyNkZGVjZGQnLFxuICBzdWNjZXNzQ29sb3JMMzA6ICcjYmJkOWJhJyxcbiAgc3VjY2Vzc0NvbG9yTDIwOiAnIzk4YzY5NycsXG4gIHN1Y2Nlc3NDb2xvckwxMDogJyM3NmIzNzQnLFxuICBzdWNjZXNzQ29sb3I6ICcjNTNhMDUxJyxcbiAgc3VjY2Vzc0NvbG9yRDEwOiAnIzQ3OTE0NCcsXG4gIHN1Y2Nlc3NDb2xvckQyMDogJyM0MDgxM2QnLFxuICBzdWNjZXNzQ29sb3JEMzA6ICcjMzg3MTM1JyxcbiAgc3VjY2Vzc0NvbG9yRDQwOiAnIzJmNjEyZScsXG4gIHN1Y2Nlc3NDb2xvckQ1MDogJyMyNzUxMjYnXG59O1xuLyoqXG4gKiAjIEluZm8gQ29sb3JzXG4gKlxuICogIEBjb2xvclNldFxuICovXG5cbnZhciBpbmZvQ29sb3JzID0ge1xuICBpbmZvQ29sb3JMNTA6ICcjZTVmMGY1JyxcbiAgaW5mb0NvbG9yTDQwOiAnI2NjZTJlYicsXG4gIGluZm9Db2xvckwzMDogJyM5OWM1ZDcnLFxuICBpbmZvQ29sb3JMMjA6ICcjNjZhN2M0JyxcbiAgaW5mb0NvbG9yTDEwOiAnIzMzOGFiMCcsXG4gIGluZm9Db2xvcjogJyMwMDZkOWMnLFxuICBpbmZvQ29sb3JEMTA6ICcjMDA1NzdjJyxcbiAgaW5mb0NvbG9yRDIwOiAnIzAwNGM2YycsXG4gIGluZm9Db2xvckQzMDogJyMwMDQxNWQnLFxuICBpbmZvQ29sb3JENDA6ICcjMDAzNjRkJyxcbiAgaW5mb0NvbG9yRDUwOiAnIzAwMmIzZSdcbn07XG4vKipcbiAqICMgRGl2ZXJnaW5nIENvbG9yc1xuICpcbiAqIEBjb2xvclNldCBhbHBoYWJldGljYWxcbiAqL1xuXG52YXIgZGl2ZXJnaW5nQ29sb3JzID0ge1xuICBkaXZlcmdpbmcxQ29sb3JBOiAnIzAwNmQ5YycsXG4gIGRpdmVyZ2luZzFDb2xvckI6ICcjZWM5OTYwJyxcbiAgZGl2ZXJnaW5nMkNvbG9yQTogJyNhZjU3NWEnLFxuICBkaXZlcmdpbmcyQ29sb3JCOiAnIzYyYjNiMicsXG4gIGRpdmVyZ2luZzNDb2xvckE6ICcjNGZhNDg0JyxcbiAgZGl2ZXJnaW5nM0NvbG9yQjogJyNmOGJlMzQnLFxuICBkaXZlcmdpbmc0Q29sb3JBOiAnIzVhNDU3NScsXG4gIGRpdmVyZ2luZzRDb2xvckI6ICcjNzA4Nzk0JyxcbiAgZGl2ZXJnaW5nNUNvbG9yQTogJyMyOTRlNzAnLFxuICBkaXZlcmdpbmc1Q29sb3JCOiAnI2I2Yzc1YSdcbn07XG4vKipcbiAqICMgQ2F0ZWdvcmljYWwgQ29sb3JzXG4gKlxuICogQGNvbG9yU2V0IGFscGhhYmV0aWNhbFxuICovXG5cbnZhciBjYXRlZ29yaWNhbENvbG9ycyA9IHtcbiAgY2F0MUNvbG9yOiAnIzI5N2JhNScsXG4gIGNhdDFDb2xvckw6ICcjNzhiOWQ2JyxcbiAgY2F0MkNvbG9yOiAnIzRmYTQ4NCcsXG4gIGNhdDJDb2xvckw6ICcjNzRkNWMyJyxcbiAgY2F0M0NvbG9yOiAnI2I2Yzc1YScsXG4gIGNhdDNDb2xvckw6ICcjZGNlNmE1JyxcbiAgY2F0NENvbG9yOiAnIzNjNjE4OCcsXG4gIGNhdDRDb2xvckw6ICcjYTBiMmNhJyxcbiAgY2F0NUNvbG9yOiAnI2VjOTk2MCcsXG4gIGNhdDVDb2xvckw6ICcjZmFjOWE3JyxcbiAgY2F0NkNvbG9yOiAnI2E2NWM3ZCcsXG4gIGNhdDZDb2xvckw6ICcjZDNhN2JhJyxcbiAgY2F0N0NvbG9yOiAnIzcwODc5NCcsXG4gIGNhdDdDb2xvckw6ICcjYjJjMGM4JyxcbiAgY2F0OENvbG9yOiAnIzM4YjhiZicsXG4gIGNhdDhDb2xvckw6ICcjOTJkZGUyJyxcbiAgY2F0OUNvbG9yOiAnI2ZmZGU2MycsXG4gIGNhdDlDb2xvckw6ICcjZmZlZWFlJyxcbiAgY2F0MTBDb2xvcjogJyNjMTk5NzUnLFxuICBjYXQxMENvbG9yTDogJyNkN2JmYWInLFxuICBjYXQxMUNvbG9yOiAnIzVhNDU3NScsXG4gIGNhdDExQ29sb3JMOiAnI2I3YWNjYScsXG4gIGNhdDEyQ29sb3I6ICcjN2VhNzdiJyxcbiAgY2F0MTJDb2xvckw6ICcjYjJjYWIwJyxcbiAgY2F0MTNDb2xvcjogJyM1NzZkODMnLFxuICBjYXQxM0NvbG9yTDogJyNhNWIyYmYnLFxuICBjYXQxNENvbG9yOiAnI2Q3YzZiNycsXG4gIGNhdDE0Q29sb3JMOiAnI2U5ZGRkNCcsXG4gIGNhdDE1Q29sb3I6ICcjMzM5YmIyJyxcbiAgY2F0MTVDb2xvckw6ICcjNjZjM2QwJyxcbiAgY2F0MTZDb2xvcjogJyMyMzZkOWInLFxuICBjYXQxNkNvbG9yTDogJyM2NmE3YzInLFxuICBjYXQxN0NvbG9yOiAnI2U1ZGM4MCcsXG4gIGNhdDE3Q29sb3JMOiAnI2YxZWFiNycsXG4gIGNhdDE4Q29sb3I6ICcjOTY5MDdmJyxcbiAgY2F0MThDb2xvckw6ICcjYzFiY2IzJyxcbiAgY2F0MTlDb2xvcjogJyM4N2JjNjUnLFxuICBjYXQxOUNvbG9yTDogJyNiNmQ3YTMnLFxuICBjYXQyMENvbG9yOiAnI2NmN2U2MCcsXG4gIGNhdDIwQ29sb3JMOiAnI2UxYjJhMScsXG4gIGNhdDIxQ29sb3I6ICcjN2I1NTQ3JyxcbiAgY2F0MjFDb2xvckw6ICcjZGVjNGJhJyxcbiAgY2F0MjJDb2xvcjogJyM3N2Q2ZDgnLFxuICBjYXQyMkNvbG9yTDogJyNhYmU2ZTgnLFxuICBjYXQyM0NvbG9yOiAnIzRhN2YyYycsXG4gIGNhdDIzQ29sb3JMOiAnIzkxYjI4MicsXG4gIGNhdDI0Q29sb3I6ICcjZjU4OWFkJyxcbiAgY2F0MjRDb2xvckw6ICcjZjhiN2NlJyxcbiAgY2F0MjVDb2xvcjogJyM2YTJjNWQnLFxuICBjYXQyNUNvbG9yTDogJyNjYmEzYzInLFxuICBjYXQyNkNvbG9yOiAnI2FhYWJhZScsXG4gIGNhdDI2Q29sb3JMOiAnI2NjY2RjZScsXG4gIGNhdDI3Q29sb3I6ICcjOWE3NDM4JyxcbiAgY2F0MjdDb2xvckw6ICcjYzNhYjg5JyxcbiAgY2F0MjhDb2xvcjogJyNhNGQ1NjMnLFxuICBjYXQyOENvbG9yTDogJyNjN2U2YTMnLFxuICBjYXQyOUNvbG9yOiAnIzc2NzJhNCcsXG4gIGNhdDI5Q29sb3JMOiAnI2FkYTljOCcsXG4gIGNhdDMwQ29sb3I6ICcjMTg0YjgxJyxcbiAgY2F0MzBDb2xvckw6ICcjYTRiYmUwJ1xufTtcbi8qKlxuICogIyBVc2FnZS1iYXNlZCBDb2xvcnNcbiAqXG4gKiBAY29sb3JTZXQgdmVyYm9zZVxuICovXG5cbnZhciB1c2FnZUNvbG9ycyA9IHtcbiAgdGV4dENvbG9yOiBncmF5cy5ncmF5MzAsXG4gIHRleHRHcmF5OiAnIzZiNzc4NScsXG4gIHRleHREaXNhYmxlZENvbG9yOiBncmF5cy5ncmF5ODAsXG4gIGxpbmtDb2xvcjogYWNjZW50Q29sb3JzLmFjY2VudENvbG9yRDEwLFxuICBsaW5rQ29sb3JIb3ZlcjogYWNjZW50Q29sb3JzLmFjY2VudENvbG9yLFxuICBib3JkZXJMaWdodENvbG9yOiBncmF5cy5ncmF5OTIsXG4gIGJvcmRlckNvbG9yOiBncmF5cy5ncmF5ODAsXG4gIGZvY3VzQ29sb3I6IGFjY2VudENvbG9ycy5hY2NlbnRDb2xvckQxMCxcbiAgYmFja2dyb3VuZENvbG9ySG92ZXI6IGdyYXlzLmdyYXk5NixcbiAgYmFja2dyb3VuZENvbG9yOiBncmF5cy53aGl0ZSxcbiAgdHJhbnNwYXJlbnQ6ICd0cmFuc3BhcmVudCdcbn07XG4vKipcbiAqICMgU3ludGF4IENvbG9yc1xuICogVGhlIGZvbGxvd2luZyBjb2xvcnMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc3ludGF4IGNvbG9yaW5nIG9mIGNvZGUuXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2UgYWxwaGFiZXRpY2FsXG4gKi9cblxudmFyIHN5bnRheENvbG9ycyA9IHtcbiAgc3ludGF4Qmx1ZTogJyMyNjYyZmMnLFxuICBzeW50YXhCbHVlTGlnaHQ6ICcjMDA2ZDljJyxcbiAgc3ludGF4QnJvd246ICcjYTY3ZjU5JyxcbiAgc3ludGF4R3JheTogJyM4MjkzYTcnLFxuICBzeW50YXhHcmVlbjogJyM1Y2EzMDAnLFxuICBzeW50YXhHcmVlbkxpZ2h0OiAnIzViYTM4MycsXG4gIHN5bnRheE9yYW5nZTogJyNmNTgyMjAnLFxuICBzeW50YXhQaW5rOiAnI2NmMDBjZicsXG4gIHN5bnRheFB1cnBsZTogJyM3NzM4ZmYnLFxuICBzeW50YXhQdXJwbGVMaWdodDogJyNiMTljZDknLFxuICBzeW50YXhSZWQ6ICcjZDkwNzAwJyxcbiAgc3ludGF4UmVkTGlnaHQ6ICcjYWY1NzVhJyxcbiAgc3ludGF4VGVhbDogJyMwMGE4YWInXG59O1xuLyoqXG4gKiAjIFNoYWRvd3NcbiAqXG4gKiBAc2hhZG93U2V0XG4gKi9cblxudmFyIHNoYWRvd3MgPSB7XG4gIGZvY3VzU2hhZG93OiBcIjAgMCAxcHggM3B4IFwiLmNvbmNhdCh1c2FnZUNvbG9ycy5mb2N1c0NvbG9yKSxcbiAgZm9jdXNTaGFkb3dJbnNldDogXCJpbnNldCAwIDAgMXB4IDFweCBcIi5jb25jYXQoZ3JheXMud2hpdGUsIFwiLCBpbnNldCAwIDAgMCAzcHggXCIpLmNvbmNhdCh1c2FnZUNvbG9ycy5mb2N1c0NvbG9yKSxcbiAgb3ZlcmxheVNoYWRvdzogJzAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMiknXG59O1xuLyoqXG4gKiAjIEJhY2tncm91bmRzXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgYmFja2dyb3VuZHMgPSB7XG4gIGRyYWdnYWJsZUJhY2tncm91bmQ6IFwidXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsXCIuY29uY2F0KGRyYWdIYW5kbGUsIFwiJykgMCAwIC8gOHB4IDhweCByZXBlYXRcIilcbn07XG4vKipcbiAqICMgQm9yZGVyXG4gKlxuICogQHZhbHVlU2V0XG4gKi9cblxudmFyIGJvcmRlcnMgPSB7XG4gIGJvcmRlclJhZGl1czogJzNweCcsXG4gIGJvcmRlcjogXCIxcHggc29saWQgXCIuY29uY2F0KHVzYWdlQ29sb3JzLmJvcmRlckNvbG9yKVxufTtcbnZhciBzYW5zRm9udEZhbWlseSA9IFwiJ1NwbHVuayBQbGF0Zm9ybSBTYW5zJywgJ1Byb3hpbWEgTm92YScsIFJvYm90bywgRHJvaWQsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWZcIjtcbi8qKlxuICogIyBGb250c1xuICpcbiAqIEB2YWx1ZVNldFxuICovXG5cbnZhciBmb250cyA9IHtcbiAgc2Fuc0ZvbnRGYW1pbHk6IHNhbnNGb250RmFtaWx5LFxuICBzZXJpZkZvbnRGYW1pbHk6IFwiR2VvcmdpYSwgJ1RpbWVzIE5ldyBSb21hbicsIFRpbWVzLCBzZXJpZlwiLFxuICBtb25vRm9udEZhbWlseTogXCInU3BsdW5rIFBsYXRmb3JtIE1vbm8nLCBJbmNvbnNvbGF0YSwgQ29uc29sYXMsICdEcm9pZCBTYW5zIE1vbm8nLCBNb25hY28sICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxuICBmb250RmFtaWx5OiBzYW5zRm9udEZhbWlseSxcbiAgZm9udFdlaWdodEJvbGQ6ICc3MDAnLFxuICBmb250V2VpZ2h0U2VtaUJvbGQ6ICc1MDAnXG59O1xuLyoqXG4gKiAjIExheWVyc1xuICogSWYgYSB2YXJpYWJsZSBkb2VzIG5vdCBzdWl0IHlvdXIgcHVycG9zZSwgc2V0IGEgdmFsdWUgcmVsYXRpdmVseSwgc3VjaCBhcyB6aW5kZXhNb2RhbCArMS5cbiAqXG4gKiBAdmFsdWVTZXRcbiAqL1xuXG52YXIgemluZGV4ZXMgPSB7XG4gIHppbmRleEZpeGVkTmF2YmFyOiAxMDMwLFxuICB6aW5kZXhNb2RhbEJhY2tkcm9wOiAxMDQwLFxuICB6aW5kZXhNb2RhbDogMTA1MCxcbiAgemluZGV4UG9wb3ZlcjogMTA2MCxcbiAgemluZGV4VG9hc3RNZXNzYWdlczogMjAwMFxufTtcblxudmFyIHRoZW1lID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBicmFuZENvbG9ycyksIGdyYXlzKSwgYWNjZW50Q29sb3JzKSwgZXJyb3JDb2xvcnMpLCBhbGVydENvbG9ycyksIHdhcm5pbmdDb2xvcnMpLCBzdWNjZXNzQ29sb3JzKSwgaW5mb0NvbG9ycyksIGNhdGVnb3JpY2FsQ29sb3JzKSwgZGl2ZXJnaW5nQ29sb3JzKSwgc3ludGF4Q29sb3JzKSwgZm9udHMpLCB1c2FnZUNvbG9ycyksIGJhY2tncm91bmRzKSwgc2hhZG93cyksIGJvcmRlcnMpLCB6aW5kZXhlcyk7XG5cbnZhciBfZGVmYXVsdCA9IHRoZW1lO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlcnBvbGF0aW9uUmVzdWx0ID0gaXNJbnRlcnBvbGF0aW9uUmVzdWx0O1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBleHBvcnRzLmdldFRoZW1lVmFyaWFudCA9IHZvaWQgMDtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciB2YWx1ZVRvS2V5ID0ge1xuICBlbnRlcnByaXNlOiAnZmFtaWx5JyxcbiAgcHJpc21hOiAnZmFtaWx5JyxcbiAgbGlnaHQ6ICdjb2xvclNjaGVtZScsXG4gIGRhcms6ICdjb2xvclNjaGVtZScsXG4gIGNvbXBhY3Q6ICdkZW5zaXR5JyxcbiAgY29tZm9ydGFibGU6ICdkZW5zaXR5J1xufTtcblxuZnVuY3Rpb24gaXNJbnRlcnBvbGF0aW9uUmVzdWx0KHRyZWUpIHtcbiAgLy8gZm9yIHRoaXMgdG8gd29yayBhcyBleHBlY3RlZCBmb3Igb2JqZWN0cy9DU1NQcm9wZXJ0aWVzLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNoYW5nZVxuICAvLyBpdCB0byBvbmx5IGNvbnNpZGVyIG9iamVjdHMgdGhhdCBoYXZlIHZhbGlkIHBpY2sgdHJlZSBrZXlzIChidXQgbm8gb3RoZXIga2V5cylcbiAgLy8gYXMgdHJlZXNcbiAgcmV0dXJuIF90eXBlb2YodHJlZSkgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodHJlZSkgfHwgdHJlZSA9PT0gbnVsbDtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBleHBvcnRlZCBmb3IgdXNlIGluIHBpY2tWYXJpYW50IGV4Y2x1c2l2ZWx5LlxuICovXG5cblxudmFyIGdldFRoZW1lVmFyaWFudCA9IGZ1bmN0aW9uIGdldFRoZW1lVmFyaWFudCh0cmVlLCB0aGVtZSkge1xuICAvLyBJZiBpdCdzIG5vdCBhbiBvYmplY3Qgd2l0aCBvbmUgb2YgdGhlIHNpeCBrZXlzLCBpdCBtdXN0IGJlIGFuIGVuZCB2YWx1ZS5cbiAgdmFyIHRyZWVLZXkgPSBPYmplY3Qua2V5cyh0cmVlKS5zaGlmdCgpO1xuXG4gIGlmICghdHJlZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBwaWNrIHRyZWUgY2Fubm90IGJlIGVtcHR5LicpO1xuICB9XG5cbiAgdmFyIHRoZW1lS2V5ID0gdmFsdWVUb0tleVt0cmVlS2V5XTtcblxuICBpZiAoIXRoZW1lS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwaWNrIHRyZWUga2V5OiBcIi5jb25jYXQodHJlZUtleSkpO1xuICB9IC8vIFJlY3Vyc2l2ZWx5IGNyYXdsIHRoZSB0cmVlLlxuXG5cbiAgdmFyIHRoZW1lQ3VycmVudFZhbHVlID0gdGhlbWVbdGhlbWVLZXldO1xuICB2YXIgdHJlZVZhbHVlID0gdHJlZVt0aGVtZUN1cnJlbnRWYWx1ZV07IC8vIElmIGl0J3Mgbm90IGFuIG9iamVjdCBvciBpdCdzIGEgbnVsbCB2YWx1ZSwgaXQgbXVzdCBiZSB0aGUgZW5kIHZhbHVlLlxuXG4gIGlmIChpc0ludGVycG9sYXRpb25SZXN1bHQodHJlZVZhbHVlKSkge1xuICAgIHJldHVybiB0cmVlVmFsdWU7IC8vIHRoaXMgbWF5IGJlIHVuZGVmaW5lZCwgd2hlbiB0aGUgY3NzIGRvZXMgbm90IHN1cHBvcnQgdGhlIHRoZW1lXG4gIH1cblxuICByZXR1cm4gZ2V0VGhlbWVWYXJpYW50KHRyZWVWYWx1ZSwgdGhlbWUpO1xufTtcbi8qKlxuICogUGljayBpcyB1c2VkIHRvIGNyZWF0ZSB0aGVtZS1zcGVjaWZpYyBjc3MuXG4gKlxuICogVGhpcyBleGFtcGxlIHNlbGVjdHMgYW4gYXBwcm9wcmlhdGUgdmFyaWFibGUgZm9yIHRoZSBjdXJyZW50IHRoZW1lLlxuICogYGBgXG4gKiBpbXBvcnQgeyBwaWNrLCB2YXJpYWJsZXMgfSBmcm9tICdAc3BsdW5rL3RoZW1lcyc7XG4gKlxuICogY29uc3QgV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gKiAgICAgIGNvbG9yOiAke3BpY2soe1xuICogICAgICAgICAgZW50ZXJwcmlzZToge1xuICogICAgICAgICAgICAgIGxpZ2h0OiB2YXJpYWJsZXMuZ3JleTM1LFxuICogICAgICAgICAgICAgIGRhcms6ICB2YXJpYWJsZXMuZ3JleTkyLFxuICogICAgICAgICAgfSxcbiAqICAgICAgICAgIHByaXNtYTogdmFyaWFibGVzLmNvbnRlbnRDb2xvckRlZmF1bHQsXG4gKiAgICAgIH0pfVxuICogYDtcbiAqIGBgYFxuICogVGhpcyBleGFtcGxlIHNlbGVjdHMgYW4gYXBwcm9wcmlhdGUgYmxvY2sgb2YgY3NzIGZvciB0aGUgY3VycmVudCB0aGVtZS5cbiAqIGBgYFxuICogIGNvbnN0IExhYmVsID0gc3R5bGVkLmRpdmBcbiAqICAgICAgJHtwaWNrKHtcbiAqICAgICAgICAgIGVudGVycHJpc2U6IGNzc2BcbiAqICAgICAgICAgICAgICBmb250LXdlaWdodDogJHt2YXJpYWJsZXMuZm9udFdlaWdodFNlbWlCb2xkfTtcbiAqICAgICAgICAgIGAsXG4gKiAgICAgICAgICBwcmlzbWE6IGNzc2BcbiAqICAgICAgICAgICAgICBjb2xvcjogJHt2YXJpYWJsZXMuY29udGVudENvbG9yRGVmYXVsdCksXG4gKiAgICAgICAgICBgLFxuICogICAgICB9KX1cbiAqIGA7XG4gKiBgYGBcbiAqIEBwYXJhbSB7b2JqZWN0fSB0aGVtZU9wdGlvbnMgLSBBbiBvYmplY3QgY29uc2lzdGluZyBvZiBhIHRyZWUgb2YgdGhlbWUgb3B0aW9ucyAoYGVudGVycHJpc2V8cHJpc21hYCwgYGxpZ2h0fGRhcmtgLCBvciBgY29tcGFjdHxjb21mb3J0YWJsZWApLlxuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBzdHlsZWQtY29tcG9uZW50c2AsIHdoaWNoIHByb3ZpZGVzIHRoZSB0aGVtZSBjb250ZXh0LlxuICogQHB1YmxpY1xuICovXG5cblxuZXhwb3J0cy5nZXRUaGVtZVZhcmlhbnQgPSBnZXRUaGVtZVZhcmlhbnQ7XG5cbnZhciBwaWNrID0gZnVuY3Rpb24gcGljayh0cmVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciB0aGVtZSA9IF9yZWYudGhlbWU7XG4gICAgdmFyIHRoZW1lQ2xlYW5lZCA9ICgwLCBfdXRpbHMuYWRkVGhlbWVEZWZhdWx0cykodGhlbWUgPT09IG51bGwgfHwgdGhlbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRoZW1lLnNwbHVua1RoZW1lVjEpO1xuICAgIHJldHVybiBnZXRUaGVtZVZhcmlhbnQodHJlZSwgdGhlbWVDbGVhbmVkKTtcbiAgfTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IHBpY2s7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc3RyaW5naWZpYWJsZShvYmopIHtcbiAgICAvLyBTYWZlbHkgc3RyaW5naWZ5IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhKCd0b1N0cmluZycgaW4gb2JqKSA/XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKSA6XG4gICAgICAgIG9iajtcbn1cbnZhciBpc1Byb2R1Y3Rpb24gPSB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFyaWFudCBmYWlsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSgpKTtcbiAgICB9XG59XG5leHBvcnRzLmludmFyaWFudCA9IGludmFyaWFudDtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5mdW5jdGlvbiB0eXBlKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikuc2xpY2UoOCwgLTEpO1xufVxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gKGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGdldEFsbEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn0pO1xudmFyIGdldEFsbEtleXMgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopKTsgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBPYmplY3Qua2V5cyhvYmopOyB9O1xuZnVuY3Rpb24gY29weShvYmplY3QpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmplY3QpXG4gICAgICAgID8gYXNzaWduKG9iamVjdC5jb25zdHJ1Y3RvcihvYmplY3QubGVuZ3RoKSwgb2JqZWN0KVxuICAgICAgICA6ICh0eXBlKG9iamVjdCkgPT09ICdNYXAnKVxuICAgICAgICAgICAgPyBuZXcgTWFwKG9iamVjdClcbiAgICAgICAgICAgIDogKHR5cGUob2JqZWN0KSA9PT0gJ1NldCcpXG4gICAgICAgICAgICAgICAgPyBuZXcgU2V0KG9iamVjdClcbiAgICAgICAgICAgICAgICA6IChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgICAgID8gYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCkpLCBvYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0O1xufVxudmFyIENvbnRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5jb21tYW5kcyA9IGFzc2lnbih7fSwgZGVmYXVsdENvbW1hbmRzKTtcbiAgICAgICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICAvLyBEZXByZWNhdGVkOiB1cGRhdGUuZXh0ZW5kLCB1cGRhdGUuaXNFcXVhbHMgYW5kIHVwZGF0ZS5uZXdDb250ZXh0XG4gICAgICAgIHRoaXMudXBkYXRlLmV4dGVuZCA9IHRoaXMuZXh0ZW5kID0gdGhpcy5leHRlbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGUuaXNFcXVhbHMgPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCA9PT0geTsgfTtcbiAgICAgICAgdGhpcy51cGRhdGUubmV3Q29udGV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBDb250ZXh0KCkudXBkYXRlOyB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGV4dC5wcm90b3R5cGUsIFwiaXNFcXVhbHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZS5pc0VxdWFscztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlLmlzRXF1YWxzID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbnRleHQucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uIChkaXJlY3RpdmUsIGZuKSB7XG4gICAgICAgIHRoaXMuY29tbWFuZHNbZGlyZWN0aXZlXSA9IGZuO1xuICAgIH07XG4gICAgQ29udGV4dC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG9iamVjdCwgJHNwZWMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHNwZWMgPSAodHlwZW9mICRzcGVjID09PSAnZnVuY3Rpb24nKSA/IHsgJGFwcGx5OiAkc3BlYyB9IDogJHNwZWM7XG4gICAgICAgIGlmICghKEFycmF5LmlzQXJyYXkob2JqZWN0KSAmJiBBcnJheS5pc0FycmF5KHNwZWMpKSkge1xuICAgICAgICAgICAgaW52YXJpYW50KCFBcnJheS5pc0FycmF5KHNwZWMpLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiBZb3UgcHJvdmlkZWQgYW4gaW52YWxpZCBzcGVjIHRvIHVwZGF0ZSgpLiBUaGUgc3BlYyBtYXkgXCIgK1xuICAgICAgICAgICAgICAgIFwibm90IGNvbnRhaW4gYW4gYXJyYXkgZXhjZXB0IGFzIHRoZSB2YWx1ZSBvZiAkc2V0LCAkcHVzaCwgJHVuc2hpZnQsIFwiICtcbiAgICAgICAgICAgICAgICBcIiRzcGxpY2Ugb3IgYW55IGN1c3RvbSBjb21tYW5kIGFsbG93aW5nIGFuIGFycmF5IHZhbHVlLlwiOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIHNwZWMgPT09ICdvYmplY3QnICYmIHNwZWMgIT09IG51bGwsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwidXBkYXRlKCk6IFlvdSBwcm92aWRlZCBhbiBpbnZhbGlkIHNwZWMgdG8gdXBkYXRlKCkuIFRoZSBzcGVjIGFuZCBcIiArXG4gICAgICAgICAgICBcImV2ZXJ5IGluY2x1ZGVkIGtleSBwYXRoIG11c3QgYmUgcGxhaW4gb2JqZWN0cyBjb250YWluaW5nIG9uZSBvZiB0aGUgXCIgK1xuICAgICAgICAgICAgKFwiZm9sbG93aW5nIGNvbW1hbmRzOiBcIiArIE9iamVjdC5rZXlzKF90aGlzLmNvbW1hbmRzKS5qb2luKCcsICcpICsgXCIuXCIpOyB9KTtcbiAgICAgICAgdmFyIG5leHRPYmplY3QgPSBvYmplY3Q7XG4gICAgICAgIGdldEFsbEtleXMoc3BlYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChfdGhpcy5jb21tYW5kcywga2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBvYmplY3RXYXNOZXh0T2JqZWN0ID0gb2JqZWN0ID09PSBuZXh0T2JqZWN0O1xuICAgICAgICAgICAgICAgIG5leHRPYmplY3QgPSBfdGhpcy5jb21tYW5kc1trZXldKHNwZWNba2V5XSwgbmV4dE9iamVjdCwgc3BlYywgb2JqZWN0KTtcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0V2FzTmV4dE9iamVjdCAmJiBfdGhpcy5pc0VxdWFscyhuZXh0T2JqZWN0LCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRPYmplY3QgPSBvYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRWYWx1ZUZvcktleSA9IHR5cGUob2JqZWN0KSA9PT0gJ01hcCdcbiAgICAgICAgICAgICAgICAgICAgPyBfdGhpcy51cGRhdGUob2JqZWN0LmdldChrZXkpLCBzcGVjW2tleV0pXG4gICAgICAgICAgICAgICAgICAgIDogX3RoaXMudXBkYXRlKG9iamVjdFtrZXldLCBzcGVjW2tleV0pO1xuICAgICAgICAgICAgICAgIHZhciBuZXh0T2JqZWN0VmFsdWUgPSB0eXBlKG5leHRPYmplY3QpID09PSAnTWFwJ1xuICAgICAgICAgICAgICAgICAgICA/IG5leHRPYmplY3QuZ2V0KGtleSlcbiAgICAgICAgICAgICAgICAgICAgOiBuZXh0T2JqZWN0W2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5pc0VxdWFscyhuZXh0VmFsdWVGb3JLZXksIG5leHRPYmplY3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfHwgdHlwZW9mIG5leHRWYWx1ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dE9iamVjdCA9PT0gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0T2JqZWN0ID0gY29weShvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlKG5leHRPYmplY3QpID09PSAnTWFwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE9iamVjdC5zZXQoa2V5LCBuZXh0VmFsdWVGb3JLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE9iamVjdFtrZXldID0gbmV4dFZhbHVlRm9yS2V5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5leHRPYmplY3Q7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dDtcbn0oKSk7XG5leHBvcnRzLkNvbnRleHQgPSBDb250ZXh0O1xudmFyIGRlZmF1bHRDb21tYW5kcyA9IHtcbiAgICAkcHVzaDogZnVuY3Rpb24gKHZhbHVlLCBuZXh0T2JqZWN0LCBzcGVjKSB7XG4gICAgICAgIGludmFyaWFudFB1c2hBbmRVbnNoaWZ0KG5leHRPYmplY3QsIHNwZWMsICckcHVzaCcpO1xuICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID8gbmV4dE9iamVjdC5jb25jYXQodmFsdWUpIDogbmV4dE9iamVjdDtcbiAgICB9LFxuICAgICR1bnNoaWZ0OiBmdW5jdGlvbiAodmFsdWUsIG5leHRPYmplY3QsIHNwZWMpIHtcbiAgICAgICAgaW52YXJpYW50UHVzaEFuZFVuc2hpZnQobmV4dE9iamVjdCwgc3BlYywgJyR1bnNoaWZ0Jyk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPyB2YWx1ZS5jb25jYXQobmV4dE9iamVjdCkgOiBuZXh0T2JqZWN0O1xuICAgIH0sXG4gICAgJHNwbGljZTogZnVuY3Rpb24gKHZhbHVlLCBuZXh0T2JqZWN0LCBzcGVjLCBvcmlnaW5hbE9iamVjdCkge1xuICAgICAgICBpbnZhcmlhbnRTcGxpY2VzKG5leHRPYmplY3QsIHNwZWMpO1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICBpbnZhcmlhbnRTcGxpY2UoYXJncyk7XG4gICAgICAgICAgICBpZiAobmV4dE9iamVjdCA9PT0gb3JpZ2luYWxPYmplY3QgJiYgYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXh0T2JqZWN0ID0gY29weShvcmlnaW5hbE9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGxpY2UuYXBwbHkobmV4dE9iamVjdCwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV4dE9iamVjdDtcbiAgICB9LFxuICAgICRzZXQ6IGZ1bmN0aW9uICh2YWx1ZSwgX25leHRPYmplY3QsIHNwZWMpIHtcbiAgICAgICAgaW52YXJpYW50U2V0KHNwZWMpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICAkdG9nZ2xlOiBmdW5jdGlvbiAodGFyZ2V0cywgbmV4dE9iamVjdCkge1xuICAgICAgICBpbnZhcmlhbnRTcGVjQXJyYXkodGFyZ2V0cywgJyR0b2dnbGUnKTtcbiAgICAgICAgdmFyIG5leHRPYmplY3RDb3B5ID0gdGFyZ2V0cy5sZW5ndGggPyBjb3B5KG5leHRPYmplY3QpIDogbmV4dE9iamVjdDtcbiAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgIG5leHRPYmplY3RDb3B5W3RhcmdldF0gPSAhbmV4dE9iamVjdFt0YXJnZXRdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5leHRPYmplY3RDb3B5O1xuICAgIH0sXG4gICAgJHVuc2V0OiBmdW5jdGlvbiAodmFsdWUsIG5leHRPYmplY3QsIF9zcGVjLCBvcmlnaW5hbE9iamVjdCkge1xuICAgICAgICBpbnZhcmlhbnRTcGVjQXJyYXkodmFsdWUsICckdW5zZXQnKTtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobmV4dE9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0T2JqZWN0ID09PSBvcmlnaW5hbE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0T2JqZWN0ID0gY29weShvcmlnaW5hbE9iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXh0T2JqZWN0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV4dE9iamVjdDtcbiAgICB9LFxuICAgICRhZGQ6IGZ1bmN0aW9uICh2YWx1ZXMsIG5leHRPYmplY3QsIF9zcGVjLCBvcmlnaW5hbE9iamVjdCkge1xuICAgICAgICBpbnZhcmlhbnRNYXBPclNldChuZXh0T2JqZWN0LCAnJGFkZCcpO1xuICAgICAgICBpbnZhcmlhbnRTcGVjQXJyYXkodmFsdWVzLCAnJGFkZCcpO1xuICAgICAgICBpZiAodHlwZShuZXh0T2JqZWN0KSA9PT0gJ01hcCcpIHtcbiAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBfYVswXSwgdmFsdWUgPSBfYVsxXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dE9iamVjdCA9PT0gb3JpZ2luYWxPYmplY3QgJiYgbmV4dE9iamVjdC5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dE9iamVjdCA9IGNvcHkob3JpZ2luYWxPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0T2JqZWN0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRPYmplY3QgPT09IG9yaWdpbmFsT2JqZWN0ICYmICFuZXh0T2JqZWN0Lmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dE9iamVjdCA9IGNvcHkob3JpZ2luYWxPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0T2JqZWN0LmFkZCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dE9iamVjdDtcbiAgICB9LFxuICAgICRyZW1vdmU6IGZ1bmN0aW9uICh2YWx1ZSwgbmV4dE9iamVjdCwgX3NwZWMsIG9yaWdpbmFsT2JqZWN0KSB7XG4gICAgICAgIGludmFyaWFudE1hcE9yU2V0KG5leHRPYmplY3QsICckcmVtb3ZlJyk7XG4gICAgICAgIGludmFyaWFudFNwZWNBcnJheSh2YWx1ZSwgJyRyZW1vdmUnKTtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAobmV4dE9iamVjdCA9PT0gb3JpZ2luYWxPYmplY3QgJiYgbmV4dE9iamVjdC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIG5leHRPYmplY3QgPSBjb3B5KG9yaWdpbmFsT2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRPYmplY3QuZGVsZXRlKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV4dE9iamVjdDtcbiAgICB9LFxuICAgICRtZXJnZTogZnVuY3Rpb24gKHZhbHVlLCBuZXh0T2JqZWN0LCBfc3BlYywgb3JpZ2luYWxPYmplY3QpIHtcbiAgICAgICAgaW52YXJpYW50TWVyZ2UobmV4dE9iamVjdCwgdmFsdWUpO1xuICAgICAgICBnZXRBbGxLZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtrZXldICE9PSBuZXh0T2JqZWN0W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAobmV4dE9iamVjdCA9PT0gb3JpZ2luYWxPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dE9iamVjdCA9IGNvcHkob3JpZ2luYWxPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0T2JqZWN0W2tleV0gPSB2YWx1ZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5leHRPYmplY3Q7XG4gICAgfSxcbiAgICAkYXBwbHk6IGZ1bmN0aW9uICh2YWx1ZSwgb3JpZ2luYWwpIHtcbiAgICAgICAgaW52YXJpYW50QXBwbHkodmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWUob3JpZ2luYWwpO1xuICAgIH0sXG59O1xudmFyIGRlZmF1bHRDb250ZXh0ID0gbmV3IENvbnRleHQoKTtcbmV4cG9ydHMuaXNFcXVhbHMgPSBkZWZhdWx0Q29udGV4dC51cGRhdGUuaXNFcXVhbHM7XG5leHBvcnRzLmV4dGVuZCA9IGRlZmF1bHRDb250ZXh0LmV4dGVuZDtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRDb250ZXh0LnVwZGF0ZTtcbi8vIEB0cy1pZ25vcmVcbmV4cG9ydHMuZGVmYXVsdC5kZWZhdWx0ID0gbW9kdWxlLmV4cG9ydHMgPSBhc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbi8vIGludmFyaWFudHNcbmZ1bmN0aW9uIGludmFyaWFudFB1c2hBbmRVbnNoaWZ0KHZhbHVlLCBzcGVjLCBjb21tYW5kKSB7XG4gICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkodmFsdWUpLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiBleHBlY3RlZCB0YXJnZXQgb2YgXCIgKyBzdHJpbmdpZmlhYmxlKGNvbW1hbmQpICsgXCIgdG8gYmUgYW4gYXJyYXk7IGdvdCBcIiArIHN0cmluZ2lmaWFibGUodmFsdWUpICsgXCIuXCI7IH0pO1xuICAgIGludmFyaWFudFNwZWNBcnJheShzcGVjW2NvbW1hbmRdLCBjb21tYW5kKTtcbn1cbmZ1bmN0aW9uIGludmFyaWFudFNwZWNBcnJheShzcGVjLCBjb21tYW5kKSB7XG4gICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkoc3BlYyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwidXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgXCIgKyBzdHJpbmdpZmlhYmxlKGNvbW1hbmQpICsgXCIgdG8gYmUgYW4gYXJyYXk7IGdvdCBcIiArIHN0cmluZ2lmaWFibGUoc3BlYykgKyBcIi4gXCIgK1xuICAgICAgICBcIkRpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXIgaW4gYW4gYXJyYXk/XCI7IH0pO1xufVxuZnVuY3Rpb24gaW52YXJpYW50U3BsaWNlcyh2YWx1ZSwgc3BlYykge1xuICAgIGludmFyaWFudChBcnJheS5pc0FycmF5KHZhbHVlKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJFeHBlY3RlZCAkc3BsaWNlIHRhcmdldCB0byBiZSBhbiBhcnJheTsgZ290IFwiICsgc3RyaW5naWZpYWJsZSh2YWx1ZSk7IH0pO1xuICAgIGludmFyaWFudFNwbGljZShzcGVjLiRzcGxpY2UpO1xufVxuZnVuY3Rpb24gaW52YXJpYW50U3BsaWNlKHZhbHVlKSB7XG4gICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkodmFsdWUpLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICRzcGxpY2UgdG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlzOyBnb3QgXCIgKyBzdHJpbmdpZmlhYmxlKHZhbHVlKSArIFwiLiBcIiArXG4gICAgICAgIFwiRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlcnMgaW4gYW4gYXJyYXk/XCI7IH0pO1xufVxuZnVuY3Rpb24gaW52YXJpYW50QXBwbHkoZm4pIHtcbiAgICBpbnZhcmlhbnQodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICRhcHBseSB0byBiZSBhIGZ1bmN0aW9uOyBnb3QgXCIgKyBzdHJpbmdpZmlhYmxlKGZuKSArIFwiLlwiOyB9KTtcbn1cbmZ1bmN0aW9uIGludmFyaWFudFNldChzcGVjKSB7XG4gICAgaW52YXJpYW50KE9iamVjdC5rZXlzKHNwZWMpLmxlbmd0aCA9PT0gMSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGtleSBpbiBhbiBvYmplY3Qgd2l0aCAkc2V0XCI7IH0pO1xufVxuZnVuY3Rpb24gaW52YXJpYW50TWVyZ2UodGFyZ2V0LCBzcGVjVmFsdWUpIHtcbiAgICBpbnZhcmlhbnQoc3BlY1ZhbHVlICYmIHR5cGVvZiBzcGVjVmFsdWUgPT09ICdvYmplY3QnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiAkbWVyZ2UgZXhwZWN0cyBhIHNwZWMgb2YgdHlwZSAnb2JqZWN0JzsgZ290IFwiICsgc3RyaW5naWZpYWJsZShzcGVjVmFsdWUpOyB9KTtcbiAgICBpbnZhcmlhbnQodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiAkbWVyZ2UgZXhwZWN0cyBhIHRhcmdldCBvZiB0eXBlICdvYmplY3QnOyBnb3QgXCIgKyBzdHJpbmdpZmlhYmxlKHRhcmdldCk7IH0pO1xufVxuZnVuY3Rpb24gaW52YXJpYW50TWFwT3JTZXQodGFyZ2V0LCBjb21tYW5kKSB7XG4gICAgdmFyIHR5cGVPZlRhcmdldCA9IHR5cGUodGFyZ2V0KTtcbiAgICBpbnZhcmlhbnQodHlwZU9mVGFyZ2V0ID09PSAnTWFwJyB8fCB0eXBlT2ZUYXJnZXQgPT09ICdTZXQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBcInVwZGF0ZSgpOiBcIiArIHN0cmluZ2lmaWFibGUoY29tbWFuZCkgKyBcIiBleHBlY3RzIGEgdGFyZ2V0IG9mIHR5cGUgU2V0IG9yIE1hcDsgZ290IFwiICsgc3RyaW5naWZpYWJsZSh0eXBlT2ZUYXJnZXQpOyB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTAyKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVkc7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG52YXIgU3R5bGVkID0gc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3ZnLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTVkdfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xYnowcnloLTBcIlxufSkoW1wiZmxleDowIDAgYXV0bztcIl0pO1xuZnVuY3Rpb24gU1ZHKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWQsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSWNvbjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIGlubGluZVN0eWxlcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnXG59O1xudmFyIGJsb2NrU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBtYXJnaW46ICcwIGF1dG8nLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnXG59O1xudmFyIHByb3BUeXBlcyA9IHtcbiAgRW50ZXJwcmlzZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBlbnRlcnByaXNlU2l6ZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBlbnRlcnByaXNlV2lkdGg6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgZW50ZXJwcmlzZUhlaWdodDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBQcmlzbWEyNDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXG4gIFByaXNtYTIwOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIFByaXNtYTE2OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIHByaXNtYVNpemU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksXG4gIGlubGluZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5ib29sLFxuICBzY3JlZW5SZWFkZXJUZXh0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ1xufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGlubGluZTogdHJ1ZSxcbiAgcHJpc21hU2l6ZTogJ21lZGl1bSdcbn07XG5mdW5jdGlvbiBJY29uKF9yZWYpIHtcbiAgdmFyIEVudGVycHJpc2UgPSBfcmVmLkVudGVycHJpc2UsXG4gICAgICBQcmlzbWEyNCA9IF9yZWYuUHJpc21hMjQsXG4gICAgICBQcmlzbWEyMCA9IF9yZWYuUHJpc21hMjAsXG4gICAgICBQcmlzbWExNiA9IF9yZWYuUHJpc21hMTYsXG4gICAgICBwcmlzbWFTaXplID0gX3JlZi5wcmlzbWFTaXplLFxuICAgICAgaW5saW5lID0gX3JlZi5pbmxpbmUsXG4gICAgICBlbnRlcnByaXNlU2l6ZSA9IF9yZWYuZW50ZXJwcmlzZVNpemUsXG4gICAgICBlbnRlcnByaXNlV2lkdGggPSBfcmVmLmVudGVycHJpc2VXaWR0aCxcbiAgICAgIGVudGVycHJpc2VIZWlnaHQgPSBfcmVmLmVudGVycHJpc2VIZWlnaHQsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0ID0gX3JlZi5zY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJFbnRlcnByaXNlXCIsIFwiUHJpc21hMjRcIiwgXCJQcmlzbWEyMFwiLCBcIlByaXNtYTE2XCIsIFwicHJpc21hU2l6ZVwiLCBcImlubGluZVwiLCBcImVudGVycHJpc2VTaXplXCIsIFwiZW50ZXJwcmlzZVdpZHRoXCIsIFwiZW50ZXJwcmlzZUhlaWdodFwiLCBcInNjcmVlblJlYWRlclRleHRcIl0pO1xuXG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSBPYmplY3QoX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInVzZVNwbHVua1RoZW1lXCJdKSgpLFxuICAgICAgZmFtaWx5ID0gX3VzZVNwbHVua1RoZW1lLmZhbWlseSxcbiAgICAgIGRlbnNpdHkgPSBfdXNlU3BsdW5rVGhlbWUuZGVuc2l0eTsgLy8gRW50ZXJwcmlzZSAtIGFsbCB2YXJpYW50c1xuXG5cbiAgaWYgKGZhbWlseSA9PT0gJ2VudGVycHJpc2UnKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEVudGVycHJpc2UsIF9leHRlbmRzKHtcbiAgICAgIHNpemU6IGVudGVycHJpc2VTaXplLFxuICAgICAgd2lkdGg6IGVudGVycHJpc2VXaWR0aCxcbiAgICAgIGhlaWdodDogZW50ZXJwcmlzZUhlaWdodCxcbiAgICAgIHNjcmVlblJlYWRlclRleHQ6IHNjcmVlblJlYWRlclRleHQgfHwgbnVsbCxcbiAgICAgIGhpZGVEZWZhdWx0VG9vbHRpcDogdHJ1ZSxcbiAgICAgIGlubGluZTogaW5saW5lXG4gICAgfSwgb3RoZXJQcm9wcykpO1xuICB9XG5cbiAgdmFyIHByaXNtYVByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgJ2FyaWEtbGFiZWwnOiBzY3JlZW5SZWFkZXJUZXh0LFxuICAgIHN0eWxlOiBpbmxpbmUgPyBpbmxpbmVTdHlsZXMgOiBibG9ja1N0eWxlc1xuICB9LCBvdGhlclByb3BzKTsgLy8gUHJpc21hIC0gc21hbGwrY29tcGFjdCwgc21hbGwrY29tZm9ydGFibGVcblxuXG4gIGlmIChwcmlzbWFTaXplID09PSAnc21hbGwnKSB7XG4gICAgdmFyIFNWRyA9IFByaXNtYTE2IHx8IFByaXNtYTI0O1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTVkcsIF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgICBoZWlnaHQ6IFwiMTZcIlxuICAgIH0sIHByaXNtYVByb3BzKSk7XG4gIH0gLy8gUHJpc21hIC0gbWVkaXVtK2NvbXBhY3RcblxuXG4gIGlmIChkZW5zaXR5ID09PSAnY29tcGFjdCcpIHtcbiAgICB2YXIgX1NWRyA9IFByaXNtYTIwIHx8IFByaXNtYTI0O1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkcsIF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgICBoZWlnaHQ6IFwiMjBcIlxuICAgIH0sIHByaXNtYVByb3BzKSk7XG4gIH0gLy8gUHJpc21hIC0gbWVkaXVtK2NvbWZvcnRhYmxlXG5cblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoUHJpc21hMjQsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogXCIyNFwiLFxuICAgIGhlaWdodDogXCIyNFwiXG4gIH0sIHByaXNtYVByb3BzKSk7XG59XG5JY29uLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbkljb24uZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuXG4vKioqLyB9KSxcbi8qIDggKi8sXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMva2V5Ym9hcmRcIik7XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pZFwiKTtcblxuLyoqKi8gfSksXG4vKiAxMSAqLyxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVSZWFjdFJlZjsgfSk7XG4vKipcbiAqIFVwZGF0ZXMgYSBSZWFjdCByZWYuIENhbGxiYWNrIHJlZnMgYW5kIG9iamVjdCByZWZzIChmcm9tIGBjcmVhdGVSZWZgIGFuZCBgdXNlUmVmYCkgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gcmVmIC0gVGhlIFJlYWN0IGNhbGxiYWNrIG9yIG9iamVjdCByZWYuIENhbiBiZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gY3VycmVudCAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHJlZi5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlUmVhY3RSZWYocmVmLCBjdXJyZW50KSB7XG4gIGlmIChyZWYpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGN1cnJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgcHVibGljIHNpZ25hdHVyZSBvZiB0aGlzIHV0aWwgdXNlcyBSZWFjdC5SZWY8VD4gdG8gbWlycm9yIHRoZSB3YXkgUmVhY3QgdHlwZXMgcmVmcy5cbiAgICAgIC8vIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBzaWduYWwgXCJ3ZSB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nICdjdXJyZW50Jywgbm90IHlvdVwiLlxuICAgICAgcmVmLmN1cnJlbnQgPSBjdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgfVxuICB9XG59XG5cblxuXG4vKioqLyB9KSxcbi8qIDEzICovLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9TY3JlZW5SZWFkZXJDb250ZW50XCIpO1xuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWV2ZW50LWxpc3RlbmVyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvRHJvcGRvd25cIik7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25cIik7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9Qb3BvdmVyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDE5ICovLFxuLyogMjAgKi8sXG4vKiAyMSAqLyxcbi8qIDIyICovLFxuLyogMjMgKi8sXG4vKiAyNCAqLyxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGV2cm9uUmlnaHQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvblJpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljc4NjEgMTEuOTk5OUw4LjQ4NTg3IDUuNjk5NzJDOC4wOTUzNCA1LjMwOTIgOC4wOTUzNCA0LjY3NjAzIDguNDg1ODcgNC4yODU1MUM4Ljg3NjM5IDMuODk0OTkgOS41MDk1NiAzLjg5NDk5IDkuOTAwMDggNC4yODU1MUwxNi41NTM4IDEwLjkzOTNDMTcuMTM5NiAxMS41MjUgMTcuMTM5NiAxMi40NzQ4IDE2LjU1MzggMTMuMDYwNkw5LjkwMTQyIDE5LjcxM0M5LjUxMDkgMjAuMTAzNSA4Ljg3NzczIDIwLjEwMzUgOC40ODcyMSAxOS43MTNDOC4wOTY2OSAxOS4zMjI0IDguMDk2NjkgMTguNjg5MyA4LjQ4NzIxIDE4LjI5ODhMMTQuNzg2MSAxMS45OTk5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBQcmlzbWExNihfcmVmMikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmMik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNzEwOSA3Ljk5NzZMNS43MTAxNyAxMy45OTgzTDQuMjk1OTcgMTIuNTg0MUw4Ljg4OTE0IDcuOTkwOTVMNC4zNDQ4MiAzLjQwMzYzTDUuNzY1NjcgMS45OTYwOUwxMS43MTA5IDcuOTk3NlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ2hldnJvblJpZ2h0KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEsXG4gICAgUHJpc21hMTY6IFByaXNtYTE2LFxuICAgIFByaXNtYTI0OiBQcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcbi8qIDI2ICovLFxuLyogMjcgKi8sXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL0NoZXZyb25SaWdodFwiKTtcblxuLyoqKi8gfSksXG4vKiAyOSAqLyxcbi8qIDMwICovLFxuLyogMzEgKi8sXG4vKiAzMiAqLyxcbi8qIDMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvU2Nyb2xsQ29udGFpbmVyQ29udGV4dFwiKTtcblxuLyoqKi8gfSksXG4vKiAzNCAqLyxcbi8qIDM1ICovLFxuLyogMzYgKi8sXG4vKiAzNyAqLyxcbi8qIDM4ICovLFxuLyogMzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhcmV0RG93bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX0NhcmV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX0NhcmV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19DYXJldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuXG5cbmZ1bmN0aW9uIFByaXNtYTI0KF9yZWYpIHtcbiAgdmFyIG90aGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgX3JlZik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzg4IDkuMDAwMDJDNi44NDYwOSA5LjAwMDAyIDYuNjE3NjggOS41MTIzOSA2LjkwNjkxIDkuODM0MjNMMTEuNDA3OCAxNC44NDI2QzExLjYwNjUgMTUuMDYzNyAxMS45NTMgMTUuMDYzNiAxMi4xNTE3IDE0Ljg0MjVMMTYuNjQ5OSA5LjgzNDFDMTYuOTM5IDkuNTEyMjMgMTYuNzEwNiA5IDE2LjI3NzkgOUw3LjI3ODggOS4wMDAwMlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ2FyZXREb3duKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DYXJldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWEyNDogUHJpc21hMjRcbiAgfSwgcHJvcHMpKTtcbn1cblxuLyoqKi8gfSksXG4vKiA0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL0NhcmV0XCIpO1xuXG4vKioqLyB9KSxcbi8qIDQxICovLFxuLyogNDIgKi8sXG4vKiA0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1Rvb2x0aXBcIik7XG5cbi8qKiovIH0pLFxuLyogNDQgKi8sXG4vKiA0NSAqLyxcbi8qIDQ2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhc3NlcnREZWZpbmVkOyB9KTtcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9pc3N1ZXMvMzEyNDUgZm9yIGRldGFpbHNcbi8vIHJlZ2FyZGluZyB0aGUgY3NzIHByb3AuIGNlcnRhaW4gKHZlcnNpb25zIG9mKSBsaWJyYXJpZXMgaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGF0aW9uXG4vLyAtIHN1Y2ggYXMgc3Rvcnlib29rLT5lbW90aW9uIC0gaW50cm9kdWNlIHRoZSBjc3MgcHJvcCB1c2luZyBhIGdsb2JhbCBhdWdtZW50YXRpb24sXG4vLyB3aGljaCBjYXVzZXMgdGhlIHByb3AgdG8gZW5kIHVwIGluIG91ciBkZWNsYXJhdGlvbiBmaWxlcyAodmlhIEpTWC5JbnRyaW5zaWNFbGVtZW50cykuXG4vLyBpdCdzIGRpZmZpY3VsdCB0byBjb250cm9sIGFsbCBuZXN0ZWQgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciB0eXBlcywgd2hpY2ggaXMgd2h5IHRoZVxuLy8gY3NzIHByb3AgaXMgb21pdHRlZCBpbiB0aGUgdHdvIHByb3AgaGVscGVycyBhYm92ZSAtIHRoaXMgZW5zdXJlcyB0aGUgY3NzIHByb3AgaXNuJ3Rcbi8vIGVycm9uZW91c2x5IGluY2x1ZGVkIGluIHJlYWN0LXVpJ3MgcHVibGljIGFwaS5cbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvcHVsbC8xMjI1M1xuLy8gc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0zLTcuaHRtbFxuZnVuY3Rpb24gYXNzZXJ0RGVmaW5lZCh2YWwsIG1zZykge1xuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyAhPT0gbnVsbCAmJiBtc2cgIT09IHZvaWQgMCA/IG1zZyA6ICdVbmV4cGVjdGVkIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gIH1cbn1cblxuXG5cbi8qKiovIH0pLFxuLyogNDcgKi8sXG4vKiA0OCAqLyxcbi8qIDQ5ICovLFxuLyogNTAgKi8sXG4vKiA1MSAqLyxcbi8qIDUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNb3JlVmVydGljYWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19Nb3JlVmVydGljYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfTW9yZVZlcnRpY2FsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19Nb3JlVmVydGljYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjAxNjcgNi4yNzI3M0MxMi45MjA1IDYuMjcyNzMgMTMuNjUzMSA1LjU0MDEgMTMuNjUzMSA0LjYzNjM2QzEzLjY1MzEgMy43MzI2MyAxMi45MjA1IDMgMTIuMDE2NyAzQzExLjExMyAzIDEwLjM4MDQgMy43MzI2MyAxMC4zODA0IDQuNjM2MzZDMTAuMzgwNCA1LjU0MDEgMTEuMTEzIDYuMjcyNzMgMTIuMDE2NyA2LjI3MjczWk0xMy42NTMxIDEyQzEzLjY1MzEgMTIuOTAzOCAxMi45MjA1IDEzLjYzNjQgMTIuMDE2NyAxMy42MzY0QzExLjExMyAxMy42MzY0IDEwLjM4MDQgMTIuOTAzOCAxMC4zODA0IDEyQzEwLjM4MDQgMTEuMDk2MyAxMS4xMTMgMTAuMzYzNiAxMi4wMTY3IDEwLjM2MzZDMTIuOTIwNSAxMC4zNjM2IDEzLjY1MzEgMTEuMDk2MyAxMy42NTMxIDEyWk0xMy42NTMxIDE5LjM2MzdDMTMuNjUzMSAyMC4yNjc0IDEyLjkyMDUgMjEgMTIuMDE2NyAyMUMxMS4xMTMgMjEgMTAuMzgwNCAyMC4yNjc0IDEwLjM4MDQgMTkuMzYzN0MxMC4zODA0IDE4LjQ1OTkgMTEuMTEzIDE3LjcyNzMgMTIuMDE2NyAxNy43MjczQzEyLjkyMDUgMTcuNzI3MyAxMy42NTMxIDE4LjQ1OTkgMTMuNjUzMSAxOS4zNjM3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBNb3JlVmVydGljYWwocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICBFbnRlcnByaXNlOiBfc3BsdW5rX3JlYWN0X2ljb25zX01vcmVWZXJ0aWNhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWEyNDogUHJpc21hMjRcbiAgfSwgcHJvcHMpKTtcbn1cblxuLyoqKi8gfSksXG4vKiA1MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL01vcmVWZXJ0aWNhbFwiKTtcblxuLyoqKi8gfSksXG4vKiA1NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2hldnJvbkRvd247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uRG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uRG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkRvd25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjAwMDMgMTQuNzg1OEwxOC4yOTU1IDguNDkwNjJDMTguNjg2IDguMTAwMSAxOS4zMTkyIDguMTAwMSAxOS43MDk3IDguNDkwNjJDMjAuMTAwMyA4Ljg4MTE1IDIwLjEwMDMgOS41MTQzMSAxOS43MDk3IDkuOTA0ODRMMTMuMDYxIDE2LjU1MzZDMTIuNDc1MiAxNy4xMzk0IDExLjUyNTUgMTcuMTM5NCAxMC45Mzk3IDE2LjU1MzZMNC4yODg5OSA5LjkwMjg5QzMuODk4NDYgOS41MTIzNiAzLjg5ODQ2IDguODc5MiA0LjI4ODk5IDguNDg4NjhDNC42Nzk1MSA4LjA5ODE1IDUuMzEyNjggOC4wOTgxNSA1LjcwMzIgOC40ODg2OEwxMi4wMDAzIDE0Ljc4NThaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFByaXNtYTE2KF9yZWYyKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYyKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjAwMTUgMTEuNzEwOUwxNC4wMDIyIDUuNzEwMTdMMTIuNTg4IDQuMjk1OTdMNy45OTQ4NSA4Ljg4OTE0TDMuNDA3NTQgNC4zNDQ4MkwyIDUuNzY1NjdMOC4wMDE1IDExLjcxMDlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIENoZXZyb25Eb3duKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uRG93bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWExNjogUHJpc21hMTYsXG4gICAgUHJpc21hMjQ6IFByaXNtYTI0XG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuLyogNTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9DaGV2cm9uRG93blwiKTtcblxuLyoqKi8gfSksXG4vKiA1NiAqLyxcbi8qIDU3ICovLFxuLyogNTggKi8sXG4vKiA1OSAqLyxcbi8qIDYwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvU3dpdGNoXCIpO1xuXG4vKioqLyB9KSxcbi8qIDYxICovLFxuLyogNjIgKi8sXG4vKiA2MyAqLyxcbi8qIDY0ICovLFxuLyogNjUgKi8sXG4vKiA2NiAqLyxcbi8qIDY3ICovLFxuLyogNjggKi8sXG4vKiA2OSAqLyxcbi8qIDcwICovLFxuLyogNzEgKi8sXG4vKiA3MiAqLyxcbi8qIDczICovLFxuLyogNzQgKi8sXG4vKiA3NSAqLyxcbi8qIDc2ICovLFxuLyogNzcgKi8sXG4vKiA3OCAqLyxcbi8qIDc5ICovLFxuLyogODAgKi8sXG4vKiA4MSAqLyxcbi8qIDgyICovLFxuLyogODMgKi8sXG4vKiA4NCAqLyxcbi8qIDg1ICovLFxuLyogODYgKi8sXG4vKiA4NyAqLyxcbi8qIDg4ICovLFxuLyogODkgKi8sXG4vKiA5MCAqLyxcbi8qIDkxICovLFxuLyogOTIgKi8sXG4vKiA5MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yZXNpemUtZGV0ZWN0b3JcIik7XG5cbi8qKiovIH0pLFxuLyogOTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9Tb3J0XCIpO1xuXG4vKioqLyB9KSxcbi8qIDk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU29ydGVkRG93blwiKTtcblxuLyoqKi8gfSksXG4vKiA5NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NvcnRlZFVwXCIpO1xuXG4vKioqLyB9KSxcbi8qIDk3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvSW5mb1wiKTtcblxuLyoqKi8gfSksXG4vKiA5OCAqLyxcbi8qIDk5ICovLFxuLyogMTAwICovLFxuLyogMTAxICovLFxuLyogMTAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfVGFibGVfVGFibGU7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQm9keVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFRhYmxlX0JvZHk7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2FwdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFRhYmxlX0NhcHRpb247IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiQ2VsbFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFRhYmxlX0NlbGw7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSGVhZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFRhYmxlX0hlYWQ7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiSGVhZENlbGxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBUYWJsZV9IZWFkQ2VsbDsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIZWFkRHJvcGRvd25DZWxsXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gVGFibGVfSGVhZERyb3Bkb3duQ2VsbDsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJSb3dcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBUYWJsZV9Sb3c7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImxvZGFzaFwiXG52YXIgZXh0ZXJuYWxfbG9kYXNoXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdC1ldmVudC1saXN0ZW5lclwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfZXZlbnRfbGlzdGVuZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZXZlbnRfbGlzdGVuZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfZXZlbnRfbGlzdGVuZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0LXJlc2l6ZS1kZXRlY3RvclwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfcmVzaXplX2RldGVjdG9yXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTMpO1xudmFyIGV4dGVybmFsX3JlYWN0X3Jlc2l6ZV9kZXRlY3Rvcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF9yZXNpemVfZGV0ZWN0b3JfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMva2V5Ym9hcmRcIlxudmFyIGtleWJvYXJkXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1Njcm9sbENvbnRhaW5lckNvbnRleHRcIlxudmFyIFNjcm9sbENvbnRhaW5lckNvbnRleHRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJsZS9Cb2R5U3R5bGVzLnRzXG5cblxudmFyIFN0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS50Ym9keS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQm9keVN0eWxlc19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFrNXA2cHEtMFwiXG59KShbXCJcIiwgXCJcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ3RhYmxlLXJvdy1ncm91cCcpKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy91cGRhdGVSZWFjdFJlZi50c1xudmFyIHVwZGF0ZVJlYWN0UmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0JvZHkudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICAvKiogQHByaXZhdGUuIEdlbmVyYWxseSBwYXNzZWQgYnkgVGFibGUgcmF0aGVyIHRoYW4gYWRkZWQgZGlyZWN0bHkuICovXG4gIGFjdGlvbnM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuXG4gIC8qKiBAcHJpdmF0ZS4gR2VuZXJhbGx5IHBhc3NlZCBieSBUYWJsZSByYXRoZXIgdGhhbiBhZGRlZCBkaXJlY3RseS4gKi9cbiAgbW92YWJsZUNvbHVtbnM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqIEBwcml2YXRlLiBHZW5lcmFsbHkgcGFzc2VkIGJ5IFRhYmxlIHJhdGhlciB0aGFuIGFkZGVkIGRpcmVjdGx5LiAqL1xuICByb3dFeHBhbnNpb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnc2luZ2xlJywgJ211bHRpJywgJ25vbmUnXSksXG5cbiAgLyoqIEBwcml2YXRlLiBHZW5lcmFsbHkgcGFzc2VkIGJ5IFRhYmxlIHJhdGhlciB0aGFuIGFkZGVkIGRpcmVjdGx5LiAqL1xuICBvblJlcXVlc3RNb3ZlUm93OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZS4gR2VuZXJhbGx5IHBhc3NlZCBieSBUYWJsZSByYXRoZXIgdGhhbiBhZGRlZCBkaXJlY3RseS4gKi9cbiAgc3RyaXBlUm93czogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbFxufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGlvbnM6IGZhbHNlLFxuICByb3dFeHBhbnNpb246ICdub25lJyxcbiAgc3RyaXBlUm93czogZmFsc2Vcbn07XG5cbnZhciBCb2R5X0JvZHkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEJvZHksIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQm9keSk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBCb2R5UHJvcHNCYXNlXG4gIGZ1bmN0aW9uIEJvZHkocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQm9keSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJlbFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWN0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm93SGVpZ2h0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm93c1wiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdTdGFydFwiLCBmdW5jdGlvbiAoZHJhZ0luZGV4LCBkcmFnRGF0YUlkKSB7XG4gICAgICB2YXIgX3RoaXMkZWwsIF90aGlzJGVsJHBhcmVudEVsZW1lbiwgX3RoaXMkZWwkcGFyZW50RWxlbWVuMiwgX3RoaXMkZWwyO1xuXG4gICAgICBfdGhpcy5yZWN0ID0gKF90aGlzJGVsID0gX3RoaXMuZWwpID09PSBudWxsIHx8IF90aGlzJGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkZWwkcGFyZW50RWxlbWVuID0gX3RoaXMkZWwucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX3RoaXMkZWwkcGFyZW50RWxlbWVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkZWwkcGFyZW50RWxlbWVuMiA9IF90aGlzJGVsJHBhcmVudEVsZW1lbi5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRlbCRwYXJlbnRFbGVtZW4yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRlbCRwYXJlbnRFbGVtZW4yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgX3RoaXMucm93SGVpZ2h0ID0gKF90aGlzJGVsMiA9IF90aGlzLmVsKSA9PT0gbnVsbCB8fCBfdGhpcyRlbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGVsMi5jaGlsZHJlblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJhZ0luZGV4OiBkcmFnSW5kZXgsXG4gICAgICAgIGRyYWdEYXRhSWQ6IGRyYWdEYXRhSWRcbiAgICAgIH0pO1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgX3RoaXMuaGFuZGxlRHJhZ0VudGVyKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIF90aGlzLmhhbmRsZURyYWdPdmVyKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgX3RoaXMuaGFuZGxlRHJvcCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIF90aGlzLmhhbmRsZURyYWdFbmQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdPdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIG5lY2Vzc2FyeSBmb3IgdGhlIGRyb3AgZXZlbnQgdG8gZmlyZVxuXG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgIH1cblxuICAgICAgdmFyIHkgPSBlLmNsaWVudFk7XG5cbiAgICAgIF90aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uKHkpO1xuXG4gICAgICBfdGhpcy51cGRhdGVEcmFnUG9zaXRpb24oeSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlRHJhZ0VudGVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIG5lY2Vzc2FyeSBmb3IgdGhlIGRyb3AgZXZlbnQgdG8gZmlyZVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyYWdQb3NpdGlvbjogZS5jbGllbnRZXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVEcm9wXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNlbGwgZnJvbSBhbmltYXRpbmcgdG8gb3JpZ2luYWwgcG9zaXRpb247XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlRHJhZ0VuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBkcmFnSW5kZXggPSBfdGhpcyRzdGF0ZS5kcmFnSW5kZXgsXG4gICAgICAgICAgZHJhZ0RhdGFJZCA9IF90aGlzJHN0YXRlLmRyYWdEYXRhSWQ7XG5cbiAgICAgIHZhciBndWlkZWxpbmVJbmRleCA9IF90aGlzLmNhbGN1bGF0ZUd1aWRlSW5kZXgoKTsgLy8gVGhlIG5ldyBpbmRleCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIGd1aWRlbGluZUluZGV4XG5cblxuICAgICAgaWYgKGRyYWdJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciB0b0luZGV4ID0gZHJhZ0luZGV4IDwgZ3VpZGVsaW5lSW5kZXggPyBndWlkZWxpbmVJbmRleCAtIDEgOiBndWlkZWxpbmVJbmRleDtcblxuICAgICAgICBpZiAoZHJhZ0luZGV4ICE9PSB0b0luZGV4KSB7XG4gICAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uUmVxdWVzdCwgX3RoaXMkcHJvcHM7XG5cbiAgICAgICAgICAoX3RoaXMkcHJvcHMkb25SZXF1ZXN0ID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLm9uUmVxdWVzdE1vdmVSb3cpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uUmVxdWVzdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25SZXF1ZXN0LmNhbGwoX3RoaXMkcHJvcHMsIHtcbiAgICAgICAgICAgIGZyb21JbmRleDogZHJhZ0luZGV4LFxuICAgICAgICAgICAgdG9JbmRleDogdG9JbmRleCxcbiAgICAgICAgICAgIGRhdGFJZDogZHJhZ0RhdGFJZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJhZ1Bvc2l0aW9uOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5jbGVhbnVwRHJhZygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVxdWVzdE1vdmVSb3dcIiwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBkYXRhSWQgPSBfcmVmLmRhdGFJZCxcbiAgICAgICAgICBmcm9tSW5kZXggPSBfcmVmLmZyb21JbmRleCxcbiAgICAgICAgICB0b0luZGV4ID0gX3JlZi50b0luZGV4O1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyYWdEYXRhSWQ6IGRhdGFJZFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0b0luZGV4IDwgZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShfdGhpcy5wcm9wcy5jaGlsZHJlbikubGVuZ3RoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvblJlcXVlc3QyLCBfdGhpcyRwcm9wczI7XG5cbiAgICAgICAgKF90aGlzJHByb3BzJG9uUmVxdWVzdDIgPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uUmVxdWVzdE1vdmVSb3cpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uUmVxdWVzdDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uUmVxdWVzdDIuY2FsbChfdGhpcyRwcm9wczIsIHtcbiAgICAgICAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICAgICAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICAgICAgIGRhdGFJZDogZGF0YUlkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vdW50XCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgX3RoaXMuZWwgPSBlbDtcbiAgICAgIE9iamVjdCh1cGRhdGVSZWFjdFJlZltcImFcIiAvKiB1cGRhdGVSZWFjdFJlZiAqL10pKF90aGlzLnByb3BzLmVsZW1lbnRSZWYsIGVsKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVEcmFnUG9zaXRpb25cIiwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJ0aHJvdHRsZVwiXSkoX3RoaXMudXBkYXRlRHJhZ1Bvc2l0aW9uSW1wbCwgMTAwLCB7XG4gICAgICB0cmFpbGluZzogZmFsc2VcbiAgICB9KSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyYWdEYXRhSWQ6IHVuZGVmaW5lZCxcbiAgICAgIGV4cGFuZGVkOiBbXVxuICAgIH07XG4gICAgX3RoaXMucm93SGVpZ2h0ID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQm9keSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFudXBEcmFnKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZVJvd0V4cGFuc2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVSb3dFeHBhbnNpb24oa2V5KSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMuc3RhdGUuZXhwYW5kZWQ7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLnJvd0V4cGFuc2lvbiA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgaWYgKE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaW5jbHVkZXNcIl0pKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGV4cGFuZGVkOiBbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXhwYW5kZWQ6IFtrZXldXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5yb3dFeHBhbnNpb24gPT09ICdtdWx0aScpIHtcbiAgICAgICAgaWYgKE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaW5jbHVkZXNcIl0pKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGV4cGFuZGVkOiBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIndpdGhvdXRcIl0pKGN1cnJlbnQsIGtleSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGV4cGFuZGVkOiBjdXJyZW50LmNvbmNhdChrZXkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2FsY3VsYXRlR3VpZGVJbmRleFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVHdWlkZUluZGV4KCkge1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgZHJhZ0luZGV4ID0gX3RoaXMkc3RhdGUyLmRyYWdJbmRleCxcbiAgICAgICAgICBkcmFnUG9zaXRpb24gPSBfdGhpcyRzdGF0ZTIuZHJhZ1Bvc2l0aW9uO1xuXG4gICAgICBpZiAoZHJhZ1Bvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgIXRoaXMuZWwpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZWwuY2hpbGRyZW4pO1xuICAgICAgdmFyIG92ZXJJbmRleCA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiZmluZEluZGV4XCJdKSh0aGlzLnJvd3MsIGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgdmFyIHJlY3QgPSByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiBkcmFnUG9zaXRpb24gPiByZWN0LnRvcCAmJiBkcmFnUG9zaXRpb24gPCByZWN0LmJvdHRvbTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3ZlckluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBtdXN0IGJlIHRvbyBmYXIgbGVmdCBvciByaWdodDtcbiAgICAgICAgdmFyIHJlY3QgPSB0aGlzLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uIDwgcmVjdC50b3AgPyAwIDogdGhpcy5yb3dzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyYWdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG92ZXJJbmRleCA+IGRyYWdJbmRleCkge1xuICAgICAgICByZXR1cm4gb3ZlckluZGV4ICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG92ZXJJbmRleDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlRHJhZ1Bvc2l0aW9uSW1wbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEcmFnUG9zaXRpb25JbXBsKGRyYWdQb3NpdGlvbikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyYWdQb3NpdGlvbjogZHJhZ1Bvc2l0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlU2Nyb2xsUG9zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU2Nyb2xsUG9zaXRpb24oeSkge1xuICAgICAgdmFyIF90aGlzJGVsMywgX3RoaXMkZWwzJHBhcmVudEVsZW1lO1xuXG4gICAgICB2YXIgcmVjdCA9IHRoaXMucmVjdDtcblxuICAgICAgaWYgKCgoX3RoaXMkZWwzID0gdGhpcy5lbCkgPT09IG51bGwgfHwgX3RoaXMkZWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkZWwzJHBhcmVudEVsZW1lID0gX3RoaXMkZWwzLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF90aGlzJGVsMyRwYXJlbnRFbGVtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZWwzJHBhcmVudEVsZW1lLnBhcmVudEVsZW1lbnQpICYmIHJlY3QgJiYgdGhpcy5yb3dIZWlnaHQgIT09IHVuZGVmaW5lZCAmJiB5IDwgcmVjdC50b3AgKyB0aGlzLnJvd0hlaWdodCAqIDIgKyA1KSB7XG4gICAgICAgIHRoaXMuZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnNjcm9sbFRvcCAtPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhbnVwRHJhZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbnVwRHJhZygpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmhhbmRsZURyYWdFbnRlcik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmhhbmRsZURyYWdPdmVyKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5oYW5kbGVEcm9wKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgdGhpcy5oYW5kbGVEcmFnRW5kKTtcbiAgICAgIHRoaXMudXBkYXRlRHJhZ1Bvc2l0aW9uLmNhbmNlbCgpO1xuICAgICAgdGhpcy5yb3dzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5yZWN0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJGRyYWdEYXRhSSxcbiAgICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3Rpb25zID0gX3RoaXMkcHJvcHMzLmFjdGlvbnMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgbW92YWJsZUNvbHVtbnMgPSBfdGhpcyRwcm9wczMubW92YWJsZUNvbHVtbnMsXG4gICAgICAgICAgb25SZXF1ZXN0TW92ZVJvdyA9IF90aGlzJHByb3BzMy5vblJlcXVlc3RNb3ZlUm93LFxuICAgICAgICAgIHJvd0V4cGFuc2lvbiA9IF90aGlzJHByb3BzMy5yb3dFeHBhbnNpb24sXG4gICAgICAgICAgc3RyaXBlUm93cyA9IF90aGlzJHByb3BzMy5zdHJpcGVSb3dzLFxuICAgICAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBbXCJhY3Rpb25zXCIsIFwiY2hpbGRyZW5cIiwgXCJtb3ZhYmxlQ29sdW1uc1wiLCBcIm9uUmVxdWVzdE1vdmVSb3dcIiwgXCJyb3dFeHBhbnNpb25cIiwgXCJzdHJpcGVSb3dzXCJdKTtcblxuICAgICAgdmFyIHJvd3MgPSBbXTtcbiAgICAgIHZhciBndWlkZWxpbmVSb3dJbmRleCA9IHRoaXMuY2FsY3VsYXRlR3VpZGVJbmRleCgpO1xuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnRJZCA9IChfdGhpcyRzdGF0ZSRkcmFnRGF0YUkgPSB0aGlzLnN0YXRlLmRyYWdEYXRhSWQpID09PSBudWxsIHx8IF90aGlzJHN0YXRlJGRyYWdEYXRhSSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkc3RhdGUkZHJhZ0RhdGFJLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgZmlsdGVyZWRDaGlsZHJlbiA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSk7XG4gICAgICBmaWx0ZXJlZENoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIHZhciBzaG93Um93R3VpZGVsaW5lID0gJ25vbmUnO1xuXG4gICAgICAgIGlmIChndWlkZWxpbmVSb3dJbmRleCA9PT0gZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGggJiYgaSArIDEgPT09IGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgc2hvd1Jvd0d1aWRlbGluZSA9ICdhZnRlcic7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3VpZGVsaW5lUm93SW5kZXggPT09IGkpIHtcbiAgICAgICAgICBzaG93Um93R3VpZGVsaW5lID0gJ2JlZm9yZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuICAgICAgICAgIHZhciBvZGRPckV2ZW4gPSBpICUgMiA/ICdldmVuJyA6ICdvZGQnO1xuICAgICAgICAgIHZhciBzdHJpcGUgPSBzdHJpcGVSb3dzID8gb2RkT3JFdmVuIDogJ25vbmUnO1xuICAgICAgICAgIHZhciBleHBhbmRlZCA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaW5jbHVkZXNcIl0pKF90aGlzMi5zdGF0ZS5leHBhbmRlZCwga2V5KTtcbiAgICAgICAgICByb3dzLnB1c2goIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShjaGlsZCwge1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICBzaG93Um93R3VpZGVsaW5lOiBzaG93Um93R3VpZGVsaW5lLFxuICAgICAgICAgICAgc3RyaXBlOiBzdHJpcGUsXG4gICAgICAgICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogcm93RXhwYW5zaW9uICE9PSAnbm9uZScsXG4gICAgICAgICAgICBkcmFnZ2FibGU6ICEhb25SZXF1ZXN0TW92ZVJvdyxcbiAgICAgICAgICAgIG1vdmFibGVDb2x1bW5zOiBtb3ZhYmxlQ29sdW1ucyxcbiAgICAgICAgICAgIG9uRXhwYW5zaW9uOiBmdW5jdGlvbiBvbkV4cGFuc2lvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVSb3dFeHBhbnNpb24oa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlcXVlc3RNb3ZlUm93OiBvblJlcXVlc3RNb3ZlUm93ID8gX3RoaXMyLm9uUmVxdWVzdE1vdmVSb3cgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvbkRyYWdTdGFydDogb25SZXF1ZXN0TW92ZVJvdyA/IF90aGlzMi5oYW5kbGVEcmFnU3RhcnQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBrZXk6IGNoaWxkLmtleSB8fCBjaGlsZC5wcm9wcy5kYXRhSWQgfHwgaSxcbiAgICAgICAgICAgIGRhdGFJZDogY2hpbGQua2V5IHx8IGNoaWxkLnByb3BzLmRhdGFJZCB8fCBpLFxuICAgICAgICAgICAgYWN0aXZlRWxlbWVudElkOiBhY3RpdmVFbGVtZW50SWRcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBpZiAoZXhwYW5kZWQgJiYgY2hpbGQucHJvcHMuZXhwYW5zaW9uUm93KSB7XG4gICAgICAgICAgICBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS5mb3JFYWNoKGNoaWxkLnByb3BzLmV4cGFuc2lvblJvdywgZnVuY3Rpb24gKGV4cGFuc2lvblJvdywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJvd3MucHVzaCggLyojX19QVVJFX18qL09iamVjdChleHRlcm5hbF9yZWFjdF9bXCJjbG9uZUVsZW1lbnRcIl0pKGV4cGFuc2lvblJvdywge1xuICAgICAgICAgICAgICAgIGtleTogXCJcIi5jb25jYXQoa2V5LCBcIi1leHBhbnNpb24tXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICAgICAgc3RyaXBlOiBzdHJpcGUsXG4gICAgICAgICAgICAgICAgbW92YWJsZUNvbHVtbnM6IG1vdmFibGVDb2x1bW5zLFxuICAgICAgICAgICAgICAgIG9uUmVxdWVzdE1vdmVSb3c6IG9uUmVxdWVzdE1vdmVSb3csXG4gICAgICAgICAgICAgICAgJ2RhdGEtZXhwYW5zaW9uLXJvdyc6ICd0cnVlJ1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkLCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiYm9keVwiXG4gICAgICB9LCBvdGhlclByb3BzLCB7XG4gICAgICAgIHJlZjogdGhpcy5oYW5kbGVNb3VudFxuICAgICAgfSksIHJvd3MpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBCb2R5O1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoQm9keV9Cb2R5LCBcInNwbHVua1VpVHlwZVwiLCAnVGFibGUuQm9keScpO1xuXG5fZGVmaW5lUHJvcGVydHkoQm9keV9Cb2R5LCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoQm9keV9Cb2R5LCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUYWJsZV9Cb2R5ID0gKEJvZHlfQm9keSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJsZS9UYWJsZVN0eWxlcy50c1xuXG5cbnZhciBUYWJsZVN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUYWJsZVN0eWxlc19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFjbWZzczctMFwiXG59KShbXCJcIiwgXCI7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmU7QG1lZGlhIHByaW50e21heC1oZWlnaHQ6bm9uZSAhaW1wb3J0YW50O31cIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJykpO1xudmFyIFN0eWxlZFRhYmxlQ29udGFpbmVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGFibGVTdHlsZXNfX1N0eWxlZFRhYmxlQ29udGFpbmVyXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFjbWZzczctMVwiXG59KShbXCJvdmVyZmxvdzphdXRvO1wiXSk7XG52YXIgU3R5bGVkVGFibGUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEudGFibGUud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlRhYmxlU3R5bGVzX19TdHlsZWRUYWJsZVwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xY21mc3M3LTJcIlxufSkoW1wiXCIsIFwiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowO21pbi13aWR0aDoxMDAlOyZbZGF0YS1maXhlZC1jb2x1bW49J3RydWUnXXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjA7d2lkdGg6MDt9QG1lZGlhIHByaW50e3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7dGFibGUtbGF5b3V0OmF1dG87fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgndGFibGUnKSk7XG52YXIgU3R5bGVkRG9ja2VkU2Nyb2xsYmFyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGFibGVTdHlsZXNfX1N0eWxlZERvY2tlZFNjcm9sbGJhclwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xY21mc3M3LTNcIlxufSkoW1wicG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OmNhbGMoXCIsIFwiICsgMSk7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnppbmRleEZpeGVkTmF2YmFyKTtcbnZhciBTdHlsZWREb2NrZWRTY3JvbGxiYXJDb250ZW50ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGFibGVTdHlsZXNfX1N0eWxlZERvY2tlZFNjcm9sbGJhckNvbnRlbnRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWNtZnNzNy00XCJcbn0pKFtcImhlaWdodDoxcHg7XCJdKTtcbnZhciBTdHlsZWRUYWJsZUNhcHRpb24gPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuY2FwdGlvbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGFibGVTdHlsZXNfX1N0eWxlZFRhYmxlQ2FwdGlvblwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xY21mc3M3LTVcIlxufSkoW1wicGFkZGluZzpcIiwgXCI7Zm9udC1zaXplOlwiLCBcIjtjYXB0aW9uLXNpZGU6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IFwiXCIuY29uY2F0KHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1F1YXJ0ZXIsIFwiIDBcIiksXG4gIHByaXNtYTogXCI1cHggMFwiXG59KSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZUxhcmdlLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgc2lkZSA9IF9yZWYuc2lkZTtcbiAgcmV0dXJuIHNpZGU7XG59KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvQ2FwdGlvbi50c3hcbmZ1bmN0aW9uIENhcHRpb25fZXh0ZW5kcygpIHsgQ2FwdGlvbl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIENhcHRpb25fZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIENhcHRpb25fb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IENhcHRpb25fb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIENhcHRpb25fb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cbnZhciBDYXB0aW9uX3Byb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUuaXNSZXF1aXJlZCxcbiAgc2lkZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWyd0b3AnLCAnYm90dG9tJ10pXG59O1xuXG4vKipcbiAqIFRhYmxlcyB0aGF0IHVzZSBhIGRvY2tlZCBoZWFkZXIgbXVzdCBwbGFjZSB0aGUgY2FwdGlvbiBvbiB0aGUgYm90dG9tIHNpZGUuXG4gKiBUYWJsZXMgdGhhdCB1c2UgYSBmaXhlZCBoZWFkZXIgY2Fubm90IHVzZSBjYXB0aW9ucy5cbiAqL1xuZnVuY3Rpb24gQ2FwdGlvbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJHNpZGUgPSBfcmVmLnNpZGUsXG4gICAgICBzaWRlID0gX3JlZiRzaWRlID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkc2lkZSxcbiAgICAgIG90aGVyUHJvcHMgPSBDYXB0aW9uX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNoaWxkcmVuXCIsIFwic2lkZVwiXSk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBDYXB0aW9uUHJvcHNCYXNlXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVGFibGVDYXB0aW9uLCBDYXB0aW9uX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10ZXN0XCI6IFwiY2FwdGlvblwiLFxuICAgIHNpZGU6IHNpZGVcbiAgfSwgb3RoZXJQcm9wcyksIGNoaWxkcmVuKTtcbn1cblxuQ2FwdGlvbi5wcm9wVHlwZXMgPSBDYXB0aW9uX3Byb3BUeXBlcztcbkNhcHRpb24uc3BsdW5rVWlUeXBlID0gJ1RhYmxlLkNhcHRpb24nO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgVGFibGVfQ2FwdGlvbiA9IChDYXB0aW9uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0NlbGxTdHlsZXMudHNcblxuXG52YXIgQ2VsbFN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEudGQud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNlbGxTdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xOTU1eGsyLTBcIlxufSkoW1wiXCIsIFwiIHBhZGRpbmc6XCIsIFwiO2JvcmRlci1sZWZ0OjAgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjAgc29saWQgdHJhbnNwYXJlbnQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7bGluZS1oZWlnaHQ6XCIsIFwiO3ZlcnRpY2FsLWFsaWduOnRvcDtcIiwgXCIgXCIsIFwiIFwiLCBcIiBcIiwgXCIgXCIsIFwiIFwiLCBcIiBbZGF0YS1leHBhbnNpb24tcm93PSd0cnVlJ10gPiAmOmZpcnN0LWNoaWxke3BhZGRpbmctdG9wOjhweDt9W2RhdGEtZXhwYW5zaW9uLXJvdz0ndHJ1ZSddID4gJjpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjE0cHg7fVtkYXRhLWhhcy1tb3ZhYmxlLWNvbHVtbnM9J3RydWUnXSA+ICY6bm90KFtkYXRhLW1vdmFibGUtY29sdW1uPSdmYWxzZSddKXtcIiwgXCJ9XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCd0YWJsZS1jZWxsJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnNnB4IDEycHgnLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzE0cHggOHB4JyxcbiAgICBjb21wYWN0OiAnNnB4IDhweCdcbiAgfVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGluZUhlaWdodCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRhbGlnbicsIHtcbiAgY2VudGVyOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ0ZXh0LWFsaWduOmNlbnRlcjtcIl0pLFxuICBsZWZ0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ0ZXh0LWFsaWduOmxlZnQ7XCJdKSxcbiAgcmlnaHQ6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInRleHQtYWxpZ246cmlnaHQ7XCJdKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckdmFyaWFudCcsIHtcbiAgZXhwYW5kOiB7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzo2cHggMCAwIDA7XCJdKSxcbiAgICBwcmlzbWE6IHtcbiAgICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOjEycHggMCAwIDA7XCJdKSxcbiAgICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6NHB4IDAgMCAwO1wiXSlcbiAgICB9XG4gIH0sXG4gIGFjdGlvbnM6IHtcbiAgICBwcmlzbWE6IHtcbiAgICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOjRweCA4cHg7XCJdKSxcbiAgICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6MCA4cHggMCAwO1wiXSlcbiAgICB9XG4gIH0sXG4gIHRvZ2dsZToge1xuICAgIHByaXNtYToge1xuICAgICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6MTBweCAwIDAgMDtcIl0pLFxuICAgICAgY29tcGFjdDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzo2cHggMCAwIDA7XCJdKVxuICAgIH1cbiAgfVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckYXBwZWFyYW5jZScsIHtcbiAgcm93TGluazoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjsqOmhvdmVyID4gJntjdXJzb3I6cG9pbnRlcjt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmtDb2xvciksXG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7Kjpob3ZlciA+ICZ7Y3Vyc29yOnBvaW50ZXI7fVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0KVxuICB9LFxuICBsaW5rOiB7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiOyY6aG92ZXJ7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6e2Rhcms6dmFyaWFibGVzLmFjY2VudENvbG9yTDIwLGxpZ2h0OnZhcmlhYmxlcy5saW5rQ29sb3IsfTtib3gtc2hhZG93OlwiLCBcIjt9Jjpmb2N1c3tjb2xvcjp7ZGFyazp2YXJpYWJsZXMuYWNjZW50Q29sb3JMMjAsbGlnaHQ6dmFyaWFibGVzLmZvY3VzQ29sb3IsfTtib3gtc2hhZG93OlwiLCBcIjt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmtDb2xvciwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvd0luc2V0LCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93SW5zZXQpXG4gIH1cbn0pLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJGNsaWNrYWJsZSA9IF9yZWYuJGNsaWNrYWJsZTtcbiAgcmV0dXJuICRjbGlja2FibGUgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY3Vyc29yOnBvaW50ZXI7Jjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtjb2xvcjpcIiwgXCI7fSY6Zm9jdXN7Ym94LXNoYWRvdzpcIiwgXCI7Y29sb3I6XCIsIFwiO30mOmFjdGl2ZXtiYWNrZ3JvdW5kOlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvckw1MCxcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JENTBcbiAgICB9LFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyXG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGVmYXVsdFxuICB9KSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvd0luc2V0LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGVmYXVsdFxuICB9KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5QWN0aXZlXG4gIH0pKTtcbn0sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGV4cGFuZGVkID0gX3JlZjIuJGV4cGFuZGVkO1xuICByZXR1cm4gJGV4cGFuZGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5U2VsZWN0ZWRcbiAgfSkpO1xufSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciAkZGlzYWJsZWQgPSBfcmVmMy4kZGlzYWJsZWQ7XG4gIHJldHVybiAkZGlzYWJsZWQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRpc2FibGVkXG4gIH0pKTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLWxlZnQ6MjlweDsmOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoyOHB4O31cIl0pXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0NlbGwudHN4XG5mdW5jdGlvbiBDZWxsX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgQ2VsbF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgQ2VsbF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gQ2VsbF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBDZWxsX2V4dGVuZHMoKSB7IENlbGxfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBDZWxsX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBDZWxsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBDZWxsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBDZWxsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBDZWxsX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gQ2VsbF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gQ2VsbF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIENlbGxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIENlbGxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gQ2VsbF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBDZWxsX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBDZWxsX3NldFByb3RvdHlwZU9mKG8sIHApIHsgQ2VsbF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gQ2VsbF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBDZWxsX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBDZWxsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IENlbGxfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IENlbGxfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIENlbGxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIENlbGxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChDZWxsX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBDZWxsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBDZWxsX2dldFByb3RvdHlwZU9mKG8pIHsgQ2VsbF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBDZWxsX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIENlbGxfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxudmFyIENlbGxfcHJvcFR5cGVzID0ge1xuICBhbGlnbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddKSxcblxuICAvKiogQHByaXZhdGUgKi9cbiAgYXBwZWFyYW5jZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydkYXRhJywgJ2xpbmsnLCAncm93TGluayddKSxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGRhdGE6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFueSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgb25DbGljazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUgKi9cbiAgb25LZXlEb3duOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGV4cGFuZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKiogQHByaXZhdGUuICovXG4gIHZhcmlhbnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsndG9nZ2xlJywgJ2V4cGFuZCcsICdkcmFnJywgJ2FjdGlvbnMnXSlcbn07XG52YXIgQ2VsbF9kZWZhdWx0UHJvcHMgPSB7XG4gIGFsaWduOiAnbGVmdCdcbn07XG5cbnZhciBDZWxsX0NlbGwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgQ2VsbF9pbmhlcml0cyhDZWxsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gQ2VsbF9jcmVhdGVTdXBlcihDZWxsKTtcblxuICBmdW5jdGlvbiBDZWxsKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIENlbGxfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2VsbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgQ2VsbF9kZWZpbmVQcm9wZXJ0eShDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZWxcIiwgbnVsbCk7XG5cbiAgICBDZWxsX2RlZmluZVByb3BlcnR5KENlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VudFwiLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIF90aGlzLmVsID0gZWw7XG4gICAgICBPYmplY3QodXBkYXRlUmVhY3RSZWZbXCJhXCIgLyogdXBkYXRlUmVhY3RSZWYgKi9dKShfdGhpcy5wcm9wcy5lbGVtZW50UmVmLCBlbCk7XG4gICAgfSk7XG5cbiAgICBDZWxsX2RlZmluZVByb3BlcnR5KENlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVDbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgZGF0YSA9IF90aGlzJHByb3BzLmRhdGEsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzLm9uQ2xpY2s7XG4gICAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2xpY2soZSwgZGF0YSk7XG4gICAgfSk7XG5cbiAgICBDZWxsX2RlZmluZVByb3BlcnR5KENlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVLZXlEb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgZGF0YSA9IF90aGlzJHByb3BzMi5kYXRhLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25DbGljayxcbiAgICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczIub25LZXlEb3duO1xuXG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpID09PSAnZW50ZXInKSB7XG4gICAgICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljayhlLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25LZXlEb3duKGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgQ2VsbF9jcmVhdGVDbGFzcyhDZWxsLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWxpZ24gPSBfdGhpcyRwcm9wczMuYWxpZ24sXG4gICAgICAgICAgYXBwZWFyYW5jZSA9IF90aGlzJHByb3BzMy5hcHBlYXJhbmNlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMzLmRpc2FibGVkLFxuICAgICAgICAgIGVsZW1lbnRSZWYgPSBfdGhpcyRwcm9wczMuZWxlbWVudFJlZixcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMzLm9uQ2xpY2ssXG4gICAgICAgICAgb25LZXlEb3duID0gX3RoaXMkcHJvcHMzLm9uS2V5RG93bixcbiAgICAgICAgICB2YXJpYW50ID0gX3RoaXMkcHJvcHMzLnZhcmlhbnQsXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IENlbGxfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBbXCJhbGlnblwiLCBcImFwcGVhcmFuY2VcIiwgXCJjaGlsZHJlblwiLCBcImRpc2FibGVkXCIsIFwiZWxlbWVudFJlZlwiLCBcIm9uQ2xpY2tcIiwgXCJvbktleURvd25cIiwgXCJ2YXJpYW50XCJdKTtcblxuICAgICAgdmFyIGNsaWNrYWJsZSA9IG9uQ2xpY2sgIT09IHVuZGVmaW5lZDtcbiAgICAgIHZhciBkZWZhdWx0QXBwZWFyYW5jZSA9IGNsaWNrYWJsZSA/ICdsaW5rJyA6ICdkYXRhJztcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQ2VsbFN0eWxlc19TdHlsZWQsIENlbGxfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiY2VsbFwiLFxuICAgICAgICAkYWxpZ246IGFsaWduLFxuICAgICAgICAkYXBwZWFyYW5jZTogYXBwZWFyYW5jZSB8fCBkZWZhdWx0QXBwZWFyYW5jZSxcbiAgICAgICAgJGNsaWNrYWJsZTogY2xpY2thYmxlID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgJGRpc2FibGVkOiAhIWRpc2FibGVkLFxuICAgICAgICAkdmFyaWFudDogdmFyaWFudCxcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDbGljayxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZUtleURvd24sXG4gICAgICAgIHJlZjogdGhpcy5oYW5kbGVNb3VudCxcbiAgICAgICAgdGFiSW5kZXg6IGNsaWNrYWJsZSA/IDAgOiB1bmRlZmluZWRcbiAgICAgIH0sIG90aGVyUHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENlbGw7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbkNlbGxfZGVmaW5lUHJvcGVydHkoQ2VsbF9DZWxsLCBcInNwbHVua1VpVHlwZVwiLCAnVGFibGUuQ2VsbCcpO1xuXG5DZWxsX2RlZmluZVByb3BlcnR5KENlbGxfQ2VsbCwgXCJwcm9wVHlwZXNcIiwgQ2VsbF9wcm9wVHlwZXMpO1xuXG5DZWxsX2RlZmluZVByb3BlcnR5KENlbGxfQ2VsbCwgXCJkZWZhdWx0UHJvcHNcIiwgQ2VsbF9kZWZhdWx0UHJvcHMpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUYWJsZV9DZWxsID0gKENlbGxfQ2VsbCk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LWljb25zL1NvcnRcIlxudmFyIFNvcnRfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NCk7XG52YXIgU29ydF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTb3J0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LWljb25zL1NvcnRlZERvd25cIlxudmFyIFNvcnRlZERvd25fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NSk7XG52YXIgU29ydGVkRG93bl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTb3J0ZWREb3duXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvVGhlbWVkSWNvbi50c3hcbnZhciBUaGVtZWRJY29uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9TVkcudHN4XG52YXIgU1ZHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvaWNvbnMvU29ydGVkRG93bi50c3hcbmZ1bmN0aW9uIFNvcnRlZERvd25fZXh0ZW5kcygpIHsgU29ydGVkRG93bl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIFNvcnRlZERvd25fZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gU29ydGVkRG93bl9leHRlbmRzKHt9LCBfcmVmKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNWR1tcImFcIiAvKiBkZWZhdWx0ICovXSwgU29ydGVkRG93bl9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjU1MDg2IDEyLjMzNjlDNi4xNjAzMyAxMS45NDY0IDUuNTI3MTcgMTEuOTQ2NCA1LjEzNjY0IDEyLjMzNjlDNC43NDYxMiAxMi43Mjc1IDQuNzQ2MTIgMTMuMzYwNiA1LjEzNjY0IDEzLjc1MTJMMTAuOTM5MSAxOS41NTM2QzExLjUyNDkgMjAuMTM5NCAxMi40NzQ2IDIwLjEzOTQgMTMuMDYwNCAxOS41NTM2TDE4Ljg2MjggMTMuNzUxMkMxOS4yNTM0IDEzLjM2MDYgMTkuMjUzNCAxMi43Mjc1IDE4Ljg2MjggMTIuMzM2OUMxOC40NzIzIDExLjk0NjQgMTcuODM5MSAxMS45NDY0IDE3LjQ0ODYgMTIuMzM2OUwxMyAxNi43ODU1TDEzIDUuMDAyMzRDMTMgNC40NTAwNiAxMi41NTIzIDQuMDAyMzQgMTIgNC4wMDIzNEMxMS40NDc3IDQuMDAyMzQgMTEgNC40NTAwNiAxMSA1LjAwMjM0VjE2Ljc4NjFMNi41NTA4NiAxMi4zMzY5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBQcmlzbWExNihfcmVmMikge1xuICB2YXIgb3RoZXJQcm9wcyA9IFNvcnRlZERvd25fZXh0ZW5kcyh7fSwgX3JlZjIpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBTb3J0ZWREb3duX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTg4MjggMTAuMTg1OEwxMi41NzEzIDYuNjAyODlMMTMuOTg1NSA4LjAxNzExTDcuOTg4MzQgMTQuMDE0MkwxLjk5MzE2IDguMDE5MDRMMy40MDczNyA2LjYwNDgyTDYuOTg4MjggMTAuMTg1N0w2Ljk4ODI4IDIuMDIwMDJIOC45ODgyOEw4Ljk4ODI4IDEwLjE4NThaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFNvcnRlZERvd24ocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUaGVtZWRJY29uW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBTb3J0ZWREb3duX2V4dGVuZHMoe1xuICAgIEVudGVycHJpc2U6IFNvcnRlZERvd25fZGVmYXVsdC5hLFxuICAgIFByaXNtYTE2OiBQcmlzbWExNixcbiAgICBQcmlzbWEyNDogUHJpc21hMjRcbiAgfSwgcHJvcHMpKTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LWljb25zL1NvcnRlZFVwXCJcbnZhciBTb3J0ZWRVcF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2KTtcbnZhciBTb3J0ZWRVcF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTb3J0ZWRVcF8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9pY29ucy9Tb3J0ZWRVcC50c3hcbmZ1bmN0aW9uIFNvcnRlZFVwX2V4dGVuZHMoKSB7IFNvcnRlZFVwX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gU29ydGVkVXBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBTb3J0ZWRVcF9QcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gU29ydGVkVXBfZXh0ZW5kcyh7fSwgX3JlZik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTVkdbXCJhXCIgLyogZGVmYXVsdCAqL10sIFNvcnRlZFVwX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTUxMzUgMTEuNjYzMUM2LjE2MDgyIDEyLjA1MzYgNS41Mjc2NiAxMi4wNTM2IDUuMTM3MTMgMTEuNjYzMUM0Ljc0NjYxIDExLjI3MjUgNC43NDY2MSAxMC42Mzk0IDUuMTM3MTMgMTAuMjQ4OEwxMC45Mzk2IDQuNDQ2NDJDMTEuNTI1MyAzLjg2MDY0IDEyLjQ3NTEgMy44NjA2MyAxMy4wNjA5IDQuNDQ2NDJMMTguODYzMyAxMC4yNDg4QzE5LjI1MzggMTAuNjM5NCAxOS4yNTM4IDExLjI3MjUgMTguODYzMyAxMS42NjMxQzE4LjQ3MjggMTIuMDUzNiAxNy44Mzk2IDEyLjA1MzYgMTcuNDQ5MSAxMS42NjMxTDEzIDcuMjEzOTdMMTMgMTkuMDAwOUMxMyAxOS41NTMyIDEyLjU1MjMgMjAuMDAwOSAxMiAyMC4wMDA5QzExLjQ0NzcgMjAuMDAwOSAxMSAxOS41NTMyIDExIDE5LjAwMDlWNy4yMTQ0MUw2LjU1MTM1IDExLjY2MzFaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFNvcnRlZFVwX1ByaXNtYTE2KF9yZWYyKSB7XG4gIHZhciBvdGhlclByb3BzID0gU29ydGVkVXBfZXh0ZW5kcyh7fSwgX3JlZjIpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBTb3J0ZWRVcF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjQwNzM3IDkuMzk1MThMMS45OTMxNiA3Ljk4MDk2TDcuOTg4MzQgMS45ODU4NEwxMy45ODU1IDcuOTgyODlMMTIuNTcxMyA5LjM5NzExTDguOTg4MjggNS44MTQxOEw4Ljk4ODI4IDEzLjk4SDYuOTg4MjhMNi45ODgyOCA1LjgxNDMxTDMuNDA3MzcgOS4zOTUxOFpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gU29ydGVkVXAocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUaGVtZWRJY29uW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBTb3J0ZWRVcF9leHRlbmRzKHtcbiAgICBFbnRlcnByaXNlOiBTb3J0ZWRVcF9kZWZhdWx0LmEsXG4gICAgUHJpc21hMTY6IFNvcnRlZFVwX1ByaXNtYTE2LFxuICAgIFByaXNtYTI0OiBTb3J0ZWRVcF9QcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9DYXJldERvd24udHN4XG52YXIgQ2FyZXREb3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1NjcmVlblJlYWRlckNvbnRlbnRcIlxudmFyIFNjcmVlblJlYWRlckNvbnRlbnRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG52YXIgU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTY3JlZW5SZWFkZXJDb250ZW50Xyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0hlYWRJbm5lclN0eWxlcy50c1xuXG5cbnZhciB0YWJsZUhvcml6b250YWxTcGFjaW5nID0gJzEycHgnO1xudmFyIFN0eWxlZERyYWdDb250YWluZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkSW5uZXJTdHlsZXNfX1N0eWxlZERyYWdDb250YWluZXJcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXNhMHduZy0wXCJcbn0pKFtcInBvc2l0aW9uOmFic29sdXRlO2N1cnNvcjptb3ZlO3RvcDowO1wiLCBcIiBwYWRkaW5nOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJsZWZ0OjA7XCJdKSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJyaWdodDowO1wiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzlweCAxMnB4JyxcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6ICcxN3B4IDRweCAxNHB4JyxcbiAgICBjb21wYWN0OiAnOXB4IDRweCA2cHgnXG4gIH1cbn0pKTtcbnZhciBTdHlsZWRNZW51SWNvbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkSW5uZXJTdHlsZXNfX1N0eWxlZE1lbnVJY29uXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFzYTB3bmctMVwiXG59KShbXCJcIiwgXCIgY29sb3I6XCIsIFwiO3Bvc2l0aW9uOnJlbGF0aXZlO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTppbmxpbmUtZmxleDtcIl0pLFxuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLWxlZnQ6NHB4O1wiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0R3JheSxcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRlZmF1bHRcbn0pKTtcbnZhciBTdHlsZWRMYWJlbCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkSW5uZXJTdHlsZXNfX1N0eWxlZExhYmVsXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFzYTB3bmctMlwiXG59KShbXCJmbGV4OjAgMSBhdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO3dvcmQtd3JhcDpicmVhay13b3JkO3dvcmQtYnJlYWs6YnJlYWstd29yZDtvcmRlcjpcIiwgXCI7XCIsIFwiIFwiLCBcIiBcIiwgXCIgXCIsIFwiIFwiLCBcIiArICZ7bWFyZ2luLWxlZnQ6XCIsIFwiO31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAxLFxuICBwcmlzbWE6IDJcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogZnVuY3Rpb24gZW50ZXJwcmlzZShfcmVmKSB7XG4gICAgdmFyICRhbGlnbiA9IF9yZWYuJGFsaWduO1xuICAgIHJldHVybiAkYWxpZ24gIT09ICdyaWdodCcgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO1wiXSk7XG4gIH0sXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTpmbGV4O1wiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHRydW5jYXRlJywge1xuICBcInRydWVcIjogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wib3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO1wiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGZpbGwnLCB7XG4gIFwidHJ1ZVwiOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJmbGV4OjEgMCAwcHg7XCJdKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckYWxpZ24nLCB7XG4gIHJpZ2h0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImID4gJnt0ZXh0LWFsaWduOnJpZ2h0O31cIl0pLFxuICBsZWZ0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImID4gJnt0ZXh0LWFsaWduOmxlZnQ7fVwiXSksXG4gIGNlbnRlcjogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJiA+ICZ7dGV4dC1hbGlnbjpjZW50ZXI7fVwiXSlcbn0pLFxuLyogc2Mtc2VsICovXG5TdHlsZWREcmFnQ29udGFpbmVyLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGFibGVIb3Jpem9udGFsU3BhY2luZ1xufSkpO1xudmFyIEhlYWRJbm5lclN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkSW5uZXJTdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xc2Ewd25nLTNcIlxufSkoW1wiXCIsIFwiIFwiLCBcIjtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6XCIsIFwiO1wiLCBcIjtsaW5lLWhlaWdodDpcIiwgXCI7anVzdGlmeS1jb250ZW50OlwiLCBcIjtwYWRkaW5nOlwiLCBcIjtcIiwgXCIgXCIsIFwiIFwiLCBcIiAmW2RhdGEtaGVscGVyXXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAwMHB4O3RvcDotMTAwMDBweDtib3gtc2hhZG93OlwiLCBcIjtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7XCIsIFwiO31AbWVkaWEgcHJpbnR7YmFja2dyb3VuZC1pbWFnZTpub25lO31cIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2ZsZXgnKSwgdGhlbWVzX1tcIm1peGluc1wiXS5jbGVhcmZpeCgpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJ2luaGVyaXQnLFxuICBwcmlzbWE6ICcxMnB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImZvbnQtd2VpZ2h0OmJvbGQ7XCJdKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmVIZWlnaHQsXG4gIHByaXNtYTogJzE2cHgnXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRhbGlnbicsIHtcbiAgY2VudGVyOiAnY2VudGVyJyxcbiAgbGVmdDogJ2ZsZXgtc3RhcnQnLFxuICByaWdodDogJ2ZsZXgtZW5kJ1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnNnB4IDEycHgnLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzE2cHggMTBweCcsXG4gICAgY29tcGFjdDogJzhweCdcbiAgfVxufSksIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGhhc0FjdGlvbnNIZWFkID0gX3JlZjIuJGhhc0FjdGlvbnNIZWFkO1xuICByZXR1cm4gJGhhc0FjdGlvbnNIZWFkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6MDtcIl0pO1xufSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciAkZHJhZ2dpbmcgPSBfcmVmMy4kZHJhZ2dpbmc7XG4gIHJldHVybiAkZHJhZ2dpbmcgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wib3BhY2l0eTowO1wiXSk7XG59LCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyICRkcmFnZ2FibGUgPSBfcmVmNC4kZHJhZ2dhYmxlO1xuICByZXR1cm4gJGRyYWdnYWJsZSAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLWxlZnQ6XCIsIFwiOy13ZWJraXQtdXNlci1kcmFnOmVsZW1lbnQ7dXNlci1zZWxlY3Q6bm9uZTtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6ICcxNnB4J1xuICB9KSk7XG59LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yTDUwLFxuICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JENTBcbiAgfSxcbiAgcHJpc21hOiB0aGVtZXNfW1wibWl4aW5zXCJdLm92ZXJsYXlDb2xvcnModGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheVNlbGVjdGVkKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLm92ZXJsYXlTaGFkb3csXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5kcmFnU2hhZG93XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlcjoxcHggc29saWQgXCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJDb2xvcilcbn0pKTtcbnZhciBTdHlsZWRTb3J0SWNvbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkSW5uZXJTdHlsZXNfX1N0eWxlZFNvcnRJY29uXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFzYTB3bmctNFwiXG59KShbXCJmbGV4OjAgMCBhdXRvO29yZGVyOlwiLCBcIjtcIiwgXCI7bWFyZ2luLXRvcDotMXB4O1wiLCBcIiBjb2xvcjpcIiwgXCI7XCIsIFwiIFwiLCBcIlwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IDIsXG4gIHByaXNtYTogMVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJyaWdodDowO1wiXSksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wibGVmdDowO1wiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJtYXJnaW4tcmlnaHQ6NHB4O1wiXSksXG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm1hcmdpbi1sZWZ0OjEwcHg7XCJdKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udGV4dEdyYXksXG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5ODBcbiAgfVxufSksIGZ1bmN0aW9uIChfcmVmNSkge1xuICB2YXIgJHNvcnRlZCA9IF9yZWY1LiRzb3J0ZWQ7XG4gIHJldHVybiAkc29ydGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3IsXG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRlZmF1bHRcbiAgfSkpO1xufSwgZnVuY3Rpb24gKF9yZWY2KSB7XG4gIHZhciAkc29ydGVkID0gX3JlZjYuJHNvcnRlZDtcbiAgcmV0dXJuICEkc29ydGVkICYmIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTpub25lO1wiXSlcbiAgfSk7XG59KTtcbnZhciBTdHlsZWRSZXNpemUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuYnV0dG9uLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkSW5uZXJTdHlsZXNfX1N0eWxlZFJlc2l6ZVwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xc2Ewd25nLTVcIlxufSkoW1wiXCIsIFwiO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHg7d2lkdGg6OXB4O3RvcDowO2JvdHRvbTowO3otaW5kZXg6MTtjdXJzb3I6Y29sLXJlc2l6ZTt0aDpsYXN0LWNoaWxkID4gXCIsIFwiID4gJntyaWdodDowO3dpZHRoOjVweDt9Jjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjA7fSY6Zm9jdXN7b3V0bGluZTpub25lOyY6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6XCIsIFwiO2JveC1zaGFkb3c6XCIsIFwiO2xlZnQ6NHB4O3dpZHRoOjFweDt0b3A6MDtib3R0b206MDt9fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnYmxvY2snKSxcbi8qIHNjLXNlbCAqL1xuSGVhZElubmVyU3R5bGVzX1N0eWxlZCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c0NvbG9yLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvSGVhZENlbGxTdHlsZXMudHNcblxuXG5cbnZhciBIZWFkQ2VsbFN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEudGgud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkhlYWRDZWxsU3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWhqODFzYS0wXCJcbn0pKFtcIlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjpcIiwgXCI7JiArICZ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIFwiLCBcIjt9XCIsIFwiIFwiLCBcIiBcIiwgXCJcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ3RhYmxlLWNlbGwnKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTIsXG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ibGFja1xuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmRcbn0pLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJHZhcmlhbnQgPSBfcmVmLiR2YXJpYW50O1xuICByZXR1cm4gJHZhcmlhbnQgPyAnbWlkZGxlJyA6ICd0b3AnO1xufSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yUGFnZVxufSksIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGNsaWNrYWJsZSA9IF9yZWYyLiRjbGlja2FibGU7XG4gIHJldHVybiAkY2xpY2thYmxlICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6Zm9jdXN7Ym94LXNoYWRvdzpcIiwgXCI7b3V0bGluZTpub25lOyYgPiBcIiwgXCJ7Y29sb3I6XCIsIFwiO2JhY2tncm91bmQtY29sb3I6XCIsIFwiO319Jjpob3ZlcntvdXRsaW5lOm5vbmU7JiA+IFwiLCBcIntjb2xvcjpcIiwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7fX0mOmFjdGl2ZXsmID4gXCIsIFwie2JhY2tncm91bmQtY29sb3I6XCIsIFwiO319XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93SW5zZXQsXG4gIC8qIHNjLXNlbCAqL1xuICBIZWFkSW5uZXJTdHlsZXNfU3R5bGVkLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvckQxMCxcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGlua0NvbG9ySG92ZXJcbiAgICB9XG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlTZWxlY3RlZFxuICB9KSxcbiAgLyogc2Mtc2VsICovXG4gIEhlYWRJbm5lclN0eWxlc19TdHlsZWQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yRDEwLFxuICAgICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5saW5rQ29sb3JIb3ZlclxuICAgIH1cbiAgfSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyXG4gIH0pLFxuICAvKiBzYy1zZWwgKi9cbiAgSGVhZElubmVyU3R5bGVzX1N0eWxlZCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5QWN0aXZlXG4gIH0pKTtcbn0sIGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgJGRyYWdnaW5nID0gX3JlZjMuJGRyYWdnaW5nO1xuICByZXR1cm4gJGRyYWdnaW5nICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiOyY6Zm9jdXN7Ym94LXNoYWRvdzpub25lO31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk4MCxcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTIwXG4gICAgfSxcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJtaXhpbnNcIl0ub3ZlcmxheUNvbG9ycyh0aGVtZXNfW1widmFyaWFibGVzXCJdLmJhY2tncm91bmRDb2xvclBhZ2UsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlEcmFnKVxuICB9KSk7XG59LCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHZhcmlhbnQnLCB7XG4gIGFjdGlvbnM6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiYgPiBcIiwgXCJ7cGFkZGluZy1yaWdodDo4cHg7fVwiXSxcbiAgLyogc2Mtc2VsICovXG4gIEhlYWRJbm5lclN0eWxlc19TdHlsZWQpLFxuICBpbmZvOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImID4gXCIsIFwie1wiLCBcIjt9XCJdLFxuICAvKiBzYy1zZWwgKi9cbiAgSGVhZElubmVyU3R5bGVzX1N0eWxlZCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZy10b3A6N3B4O1wiXSksXG4gICAgcHJpc21hOiB7XG4gICAgICBjb21mb3J0YWJsZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZy10b3A6MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O1wiXSksXG4gICAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4O1wiXSlcbiAgICB9XG4gIH0pKSxcbiAgdG9nZ2xlQWxsOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImID4gXCIsIFwie3BhZGRpbmctdG9wOlwiLCBcIjt9XCJdLFxuICAvKiBzYy1zZWwgKi9cbiAgSGVhZElubmVyU3R5bGVzX1N0eWxlZCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiB7XG4gICAgICBjb21mb3J0YWJsZTogJzE0cHgnLFxuICAgICAgY29tcGFjdDogJzdweCdcbiAgICB9XG4gIH0pKVxufSkpO1xudmFyIFN0eWxlZEd1aWRlTGluZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkhlYWRDZWxsU3R5bGVzX19TdHlsZWRHdWlkZUxpbmVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWhqODFzYS0xXCJcbn0pKFtcIlwiLCBcIiB3aWR0aDoxcHg7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7aGVpZ2h0OjEwMCU7dG9wOjA7ei1pbmRleDoxO1wiLCBcIlwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnYmxvY2snKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGlua0NvbG9yLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvclByaW1hcnlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHBvc2l0aW9uJywge1xuICBiZWZvcmU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImZsb2F0OmxlZnQ7XCIsIFwiOm5vdCg6Zmlyc3QtY2hpbGQpID4gJnttYXJnaW4tbGVmdDotMXB4O31cIl0sXG4gIC8qIHNjLXNlbCAqL1xuICBIZWFkQ2VsbFN0eWxlc19TdHlsZWQpLFxuICBhZnRlcjogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicmlnaHQ6MDtcIl0pXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL1Jvd0RyYWdDZWxsU3R5bGVzLnRzXG5cblxudmFyIFJvd0RyYWdDZWxsU3R5bGVzX1N0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS50ZC53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiUm93RHJhZ0NlbGxTdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy05a2JhajItMFwiXG59KShbXCJcIiwgXCIgYm94LXNpemluZzpjb250ZW50LWJveDt0b3VjaC1hY3Rpb246bm9uZTt3aWR0aDpcIiwgXCI7JiArICZ7Ym9yZGVyLWxlZnQ6XCIsIFwiO30mOmZvY3Vze2JveC1zaGFkb3c6XCIsIFwiO291dGxpbmU6bm9uZTt9Jjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtvdXRsaW5lOm5vbmU7fSY6YWN0aXZle2JhY2tncm91bmQtY29sb3I6XCIsIFwiO31cIiwgXCJcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ3RhYmxlLWNlbGwnKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICczMnB4JyxcbiAgcHJpc21hOiAnMzZweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogXCIxcHggc29saWQgXCIuY29uY2F0KHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yKSxcbiAgcHJpc21hOiBcIjFweCBzb2xpZCBcIi5jb25jYXQodGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQm9yZGVyKVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3dJbnNldCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvckw1MCxcbiAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yRDUwXG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUFjdGl2ZVxufSksIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciAkZHJhZ2dpbmcgPSBfcmVmLiRkcmFnZ2luZztcbiAgcmV0dXJuICRkcmFnZ2luZyAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJtaXhpbnNcIl0ub3ZlcmxheUNvbG9ycyh0aGVtZXNfW1widmFyaWFibGVzXCJdLmJhY2tncm91bmRDb2xvclBhZ2UsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlEcmFnKVxuICB9KSk7XG59KTtcbnZhciBSb3dEcmFnQ2VsbFN0eWxlc19TdHlsZWRHdWlkZUxpbmUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJSb3dEcmFnQ2VsbFN0eWxlc19fU3R5bGVkR3VpZGVMaW5lXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTlrYmFqMi0xXCJcbn0pKFtcIlwiLCBcIiB3aWR0aDoxMDAlO2hlaWdodDoxcHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3otaW5kZXg6MTtcIiwgXCJcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckcG9zaXRpb24nLCB7XG4gIGJlZm9yZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjo6YmVmb3Jle2NvbnRlbnQ6JyAnO2JvcmRlci10b3A6MXB4IHNvbGlkO2JvcmRlci1jb2xvcjpcIiwgXCI7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O3RvcDowO3Bvc2l0aW9uOmFic29sdXRlO31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGlua0NvbG9yLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yUHJpbWFyeVxuICB9KSksXG4gIGFmdGVyOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOjphZnRlcntib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmtDb2xvcixcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvclByaW1hcnlcbiAgfSkpXG59KSk7XG52YXIgU3R5bGVkRHJhZyA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlJvd0RyYWdDZWxsU3R5bGVzX19TdHlsZWREcmFnXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTlrYmFqMi0yXCJcbn0pKFtcIlwiLCBcIiBcIiwgXCI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjdXJzb3I6bW92ZTtcIiwgXCIgXCIsIFwiICZbZGF0YS1oZWxwZXJde2JhY2tncm91bmQtY29sb3I6XCIsIFwiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMDAwcHg7dG9wOi0xMDAwMHB4O2JveC1zaGFkb3c6XCIsIFwiO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtcIiwgXCI7fUBtZWRpYSBwcmludHtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnZmxleCcpLCB0aGVtZXNfW1wibWl4aW5zXCJdLmNsZWFyZml4KCksIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGRyYWdnaW5nID0gX3JlZjIuJGRyYWdnaW5nO1xuICByZXR1cm4gJGRyYWdnaW5nICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm9wYWNpdHk6MDtcIl0pO1xufSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciAkZHJhZ2dhYmxlID0gX3JlZjMuJGRyYWdnYWJsZTtcbiAgcmV0dXJuICRkcmFnZ2FibGUgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzpcIiwgXCI7LXdlYmtpdC11c2VyLWRyYWc6ZWxlbWVudDt1c2VyLXNlbGVjdDpub25lO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogJzlweCAwJyxcbiAgICBwcmlzbWE6IHtcbiAgICAgIGNvbWZvcnRhYmxlOiAnMTZweCAwIDE1cHgnLFxuICAgICAgY29tcGFjdDogJzlweCAwIDZweCdcbiAgICB9XG4gIH0pKTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JMNTAsXG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvckQ1MFxuICB9LFxuICBwcmlzbWE6IHRoZW1lc19bXCJtaXhpbnNcIl0ub3ZlcmxheUNvbG9ycyh0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5U2VsZWN0ZWQpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ub3ZlcmxheVNoYWRvdyxcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmRyYWdTaGFkb3dcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyOjFweCBzb2xpZCBcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlckNvbG9yKVxufSkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJsZS9EcmFnSGFuZGxlU3R5bGVzLnRzXG5cblxuXG5cbnZhciBEcmFnSGFuZGxlU3R5bGVzX1N0eWxlZERyYWcgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJEcmFnSGFuZGxlU3R5bGVzX19TdHlsZWREcmFnXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTllcWZuNS0wXCJcbn0pKFtcImRpc3BsYXk6YmxvY2s7Y3Vyc29yOm1vdmU7YmFja2dyb3VuZDpcIiwgXCI7XCIsIFwiXCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmRyYWdnYWJsZUJhY2tncm91bmQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ3aWR0aDo3cHg7aGVpZ2h0OjE0cHg7XCJdKSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ3aWR0aDo2cHg7aGVpZ2h0OjIwcHg7bWFyZ2luLXRvcDotM3B4O29wYWNpdHk6MDtcIiwgXCI6Zm9jdXMgJixcIiwgXCI6aG92ZXIgJixcIiwgXCIgJixbZGF0YS1oZWxwZXJdICZ7b3BhY2l0eToxO31cIl0sXG4gIC8qIHNjLXNlbCAqL1xuICBIZWFkQ2VsbFN0eWxlc19TdHlsZWQsXG4gIC8qIHNjLXNlbCAqL1xuICBIZWFkQ2VsbFN0eWxlc19TdHlsZWQsXG4gIC8qIHNjLXNlbCAqL1xuICBSb3dEcmFnQ2VsbFN0eWxlc19TdHlsZWQpXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0RyYWdIYW5kbGUudHN4XG5cblxuXG5cbnZhciBEcmFnSGFuZGxlX3Byb3BUeXBlcyA9IHtcbiAgc2NyZWVuUmVhZGVyQ29udGVudDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nXG59O1xudmFyIERyYWdIYW5kbGVfZGVmYXVsdFByb3BzID0ge307XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoX3JlZikge1xuICB2YXIgc2NyZWVuUmVhZGVyQ29udGVudCA9IF9yZWYuc2NyZWVuUmVhZGVyQ29udGVudDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChEcmFnSGFuZGxlU3R5bGVzX1N0eWxlZERyYWcsIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTY3JlZW5SZWFkZXJDb250ZW50X2RlZmF1bHQuYSwgbnVsbCwgc2NyZWVuUmVhZGVyQ29udGVudCkpO1xufVxuXG5EcmFnSGFuZGxlLnByb3BUeXBlcyA9IERyYWdIYW5kbGVfcHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgVGFibGVfRHJhZ0hhbmRsZSA9IChEcmFnSGFuZGxlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0hlYWRJbm5lci50c3hcbmZ1bmN0aW9uIEhlYWRJbm5lcl9leHRlbmRzKCkgeyBIZWFkSW5uZXJfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBIZWFkSW5uZXJfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIEhlYWRJbm5lcl9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gSGVhZElubmVyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBIZWFkSW5uZXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIEhlYWRJbm5lcl9wcm9wVHlwZXMgPSB7XG4gIGFsaWduOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10pLFxuICBjb2x1bW5JZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYW55LFxuICBoYXNBY3Rpb25zSGVhZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgaW5kZXg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgaXNNZW51OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBsYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgb25BdXRvc2l6ZUNvbHVtbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25EcmFnRW5kOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbkRyYWdTdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25SZXF1ZXN0UmVzaXplOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICByZXNpemFibGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHNvcnREaXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgdHJ1bmNhdGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHdpZHRoOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXJcbn07XG5cbmZ1bmN0aW9uIEhlYWRJbm5lcihfcmVmKSB7XG4gIHZhciBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICBjb2x1bW5JZCA9IF9yZWYuY29sdW1uSWQsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBvbkRyYWdFbmQgPSBfcmVmLm9uRHJhZ0VuZCxcbiAgICAgIG9uQXV0b3NpemVDb2x1bW4gPSBfcmVmLm9uQXV0b3NpemVDb2x1bW4sXG4gICAgICBfcmVmJGFsaWduID0gX3JlZi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZiRhbGlnbiA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRhbGlnbixcbiAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIF9yZWYkaGFzQWN0aW9uc0hlYWQgPSBfcmVmLmhhc0FjdGlvbnNIZWFkLFxuICAgICAgaGFzQWN0aW9uc0hlYWQgPSBfcmVmJGhhc0FjdGlvbnNIZWFkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaGFzQWN0aW9uc0hlYWQsXG4gICAgICBfcmVmJGlzTWVudSA9IF9yZWYuaXNNZW51LFxuICAgICAgaXNNZW51ID0gX3JlZiRpc01lbnUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc01lbnUsXG4gICAgICBvbkRyYWdTdGFydCA9IF9yZWYub25EcmFnU3RhcnQsXG4gICAgICBvblJlcXVlc3RSZXNpemUgPSBfcmVmLm9uUmVxdWVzdFJlc2l6ZSxcbiAgICAgIF9yZWYkcmVzaXphYmxlID0gX3JlZi5yZXNpemFibGUsXG4gICAgICByZXNpemFibGUgPSBfcmVmJHJlc2l6YWJsZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzaXphYmxlLFxuICAgICAgX3JlZiRzb3J0RGlyID0gX3JlZi5zb3J0RGlyLFxuICAgICAgc29ydERpciA9IF9yZWYkc29ydERpciA9PT0gdm9pZCAwID8gdW5kZWZpbmVkIDogX3JlZiRzb3J0RGlyLFxuICAgICAgX3JlZiR0cnVuY2F0ZSA9IF9yZWYudHJ1bmNhdGUsXG4gICAgICB0cnVuY2F0ZSA9IF9yZWYkdHJ1bmNhdGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRydW5jYXRlLFxuICAgICAgb3RoZXJQcm9wcyA9IEhlYWRJbm5lcl9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJpbmRleFwiLCBcImNvbHVtbklkXCIsIFwiaWRcIiwgXCJ3aWR0aFwiLCBcIm9uRHJhZ0VuZFwiLCBcIm9uQXV0b3NpemVDb2x1bW5cIiwgXCJhbGlnblwiLCBcImxhYmVsXCIsIFwiaGFzQWN0aW9uc0hlYWRcIiwgXCJpc01lbnVcIiwgXCJvbkRyYWdTdGFydFwiLCBcIm9uUmVxdWVzdFJlc2l6ZVwiLCBcInJlc2l6YWJsZVwiLCBcInNvcnREaXJcIiwgXCJ0cnVuY2F0ZVwiXSk7XG5cbiAgaWYgKGZhbHNlKSB7fVxuXG4gIHZhciBfdXNlU3RhdGUgPSBPYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1widXNlU3RhdGVcIl0pKCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGNsb25lRWwgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0Q2xvbmVFbCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSBPYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1widXNlU3RhdGVcIl0pKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIGlzUmVzaXppbmcgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0UmVzaXppbmcgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBfdXNlU3RhdGU1ID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZVN0YXRlXCJdKShmYWxzZSksXG4gICAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgICBpc0RyYWdnaW5nID0gX3VzZVN0YXRlNlswXSxcbiAgICAgIHNldElzRHJhZ2dpbmcgPSBfdXNlU3RhdGU2WzFdO1xuXG4gIHZhciBfdXNlU3RhdGU3ID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZVN0YXRlXCJdKSgwKSxcbiAgICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICAgIHN0YXJ0Q2xpZW50WCA9IF91c2VTdGF0ZThbMF0sXG4gICAgICBzZXRTdGFydENsaWVudFggPSBfdXNlU3RhdGU4WzFdO1xuXG4gIHZhciBfdXNlU3RhdGU5ID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZVN0YXRlXCJdKSgwKSxcbiAgICAgIF91c2VTdGF0ZTEwID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlOSwgMiksXG4gICAgICBzdGFydFdpZHRoID0gX3VzZVN0YXRlMTBbMF0sXG4gICAgICBzZXRTdGFydFdpZHRoID0gX3VzZVN0YXRlMTBbMV07XG5cbiAgdmFyIHJlZiA9IE9iamVjdChleHRlcm5hbF9yZWFjdF9bXCJ1c2VSZWZcIl0pKG51bGwpOyAvLyBDbGVhbnVwIGRyYWdlbmQsIGFuZCB1bm1vdW50IGR1cmluZyBkcmFnXG5cbiAgT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZUVmZmVjdFwiXSkoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2xvbmVFbCA9PT0gbnVsbCB8fCBjbG9uZUVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbG9uZUVsLnJlbW92ZSgpO1xuICAgIH07XG4gIH0sIFtjbG9uZUVsXSk7XG5cbiAgdmFyIF91c2VTcGx1bmtUaGVtZSA9IE9iamVjdCh0aGVtZXNfW1widXNlU3BsdW5rVGhlbWVcIl0pKCksXG4gICAgICBmYW1pbHkgPSBfdXNlU3BsdW5rVGhlbWUuZmFtaWx5O1xuXG4gIHZhciBpc1ByaXNtYSA9IGZhbWlseSA9PT0gJ3ByaXNtYSc7XG5cbiAgdmFyIGhhbmRsZVJlc2l6ZUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVSZXNpemVLZXlEb3duKGUpIHtcbiAgICB2YXIga2V5ID0gT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKG9uUmVxdWVzdFJlc2l6ZSA9PT0gdW5kZWZpbmVkIHx8IHdpZHRoID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdsZWZ0Jykge1xuICAgICAgdmFyIG5ld1dpZHRoID0gTWF0aC5tYXgod2lkdGggLSAxMCwgMjApO1xuICAgICAgb25SZXF1ZXN0UmVzaXplKGUsIHtcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjb2x1bW5JZDogY29sdW1uSWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgd2lkdGg6IG5ld1dpZHRoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAncmlnaHQnKSB7XG4gICAgICB2YXIgX25ld1dpZHRoID0gd2lkdGggKyAxMDtcblxuICAgICAgb25SZXF1ZXN0UmVzaXplKGUsIHtcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjb2x1bW5JZDogY29sdW1uSWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgd2lkdGg6IF9uZXdXaWR0aFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBoYW5kbGVTdGFydFJlc2l6ZSA9IGZ1bmN0aW9uIGhhbmRsZVN0YXJ0UmVzaXplKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgdGV4dCBzZWxlY3Rpb25cblxuICAgIHNldFN0YXJ0Q2xpZW50WChlLmNsaWVudFgpO1xuICAgIHNldFN0YXJ0V2lkdGgod2lkdGggfHwgMCk7XG4gICAgc2V0UmVzaXppbmcodHJ1ZSk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZVJlc2l6ZSA9IGZ1bmN0aW9uIGhhbmRsZVJlc2l6ZShlKSB7XG4gICAgdmFyIGNoYW5nZSA9IHN0YXJ0Q2xpZW50WCAtIGUuY2xpZW50WDtcbiAgICB2YXIgbmV3V2lkdGggPSBNYXRoLm1heChzdGFydFdpZHRoIC0gY2hhbmdlLCAxNik7XG5cbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgb25SZXF1ZXN0UmVzaXplID09PSBudWxsIHx8IG9uUmVxdWVzdFJlc2l6ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXF1ZXN0UmVzaXplKGUsIHtcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBjb2x1bW5JZDogY29sdW1uSWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgd2lkdGg6IG5ld1dpZHRoXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGhhbmRsZUVuZFJlc2l6ZSA9IGZ1bmN0aW9uIGhhbmRsZUVuZFJlc2l6ZSgpIHtcbiAgICBzZXRSZXNpemluZyhmYWxzZSk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZURyYWdTdGFydCA9IGZ1bmN0aW9uIGhhbmRsZURyYWdTdGFydChlKSB7XG4gICAgdmFyIF9lbCR0ZXh0Q29udGVudDtcblxuICAgIHZhciBlbCA9IHJlZi5jdXJyZW50O1xuXG4gICAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAoZWwgPT09IG51bGwgfHwgZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVsLnBhcmVudEVsZW1lbnQpKSB7XG4gICAgICB2YXIgcmVjdCA9IGVsLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgY2xvbmUgPSBlbC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBjbG9uZS5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KHJlY3Qud2lkdGgsIFwicHhcIik7XG4gICAgICBjbG9uZS5zdHlsZS5oZWlnaHQgPSBcIlwiLmNvbmNhdChyZWN0LmhlaWdodCwgXCJweFwiKTtcbiAgICAgIGNsb25lLnNldEF0dHJpYnV0ZSgnZGF0YS1oZWxwZXInLCAndHJ1ZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoY2xvbmUsIGUuY2xpZW50WCAtIHJlY3QubGVmdCwgZS5jbGllbnRZIC0gcmVjdC50b3ApO1xuICAgICAgc2V0SXNEcmFnZ2luZyh0cnVlKTtcbiAgICAgIHNldENsb25lRWwoY2xvbmUpO1xuICAgIH1cblxuICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XG4gICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsIChfZWwkdGV4dENvbnRlbnQgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpICE9PSBudWxsICYmIF9lbCR0ZXh0Q29udGVudCAhPT0gdm9pZCAwID8gX2VsJHRleHRDb250ZW50IDogJycpOyAvLyBSZXF1aXJlZCBmb3IgRmlyZWZveFxuXG4gICAgb25EcmFnU3RhcnQgPT09IG51bGwgfHwgb25EcmFnU3RhcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRHJhZ1N0YXJ0KGluZGV4LCBjb2x1bW5JZCk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZURyYWdFbmQgPSBmdW5jdGlvbiBoYW5kbGVEcmFnRW5kKCkge1xuICAgIHNldENsb25lRWwodW5kZWZpbmVkKTtcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICBvbkRyYWdFbmQgPT09IG51bGwgfHwgb25EcmFnRW5kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkRyYWdFbmQoKTtcbiAgfTtcblxuICB2YXIgaGFuZGxlRG91YmxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVEb3VibGVDbGljayhlKSB7XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uQXV0b3NpemVDb2x1bW4gPT09IG51bGwgfHwgb25BdXRvc2l6ZUNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BdXRvc2l6ZUNvbHVtbihlLCB7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRyYWdnYWJsZSA9ICEhb25EcmFnU3RhcnQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoSGVhZElubmVyU3R5bGVzX1N0eWxlZCwgSGVhZElubmVyX2V4dGVuZHMoe1xuICAgIGRyYWdnYWJsZTogZHJhZ2dhYmxlIHx8IHVuZGVmaW5lZCxcbiAgICBvbkRyYWdTdGFydDogZHJhZ2dhYmxlID8gaGFuZGxlRHJhZ1N0YXJ0IDogdW5kZWZpbmVkLFxuICAgIG9uRHJhZ0VuZDogZHJhZ2dhYmxlID8gaGFuZGxlRHJhZ0VuZCA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZixcbiAgICAkaGFzQWN0aW9uc0hlYWQ6ICEhaGFzQWN0aW9uc0hlYWQsXG4gICAgJGFsaWduOiBhbGlnbixcbiAgICAkZHJhZ2dhYmxlOiBkcmFnZ2FibGUsXG4gICAgJGRyYWdnaW5nOiAhIWlzRHJhZ2dpbmdcbiAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKShvdGhlclByb3BzLCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKEhlYWRJbm5lci5wcm9wVHlwZXMpKSwgWydpZCddKSkpLCBpc1Jlc2l6aW5nICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChleHRlcm5hbF9yZWFjdF9ldmVudF9saXN0ZW5lcl9kZWZhdWx0LmEsIHtcbiAgICB0YXJnZXQ6IFwid2luZG93XCIsXG4gICAgb25Nb3VzZVVwOiBoYW5kbGVFbmRSZXNpemUsXG4gICAgb25Nb3VzZU1vdmU6IGhhbmRsZVJlc2l6ZVxuICB9KSwgb25SZXF1ZXN0UmVzaXplICYmIHJlc2l6YWJsZSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkUmVzaXplLCB7XG4gICAgb25Nb3VzZURvd246IGhhbmRsZVN0YXJ0UmVzaXplLFxuICAgIG9uRG91YmxlQ2xpY2s6IGhhbmRsZURvdWJsZUNsaWNrLFxuICAgIG9uS2V5RG93bjogaGFuZGxlUmVzaXplS2V5RG93bixcbiAgICBcImRhdGEtdGVzdFwiOiBcInJlc2l6ZVwiXG4gIH0pLCBkcmFnZ2FibGUgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZERyYWdDb250YWluZXIsIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUYWJsZV9EcmFnSGFuZGxlLCB7XG4gICAgc2NyZWVuUmVhZGVyQ29udGVudDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1ByZXNzIGxlZnQgb3IgcmlnaHQgYXJyb3cga2V5IHRvIHJlb3JkZXIgdGhlIGNvbHVtbnMuJylcbiAgfSkpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTGFiZWwsIHtcbiAgICAkc29ydGVkOiAhIXNvcnREaXIgJiYgc29ydERpciAhPT0gJ25vbmUnLFxuICAgICRhbGlnbjogYWxpZ24sXG4gICAgJHRydW5jYXRlOiB0cnVuY2F0ZSxcbiAgICAkZmlsbDogaXNNZW51XG4gIH0sIGxhYmVsLCAoaXNNZW51IHx8IHNvcnREaXIgJiYgaXNQcmlzbWEpICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRNZW51SWNvbiwgbnVsbCwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENhcmV0RG93bltcImFcIiAvKiBkZWZhdWx0ICovXSwge1xuICAgIGVudGVycHJpc2VTaXplOiAwLjUsXG4gICAgcHJpc21hU2l6ZTogXCJzbWFsbFwiIC8vIHRoaXMgaWNvbiBpbmRpY2F0ZXMgYm90aCBcImhhcyBhIG1lbnVcIiBpbiBhbGwgdGhlbWVzIGFuZCBcImlzIHNvcnRhYmxlXCIgaW4gUHJpc21hXG4gICAgLy8gc28gd2UgbmVlZCB0byBhdm9pZCBoYXZpbmcgdGhlIHdyb25nIHNjcmVlblJlYWRlclRleHQgd2hlbiB0aGUgY29sdW1uIGlzbid0IHNvcnRhYmxlXG4gICAgLFxuICAgIHNjcmVlblJlYWRlclRleHQ6IHNvcnREaXIgPT09ICdub25lJyAmJiBpc1ByaXNtYSA/IE9iamVjdChpMThuX1tcIl9cIl0pKCdDbGljayB0byBzb3J0JykgOiB1bmRlZmluZWRcbiAgfSkpKSwgc29ydERpciAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkU29ydEljb24sIHtcbiAgICAkc29ydGVkOiBzb3J0RGlyICE9PSAnbm9uZSdcbiAgfSwgc29ydERpciA9PT0gJ25vbmUnICYmICFpc1ByaXNtYSAmJlxuICAvKiNfX1BVUkVfXyovXG4gIC8vIGhpZGVEZWZhdWx0VG9vbHRpcCBjYXVzZXMgcmVhY3QtaWNvbnMgdG8gdXNlIGFuIGFyaWEtbGFiZWwgaGVyZVxuICBleHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTb3J0X2RlZmF1bHQuYSwge1xuICAgIGhpZGVEZWZhdWx0VG9vbHRpcDogdHJ1ZSxcbiAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnQ2xpY2sgdG8gc29ydCcpXG4gIH0pLCBzb3J0RGlyID09PSAnYXNjJyAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU29ydGVkVXAsIHtcbiAgICBwcmlzbWFTaXplOiBcInNtYWxsXCIsXG4gICAgaW5saW5lOiB0cnVlLFxuICAgIHNjcmVlblJlYWRlclRleHQ6IE9iamVjdChpMThuX1tcIl9cIl0pKCdQcmVzcyB0byBzb3J0IGRlc2NlbmRpbmcnKVxuICB9KSwgc29ydERpciA9PT0gJ2Rlc2MnICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTb3J0ZWREb3duLCB7XG4gICAgcHJpc21hU2l6ZTogXCJzbWFsbFwiLFxuICAgIGlubGluZTogdHJ1ZSxcbiAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnUHJlc3MgdG8gc29ydCBhc2NlbmRpbmcnKVxuICB9KSkpO1xufVxuXG5IZWFkSW5uZXIucHJvcFR5cGVzID0gSGVhZElubmVyX3Byb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRhYmxlX0hlYWRJbm5lciA9IChIZWFkSW5uZXIpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvSGVhZENlbGwudHN4XG5mdW5jdGlvbiBIZWFkQ2VsbF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IEhlYWRDZWxsX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBIZWFkQ2VsbF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gSGVhZENlbGxfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gSGVhZENlbGxfZXh0ZW5kcygpIHsgSGVhZENlbGxfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBIZWFkQ2VsbF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gSGVhZENlbGxfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBIZWFkQ2VsbF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IEhlYWRDZWxsX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IEhlYWRDZWxsX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgSGVhZENlbGxfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBIZWFkQ2VsbF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gSGVhZENlbGxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBIZWFkQ2VsbF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gSGVhZENlbGxfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIEhlYWRDZWxsX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIEhlYWRDZWxsX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gSGVhZENlbGxfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIEhlYWRDZWxsX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIEhlYWRDZWxsX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gSGVhZENlbGxfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIEhlYWRDZWxsX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgSGVhZENlbGxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIEhlYWRDZWxsX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIEhlYWRDZWxsX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIEhlYWRDZWxsX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBIZWFkQ2VsbF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IEhlYWRDZWxsX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBIZWFkQ2VsbF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBIZWFkQ2VsbF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gSGVhZENlbGxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gSGVhZENlbGxfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IEhlYWRDZWxsX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBIZWFkQ2VsbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gSGVhZENlbGxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChIZWFkQ2VsbF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIEhlYWRDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBIZWFkQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBIZWFkQ2VsbF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gSGVhZENlbGxfZ2V0UHJvdG90eXBlT2YobykgeyBIZWFkQ2VsbF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBIZWFkQ2VsbF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBIZWFkQ2VsbF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cbnZhciBIZWFkQ2VsbF9wcm9wVHlwZXMgPSB7XG4gIGFsaWduOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10pLFxuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgY29sdW1uSWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFueSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcblxuICAvKiogQHByaXZhdGUgSW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBhY3Rpb25zLiAqL1xuICBoYXNBY3Rpb25zSGVhZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKiogQHByaXZhdGUgVGhlIGluZGV4IG9mIHRoZSBjZWxsLCBza2lwcGluZyB0aGUgaW5mbyBjb2x1bW4uICovXG4gIGluZGV4OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvbkF1dG9zaXplQ29sdW1uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblNvcnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvbkRyYWdTdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKipcbiAgICogQHByaXZhdGUuIFBhc3NlZCB0aHJvdWdoIGFuZCB3b3JrcyBhcyBleHBlY3RlZC5cbiAgICovXG4gIG9uS2V5RG93bjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUuICovXG4gIG9uQ2xpY2s6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvblJlcXVlc3RNb3ZlQ29sdW1uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgb25SZXF1ZXN0UmVzaXplOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICByZXNpemFibGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBzaG93R3VpZGVsaW5lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ25vbmUnLCAnYmVmb3JlJywgJ2FmdGVyJ10pLFxuICBzb3J0RGlyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2FzYycsICdkZXNjJywgJ25vbmUnXSksXG4gIHNvcnRLZXk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgdHJ1bmNhdGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqXG4gICAqIFVzZWQgaW50ZXJuYWxseSB0byBzdXBwcmVzcyBmb2N1cyBhbmQgaWQgd2hlbiB0aGlzIGBIZWFkQ2VsbGAgaXMgc3VwZXJzZWRlZCBieSBvbmUgaW4gYW5cbiAgICogb3ZlcmxhaWQgYEhlYWRUYWJsZWAgZm9yIHVzZXIgaW50ZXJhY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmlzaWJsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgd2lkdGg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcblxuICAvKiogQHByaXZhdGUuICovXG4gIHZhcmlhbnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsndG9nZ2xlQWxsJywgJ2luZm8nLCAnYWN0aW9ucyddKVxufTtcbnZhciBIZWFkQ2VsbF9kZWZhdWx0UHJvcHMgPSB7XG4gIGFsaWduOiAnbGVmdCcsXG4gIHJlc2l6YWJsZTogdHJ1ZSxcbiAgc2hvd0d1aWRlbGluZTogJ25vbmUnLFxuICBzb3J0RGlyOiAnbm9uZScsXG4gIHRydW5jYXRlOiB0cnVlLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG52YXIgSGVhZENlbGxfSGVhZENlbGwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgSGVhZENlbGxfaW5oZXJpdHMoSGVhZENlbGwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBIZWFkQ2VsbF9jcmVhdGVTdXBlcihIZWFkQ2VsbCk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBIZWFkQ2VsbFByb3BzQmFzZVxuICBmdW5jdGlvbiBIZWFkQ2VsbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIEhlYWRDZWxsX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhlYWRDZWxsKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgSGVhZENlbGxfZGVmaW5lUHJvcGVydHkoSGVhZENlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVDbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2xpY2ssIF90aGlzJHByb3BzMjtcblxuICAgICAgLy8gaWdub3JlIGNsaWNrcyBvbiB0aGUgcmVzaXplIGhhbmRsZVxuICAgICAgaWYgKGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS10ZXN0JykgIT09ICdyZXNpemUnICYmIF90aGlzLnByb3BzLm9uU29ydCAmJiBfdGhpcy5wcm9wcy5pbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgc29ydEtleSA9IF90aGlzJHByb3BzLnNvcnRLZXksXG4gICAgICAgICAgICBzb3J0RGlyID0gX3RoaXMkcHJvcHMuc29ydERpcixcbiAgICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMuaWQsXG4gICAgICAgICAgICBfaW5kZXggPSBfdGhpcyRwcm9wcy5pbmRleCxcbiAgICAgICAgICAgIF9jb2x1bW5JZCA9IF90aGlzJHByb3BzLmNvbHVtbklkO1xuXG4gICAgICAgIF90aGlzLnByb3BzLm9uU29ydChlLCB7XG4gICAgICAgICAgc29ydEtleTogc29ydEtleSxcbiAgICAgICAgICBzb3J0RGlyOiBzb3J0RGlyLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBjb2x1bW5JZDogX2NvbHVtbklkLFxuICAgICAgICAgIGluZGV4OiBfaW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkNsaWNrID0gKF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzKS5vbkNsaWNrKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrLmNhbGwoX3RoaXMkcHJvcHMyKTtcbiAgICB9KTtcblxuICAgIEhlYWRDZWxsX2RlZmluZVByb3BlcnR5KEhlYWRDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlS2V5RG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbklkID0gX3RoaXMkcHJvcHMzLmNvbHVtbklkLFxuICAgICAgICAgIGluZGV4ID0gX3RoaXMkcHJvcHMzLmluZGV4LFxuICAgICAgICAgIG9uS2V5RG93biA9IF90aGlzJHByb3BzMy5vbktleURvd24sXG4gICAgICAgICAgb25SZXF1ZXN0TW92ZUNvbHVtbiA9IF90aGlzJHByb3BzMy5vblJlcXVlc3RNb3ZlQ29sdW1uO1xuXG4gICAgICBpZiAoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXRlc3QnKSAhPT0gJ3Jlc2l6ZScpIHtcbiAgICAgICAgaWYgKE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgIF90aGlzLmhhbmRsZUNsaWNrKGUpO1xuICAgICAgICB9IGVsc2UgaWYgKE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KSA9PT0gJ2xlZnQnICYmIGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPiAwKSB7XG4gICAgICAgICAgb25SZXF1ZXN0TW92ZUNvbHVtbiA9PT0gbnVsbCB8fCBvblJlcXVlc3RNb3ZlQ29sdW1uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlcXVlc3RNb3ZlQ29sdW1uKHtcbiAgICAgICAgICAgIGZyb21JbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0b0luZGV4OiBpbmRleCAtIDEsXG4gICAgICAgICAgICBjb2x1bW5JZDogY29sdW1uSWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3Qoa2V5Ym9hcmRfW1wia2V5Y29kZVwiXSkoZS5uYXRpdmVFdmVudCkgPT09ICdyaWdodCcgJiYgaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9uUmVxdWVzdE1vdmVDb2x1bW4gPT09IG51bGwgfHwgb25SZXF1ZXN0TW92ZUNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXF1ZXN0TW92ZUNvbHVtbih7XG4gICAgICAgICAgICBmcm9tSW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdG9JbmRleDogaW5kZXggKyAxLFxuICAgICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25LZXlEb3duKGUsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSGVhZENlbGxfZGVmaW5lUHJvcGVydHkoSGVhZENlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVEcmFnU3RhcnRcIiwgZnVuY3Rpb24gKGluZGV4LCBjb2x1bW5JZCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRHJhZ1N0YSwgX3RoaXMkcHJvcHM0O1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRHJhZ2dpbmc6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25EcmFnU3RhID0gKF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzKS5vbkRyYWdTdGFydCkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25EcmFnU3RhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkRyYWdTdGEuY2FsbChfdGhpcyRwcm9wczQsIGluZGV4LCBjb2x1bW5JZCk7XG4gICAgfSk7XG5cbiAgICBIZWFkQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdFbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBIZWFkQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNvcnREaXJBcmlhTWFwcGluZ1wiLCB7XG4gICAgICBhc2M6ICdhc2NlbmRpbmcnLFxuICAgICAgZGVzYzogJ2Rlc2NlbmRpbmcnLFxuICAgICAgbm9uZTogJ25vbmUnXG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBIZWFkQ2VsbF9jcmVhdGVDbGFzcyhIZWFkQ2VsbCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFsaWduID0gX3RoaXMkcHJvcHM1LmFsaWduLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM1LmNoaWxkcmVuLFxuICAgICAgICAgIGNvbHVtbklkID0gX3RoaXMkcHJvcHM1LmNvbHVtbklkLFxuICAgICAgICAgIGVsZW1lbnRSZWYgPSBfdGhpcyRwcm9wczUuZWxlbWVudFJlZixcbiAgICAgICAgICBoYXNBY3Rpb25zSGVhZCA9IF90aGlzJHByb3BzNS5oYXNBY3Rpb25zSGVhZCxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzNS5pZCxcbiAgICAgICAgICBpbmRleCA9IF90aGlzJHByb3BzNS5pbmRleCxcbiAgICAgICAgICBvbkF1dG9zaXplQ29sdW1uID0gX3RoaXMkcHJvcHM1Lm9uQXV0b3NpemVDb2x1bW4sXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzNS5vbkNsaWNrLFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3RoaXMkcHJvcHM1Lm9uRHJhZ1N0YXJ0LFxuICAgICAgICAgIG9uUmVxdWVzdFJlc2l6ZSA9IF90aGlzJHByb3BzNS5vblJlcXVlc3RSZXNpemUsXG4gICAgICAgICAgb25Tb3J0ID0gX3RoaXMkcHJvcHM1Lm9uU29ydCxcbiAgICAgICAgICByZXNpemFibGUgPSBfdGhpcyRwcm9wczUucmVzaXphYmxlLFxuICAgICAgICAgIHNob3dHdWlkZWxpbmUgPSBfdGhpcyRwcm9wczUuc2hvd0d1aWRlbGluZSxcbiAgICAgICAgICBzb3J0RGlyID0gX3RoaXMkcHJvcHM1LnNvcnREaXIsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczUuc3R5bGUsXG4gICAgICAgICAgdmFyaWFudCA9IF90aGlzJHByb3BzNS52YXJpYW50LFxuICAgICAgICAgIHRydW5jYXRlUHJvcCA9IF90aGlzJHByb3BzNS50cnVuY2F0ZSxcbiAgICAgICAgICB2aXNpYmxlID0gX3RoaXMkcHJvcHM1LnZpc2libGUsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczUud2lkdGg7XG4gICAgICB2YXIgZHJhZ2dhYmxlID0gISFvbkRyYWdTdGFydDtcbiAgICAgIHZhciBzb3J0YWJsZSA9ICEhb25Tb3J0ICYmICEhc29ydERpcjtcbiAgICAgIHZhciBoYXNPbkNsaWNrID0gb25DbGljayAhPT0gdW5kZWZpbmVkO1xuICAgICAgdmFyIG1lcmdlZFN0eWxlID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJtZXJnZVwiXSkoc3R5bGUsIHtcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICAgIHZhciB0cnVuY2F0ZSA9IGhhc0FjdGlvbnNIZWFkID8gZmFsc2UgOiB0cnVuY2F0ZVByb3A7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChIZWFkQ2VsbFN0eWxlc19TdHlsZWQsIEhlYWRDZWxsX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogbWVyZ2VkU3R5bGUsXG4gICAgICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAgICAgXCJhcmlhLXNvcnRcIjogb25Tb3J0ICYmICh0aGlzLnNvcnREaXJBcmlhTWFwcGluZ1tzb3J0RGlyXSB8fCAnbm9uZScpLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImhlYWQtY2VsbFwiLFxuICAgICAgICBcImRhdGEtdGVzdC1sYWJlbFwiOiBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImlzU3RyaW5nXCJdKShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc29ydC1kaXJcIjogb25Tb3J0ICYmIHNvcnREaXIsXG4gICAgICAgIGlkOiB2aXNpYmxlID8gaWQgOiB1bmRlZmluZWQsXG4gICAgICAgIG9uQ2xpY2s6IG9uU29ydCB8fCBoYXNPbkNsaWNrID8gdGhpcy5oYW5kbGVDbGljayA6IHVuZGVmaW5lZCxcbiAgICAgICAgdGFiSW5kZXg6IHZpc2libGUgJiYgKGRyYWdnYWJsZSB8fCBvblNvcnQgfHwgaGFzT25DbGljaykgPyAwIDogdW5kZWZpbmVkLFxuICAgICAgICAkZHJhZ2dpbmc6IHRoaXMuc3RhdGUuaXNEcmFnZ2luZyB8fCB1bmRlZmluZWQsXG4gICAgICAgICRjbGlja2FibGU6IGRyYWdnYWJsZSB8fCBzb3J0YWJsZSB8fCBoYXNPbkNsaWNrLFxuICAgICAgICAkdmFyaWFudDogdmFyaWFudFxuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKSh0aGlzLnByb3BzLCBbXS5jb25jYXQoSGVhZENlbGxfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMoSGVhZENlbGwucHJvcFR5cGVzKSksIFsnaWQnLCAnc3R5bGUnXSkpLCB7XG4gICAgICAgIG9uS2V5RG93bjogZHJhZ2dhYmxlIHx8IG9uU29ydCB8fCBoYXNPbkNsaWNrID8gdGhpcy5oYW5kbGVLZXlEb3duIDogdW5kZWZpbmVkXG4gICAgICB9KSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhYmxlX0hlYWRJbm5lciwge1xuICAgICAgICBsYWJlbDogY2hpbGRyZW4sXG4gICAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkLFxuICAgICAgICBoYXNBY3Rpb25zSGVhZDogaGFzQWN0aW9uc0hlYWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICByZXNpemFibGU6IHZpc2libGUgJiYgcmVzaXphYmxlLFxuICAgICAgICBvbkRyYWdTdGFydDogb25EcmFnU3RhcnQgPyB0aGlzLmhhbmRsZURyYWdTdGFydCA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25EcmFnRW5kOiBvbkRyYWdTdGFydCA/IHRoaXMuaGFuZGxlRHJhZ0VuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25BdXRvc2l6ZUNvbHVtbjogb25BdXRvc2l6ZUNvbHVtbixcbiAgICAgICAgb25SZXF1ZXN0UmVzaXplOiBvblJlcXVlc3RSZXNpemUsXG4gICAgICAgIHNvcnREaXI6IG9uU29ydCAmJiBzb3J0RGlyLFxuICAgICAgICB0cnVuY2F0ZTogdHJ1bmNhdGUsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfSksIHNob3dHdWlkZWxpbmUgIT09ICdub25lJyAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkR3VpZGVMaW5lLCB7XG4gICAgICAgICRwb3NpdGlvbjogc2hvd0d1aWRlbGluZVxuICAgICAgfSkpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSGVhZENlbGw7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbkhlYWRDZWxsX2RlZmluZVByb3BlcnR5KEhlYWRDZWxsX0hlYWRDZWxsLCBcInNwbHVua1VpVHlwZVwiLCAnVGFibGUuSGVhZENlbGwnKTtcblxuSGVhZENlbGxfZGVmaW5lUHJvcGVydHkoSGVhZENlbGxfSGVhZENlbGwsIFwicHJvcFR5cGVzXCIsIEhlYWRDZWxsX3Byb3BUeXBlcyk7XG5cbkhlYWRDZWxsX2RlZmluZVByb3BlcnR5KEhlYWRDZWxsX0hlYWRDZWxsLCBcImRlZmF1bHRQcm9wc1wiLCBIZWFkQ2VsbF9kZWZhdWx0UHJvcHMpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUYWJsZV9IZWFkQ2VsbCA9IChIZWFkQ2VsbF9IZWFkQ2VsbCk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC1pY29ucy9JbmZvXCJcbnZhciBJbmZvXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTcpO1xudmFyIEluZm9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oSW5mb18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2ljb25zL0NoZXZyb25SaWdodC50c3hcbnZhciBDaGV2cm9uUmlnaHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvSGVhZEV4cGFuZFJvd3NJY29uLnRzeFxuXG5cblxuXG5cbi8qIFRoaXMgZmlsZSB3b3JrcyBhcm91bmQgdGhlIHVzZSBvZiB3aXRoU3BsdW5rVGhlbWUgaW4gSGVhZC4gKi9cblxuZnVuY3Rpb24gSGVhZEV4cGFuZFJvd3NJY29uKCkge1xuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gT2JqZWN0KHRoZW1lc19bXCJ1c2VTcGx1bmtUaGVtZVwiXSkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHk7XG5cbiAgdmFyIHNjcmVlblJlYWRlclRleHQgPSBPYmplY3QoaTE4bl9bXCJfXCJdKSgnTW9yZSBJbmZvcm1hdGlvbicpO1xuXG4gIHJldHVybiBmYW1pbHkgPT09ICdwcmlzbWEnID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodFtcImFcIiAvKiBkZWZhdWx0ICovXSwge1xuICAgIHNjcmVlblJlYWRlclRleHQ6IHNjcmVlblJlYWRlclRleHQsXG4gICAgcHJpc21hU2l6ZTogXCJzbWFsbFwiXG4gIH0pIDogLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEluZm9fZGVmYXVsdC5hLCB7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogc2NyZWVuUmVhZGVyVGV4dFxuICB9KTtcbn1cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0J1dHRvblwiXG52YXIgQnV0dG9uXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIEJ1dHRvbl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihCdXR0b25fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvRHJvcGRvd25cIlxudmFyIERyb3Bkb3duXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIERyb3Bkb3duX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKERyb3Bkb3duXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1Rvb2x0aXBcIlxudmFyIFRvb2x0aXBfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG52YXIgVG9vbHRpcF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihUb29sdGlwXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvQ2hldnJvbkRvd24udHN4XG52YXIgQ2hldnJvbkRvd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9Nb3JlVmVydGljYWwudHN4XG52YXIgTW9yZVZlcnRpY2FsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL1Jvd0RyYWdDZWxsLnRzeFxuZnVuY3Rpb24gUm93RHJhZ0NlbGxfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBSb3dEcmFnQ2VsbF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgUm93RHJhZ0NlbGxfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFJvd0RyYWdDZWxsX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIFJvd0RyYWdDZWxsX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gUm93RHJhZ0NlbGxfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIFJvd0RyYWdDZWxsX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgUm93RHJhZ0NlbGxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIFJvd0RyYWdDZWxsX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIFJvd0RyYWdDZWxsX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIFJvd0RyYWdDZWxsX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBSb3dEcmFnQ2VsbF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IFJvd0RyYWdDZWxsX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBSb3dEcmFnQ2VsbF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBSb3dEcmFnQ2VsbF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gUm93RHJhZ0NlbGxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gUm93RHJhZ0NlbGxfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IFJvd0RyYWdDZWxsX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBSb3dEcmFnQ2VsbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gUm93RHJhZ0NlbGxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChSb3dEcmFnQ2VsbF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIFJvd0RyYWdDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBSb3dEcmFnQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBSb3dEcmFnQ2VsbF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gUm93RHJhZ0NlbGxfZ2V0UHJvdG90eXBlT2YobykgeyBSb3dEcmFnQ2VsbF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBSb3dEcmFnQ2VsbF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBSb3dEcmFnQ2VsbF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cbnZhciBSb3dEcmFnQ2VsbF9wcm9wVHlwZXMgPSB7XG4gIGFjdGl2ZUVsZW1lbnRJZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkYXRhSWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXJdKSxcbiAgaW5kZXg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgb25EcmFnRW5kOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbkRyYWdTdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25LZXlEb3duOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblJlcXVlc3RNb3ZlUm93OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICByb3dTcGFuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIHNob3dSb3dHdWlkZWxpbmU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnbm9uZScsICdiZWZvcmUnLCAnYWZ0ZXInXSlcbn07XG52YXIgUm93RHJhZ0NlbGxfZGVmYXVsdFByb3BzID0ge1xuICBzaG93Um93R3VpZGVsaW5lOiAnbm9uZSdcbn07XG5cbnZhciBSb3dEcmFnQ2VsbF9Sb3dEcmFnQ2VsbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBSb3dEcmFnQ2VsbF9pbmhlcml0cyhSb3dEcmFnQ2VsbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IFJvd0RyYWdDZWxsX2NyZWF0ZVN1cGVyKFJvd0RyYWdDZWxsKTtcblxuICBmdW5jdGlvbiBSb3dEcmFnQ2VsbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIFJvd0RyYWdDZWxsX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJvd0RyYWdDZWxsKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgUm93RHJhZ0NlbGxfZGVmaW5lUHJvcGVydHkoUm93RHJhZ0NlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9uZUVsXCIsIHZvaWQgMCk7XG5cbiAgICBSb3dEcmFnQ2VsbF9kZWZpbmVQcm9wZXJ0eShSb3dEcmFnQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImVsXCIsIG51bGwpO1xuXG4gICAgUm93RHJhZ0NlbGxfZGVmaW5lUHJvcGVydHkoUm93RHJhZ0NlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VudFwiLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIF90aGlzLmVsID0gZWw7XG4gICAgfSk7XG5cbiAgICBSb3dEcmFnQ2VsbF9kZWZpbmVQcm9wZXJ0eShSb3dEcmFnQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdTdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJGVsLCBfdGhpcyRlbCR0ZXh0Q29udGVudCwgX3RoaXMkZWwyLCBfdGhpcyRwcm9wcyRvbkRyYWdTdGEsIF90aGlzJHByb3BzO1xuXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICgoX3RoaXMkZWwgPSBfdGhpcy5lbCkgPT09IG51bGwgfHwgX3RoaXMkZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGVsLnBhcmVudEVsZW1lbnQpKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUxMVxuICAgICAgICB2YXIgcmVjdCA9IF90aGlzLmVsLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgX3RoaXMuY2xvbmVFbCA9IF90aGlzLmVsLmNsb25lTm9kZSh0cnVlKTsgLy8gVFM6IHRoaXMgc2VlbXMgc2FmZSB0byBhc3N1bWU/XG5cbiAgICAgICAgX3RoaXMuY2xvbmVFbC5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KHJlY3Qud2lkdGgsIFwicHhcIik7XG4gICAgICAgIF90aGlzLmNsb25lRWwuc3R5bGUuaGVpZ2h0ID0gXCJcIi5jb25jYXQocmVjdC5oZWlnaHQsIFwicHhcIik7XG5cbiAgICAgICAgX3RoaXMuY2xvbmVFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGVscGVyJywgJ3RydWUnKTtcblxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF90aGlzLmNsb25lRWwpO1xuICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoX3RoaXMuY2xvbmVFbCwgZS5jbGllbnRYIC0gcmVjdC5sZWZ0LCBlLmNsaWVudFkgLSByZWN0LnRvcCk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzRHJhZ2dpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XG4gICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0JywgKF90aGlzJGVsJHRleHRDb250ZW50ID0gKF90aGlzJGVsMiA9IF90aGlzLmVsKSA9PT0gbnVsbCB8fCBfdGhpcyRlbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGVsMi50ZXh0Q29udGVudCkgIT09IG51bGwgJiYgX3RoaXMkZWwkdGV4dENvbnRlbnQgIT09IHZvaWQgMCA/IF90aGlzJGVsJHRleHRDb250ZW50IDogJycpOyAvLyBSZXF1aXJlZCBmb3IgRmlyZWZveFxuXG4gICAgICAoX3RoaXMkcHJvcHMkb25EcmFnU3RhID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLm9uRHJhZ1N0YXJ0KSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkRyYWdTdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uRHJhZ1N0YS5jYWxsKF90aGlzJHByb3BzLCBfdGhpcy5wcm9wcy5pbmRleCwgX3RoaXMucHJvcHMuZGF0YUlkKTtcbiAgICB9KTtcblxuICAgIFJvd0RyYWdDZWxsX2RlZmluZVByb3BlcnR5KFJvd0RyYWdDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlRHJhZ0VuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25EcmFnRW5kLCBfdGhpcyRwcm9wczI7XG5cbiAgICAgIF90aGlzLmNsZWFudXBEcmFnKCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25EcmFnRW5kID0gKF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzKS5vbkRyYWdFbmQpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRHJhZ0VuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25EcmFnRW5kLmNhbGwoX3RoaXMkcHJvcHMyKTtcbiAgICB9KTtcblxuICAgIFJvd0RyYWdDZWxsX2RlZmluZVByb3BlcnR5KFJvd0RyYWdDZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlS2V5RG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uUmVxdWVzdE1vdmVSb3cgPSBfdGhpcyRwcm9wczMub25SZXF1ZXN0TW92ZVJvdyxcbiAgICAgICAgICBpbmRleCA9IF90aGlzJHByb3BzMy5pbmRleCxcbiAgICAgICAgICBkYXRhSWQgPSBfdGhpcyRwcm9wczMuZGF0YUlkLFxuICAgICAgICAgIG9uS2V5RG93biA9IF90aGlzJHByb3BzMy5vbktleURvd247XG4gICAgICB2YXIgY29kZSA9IE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGNvZGUgPT09ICd1cCcgfHwgY29kZSA9PT0gJ2Rvd24nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvZGUgPT09ICd1cCcgJiYgaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+IDApIHtcbiAgICAgICAgb25SZXF1ZXN0TW92ZVJvdyA9PT0gbnVsbCB8fCBvblJlcXVlc3RNb3ZlUm93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlcXVlc3RNb3ZlUm93KHtcbiAgICAgICAgICBmcm9tSW5kZXg6IGluZGV4LFxuICAgICAgICAgIHRvSW5kZXg6IGluZGV4IC0gMSxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFJZFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gJ2Rvd24nICYmIGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25SZXF1ZXN0TW92ZVJvdyA9PT0gbnVsbCB8fCBvblJlcXVlc3RNb3ZlUm93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlcXVlc3RNb3ZlUm93KHtcbiAgICAgICAgICBmcm9tSW5kZXg6IGluZGV4LFxuICAgICAgICAgIHRvSW5kZXg6IGluZGV4ICsgMSxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFJZFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25LZXlEb3duKGUsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgZGF0YUlkOiBkYXRhSWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBSb3dEcmFnQ2VsbF9jcmVhdGVDbGFzcyhSb3dEcmFnQ2VsbCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBnZXQgaGFuZGxlIG9mIHRoZSBlbGVtZW50IGFuZCBhZGQgZm9jdXNcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFJZCA9IF90aGlzJHByb3BzNC5kYXRhSWQsXG4gICAgICAgICAgYWN0aXZlRWxlbWVudElkID0gX3RoaXMkcHJvcHM0LmFjdGl2ZUVsZW1lbnRJZDtcblxuICAgICAgaWYgKGRhdGFJZCA9PT0gYWN0aXZlRWxlbWVudElkKSB7XG4gICAgICAgIHZhciBfdGhpcyRlbDMsIF90aGlzJGVsMyRwYXJlbnRFbGVtZTtcblxuICAgICAgICAoX3RoaXMkZWwzID0gdGhpcy5lbCkgPT09IG51bGwgfHwgX3RoaXMkZWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkZWwzJHBhcmVudEVsZW1lID0gX3RoaXMkZWwzLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF90aGlzJGVsMyRwYXJlbnRFbGVtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZWwzJHBhcmVudEVsZW1lLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwRHJhZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbGVhbnVwRHJhZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbnVwRHJhZygpIHtcbiAgICAgIGlmICh0aGlzLmNsb25lRWwpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvbmVFbC5yZW1vdmUpIHtcbiAgICAgICAgICB0aGlzLmNsb25lRWwucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF90aGlzJGNsb25lRWwkcGFyZW50TjtcblxuICAgICAgICAgIChfdGhpcyRjbG9uZUVsJHBhcmVudE4gPSB0aGlzLmNsb25lRWwucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX3RoaXMkY2xvbmVFbCRwYXJlbnROID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjbG9uZUVsJHBhcmVudE4ucmVtb3ZlQ2hpbGQodGhpcy5jbG9uZUVsKTsgLy8gSUVcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvbmVFbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHNob3dSb3dHdWlkZWxpbmUgPSBfdGhpcyRwcm9wczUuc2hvd1Jvd0d1aWRlbGluZSxcbiAgICAgICAgICByb3dTcGFuID0gX3RoaXMkcHJvcHM1LnJvd1NwYW47XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFJvd0RyYWdDZWxsU3R5bGVzX1N0eWxlZCwge1xuICAgICAgICAkYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiZHJhZ1wiLFxuICAgICAgICAkZHJhZ2dpbmc6IHRoaXMuc3RhdGUuaXNEcmFnZ2luZyxcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIHJvd1NwYW46IHJvd1NwYW4sXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duXG4gICAgICB9LCBzaG93Um93R3VpZGVsaW5lICE9PSAnbm9uZScgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFJvd0RyYWdDZWxsU3R5bGVzX1N0eWxlZEd1aWRlTGluZSwge1xuICAgICAgICAkcG9zaXRpb246IHNob3dSb3dHdWlkZWxpbmVcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkRHJhZywge1xuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgICRkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgICRkcmFnZ2luZzogdGhpcy5zdGF0ZS5pc0RyYWdnaW5nIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgb25EcmFnU3RhcnQ6IHRoaXMuaGFuZGxlRHJhZ1N0YXJ0LFxuICAgICAgICBvbkRyYWdFbmQ6IHRoaXMuaGFuZGxlRHJhZ0VuZCxcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZU1vdW50XG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGFibGVfRHJhZ0hhbmRsZSwge1xuICAgICAgICBzY3JlZW5SZWFkZXJDb250ZW50OiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnUHJlc3MgdXAgb3IgZG93biBhcnJvdyBrZXkgdG8gcmVvcmRlciB0aGUgY29sdW1ucy4nKVxuICAgICAgfSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUm93RHJhZ0NlbGw7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cblJvd0RyYWdDZWxsX2RlZmluZVByb3BlcnR5KFJvd0RyYWdDZWxsX1Jvd0RyYWdDZWxsLCBcInByb3BUeXBlc1wiLCBSb3dEcmFnQ2VsbF9wcm9wVHlwZXMpO1xuXG5Sb3dEcmFnQ2VsbF9kZWZpbmVQcm9wZXJ0eShSb3dEcmFnQ2VsbF9Sb3dEcmFnQ2VsbCwgXCJkZWZhdWx0UHJvcHNcIiwgUm93RHJhZ0NlbGxfZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgVGFibGVfUm93RHJhZ0NlbGwgPSAoUm93RHJhZ0NlbGxfUm93RHJhZ0NlbGwpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvUm93U3R5bGVzLnRzXG5cblxuXG52YXIgU3R5bGVkU3RyaXBlTm9uZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS50ci53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiUm93U3R5bGVzX19TdHlsZWRTdHJpcGVOb25lXCIsXG4gIGNvbXBvbmVudElkOiBcImYwaWdxcS0wXCJcbn0pKFtcIlwiLCBcIiBiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIiwgXCI7QG1lZGlhIHByaW50e2JhY2tncm91bmQtY29sb3I6bm9uZTt9XCIsIFwiIFwiLCBcIlwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgndGFibGUtcm93JyksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udHJhbnNwYXJlbnRcbn0pLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJGNsaWNrYWJsZSA9IF9yZWYuJGNsaWNrYWJsZTtcbiAgcmV0dXJuICRjbGlja2FibGUgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY3Vyc29yOnBvaW50ZXI7Jjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9Jjpmb2N1c3tib3gtc2hhZG93OlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvckw1MCxcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JENTBcbiAgICB9LFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyXG4gIH0pLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93SW5zZXQpO1xufSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkLFxuICAgICAgJGV4cGFuZGFibGUgPSBfcmVmMi4kZXhwYW5kYWJsZTtcbiAgcmV0dXJuICFkaXNhYmxlZCAmJiAhJGV4cGFuZGFibGUgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjpub3QoW2RhdGEtZXhwYW5zaW9uLXJvdz0ndHJ1ZSddKXsmOmhvdmVye2JhY2tncm91bmQtY29sb3I6XCIsIFwiO319XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlIb3ZlclxuICB9KSk7XG59LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGRpc2FibGVkID0gX3JlZjMuZGlzYWJsZWQ7XG4gIHJldHVybiBkaXNhYmxlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWRcbiAgfSkpO1xufSk7XG52YXIgU3R5bGVkU3RyaXBlT2RkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFN0eWxlZFN0cmlwZU5vbmUpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJSb3dTdHlsZXNfX1N0eWxlZFN0cmlwZU9kZFwiLFxuICBjb21wb25lbnRJZDogXCJmMGlncXEtMVwiXG59KShbXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5MjJcbiAgfSxcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRyYW5zcGFyZW50XG59KSk7XG52YXIgU3R5bGVkU3RyaXBlRXZlbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShTdHlsZWRTdHJpcGVOb25lKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiUm93U3R5bGVzX19TdHlsZWRTdHJpcGVFdmVuXCIsXG4gIGNvbXBvbmVudElkOiBcImYwaWdxcS0yXCJcbn0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTYsXG4gICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5MjBcbiAgfSxcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRyYW5zcGFyZW50XG59KSk7XG52YXIgU3R5bGVkQ2VsbFNlbGVjdGlvbkRpc2FibGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFRhYmxlX0NlbGwpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJSb3dTdHlsZXNfX1N0eWxlZENlbGxTZWxlY3Rpb25EaXNhYmxlZFwiLFxuICBjb21wb25lbnRJZDogXCJmMGlncXEtM1wiXG59KShbXCImJntjdXJzb3I6bm90LWFsbG93ZWQ7fVwiXSk7XG52YXIgU3R5bGVkQ2VsbEV4cGFuc2lvbkRpc2FibGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFRhYmxlX0NlbGwpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJSb3dTdHlsZXNfX1N0eWxlZENlbGxFeHBhbnNpb25EaXNhYmxlZFwiLFxuICBjb21wb25lbnRJZDogXCJmMGlncXEtNFwiXG59KShbXCJ3aWR0aDpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzM1cHgnLFxuICBwcmlzbWE6ICc0MHB4J1xufSkpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Td2l0Y2hcIlxudmFyIFN3aXRjaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcbnZhciBTd2l0Y2hfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oU3dpdGNoXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL1RvZ2dsZVN0eWxlcy50c1xuXG5cblxudmFyIFN0eWxlZFN3aXRjaCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShTd2l0Y2hfZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVG9nZ2xlU3R5bGVzX19TdHlsZWRTd2l0Y2hcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXgzaWtjaC0wXCJcbn0pKFtcIm1hcmdpbjpcIiwgXCI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckYWxsUm93cycsIHtcbiAgXCJ0cnVlXCI6IHtcbiAgICBlbnRlcnByaXNlOiAnLTZweCAwJyxcbiAgICBwcmlzbWE6ICctMTBweCAwJ1xuICB9LFxuICBcImZhbHNlXCI6ICctNnB4IDAnXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL1RvZ2dsZS50c3hcbmZ1bmN0aW9uIFRvZ2dsZV9leHRlbmRzKCkgeyBUb2dnbGVfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBUb2dnbGVfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIFRvZ2dsZV9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gVG9nZ2xlX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBUb2dnbGVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cblxudmFyIFRvZ2dsZV9wcm9wVHlwZXMgPSB7XG4gIGFsbFJvd3M6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGRpc2FibGVkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBvbkNsaWNrOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBzZWxlY3RlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoW3RydWUsIGZhbHNlLCAnc29tZSddKVxufTtcblxuZnVuY3Rpb24gVG9nZ2xlKF9yZWYpIHtcbiAgdmFyIF9yZWYkYWxsUm93cyA9IF9yZWYuYWxsUm93cyxcbiAgICAgIGFsbFJvd3MgPSBfcmVmJGFsbFJvd3MgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRhbGxSb3dzLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgX3JlZiRzZWxlY3RlZCA9IF9yZWYuc2VsZWN0ZWQsXG4gICAgICBzZWxlY3RlZCA9IF9yZWYkc2VsZWN0ZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzZWxlY3RlZCxcbiAgICAgIG90aGVyUHJvcHMgPSBUb2dnbGVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiYWxsUm93c1wiLCBcImRpc2FibGVkXCIsIFwic2VsZWN0ZWRcIl0pO1xuXG4gIHZhciBhcmlhTGFiZWwgPSBhbGxSb3dzID8gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ05vIHJvd3Mgc2VsZWN0ZWQnKSA6IE9iamVjdChpMThuX1tcIl9cIl0pKCdSb3cgdW5zZWxlY3RlZCcpO1xuXG4gIGlmIChzZWxlY3RlZCA9PT0gJ3NvbWUnKSB7XG4gICAgYXJpYUxhYmVsID0gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1NvbWUgcm93cyBzZWxlY3RlZCcpO1xuICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XG4gICAgYXJpYUxhYmVsID0gYWxsUm93cyA/IE9iamVjdChpMThuX1tcIl9cIl0pKCdBbGwgcm93cyBzZWxlY3RlZCcpIDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1JvdyBzZWxlY3RlZCcpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRTd2l0Y2gsIFRvZ2dsZV9leHRlbmRzKHtcbiAgICAkYWxsUm93czogYWxsUm93c1xuICB9LCBvdGhlclByb3BzLCB7XG4gICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICB2YWx1ZTogXCJcIixcbiAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICBzZWxlY3RlZExhYmVsOiBhbGxSb3dzID8gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0FsbCByb3dzIHNlbGVjdGVkJykgOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnUm93IHNlbGVjdGVkJyksXG4gICAgdW5zZWxlY3RlZExhYmVsOiBhbGxSb3dzID8gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ05vIHJvd3Mgc2VsZWN0ZWQnKSA6IE9iamVjdChpMThuX1tcIl9cIl0pKCdSb3cgdW5zZWxlY3RlZCcpLFxuICAgIHNvbWVTZWxlY3RlZExhYmVsOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnU29tZSByb3dzIHNlbGVjdGVkJylcbiAgfSkpO1xufVxuXG5Ub2dnbGUucHJvcFR5cGVzID0gVG9nZ2xlX3Byb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRhYmxlX1RvZ2dsZSA9IChUb2dnbGUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvUm93LnRzeFxuZnVuY3Rpb24gUm93X3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgUm93X3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBSb3dfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFJvd190eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBSb3dfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IFJvd19vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gUm93X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBSb3dfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBSb3dfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIFJvd19jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIFJvd19kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgUm93X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIFJvd19pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBSb3dfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIFJvd19zZXRQcm90b3R5cGVPZihvLCBwKSB7IFJvd19zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gUm93X3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIFJvd19jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gUm93X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IFJvd19nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gUm93X2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBSb3dfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIFJvd19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKFJvd190eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIFJvd19hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gUm93X2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIFJvd19pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gUm93X2dldFByb3RvdHlwZU9mKG8pIHsgUm93X2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIFJvd19nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBSb3dfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBSb3dfZXh0ZW5kcygpIHsgUm93X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gUm93X2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIFN0eWxlZFN0cmlwZUNvbXBvbmVudHMgPSB7XG4gIG9kZDogU3R5bGVkU3RyaXBlT2RkLFxuICBldmVuOiBTdHlsZWRTdHJpcGVFdmVuLFxuICBub25lOiBTdHlsZWRTdHJpcGVOb25lXG59O1xuLyoqIEBwdWJsaWMgKi9cblxudmFyIFJvd19wcm9wVHlwZXMgPSB7XG4gIC8qKiBAcHJpdmF0ZS4gR2VuZXJhbGx5IHBhc3NlZCBieSBUYWJsZSByYXRoZXIgdGhhbiBhZGRlZCBkaXJlY3RseS4gKi9cbiAgYWN0aXZlRWxlbWVudElkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGFjdGlvblByaW1hcnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmVsZW1lbnQsXG4gIGFjdGlvbnNTZWNvbmRhcnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmVsZW1lbnQsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBkYXRhOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hbnksXG5cbiAgLyoqIEBwcml2YXRlLiBHZW5lcmFsbHkgcGFzc2VkIGJ5IFRhYmxlIHJhdGhlciB0aGFuIGFkZGVkIGRpcmVjdGx5LiAqL1xuICBkYXRhSWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXJdKSxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqIEBwcml2YXRlLiBHZW5lcmFsbHkgcGFzc2VkIGJ5IFRhYmxlIHJhdGhlciB0aGFuIGFkZGVkIGRpcmVjdGx5LiAqL1xuICBkcmFnZ2FibGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBleHBhbmRhYmxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgZXhwYW5kZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGV4cGFuc2lvblJvdzogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5lbGVtZW50LCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheU9mKGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmVsZW1lbnQpXSksXG5cbiAgLyoqIEBwcml2YXRlLiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUgaGFzIGFuIGFjdGlvbnMgY29sdW1uLiAqL1xuICBhY3Rpb25zOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZS4gR2VuZXJhbGx5IHBhc3NlZCBieSBgVGFibGVgIHJhdGhlciB0aGFuIGFkZGVkIGRpcmVjdGx5LiAqL1xuICBpbmRleDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuXG4gIC8qKiBAcHJpdmF0ZS4gR2VuZXJhbGx5IHBhc3NlZCBieSBgVGFibGVgIHJhdGhlciB0aGFuIGFkZGVkIGRpcmVjdGx5LiAqL1xuICBtb3ZhYmxlQ29sdW1uczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgb25DbGljazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUuIEdlbmVyYWxseSBwYXNzZWQgYnkgYFRhYmxlYCByYXRoZXIgdGhhbiBhZGRlZCBkaXJlY3RseS4gKi9cbiAgb25EcmFnU3RhcnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvbkV4cGFuc2lvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUuIFRoaXMgaXMgcGFzc2VkIHRocm91Z2ggYW5kIHdvcmtzIGFzIGV4cGVjdGVkLiAqL1xuICBvbktleURvd246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiBHZW5lcmFsbHkgcGFzc2VkIGJ5IGBUYWJsZWAgcmF0aGVyIHRoYW4gYWRkZWQgZGlyZWN0bHkuICovXG4gIG9uUmVxdWVzdE1vdmVSb3c6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uUmVxdWVzdFRvZ2dsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgc2VsZWN0ZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqIEBwcml2YXRlLiBHZW5lcmFsbHkgcGFzc2VkIGJ5IGBUYWJsZWAgcmF0aGVyIHRoYW4gYWRkZWQgZGlyZWN0bHkuICovXG4gIHNob3dSb3dHdWlkZWxpbmU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnbm9uZScsICdiZWZvcmUnLCAnYWZ0ZXInXSksXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBzdHJpcGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnb2RkJywgJ2V2ZW4nLCAnbm9uZSddKVxufTtcbnZhciBSb3dfZGVmYXVsdFByb3BzID0ge1xuICBzdHJpcGU6ICdub25lJ1xufTtcbnZhciBBY3Rpb25zU2Vjb25kYXJ5VG9nZ2xlID0gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVG9vbHRpcF9kZWZhdWx0LmEsIFJvd19leHRlbmRzKHtcbiAgICBjb250ZW50OiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnQWN0aW9ucycpLFxuICAgIGNvbnRlbnRSZWxhdGlvbnNoaXA6IFwibGFiZWxcIlxuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChCdXR0b25fZGVmYXVsdC5hLCB7XG4gICAgYXBwZWFyYW5jZTogXCJzZWNvbmRhcnlcIixcbiAgICBcImRhdGEtdGVzdFwiOiBcImFjdGlvbnMtc2Vjb25kYXJ5LXRvZ2dsZVwiLFxuICAgIGljb246IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChNb3JlVmVydGljYWxbXCJhXCIgLyogZGVmYXVsdCAqL10sIG51bGwpLFxuICAgIGVsZW1lbnRSZWY6IHJlZlxuICB9KSk7XG59KTtcblxudmFyIFJvd19Sb3cgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgUm93X2luaGVyaXRzKFJvdywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IFJvd19jcmVhdGVTdXBlcihSb3cpO1xuXG4gIGZ1bmN0aW9uIFJvdygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBSb3dfY2xhc3NDYWxsQ2hlY2sodGhpcywgUm93KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBSb3dfZGVmaW5lUHJvcGVydHkoUm93X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGEgPSBfdGhpcyRwcm9wcy5kYXRhLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbkNsaWNrO1xuICAgICAgdmFyIGVsID0gZS50YXJnZXQ7XG5cbiAgICAgIHdoaWxlIChlbCkge1xuICAgICAgICAvLyBJZ25vcmUgY2xpY2tzIG9uIHJvdy1hY3Rpb25zXG4gICAgICAgIGlmIChlbC50YWdOYW1lID09PSAnQlVUVE9OJyB8fCBlbC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljayhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFJvd19kZWZpbmVQcm9wZXJ0eShSb3dfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVLZXlEb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgZGF0YSA9IF90aGlzJHByb3BzMi5kYXRhLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25DbGljayxcbiAgICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczIub25LZXlEb3duO1xuXG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpID09PSAnZW50ZXInICYmIG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljayhlLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25LZXlEb3duKGUpO1xuICAgIH0pO1xuXG4gICAgUm93X2RlZmluZVByb3BlcnR5KFJvd19hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVRvZ2dsZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGEgPSBfdGhpcyRwcm9wczMuZGF0YSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzMy5kaXNhYmxlZCxcbiAgICAgICAgICBvblJlcXVlc3RUb2dnbGUgPSBfdGhpcyRwcm9wczMub25SZXF1ZXN0VG9nZ2xlO1xuXG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25SZXF1ZXN0VG9nZ2xlID09PSBudWxsIHx8IG9uUmVxdWVzdFRvZ2dsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXF1ZXN0VG9nZ2xlKGUsIGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgUm93X2RlZmluZVByb3BlcnR5KFJvd19hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlckFjdGlvblByaW1hcnlcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFjdGlvblByaW1hcnkgPSBfdGhpcy5wcm9wcy5hY3Rpb25QcmltYXJ5O1xuXG4gICAgICBpZiAoYWN0aW9uUHJpbWFyeSAmJiBhY3Rpb25QcmltYXJ5LnByb3BzLm9uQ2xpY2spIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShhY3Rpb25QcmltYXJ5LCB7XG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgICB2YXIgX2FjdGlvblByaW1hcnkkcHJvcHMkLCBfYWN0aW9uUHJpbWFyeSRwcm9wcztcblxuICAgICAgICAgICAgcmV0dXJuIChfYWN0aW9uUHJpbWFyeSRwcm9wcyQgPSAoX2FjdGlvblByaW1hcnkkcHJvcHMgPSBhY3Rpb25QcmltYXJ5LnByb3BzKS5vbkNsaWNrKSA9PT0gbnVsbCB8fCBfYWN0aW9uUHJpbWFyeSRwcm9wcyQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hY3Rpb25QcmltYXJ5JHByb3BzJC5jYWxsKF9hY3Rpb25QcmltYXJ5JHByb3BzLCBlLCBfdGhpcy5wcm9wcy5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uUHJpbWFyeTtcbiAgICB9KTtcblxuICAgIFJvd19kZWZpbmVQcm9wZXJ0eShSb3dfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5kZXJBY3Rpb25zU2Vjb25kYXJ5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhY3Rpb25zU2Vjb25kYXJ5ID0gX3RoaXMucHJvcHMuYWN0aW9uc1NlY29uZGFyeTtcblxuICAgICAgaWYgKGFjdGlvbnNTZWNvbmRhcnkgJiYgYWN0aW9uc1NlY29uZGFyeS5wcm9wcy5jaGlsZHJlbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoYWN0aW9uc1NlY29uZGFyeS5wcm9wcy5jaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKTtcbiAgICAgICAgdmFyIGNsb25lZEFjdGlvbnMgPSBhY3Rpb25zLm1hcChmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL09iamVjdChleHRlcm5hbF9yZWFjdF9bXCJjbG9uZUVsZW1lbnRcIl0pKGFjdGlvbiwge1xuICAgICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2FjdGlvbiRwcm9wcyRvbkNsaWNrLCBfYWN0aW9uJHByb3BzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYWN0aW9uJHByb3BzJG9uQ2xpY2sgPSAoX2FjdGlvbiRwcm9wcyA9IGFjdGlvbi5wcm9wcykub25DbGljaykgPT09IG51bGwgfHwgX2FjdGlvbiRwcm9wcyRvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYWN0aW9uJHByb3BzJG9uQ2xpY2suY2FsbChfYWN0aW9uJHByb3BzLCBlLCBfdGhpcy5wcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoYWN0aW9uc1NlY29uZGFyeSwge1xuICAgICAgICAgIGNoaWxkcmVuOiBjbG9uZWRBY3Rpb25zXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uc1NlY29uZGFyeTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFJvd19jcmVhdGVDbGFzcyhSb3csIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3Rpb25zID0gX3RoaXMkcHJvcHM0LmFjdGlvbnMsXG4gICAgICAgICAgYWN0aW9uUHJpbWFyeSA9IF90aGlzJHByb3BzNC5hY3Rpb25QcmltYXJ5LFxuICAgICAgICAgIGFjdGlvbnNTZWNvbmRhcnkgPSBfdGhpcyRwcm9wczQuYWN0aW9uc1NlY29uZGFyeSxcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SWQgPSBfdGhpcyRwcm9wczQuYWN0aXZlRWxlbWVudElkLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM0LmNoaWxkcmVuLFxuICAgICAgICAgIGRhdGFJZCA9IF90aGlzJHByb3BzNC5kYXRhSWQsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczQuZGlzYWJsZWQsXG4gICAgICAgICAgZHJhZ2dhYmxlID0gX3RoaXMkcHJvcHM0LmRyYWdnYWJsZSxcbiAgICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHM0LmVsZW1lbnRSZWYsXG4gICAgICAgICAgZXhwYW5kYWJsZSA9IF90aGlzJHByb3BzNC5leHBhbmRhYmxlLFxuICAgICAgICAgIGV4cGFuZGVkID0gX3RoaXMkcHJvcHM0LmV4cGFuZGVkLFxuICAgICAgICAgIGV4cGFuc2lvblJvdyA9IF90aGlzJHByb3BzNC5leHBhbnNpb25Sb3csXG4gICAgICAgICAgaW5kZXggPSBfdGhpcyRwcm9wczQuaW5kZXgsXG4gICAgICAgICAgbW92YWJsZUNvbHVtbnMgPSBfdGhpcyRwcm9wczQubW92YWJsZUNvbHVtbnMsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzNC5vbkNsaWNrLFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3RoaXMkcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxuICAgICAgICAgIG9uRXhwYW5zaW9uID0gX3RoaXMkcHJvcHM0Lm9uRXhwYW5zaW9uLFxuICAgICAgICAgIG9uUmVxdWVzdE1vdmVSb3cgPSBfdGhpcyRwcm9wczQub25SZXF1ZXN0TW92ZVJvdyxcbiAgICAgICAgICBvblJlcXVlc3RUb2dnbGUgPSBfdGhpcyRwcm9wczQub25SZXF1ZXN0VG9nZ2xlLFxuICAgICAgICAgIHNlbGVjdGVkID0gX3RoaXMkcHJvcHM0LnNlbGVjdGVkLFxuICAgICAgICAgIHNob3dSb3dHdWlkZWxpbmUgPSBfdGhpcyRwcm9wczQuc2hvd1Jvd0d1aWRlbGluZSxcbiAgICAgICAgICBzdHJpcGUgPSBfdGhpcyRwcm9wczQuc3RyaXBlLFxuICAgICAgICAgIG90aGVyUHJvcHMgPSBSb3dfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM0LCBbXCJhY3Rpb25zXCIsIFwiYWN0aW9uUHJpbWFyeVwiLCBcImFjdGlvbnNTZWNvbmRhcnlcIiwgXCJhY3RpdmVFbGVtZW50SWRcIiwgXCJjaGlsZHJlblwiLCBcImRhdGFJZFwiLCBcImRpc2FibGVkXCIsIFwiZHJhZ2dhYmxlXCIsIFwiZWxlbWVudFJlZlwiLCBcImV4cGFuZGFibGVcIiwgXCJleHBhbmRlZFwiLCBcImV4cGFuc2lvblJvd1wiLCBcImluZGV4XCIsIFwibW92YWJsZUNvbHVtbnNcIiwgXCJvbkNsaWNrXCIsIFwib25EcmFnU3RhcnRcIiwgXCJvbkV4cGFuc2lvblwiLCBcIm9uUmVxdWVzdE1vdmVSb3dcIiwgXCJvblJlcXVlc3RUb2dnbGVcIiwgXCJzZWxlY3RlZFwiLCBcInNob3dSb3dHdWlkZWxpbmVcIiwgXCJzdHJpcGVcIl0pO1xuXG4gICAgICB2YXIgY2hpbGRyZW5DbG9uZWQgPSAhb25DbGljayA/IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShjaGlsZCwge1xuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgICAgICB9KTtcbiAgICAgIH0pIC8vIGVuc3VyZSBjb25zaXN0ZW50IGtleXNcbiAgICAgIDogZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoY2hpbGQsIHtcbiAgICAgICAgICBhcHBlYXJhbmNlOiAncm93TGluaycsXG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgU3R5bGVkU3RyaXBlID0gU3R5bGVkU3RyaXBlQ29tcG9uZW50c1tzdHJpcGVdO1xuICAgICAgdmFyIFN0eWxlZENlbGxUb2dnbGUgPSBkaXNhYmxlZCA/IFN0eWxlZENlbGxTZWxlY3Rpb25EaXNhYmxlZCA6IFRhYmxlX0NlbGw7XG4gICAgICB2YXIgcm93U3BhbiA9IGV4cGFuZGVkID8gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0uY291bnQoZXhwYW5zaW9uUm93KSArIDEgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgZGF0YU1vdmFibGVDb2x1bW4gPSBtb3ZhYmxlQ29sdW1ucyA/ICdmYWxzZScgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgYWN0aW9uc1NlY29uZGFyeVRvZ2dsZSA9IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChBY3Rpb25zU2Vjb25kYXJ5VG9nZ2xlLCBudWxsKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkU3RyaXBlLCBSb3dfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwicm93XCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXNlbGVjdGVkXCI6IG9uUmVxdWVzdFRvZ2dsZSA/IHNlbGVjdGVkIDogdW5kZWZpbmVkLFxuICAgICAgICAkY2xpY2thYmxlOiAhIW9uQ2xpY2ssXG4gICAgICAgIFwiZGF0YS1oYXMtbW92YWJsZS1jb2x1bW5zXCI6IG1vdmFibGVDb2x1bW5zID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlZDogISFkaXNhYmxlZCxcbiAgICAgICAgJGV4cGFuZGFibGU6ICEhZXhwYW5kYWJsZSxcbiAgICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgICB0YWJJbmRleDogb25DbGljayA/IDAgOiB1bmRlZmluZWRcbiAgICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgICAgb25DbGljazogb25DbGljayA/IHRoaXMuaGFuZGxlQ2xpY2sgOiB1bmRlZmluZWQsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICAkcm93U2VsZWN0ZWQ6ICEhKG9uUmVxdWVzdFRvZ2dsZSAmJiBzZWxlY3RlZClcbiAgICAgIH0pLCBkcmFnZ2FibGUgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhYmxlX1Jvd0RyYWdDZWxsLCB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJZDogYWN0aXZlRWxlbWVudElkLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZCxcbiAgICAgICAgXCJkYXRhLW1vdmFibGUtY29sdW1uXCI6IGRhdGFNb3ZhYmxlQ29sdW1uLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIG9uUmVxdWVzdE1vdmVSb3c6IG9uUmVxdWVzdE1vdmVSb3csXG4gICAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcbiAgICAgICAgcm93U3Bhbjogcm93U3BhbixcbiAgICAgICAgc2hvd1Jvd0d1aWRlbGluZTogc2hvd1Jvd0d1aWRlbGluZVxuICAgICAgfSksIG9uUmVxdWVzdFRvZ2dsZSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2VsbFRvZ2dsZSwge1xuICAgICAgICBhcHBlYXJhbmNlOiBvbkNsaWNrID8gJ3Jvd0xpbmsnIDogJ2RhdGEnLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRvZ2dsZVwiLFxuICAgICAgICB2YXJpYW50OiBcInRvZ2dsZVwiLFxuICAgICAgICBcImRhdGEtbW92YWJsZS1jb2x1bW5cIjogZGF0YU1vdmFibGVDb2x1bW4sXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlVG9nZ2xlLFxuICAgICAgICByb3dTcGFuOiByb3dTcGFuLFxuICAgICAgICByb2xlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IHNlbGVjdGVkXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGFibGVfVG9nZ2xlLCB7XG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkXG4gICAgICB9KSksIGV4cGFuZGFibGUgJiYgZXhwYW5zaW9uUm93ICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUYWJsZV9DZWxsLCB7XG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBhcHBlYXJhbmNlOiBcImRhdGFcIixcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGV4cGFuZGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0V4cGFuZGFibGUgcm93JyksXG4gICAgICAgIFwiZGF0YS1tb3ZhYmxlLWNvbHVtblwiOiBkYXRhTW92YWJsZUNvbHVtbixcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJleHBhbmRcIixcbiAgICAgICAgZXhwYW5kOiBleHBhbmRlZCxcbiAgICAgICAgb25DbGljazogb25FeHBhbnNpb24sXG4gICAgICAgIHJvd1NwYW46IHJvd1NwYW4sXG4gICAgICAgIHZhcmlhbnQ6IFwiZXhwYW5kXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgICAgdGl0bGU6IGV4cGFuZGVkID8gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0NvbGxhcHNlIHJvdycpIDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0V4cGFuZCByb3cnKVxuICAgICAgfSwgZXhwYW5kZWQgPyAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQ2hldnJvbkRvd25bXCJhXCIgLyogZGVmYXVsdCAqL10sIHtcbiAgICAgICAgcHJpc21hU2l6ZTogXCJzbWFsbFwiXG4gICAgICB9KSA6IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDaGV2cm9uUmlnaHRbXCJhXCIgLyogZGVmYXVsdCAqL10sIHtcbiAgICAgICAgcHJpc21hU2l6ZTogXCJzbWFsbFwiXG4gICAgICB9KSkpLCBleHBhbmRhYmxlICYmICFleHBhbnNpb25Sb3cgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENlbGxFeHBhbnNpb25EaXNhYmxlZCwge1xuICAgICAgICB2YXJpYW50OiBcImV4cGFuZFwiLFxuICAgICAgICBcImRhdGEtbW92YWJsZS1jb2x1bW5cIjogZGF0YU1vdmFibGVDb2x1bW5cbiAgICAgIH0pLCBjaGlsZHJlbkNsb25lZCwgYWN0aW9ucyAmJiAhYWN0aW9uUHJpbWFyeSAmJiAhYWN0aW9uc1NlY29uZGFyeSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGFibGVfQ2VsbCwge1xuICAgICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgICBhcHBlYXJhbmNlOiBkaXNhYmxlZCA/ICdkYXRhJyA6ICdyb3dMaW5rJyxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJyb3ctYWN0aW9uc1wiLFxuICAgICAgICB2YXJpYW50OiBcImFjdGlvbnNcIixcbiAgICAgICAgXCJkYXRhLW1vdmFibGUtY29sdW1uXCI6IGRhdGFNb3ZhYmxlQ29sdW1uXG4gICAgICB9KSwgKGFjdGlvblByaW1hcnkgfHwgYWN0aW9uc1NlY29uZGFyeSkgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhYmxlX0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgYXBwZWFyYW5jZTogXCJyb3dMaW5rXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwicm93LWFjdGlvbnNcIixcbiAgICAgICAgdmFyaWFudDogXCJhY3Rpb25zXCIsXG4gICAgICAgIFwiZGF0YS1tb3ZhYmxlLWNvbHVtblwiOiBkYXRhTW92YWJsZUNvbHVtblxuICAgICAgfSwgYWN0aW9uUHJpbWFyeSAmJiB0aGlzLnJlbmRlckFjdGlvblByaW1hcnkoKSwgYWN0aW9uc1NlY29uZGFyeSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoRHJvcGRvd25fZGVmYXVsdC5hLCB7XG4gICAgICAgIHRvZ2dsZTogYWN0aW9uc1NlY29uZGFyeVRvZ2dsZVxuICAgICAgfSwgdGhpcy5yZW5kZXJBY3Rpb25zU2Vjb25kYXJ5KCkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFJvdztcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuUm93X2RlZmluZVByb3BlcnR5KFJvd19Sb3csIFwic3BsdW5rVWlUeXBlXCIsICdUYWJsZS5Sb3cnKTtcblxuUm93X2RlZmluZVByb3BlcnR5KFJvd19Sb3csIFwicHJvcFR5cGVzXCIsIFJvd19wcm9wVHlwZXMpO1xuXG5Sb3dfZGVmaW5lUHJvcGVydHkoUm93X1JvdywgXCJkZWZhdWx0UHJvcHNcIiwgUm93X2RlZmF1bHRQcm9wcyk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRhYmxlX1JvdyA9IChSb3dfUm93KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0hlYWRTdHlsZXMudHNcblxuXG5cbnZhciBIZWFkU3R5bGVzX1N0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS50aGVhZC53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSGVhZFN0eWxlc19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcImlhcDIxdC0wXCJcbn0pKFtcIlwiLCBcIjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ3RhYmxlLWhlYWRlci1ncm91cCcpKTtcbnZhciBTdHlsZWRUb2dnbGVBbGwgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoVGFibGVfSGVhZENlbGwpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkU3R5bGVzX19TdHlsZWRUb2dnbGVBbGxcIixcbiAgY29tcG9uZW50SWQ6IFwiaWFwMjF0LTFcIlxufSkoW1wid2lkdGg6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICc0MnB4JyxcbiAgcHJpc21hOiAnNDBweCdcbn0pKTtcbnZhciBTdHlsZWRJbmZvID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFRhYmxlX0hlYWRDZWxsKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSGVhZFN0eWxlc19fU3R5bGVkSW5mb1wiLFxuICBjb21wb25lbnRJZDogXCJpYXAyMXQtMlwiXG59KShbXCJ3aWR0aDpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzMycHgnLFxuICBwcmlzbWE6ICc0MHB4J1xufSkpO1xudmFyIFN0eWxlZERyYWdSb3cgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoVGFibGVfSGVhZENlbGwpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkU3R5bGVzX19TdHlsZWREcmFnUm93XCIsXG4gIGNvbXBvbmVudElkOiBcImlhcDIxdC0zXCJcbn0pKFtcIndpZHRoOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMzJweCcsXG4gIHByaXNtYTogJzQwcHgnXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0hlYWQudHN4XG5mdW5jdGlvbiBIZWFkX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgSGVhZF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgSGVhZF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gSGVhZF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBIZWFkX2V4dGVuZHMoKSB7IEhlYWRfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBIZWFkX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBIZWFkX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gSGVhZF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gSGVhZF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIEhlYWRfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIEhlYWRfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gSGVhZF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBIZWFkX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBIZWFkX3NldFByb3RvdHlwZU9mKG8sIHApIHsgSGVhZF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gSGVhZF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBIZWFkX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBIZWFkX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IEhlYWRfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IEhlYWRfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIEhlYWRfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIEhlYWRfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChIZWFkX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gSGVhZF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gSGVhZF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBIZWFkX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBIZWFkX2dldFByb3RvdHlwZU9mKG8pIHsgSGVhZF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBIZWFkX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIEhlYWRfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgSGVhZF9wcm9wVHlwZXMgPSB7XG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgYWN0aW9uczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYXJyYXlPZihleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlKSxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGFjdGlvbnNDb2x1bW5XaWR0aDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcblxuICAvKiogQHByaXZhdGUuICovXG4gIGRyYWdQb3NpdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgZHJhZ0luZGV4OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBoYXNEcmFnQ29sdW1uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgaGFzSW5mb0NvbHVtbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKiogQHByaXZhdGUuICovXG4gIG9uQXV0b3NpemVDb2x1bW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvbkRyYWdTdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUuICovXG4gIG9uUmVxdWVzdE1vdmVDb2x1bW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvblJlcXVlc3RSZXNpemVDb2x1bW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvblJlcXVlc3RUb2dnbGVBbGxSb3dzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgcm93U2VsZWN0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2FsbCcsICdzb21lJywgJ25vbmUnXSlcbn07XG52YXIgSGVhZF9kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGlvbnM6IFtdXG59O1xuXG52YXIgSGVhZF9IZWFkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIEhlYWRfaW5oZXJpdHMoSGVhZCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IEhlYWRfY3JlYXRlU3VwZXIoSGVhZCk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBIZWFkUHJvcHNCYXNlXG4gIGZ1bmN0aW9uIEhlYWQocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBIZWFkX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhlYWQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBIZWFkX2RlZmluZVByb3BlcnR5KEhlYWRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjZWxsc1wiLCB2b2lkIDApO1xuXG4gICAgSGVhZF9kZWZpbmVQcm9wZXJ0eShIZWFkX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZWxcIiwgbnVsbCk7XG5cbiAgICBIZWFkX2RlZmluZVByb3BlcnR5KEhlYWRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlcXVlc3RNb3ZlQ29sdW1uXCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgY29sdW1uSWQgPSBfcmVmLmNvbHVtbklkLFxuICAgICAgICAgIGZyb21JbmRleCA9IF9yZWYuZnJvbUluZGV4LFxuICAgICAgICAgIHRvSW5kZXggPSBfcmVmLnRvSW5kZXg7XG5cbiAgICAgIGlmICh0b0luZGV4IDwgZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShfdGhpcy5wcm9wcy5jaGlsZHJlbikubGVuZ3RoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvblJlcXVlc3QsIF90aGlzJHByb3BzO1xuXG4gICAgICAgIC8vIEhlYWRDZWxsIG5ldmVyIHJlcXVlc3RzIGxlc3MgdGhhbiB6ZXJvXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblJlcXVlc3QgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25SZXF1ZXN0TW92ZUNvbHVtbikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25SZXF1ZXN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvblJlcXVlc3QuY2FsbChfdGhpcyRwcm9wcywge1xuICAgICAgICAgIGZyb21JbmRleDogZnJvbUluZGV4LFxuICAgICAgICAgIHRvSW5kZXg6IHRvSW5kZXgsXG4gICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSGVhZF9kZWZpbmVQcm9wZXJ0eShIZWFkX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBfdGhpcy5lbCA9IGVsO1xuICAgICAgT2JqZWN0KHVwZGF0ZVJlYWN0UmVmW1wiYVwiIC8qIHVwZGF0ZVJlYWN0UmVmICovXSkoX3RoaXMucHJvcHMuZWxlbWVudFJlZiwgZWwpO1xuICAgIH0pO1xuXG4gICAgSGVhZF9kZWZpbmVQcm9wZXJ0eShIZWFkX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlRHJhZ1N0YXJ0XCIsIGZ1bmN0aW9uIChkcmFnSW5kZXgsIGRyYWdDb2x1bW5JZCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRHJhZ1N0YSwgX3RoaXMkcHJvcHMyO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyYWdDb2x1bW5JZDogZHJhZ0NvbHVtbklkXG4gICAgICB9KTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCBfdGhpcy5oYW5kbGVEcmFnRW5kKTtcbiAgICAgIChfdGhpcyRwcm9wcyRvbkRyYWdTdGEgPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uRHJhZ1N0YXJ0KSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkRyYWdTdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uRHJhZ1N0YS5jYWxsKF90aGlzJHByb3BzMiwge1xuICAgICAgICBkcmFnSW5kZXg6IGRyYWdJbmRleFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBIZWFkX2RlZmluZVByb3BlcnR5KEhlYWRfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVEcmFnRW5kXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkcmFnQ29sdW1uSWQgPSBfdGhpcy5zdGF0ZS5kcmFnQ29sdW1uSWQ7XG4gICAgICB2YXIgZHJhZ0luZGV4ID0gX3RoaXMucHJvcHMuZHJhZ0luZGV4O1xuXG4gICAgICB2YXIgZ3VpZGVsaW5lSW5kZXggPSBfdGhpcy5jYWxjdWxhdGVHdWlkZUluZGV4KCk7IC8vIFRoZSBuZXcgaW5kZXggaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBndWlkZWxpbmVJbmRleFxuXG5cbiAgICAgIHZhciB0b0luZGV4ID0gZHJhZ0luZGV4ICE9PSB1bmRlZmluZWQgJiYgZHJhZ0luZGV4IDwgZ3VpZGVsaW5lSW5kZXggPyBndWlkZWxpbmVJbmRleCAtIDEgOiBndWlkZWxpbmVJbmRleDtcblxuICAgICAgaWYgKGRyYWdJbmRleCAhPT0gdW5kZWZpbmVkICYmIGRyYWdJbmRleCAhPT0gdG9JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25SZXF1ZXN0MiwgX3RoaXMkcHJvcHMzO1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblJlcXVlc3QyID0gKF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzKS5vblJlcXVlc3RNb3ZlQ29sdW1uKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblJlcXVlc3QyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvblJlcXVlc3QyLmNhbGwoX3RoaXMkcHJvcHMzLCB7XG4gICAgICAgICAgZnJvbUluZGV4OiBkcmFnSW5kZXgsXG4gICAgICAgICAgdG9JbmRleDogdG9JbmRleCxcbiAgICAgICAgICBjb2x1bW5JZDogZHJhZ0NvbHVtbklkXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhbnVwRHJhZygpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBkcmFnQ29sdW1uSWQ6IHVuZGVmaW5lZCAvLyB0aGUgaXRlbSBiZWluZyByZW9yZGVyZWRcblxuICAgIH07XG5cbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBIZWFkX2NyZWF0ZUNsYXNzKEhlYWQsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICBpZiAoZmFsc2UpIHt9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwRHJhZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRDZWxsV2lkdGhzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldENlbGxXaWR0aHMoKSB7XG4gICAgICB2YXIgX3RoaXMkZWwkZmlyc3RFbGVtZW50LCBfdGhpcyRlbCwgX3RoaXMkZWwkZmlyc3RFbGVtZW50MjtcblxuICAgICAgdmFyIGhlYWRSb3dDZWxscyA9IEFycmF5LmZyb20oKF90aGlzJGVsJGZpcnN0RWxlbWVudCA9IChfdGhpcyRlbCA9IHRoaXMuZWwpID09PSBudWxsIHx8IF90aGlzJGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkZWwkZmlyc3RFbGVtZW50MiA9IF90aGlzJGVsLmZpcnN0RWxlbWVudENoaWxkKSA9PT0gbnVsbCB8fCBfdGhpcyRlbCRmaXJzdEVsZW1lbnQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRlbCRmaXJzdEVsZW1lbnQyLmNoaWxkcmVuKSAhPT0gbnVsbCAmJiBfdGhpcyRlbCRmaXJzdEVsZW1lbnQgIT09IHZvaWQgMCA/IF90aGlzJGVsJGZpcnN0RWxlbWVudCA6IFtdKTtcbiAgICAgIHJldHVybiBoZWFkUm93Q2VsbHMubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAgICAgcmV0dXJuIGVsLmNsaWVudFdpZHRoIC0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctcmlnaHQnKSkgLSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0JykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENsaWVudEhlaWdodFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDbGllbnRIZWlnaHQoKSB7XG4gICAgICB2YXIgX3RoaXMkZWwyO1xuXG4gICAgICByZXR1cm4gKF90aGlzJGVsMiA9IHRoaXMuZWwpID09PSBudWxsIHx8IF90aGlzJGVsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZWwyLmNsaWVudEhlaWdodDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2FsY3VsYXRlR3VpZGVJbmRleFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjYWxjdWxhdGVHdWlkZUluZGV4KCkge1xuICAgICAgdmFyIF90aGlzJGVsJGZpcnN0RWxlbWVudDMsIF90aGlzJGVsMywgX3RoaXMkZWwzJGZpcnN0RWxlbWVuO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkcmFnSW5kZXggPSBfdGhpcyRwcm9wczQuZHJhZ0luZGV4LFxuICAgICAgICAgIGRyYWdQb3NpdGlvbiA9IF90aGlzJHByb3BzNC5kcmFnUG9zaXRpb24sXG4gICAgICAgICAgaGFzSW5mb0NvbHVtbiA9IF90aGlzJHByb3BzNC5oYXNJbmZvQ29sdW1uLFxuICAgICAgICAgIGhhc0RyYWdDb2x1bW4gPSBfdGhpcyRwcm9wczQuaGFzRHJhZ0NvbHVtbixcbiAgICAgICAgICBvblJlcXVlc3RUb2dnbGVBbGxSb3dzID0gX3RoaXMkcHJvcHM0Lm9uUmVxdWVzdFRvZ2dsZUFsbFJvd3M7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmRyYWdQb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmVsKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jZWxscyA9IEFycmF5LmZyb20oKF90aGlzJGVsJGZpcnN0RWxlbWVudDMgPSAoX3RoaXMkZWwzID0gdGhpcy5lbCkgPT09IG51bGwgfHwgX3RoaXMkZWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkZWwzJGZpcnN0RWxlbWVuID0gX3RoaXMkZWwzLmZpcnN0RWxlbWVudENoaWxkKSA9PT0gbnVsbCB8fCBfdGhpcyRlbDMkZmlyc3RFbGVtZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGVsMyRmaXJzdEVsZW1lbi5jaGlsZHJlbikgIT09IG51bGwgJiYgX3RoaXMkZWwkZmlyc3RFbGVtZW50MyAhPT0gdm9pZCAwID8gX3RoaXMkZWwkZmlyc3RFbGVtZW50MyA6IFtdKS5zbGljZShoYXNJbmZvQ29sdW1uID8gMSA6IDApLnNsaWNlKGhhc0RyYWdDb2x1bW4gPyAxIDogMCkuc2xpY2Uob25SZXF1ZXN0VG9nZ2xlQWxsUm93cyA/IDEgOiAwKTtcbiAgICAgIHZhciBvdmVySW5kZXggPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImZpbmRJbmRleFwiXSkodGhpcy5jZWxscywgZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgdmFyIHJlY3QgPSBjZWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uICE9PSB1bmRlZmluZWQgJiYgZHJhZ1Bvc2l0aW9uID4gcmVjdC5sZWZ0ICYmIGRyYWdQb3NpdGlvbiA8IHJlY3QucmlnaHQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG92ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgLy8gbXVzdCBiZSB0b28gZmFyIGxlZnQgb3IgcmlnaHQ7XG4gICAgICAgIHZhciByZWN0ID0gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIGRyYWdQb3NpdGlvbiAhPT0gdW5kZWZpbmVkICYmIGRyYWdQb3NpdGlvbiA8IHJlY3QubGVmdCA/IDAgOiB0aGlzLmNlbGxzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyYWdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG92ZXJJbmRleCA+IGRyYWdJbmRleCkge1xuICAgICAgICByZXR1cm4gb3ZlckluZGV4ICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG92ZXJJbmRleDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYW51cERyYWdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW51cERyYWcoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuaGFuZGxlRHJhZ0VuZCk7XG4gICAgICB0aGlzLmNlbGxzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGlvbnMgPSBfdGhpcyRwcm9wczUuYWN0aW9ucyxcbiAgICAgICAgICBhY3Rpb25zQ29sdW1uV2lkdGggPSBfdGhpcyRwcm9wczUuYWN0aW9uc0NvbHVtbldpZHRoLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM1LmNoaWxkcmVuLFxuICAgICAgICAgIGhhc0RyYWdDb2x1bW4gPSBfdGhpcyRwcm9wczUuaGFzRHJhZ0NvbHVtbixcbiAgICAgICAgICBoYXNJbmZvQ29sdW1uID0gX3RoaXMkcHJvcHM1Lmhhc0luZm9Db2x1bW4sXG4gICAgICAgICAgb25BdXRvc2l6ZUNvbHVtbiA9IF90aGlzJHByb3BzNS5vbkF1dG9zaXplQ29sdW1uLFxuICAgICAgICAgIG9uUmVxdWVzdE1vdmVDb2x1bW4gPSBfdGhpcyRwcm9wczUub25SZXF1ZXN0TW92ZUNvbHVtbixcbiAgICAgICAgICBvblJlcXVlc3RSZXNpemVDb2x1bW4gPSBfdGhpcyRwcm9wczUub25SZXF1ZXN0UmVzaXplQ29sdW1uLFxuICAgICAgICAgIG9uUmVxdWVzdFRvZ2dsZUFsbFJvd3MgPSBfdGhpcyRwcm9wczUub25SZXF1ZXN0VG9nZ2xlQWxsUm93cyxcbiAgICAgICAgICByb3dTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczUucm93U2VsZWN0aW9uO1xuICAgICAgdmFyIGd1aWRlbGluZUluZGV4ID0gdGhpcy5jYWxjdWxhdGVHdWlkZUluZGV4KCk7XG4gICAgICB2YXIgY2xvbmVkQ2hpbGRyZW4gPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKS5maWx0ZXIoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pLm1hcChmdW5jdGlvbiAoY2hpbGQsIGluZGV4LCBvcmlnaW5hbCkge1xuICAgICAgICB2YXIgc2hvd0d1aWRlbGluZSA9ICdub25lJztcblxuICAgICAgICBpZiAoZ3VpZGVsaW5lSW5kZXggPT09IG9yaWdpbmFsLmxlbmd0aCAmJiBpbmRleCArIDEgPT09IG9yaWdpbmFsLmxlbmd0aCkge1xuICAgICAgICAgIHNob3dHdWlkZWxpbmUgPSAnYWZ0ZXInO1xuICAgICAgICB9IGVsc2UgaWYgKGd1aWRlbGluZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgIHNob3dHdWlkZWxpbmUgPSAnYmVmb3JlJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoY2hpbGQsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgc2hvd0d1aWRlbGluZTogc2hvd0d1aWRlbGluZSxcbiAgICAgICAgICBvblJlcXVlc3RSZXNpemU6IG9uUmVxdWVzdFJlc2l6ZUNvbHVtbixcbiAgICAgICAgICBvbkRyYWdTdGFydDogb25SZXF1ZXN0TW92ZUNvbHVtbiA/IF90aGlzMi5oYW5kbGVEcmFnU3RhcnQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgb25SZXF1ZXN0TW92ZUNvbHVtbjogb25SZXF1ZXN0TW92ZUNvbHVtbiA/IF90aGlzMi5vblJlcXVlc3RNb3ZlQ29sdW1uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG9uQXV0b3NpemVDb2x1bW46IG9uQXV0b3NpemVDb2x1bW4sXG4gICAgICAgICAga2V5OiBjaGlsZC5rZXkgfHwgY2hpbGQucHJvcHMuY29sdW1uSWQgfHwgaW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHZhciB0b2dnbGVTdGF0ZU1hcCA9IHtcbiAgICAgICAgYWxsOiB0cnVlLFxuICAgICAgICBub25lOiBmYWxzZSxcbiAgICAgICAgc29tZTogJ3NvbWUnXG4gICAgICB9O1xuICAgICAgdmFyIHRvZ2dsZVN0YXRlID0gcm93U2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b2dnbGVTdGF0ZU1hcFtyb3dTZWxlY3Rpb25dO1xuICAgICAgdmFyIGFyaWFDaGVja2VkID0gdG9nZ2xlU3RhdGUgPT09ICdzb21lJyA/ICdtaXhlZCcgOiB0b2dnbGVTdGF0ZTtcbiAgICAgIHZhciBkZWZhdWx0QWN0aW9uc0NvbHVtbldpZHRoID0gYWN0aW9uc0NvbHVtbldpZHRoIHx8IDQ4O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChIZWFkU3R5bGVzX1N0eWxlZCwgSGVhZF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZU1vdW50LFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImhlYWRcIlxuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKSh0aGlzLnByb3BzLCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImtleXNcIl0pKEhlYWQucHJvcFR5cGVzKSkpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGFibGVfUm93LCBudWxsLCBoYXNEcmFnQ29sdW1uICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWREcmFnUm93LCB7XG4gICAgICAgIGtleTogXCJkcmFnX3Jvd3NfaGVhZF9jZWxsXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiZHJhZy1yb3dzLWhlYWQtY2VsbFwiLFxuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZVxuICAgICAgfSksIG9uUmVxdWVzdFRvZ2dsZUFsbFJvd3MgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFRvZ2dsZUFsbCwge1xuICAgICAgICBrZXk6IFwidG9nZ2xlX2FsbFwiLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRvZ2dsZS1hbGxcIixcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIG9uQ2xpY2s6IG9uUmVxdWVzdFRvZ2dsZUFsbFJvd3MsXG4gICAgICAgIHZhcmlhbnQ6IFwidG9nZ2xlQWxsXCIsXG4gICAgICAgIHRydW5jYXRlOiBmYWxzZSxcbiAgICAgICAgcm9sZTogXCJjaGVja2JveFwiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBhcmlhQ2hlY2tlZFxuICAgICAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhYmxlX1RvZ2dsZSwge1xuICAgICAgICBzZWxlY3RlZDogdG9nZ2xlU3RhdGUsXG4gICAgICAgIGFsbFJvd3M6IHRydWVcbiAgICAgIH0pKSwgaGFzSW5mb0NvbHVtbiAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSW5mbywge1xuICAgICAgICBrZXk6IFwibW9yZV9pbmZvX2hlYWRfY2VsbFwiLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcIm1vcmUtaW5mby1oZWFkLWNlbGxcIixcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgIHZhcmlhbnQ6IFwiaW5mb1wiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoSGVhZEV4cGFuZFJvd3NJY29uLCBudWxsKSksIGNsb25lZENoaWxkcmVuLCBhY3Rpb25zLmxlbmd0aCA+IDAgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhYmxlX0hlYWRDZWxsLCB7XG4gICAgICAgIGhhc0FjdGlvbnNIZWFkOiB0cnVlLFxuICAgICAgICBrZXk6IFwiYWN0aW9uc19oZWFkX2NlbGxcIixcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJhY3Rpb25zLWhlYWQtY2VsbFwiLFxuICAgICAgICBhbGlnbjogXCJyaWdodFwiLFxuICAgICAgICByZXNpemFibGU6IGZhbHNlLFxuICAgICAgICB3aWR0aDogZGVmYXVsdEFjdGlvbnNDb2x1bW5XaWR0aCxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBtaW5XaWR0aDogZGVmYXVsdEFjdGlvbnNDb2x1bW5XaWR0aFxuICAgICAgICB9LFxuICAgICAgICB2YXJpYW50OiBcImFjdGlvbnNcIlxuICAgICAgfSwgYWN0aW9ucyksIGFjdGlvbnMubGVuZ3RoID09PSAwICYmIGFjdGlvbnNDb2x1bW5XaWR0aCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGFibGVfSGVhZENlbGwsIHtcbiAgICAgICAga2V5OiBcImFjdGlvbnNfaGVhZF9jZWxsXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiYWN0aW9ucy1oZWFkLWNlbGxcIixcbiAgICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6IGFjdGlvbnNDb2x1bW5XaWR0aCxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBtaW5XaWR0aDogYWN0aW9uc0NvbHVtbldpZHRoXG4gICAgICAgIH0sXG4gICAgICAgIHZhcmlhbnQ6IFwiYWN0aW9uc1wiXG4gICAgICB9LCAnICcpKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwidmFsaWRhdGVDaGlsZHJlbldpZHRoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRyZW5XaWR0aChwcm9wcykge1xuICAgICAgaWYgKGZhbHNlKSB7IHZhciBoYXNDaGlsZFdpdGhvdXRXaWR0aDsgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBIZWFkO1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5IZWFkX2RlZmluZVByb3BlcnR5KEhlYWRfSGVhZCwgXCJzcGx1bmtVaVR5cGVcIiwgJ1RhYmxlLkhlYWQnKTtcblxuSGVhZF9kZWZpbmVQcm9wZXJ0eShIZWFkX0hlYWQsIFwicHJvcFR5cGVzXCIsIEhlYWRfcHJvcFR5cGVzKTtcblxuSGVhZF9kZWZpbmVQcm9wZXJ0eShIZWFkX0hlYWQsIFwiZGVmYXVsdFByb3BzXCIsIEhlYWRfZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgVGFibGVfSGVhZCA9IChIZWFkX0hlYWQpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvaWRcIlxudmFyIGlkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Qb3BvdmVyXCJcbnZhciBQb3BvdmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIFBvcG92ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oUG9wb3Zlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJsZS9IZWFkRHJvcGRvd25DZWxsLnRzeFxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IEhlYWREcm9wZG93bkNlbGxfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IEhlYWREcm9wZG93bkNlbGxfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9leHRlbmRzKCkgeyBIZWFkRHJvcGRvd25DZWxsX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gSGVhZERyb3Bkb3duQ2VsbF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBIZWFkRHJvcGRvd25DZWxsX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IEhlYWREcm9wZG93bkNlbGxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBIZWFkRHJvcGRvd25DZWxsX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIEhlYWREcm9wZG93bkNlbGxfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIEhlYWREcm9wZG93bkNlbGxfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIEhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIEhlYWREcm9wZG93bkNlbGxfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBIZWFkRHJvcGRvd25DZWxsX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBIZWFkRHJvcGRvd25DZWxsX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIEhlYWREcm9wZG93bkNlbGxfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgSGVhZERyb3Bkb3duQ2VsbF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IEhlYWREcm9wZG93bkNlbGxfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gSGVhZERyb3Bkb3duQ2VsbF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBIZWFkRHJvcGRvd25DZWxsX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBIZWFkRHJvcGRvd25DZWxsX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBIZWFkRHJvcGRvd25DZWxsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBIZWFkRHJvcGRvd25DZWxsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoSGVhZERyb3Bkb3duQ2VsbF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIEhlYWREcm9wZG93bkNlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIEhlYWREcm9wZG93bkNlbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbF9nZXRQcm90b3R5cGVPZihvKSB7IEhlYWREcm9wZG93bkNlbGxfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gSGVhZERyb3Bkb3duQ2VsbF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBIZWFkRHJvcGRvd25DZWxsX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cblxuXG5cblxudmFyIHBvc3NpYmxlQ2xvc2VSZWFzb25zID0gWydjbGlja0F3YXknLCAnY29udGVudENsaWNrJywgJ2VzY2FwZUtleScsICdvZmZTY3JlZW4nLCAndG9nZ2xlQ2xpY2snXTtcbnZhciBIZWFkRHJvcGRvd25DZWxsX3Byb3BUeXBlcyA9IHtcbiAgYWxpZ246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXSksXG4gIGNhbkNvdmVySGVhZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUuaXNSZXF1aXJlZCxcbiAgY2xvc2VSZWFzb25zOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheU9mKGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKHBvc3NpYmxlQ2xvc2VSZWFzb25zKSksXG4gIGNvbHVtbklkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hbnksXG4gIGRlZmF1bHRQbGFjZW1lbnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnYWJvdmUnLCAnYmVsb3cnLCAnbGVmdCcsICdyaWdodCcsICd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJ10pLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBmb2N1c1RvZ2dsZVJlYXNvbnM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFycmF5T2YoZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YocG9zc2libGVDbG9zZVJlYXNvbnMpKSxcblxuICAvKiogQHByaXZhdGUgVGhlIGluZGV4IG9mIHRoZSBjZWxsLCBza2lwcGluZyB0aGUgaW5mbyBjb2x1bW4uICovXG4gIGluZGV4OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIGxhYmVsOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgb25BdXRvc2l6ZUNvbHVtbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUuICovXG4gIG9uRHJhZ1N0YXJ0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZS4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoLCBhbmQgd2lsbCB3b3JrIGFzIGV4cGVjdGVkLlxuICAgKi9cbiAgb25LZXlEb3duOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblJlcXVlc3RDbG9zZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogQHByaXZhdGUuICovXG4gIG9uUmVxdWVzdE1vdmVDb2x1bW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uUmVxdWVzdE9wZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBvblJlcXVlc3RSZXNpemU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9wZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHJlcG9zaXRpb25Nb2RlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ25vbmUnLCAnZmxpcCcsICdhbnknXSksXG4gIHJlc2l6YWJsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgcmV0YWluRm9jdXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqIEBwcml2YXRlLiAqL1xuICBzaG93R3VpZGVsaW5lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ25vbmUnLCAnYmVmb3JlJywgJ2FmdGVyJ10pLFxuICB0YWtlRm9jdXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHRydW5jYXRlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBVc2VkIGludGVybmFsbHkgdG8gc3VwcHJlc3MgZm9jdXMgd2hlbiB0aGlzIGBIZWFkRHJvcGRvd25DZWxsYCBpcyBzdXBlcnNlZGVkIGJ5IG9uZSBpbiBhblxuICAgKiBvdmVybGFpZCBgSGVhZFRhYmxlYCBmb3IgdXNlciBpbnRlcmFjdGlvbnMuXG4gICAqL1xuICB2aXNpYmxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICB3aWR0aDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuXG4gIC8qKiBAcHJpdmF0ZS4gKi9cbiAgdmFyaWFudDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWyd0b2dnbGVBbGwnLCAnaW5mbycsICdhY3Rpb25zJ10pXG59O1xudmFyIEhlYWREcm9wZG93bkNlbGxfZGVmYXVsdFByb3BzID0ge1xuICBhbGlnbjogJ2xlZnQnLFxuICBjYW5Db3ZlckhlYWQ6IHRydWUsXG4gIGNsb3NlUmVhc29uczogcG9zc2libGVDbG9zZVJlYXNvbnMsXG4gIGRlZmF1bHRQbGFjZW1lbnQ6ICdiZWxvdycsXG4gIGZvY3VzVG9nZ2xlUmVhc29uczogWydjb250ZW50Q2xpY2snLCAnZXNjYXBlS2V5JywgJ3RvZ2dsZUNsaWNrJ10sXG4gIHJlcG9zaXRpb25Nb2RlOiAnZmxpcCcsXG4gIHJlc2l6YWJsZTogdHJ1ZSxcbiAgcmV0YWluRm9jdXM6IGZhbHNlLFxuICB0YWtlRm9jdXM6IHRydWUsXG4gIHRydW5jYXRlOiB0cnVlLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG52YXIgSGVhZERyb3Bkb3duQ2VsbF9IZWFkRHJvcGRvd25DZWxsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIEhlYWREcm9wZG93bkNlbGxfaW5oZXJpdHMoSGVhZERyb3Bkb3duQ2VsbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IEhlYWREcm9wZG93bkNlbGxfY3JlYXRlU3VwZXIoSGVhZERyb3Bkb3duQ2VsbCk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBIZWFkRHJvcGRvd25DZWxsUHJvcHNCYXNlXG5cbiAgLyoqXG4gICAqIEVudW1lcmF0aW9uIG9mIHRoZSBwb3NzaWJsZSByZWFzb25zIGZvciBjbG9zaW5nIHRoZSBTZWxlY3QuXG4gICAqICdjbGlja0F3YXknLCAnZXNjYXBlS2V5JywgYW5kICdvZmZTY3JlZW4nIGFyZSBpbmhlcml0ZWQgZnJvbSBQb3BvdmVyLCBidXQgcmVwZWF0ZWQgaGVyZSBmb3JcbiAgICogZG9jcyBleHRyYWN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gSGVhZERyb3Bkb3duQ2VsbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIEhlYWREcm9wZG93bkNlbGxfY2xhc3NDYWxsQ2hlY2sodGhpcywgSGVhZERyb3Bkb3duQ2VsbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIEhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNlbGxJZFwiLCB2b2lkIDApO1xuXG4gICAgSGVhZERyb3Bkb3duQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkRHJvcGRvd25DZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udHJvbGxlZEV4dGVybmFsbHlcIiwgdm9pZCAwKTtcblxuICAgIEhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJJZFwiLCB2b2lkIDApO1xuXG4gICAgSGVhZERyb3Bkb3duQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkRHJvcGRvd25DZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGVsOiBlbFxuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdCh1cGRhdGVSZWFjdFJlZltcImFcIiAvKiB1cGRhdGVSZWFjdFJlZiAqL10pKF90aGlzLnByb3BzLmVsZW1lbnRSZWYsIGVsKTtcbiAgICB9KTtcblxuICAgIEhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlcXVlc3RDbG9zZVwiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHJlYXNvbiA9IF9yZWYucmVhc29uLFxuICAgICAgICAgIGV2ZW50ID0gX3JlZi5ldmVudDtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGNsb3NlUmVhc29ucyA9IF90aGlzJHByb3BzLmNsb3NlUmVhc29ucyxcbiAgICAgICAgICBjb2x1bW5JZCA9IF90aGlzJHByb3BzLmNvbHVtbklkLFxuICAgICAgICAgIGZvY3VzVG9nZ2xlUmVhc29ucyA9IF90aGlzJHByb3BzLmZvY3VzVG9nZ2xlUmVhc29ucyxcbiAgICAgICAgICBpbmRleCA9IF90aGlzJHByb3BzLmluZGV4LFxuICAgICAgICAgIG9uUmVxdWVzdENsb3NlID0gX3RoaXMkcHJvcHMub25SZXF1ZXN0Q2xvc2U7XG5cbiAgICAgIGlmIChyZWFzb24gPT09ICdjbGlja0F3YXknICYmIGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIGVsID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIHdoaWxlIChlbCkge1xuICAgICAgICAgIC8vIElnbm9yZSBjbGlja3Mgb24gdG9nZ2xlLlxuICAgICAgICAgIGlmIChlbCA9PT0gX3RoaXMuc3RhdGUuZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmlzT3BlbigpICYmIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaW5jbHVkZXNcIl0pKGNsb3NlUmVhc29ucywgcmVhc29uKSAmJiBpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImluY2x1ZGVzXCJdKShmb2N1c1RvZ2dsZVJlYXNvbnMsIHJlYXNvbikpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfdGhpcy5pc0NvbnRyb2xsZWQoKSkge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG9wZW46IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvblJlcXVlc3RDbG9zZSA9PT0gbnVsbCB8fCBvblJlcXVlc3RDbG9zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXF1ZXN0Q2xvc2UoZXZlbnQsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSGVhZERyb3Bkb3duQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkRHJvcGRvd25DZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5JZCA9IF90aGlzJHByb3BzMi5jb2x1bW5JZCxcbiAgICAgICAgICBpbmRleCA9IF90aGlzJHByb3BzMi5pbmRleDsgLy8gaWdub3JlIGNsaWNrcyBvbiB0aGUgcmVzaXplIGhhbmRsZVxuXG4gICAgICBpZiAoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXRlc3QnKSA9PT0gJ3Jlc2l6ZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNsaWVudFg6IGUuY2xpZW50WCB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoX3RoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgdmFyIF90aGlzJGhhbmRsZVJlcXVlc3RDbCwgX3RoaXMyO1xuXG4gICAgICAgIChfdGhpcyRoYW5kbGVSZXF1ZXN0Q2wgPSAoX3RoaXMyID0gX3RoaXMpLmhhbmRsZVJlcXVlc3RDbG9zZSkgPT09IG51bGwgfHwgX3RoaXMkaGFuZGxlUmVxdWVzdENsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRoYW5kbGVSZXF1ZXN0Q2wuY2FsbChfdGhpczIsIHtcbiAgICAgICAgICByZWFzb246ICd0b2dnbGVDbGljaycsXG4gICAgICAgICAgZXZlbnQ6IGVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uUmVxdWVzdCwgX3RoaXMkcHJvcHMzO1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblJlcXVlc3QgPSAoX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMpLm9uUmVxdWVzdE9wZW4pID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uUmVxdWVzdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25SZXF1ZXN0LmNhbGwoX3RoaXMkcHJvcHMzLCBlLCB7XG4gICAgICAgICAgcmVhc29uOiAndG9nZ2xlQ2xpY2snLFxuICAgICAgICAgIGNvbHVtbklkOiBjb2x1bW5JZCxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFfdGhpcy5pc0NvbnRyb2xsZWQoKSkge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG9wZW46IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSGVhZERyb3Bkb3duQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkRHJvcGRvd25DZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlS2V5RG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbklkID0gX3RoaXMkcHJvcHM0LmNvbHVtbklkLFxuICAgICAgICAgIGluZGV4ID0gX3RoaXMkcHJvcHM0LmluZGV4LFxuICAgICAgICAgIG9uS2V5RG93biA9IF90aGlzJHByb3BzNC5vbktleURvd24sXG4gICAgICAgICAgb25SZXF1ZXN0TW92ZUNvbHVtbiA9IF90aGlzJHByb3BzNC5vblJlcXVlc3RNb3ZlQ29sdW1uO1xuXG4gICAgICBpZiAoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXRlc3QnKSAhPT0gJ3Jlc2l6ZScpIHtcbiAgICAgICAgaWYgKE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgIF90aGlzLmhhbmRsZUNsaWNrKGUpO1xuICAgICAgICB9IGVsc2UgaWYgKE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KSA9PT0gJ2xlZnQnICYmIGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPiAwKSB7XG4gICAgICAgICAgb25SZXF1ZXN0TW92ZUNvbHVtbiA9PT0gbnVsbCB8fCBvblJlcXVlc3RNb3ZlQ29sdW1uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlcXVlc3RNb3ZlQ29sdW1uKHtcbiAgICAgICAgICAgIGZyb21JbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0b0luZGV4OiBpbmRleCAtIDEsXG4gICAgICAgICAgICBjb2x1bW5JZDogY29sdW1uSWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3Qoa2V5Ym9hcmRfW1wia2V5Y29kZVwiXSkoZS5uYXRpdmVFdmVudCkgPT09ICdyaWdodCcgJiYgaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9uUmVxdWVzdE1vdmVDb2x1bW4gPT09IG51bGwgfHwgb25SZXF1ZXN0TW92ZUNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXF1ZXN0TW92ZUNvbHVtbih7XG4gICAgICAgICAgICBmcm9tSW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdG9JbmRleDogaW5kZXggKyAxLFxuICAgICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25LZXlEb3duKGUsIHtcbiAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSGVhZERyb3Bkb3duQ2VsbF9kZWZpbmVQcm9wZXJ0eShIZWFkRHJvcGRvd25DZWxsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ29udGVudENsaWNrXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMuaGFuZGxlUmVxdWVzdENsb3NlKHtcbiAgICAgICAgcmVhc29uOiAnY29udGVudENsaWNrJyxcbiAgICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIEhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdTdGFydFwiLCBmdW5jdGlvbiAoaW5kZXgsIGNvbHVtbklkKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25EcmFnU3RhLCBfdGhpcyRwcm9wczU7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNEcmFnZ2luZzogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkRyYWdTdGEgPSAoX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMpLm9uRHJhZ1N0YXJ0KSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkRyYWdTdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uRHJhZ1N0YS5jYWxsKF90aGlzJHByb3BzNSwgaW5kZXgsIGNvbHVtbklkKTtcbiAgICB9KTtcblxuICAgIEhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdFbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVsOiBudWxsLFxuICAgICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gICAgICBvcGVuOiBmYWxzZVxuICAgIH07XG4gICAgX3RoaXMuY29udHJvbGxlZEV4dGVybmFsbHkgPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImhhc1wiXSkocHJvcHMsICdvcGVuJyk7XG4gICAgX3RoaXMucG9wb3ZlcklkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgncG9wb3ZlcicpO1xuICAgIF90aGlzLmNlbGxJZCA9IE9iamVjdChpZF9bXCJjcmVhdGVET01JRFwiXSkoJ2NlbGxJZCcpO1xuXG4gICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgSGVhZERyb3Bkb3duQ2VsbF9jcmVhdGVDbGFzcyhIZWFkRHJvcGRvd25DZWxsLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy52aXNpYmxlICYmICF0aGlzLnByb3BzLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0Q2xvc2Uoe1xuICAgICAgICAgIHJlYXNvbjogJ29mZlNjcmVlbidcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxzZSkge31cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNcIixcblxuICAgIC8qKlxuICAgICAqIFBsYWNlIGZvY3VzIG9uIHRoZSB0b2dnbGUuXG4gICAgICovXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJGVsO1xuXG4gICAgICAoX3RoaXMkc3RhdGUkZWwgPSB0aGlzLnN0YXRlLmVsKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkc3RhdGUkZWwuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNPcGVuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzT3BlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ29udHJvbGxlZCgpID8gdGhpcy5wcm9wcy5vcGVuIDogdGhpcy5zdGF0ZS5vcGVuO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NvbnRyb2xsZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNDb250cm9sbGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlZEV4dGVybmFsbHk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX2VsJGdldEJvdW5kaW5nQ2xpZW50LFxuICAgICAgICAgIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFsaWduID0gX3RoaXMkcHJvcHM2LmFsaWduLFxuICAgICAgICAgIGNhbkNvdmVySGVhZCA9IF90aGlzJHByb3BzNi5jYW5Db3ZlckhlYWQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczYuY2hpbGRyZW4sXG4gICAgICAgICAgY2xvc2VSZWFzb25zID0gX3RoaXMkcHJvcHM2LmNsb3NlUmVhc29ucyxcbiAgICAgICAgICBjb2x1bW5JZCA9IF90aGlzJHByb3BzNi5jb2x1bW5JZCxcbiAgICAgICAgICBkZWZhdWx0UGxhY2VtZW50ID0gX3RoaXMkcHJvcHM2LmRlZmF1bHRQbGFjZW1lbnQsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczYuaWQsXG4gICAgICAgICAgaW5kZXggPSBfdGhpcyRwcm9wczYuaW5kZXgsXG4gICAgICAgICAgbGFiZWwgPSBfdGhpcyRwcm9wczYubGFiZWwsXG4gICAgICAgICAgb25BdXRvc2l6ZUNvbHVtbiA9IF90aGlzJHByb3BzNi5vbkF1dG9zaXplQ29sdW1uLFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3RoaXMkcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxuICAgICAgICAgIG9uUmVxdWVzdFJlc2l6ZSA9IF90aGlzJHByb3BzNi5vblJlcXVlc3RSZXNpemUsXG4gICAgICAgICAgcmVwb3NpdGlvbk1vZGUgPSBfdGhpcyRwcm9wczYucmVwb3NpdGlvbk1vZGUsXG4gICAgICAgICAgcmVzaXphYmxlID0gX3RoaXMkcHJvcHM2LnJlc2l6YWJsZSxcbiAgICAgICAgICByZXRhaW5Gb2N1cyA9IF90aGlzJHByb3BzNi5yZXRhaW5Gb2N1cyxcbiAgICAgICAgICBzaG93R3VpZGVsaW5lID0gX3RoaXMkcHJvcHM2LnNob3dHdWlkZWxpbmUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczYuc3R5bGUsXG4gICAgICAgICAgdGFrZUZvY3VzID0gX3RoaXMkcHJvcHM2LnRha2VGb2N1cyxcbiAgICAgICAgICB0cnVuY2F0ZSA9IF90aGlzJHByb3BzNi50cnVuY2F0ZSxcbiAgICAgICAgICB2YXJpYW50ID0gX3RoaXMkcHJvcHM2LnZhcmlhbnQsXG4gICAgICAgICAgdmlzaWJsZSA9IF90aGlzJHByb3BzNi52aXNpYmxlLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM2LndpZHRoO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBlbCA9IF90aGlzJHN0YXRlLmVsLFxuICAgICAgICAgIGNsaWVudFggPSBfdGhpcyRzdGF0ZS5jbGllbnRYO1xuICAgICAgdmFyIGNlbGxJZCA9IGlkIHx8IHRoaXMuY2VsbElkO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChIZWFkQ2VsbFN0eWxlc19TdHlsZWQsIEhlYWREcm9wZG93bkNlbGxfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm1lcmdlXCJdKShzdHlsZSwge1xuICAgICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgICB9KSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJoZWFkLWNlbGxcIixcbiAgICAgICAgJGRyYWdnaW5nOiB0aGlzLnN0YXRlLmlzRHJhZ2dpbmcgfHwgdW5kZWZpbmVkLFxuICAgICAgICAkY2xpY2thYmxlOiB0cnVlLFxuICAgICAgICAkdmFyaWFudDogdmFyaWFudCxcbiAgICAgICAgaWQ6IHZpc2libGUgPyBjZWxsSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIHRhYkluZGV4OiB2aXNpYmxlID8gMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZU1vdW50XG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKHRoaXMucHJvcHMsIFtdLmNvbmNhdChIZWFkRHJvcGRvd25DZWxsX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKEhlYWREcm9wZG93bkNlbGwucHJvcFR5cGVzKSksIFsnaWQnLCAnc3R5bGUnXSkpLCB7XG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVLZXlEb3duLFxuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogdHJ1ZSxcbiAgICAgICAgXCJhcmlhLW93bnNcIjogdGhpcy5wb3BvdmVySWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiB0aGlzLmlzT3BlbigpXG4gICAgICB9KSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhYmxlX0hlYWRJbm5lciwge1xuICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgIGFsaWduOiBhbGlnbixcbiAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgaXNNZW51OiB0cnVlLFxuICAgICAgICByZXNpemFibGU6IHZpc2libGUgJiYgcmVzaXphYmxlLFxuICAgICAgICBvbkRyYWdTdGFydDogb25EcmFnU3RhcnQgPyB0aGlzLmhhbmRsZURyYWdTdGFydCA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25EcmFnRW5kOiBvbkRyYWdTdGFydCA/IHRoaXMuaGFuZGxlRHJhZ0VuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25BdXRvc2l6ZUNvbHVtbjogb25BdXRvc2l6ZUNvbHVtbixcbiAgICAgICAgb25SZXF1ZXN0UmVzaXplOiBvblJlcXVlc3RSZXNpemUsXG4gICAgICAgIHRydW5jYXRlOiB0cnVuY2F0ZSxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KSwgc2hvd0d1aWRlbGluZSAhPT0gJ25vbmUnICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRHdWlkZUxpbmUsIHtcbiAgICAgICAgJHBvc2l0aW9uOiBzaG93R3VpZGVsaW5lXG4gICAgICB9KSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFBvcG92ZXJfZGVmYXVsdC5hLCB7XG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBvcGVuOiAhIWVsICYmIHRoaXMuaXNPcGVuKCksXG4gICAgICAgIGF1dG9DbG9zZVdoZW5PZmZTY3JlZW46IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaW5jbHVkZXNcIl0pKGNsb3NlUmVhc29ucywgJ29mZlNjcmVlbicpLFxuICAgICAgICBhbmNob3I6IGVsLFxuICAgICAgICBjYW5Db3ZlckFuY2hvcjogY2FuQ292ZXJIZWFkLFxuICAgICAgICByZXRhaW5Gb2N1czogcmV0YWluRm9jdXMsXG4gICAgICAgIGRlZmF1bHRQbGFjZW1lbnQ6IGRlZmF1bHRQbGFjZW1lbnQsXG4gICAgICAgIG9uUmVxdWVzdENsb3NlOiB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSxcbiAgICAgICAgcmVwb3NpdGlvbk1vZGU6IHJlcG9zaXRpb25Nb2RlLFxuICAgICAgICBpZDogdGhpcy5wb3BvdmVySWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGlkIHx8IHRoaXMuY2VsbElkLFxuICAgICAgICB0YWtlRm9jdXM6IHRha2VGb2N1cyxcbiAgICAgICAgcG9pbnRUbzogY2xpZW50WCAhPT0gdW5kZWZpbmVkICYmIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaXNGaW5pdGVcIl0pKGNsaWVudFgpID8ge1xuICAgICAgICAgIHg6IGNsaWVudFggLSAoKF9lbCRnZXRCb3VuZGluZ0NsaWVudCA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSAhPT0gbnVsbCAmJiBfZWwkZ2V0Qm91bmRpbmdDbGllbnQgIT09IHZvaWQgMCA/IF9lbCRnZXRCb3VuZGluZ0NsaWVudCA6IDApXG4gICAgICAgIH0gOiB1bmRlZmluZWRcbiAgICAgIH0sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaXNGdW5jdGlvblwiXSkoY2hpbGRyZW4pID8gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cywganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zXG4gICAgICAgICAgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgICAgb25DbGljazogX3RoaXMzLmhhbmRsZUNvbnRlbnRDbGlja1xuICAgICAgICAgIH0sIGNoaWxkcmVuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSlcbiAgICAgICAgKTtcbiAgICAgIH0gOlxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMsIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9uc1xuICAgICAgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNvbnRlbnRDbGlja1xuICAgICAgfSwgY2hpbGRyZW4pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEhlYWREcm9wZG93bkNlbGw7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbkhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9IZWFkRHJvcGRvd25DZWxsLCBcInNwbHVua1VpVHlwZVwiLCAnVGFibGUuSGVhZERyb3Bkb3duQ2VsbCcpO1xuXG5IZWFkRHJvcGRvd25DZWxsX2RlZmluZVByb3BlcnR5KEhlYWREcm9wZG93bkNlbGxfSGVhZERyb3Bkb3duQ2VsbCwgXCJwb3NzaWJsZUNsb3NlUmVhc29uc1wiLCBwb3NzaWJsZUNsb3NlUmVhc29ucyk7XG5cbkhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9IZWFkRHJvcGRvd25DZWxsLCBcInByb3BUeXBlc1wiLCBIZWFkRHJvcGRvd25DZWxsX3Byb3BUeXBlcyk7XG5cbkhlYWREcm9wZG93bkNlbGxfZGVmaW5lUHJvcGVydHkoSGVhZERyb3Bkb3duQ2VsbF9IZWFkRHJvcGRvd25DZWxsLCBcImRlZmF1bHRQcm9wc1wiLCBIZWFkRHJvcGRvd25DZWxsX2RlZmF1bHRQcm9wcyk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRhYmxlX0hlYWREcm9wZG93bkNlbGwgPSAoSGVhZERyb3Bkb3duQ2VsbF9IZWFkRHJvcGRvd25DZWxsKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYmxlL0hlYWRUYWJsZVN0eWxlcy50c1xuXG5cblxudmFyIEhlYWRUYWJsZVN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoU3R5bGVkVGFibGUpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkVGFibGVTdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJnODV3Z2YtMFwiXG59KShbXCJtaW4td2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7XCJdKTtcbnZhciBTdHlsZWREb2NrZWRDb250YWluZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkVGFibGVTdHlsZXNfX1N0eWxlZERvY2tlZENvbnRhaW5lclwiLFxuICBjb21wb25lbnRJZDogXCJnODV3Z2YtMVwiXG59KShbXCJvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246Zml4ZWQ7Ym94LXNoYWRvdzpcIiwgXCI7ei1pbmRleDpcIiwgXCI7QG1lZGlhIHByaW50e2Rpc3BsYXk6bm9uZTt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5vdmVybGF5U2hhZG93LFxuICBwcmlzbWE6ICdub25lJ1xufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uemluZGV4Rml4ZWROYXZiYXIpO1xudmFyIFN0eWxlZEZpeGVkQ29udGFpbmVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFN0eWxlZERvY2tlZENvbnRhaW5lcikud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkhlYWRUYWJsZVN0eWxlc19fU3R5bGVkRml4ZWRDb250YWluZXJcIixcbiAgY29tcG9uZW50SWQ6IFwiZzg1d2dmLTJcIlxufSkoW1wicG9zaXRpb246YWJzb2x1dGU7Ym94LXNoYWRvdzpub25lO3otaW5kZXg6MTtcIl0pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJsZS9IZWFkVGFibGUudHN4XG5mdW5jdGlvbiBIZWFkVGFibGVfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBIZWFkVGFibGVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IEhlYWRUYWJsZV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gSGVhZFRhYmxlX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIEhlYWRUYWJsZV9leHRlbmRzKCkgeyBIZWFkVGFibGVfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBIZWFkVGFibGVfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIEhlYWRUYWJsZV9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gSGVhZFRhYmxlX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBIZWFkVGFibGVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIEhlYWRUYWJsZV9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIEhlYWRUYWJsZV9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gSGVhZFRhYmxlX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgSGVhZFRhYmxlX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBIZWFkVGFibGVfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gSGVhZFRhYmxlX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIEhlYWRUYWJsZV9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gSGVhZFRhYmxlX3NldFByb3RvdHlwZU9mKG8sIHApIHsgSGVhZFRhYmxlX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBIZWFkVGFibGVfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gSGVhZFRhYmxlX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBIZWFkVGFibGVfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gSGVhZFRhYmxlX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBIZWFkVGFibGVfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIEhlYWRUYWJsZV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gSGVhZFRhYmxlX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoSGVhZFRhYmxlX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gSGVhZFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBIZWFkVGFibGVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gSGVhZFRhYmxlX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBIZWFkVGFibGVfZ2V0UHJvdG90eXBlT2YobykgeyBIZWFkVGFibGVfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gSGVhZFRhYmxlX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIEhlYWRUYWJsZV9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxudmFyIEhlYWRUYWJsZV9wcm9wVHlwZXMgPSB7XG4gIGNlbGxXaWR0aHM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFycmF5T2YoZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyKS5pc1JlcXVpcmVkLFxuICBkcmFnSW5kZXg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgaGFzRHJhZ0NvbHVtbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaGFzUm93RXhwYW5zaW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBoYXNSb3dTZWxlY3Rpb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGhlYWRUeXBlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2RvY2tlZCcsICdmaXhlZCddKS5pc1JlcXVpcmVkLFxuICBob3Jpem9udGFsT2Zmc2V0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIGlzRml4ZWRDb2x1bW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHJvd1NlbGVjdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydhbGwnLCAnc29tZScsICdub25lJ10pLFxuICB0YWJsZVN0eWxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3QsXG4gIHRhYmxlV2lkdGg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlci5pc1JlcXVpcmVkLFxuICB0SGVhZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZWxlbWVudC5pc1JlcXVpcmVkLFxuICB0b3A6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlci5pc1JlcXVpcmVkLFxuICB3aWR0aDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLmlzUmVxdWlyZWRcbn07XG52YXIgSGVhZFRhYmxlX2RlZmF1bHRQcm9wcyA9IHtcbiAgaG9yaXpvbnRhbE9mZnNldDogMFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogSGVhZFRhYmxlIGlzIGFuIGludGVybmFsIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgZGV0YWNoZWQgdGFibGUgaGVhZCB0aGF0IGNhblxuICogdGhlbiBiZSBwb3NpdGlvbmVkIGluIGRpZmZlcmVudCB3YXlzIG91dHNpZGUgb2YgdGhlIG1haW4gdGFibGUuXG4gKi9cbnZhciBIZWFkVGFibGVfSGVhZFRhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIEhlYWRUYWJsZV9pbmhlcml0cyhIZWFkVGFibGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBIZWFkVGFibGVfY3JlYXRlU3VwZXIoSGVhZFRhYmxlKTtcblxuICBmdW5jdGlvbiBIZWFkVGFibGUoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgSGVhZFRhYmxlX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhlYWRUYWJsZSk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgSGVhZFRhYmxlX2RlZmluZVByb3BlcnR5KEhlYWRUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhlYWRcIiwgbnVsbCk7XG5cbiAgICBIZWFkVGFibGVfZGVmaW5lUHJvcGVydHkoSGVhZFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSGVhZE1vdW50XCIsIGZ1bmN0aW9uIChoZWFkKSB7XG4gICAgICBfdGhpcy5oZWFkID0gaGVhZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIEhlYWRUYWJsZV9jcmVhdGVDbGFzcyhIZWFkVGFibGUsIFt7XG4gICAga2V5OiBcImdldEhlYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SGVhZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhlYWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNlbGxXaWR0aHMgPSBfdGhpcyRwcm9wcy5jZWxsV2lkdGhzLFxuICAgICAgICAgIGVsZW1lbnRSZWYgPSBfdGhpcyRwcm9wcy5lbGVtZW50UmVmLFxuICAgICAgICAgIGhhc0RyYWdDb2x1bW4gPSBfdGhpcyRwcm9wcy5oYXNEcmFnQ29sdW1uLFxuICAgICAgICAgIGhhc1Jvd0V4cGFuc2lvbiA9IF90aGlzJHByb3BzLmhhc1Jvd0V4cGFuc2lvbixcbiAgICAgICAgICBoYXNSb3dTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5oYXNSb3dTZWxlY3Rpb24sXG4gICAgICAgICAgaGVhZFR5cGUgPSBfdGhpcyRwcm9wcy5oZWFkVHlwZSxcbiAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ID0gX3RoaXMkcHJvcHMuaG9yaXpvbnRhbE9mZnNldCxcbiAgICAgICAgICBpc0ZpeGVkQ29sdW1uID0gX3RoaXMkcHJvcHMuaXNGaXhlZENvbHVtbixcbiAgICAgICAgICB0YWJsZVN0eWxlID0gX3RoaXMkcHJvcHMudGFibGVTdHlsZSxcbiAgICAgICAgICB0YWJsZVdpZHRoID0gX3RoaXMkcHJvcHMudGFibGVXaWR0aCxcbiAgICAgICAgICB0SGVhZCA9IF90aGlzJHByb3BzLnRIZWFkLFxuICAgICAgICAgIHRvcCA9IF90aGlzJHByb3BzLnRvcCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzLndpZHRoLFxuICAgICAgICAgIG90aGVyUHJvcHMgPSBIZWFkVGFibGVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIFtcImNlbGxXaWR0aHNcIiwgXCJlbGVtZW50UmVmXCIsIFwiaGFzRHJhZ0NvbHVtblwiLCBcImhhc1Jvd0V4cGFuc2lvblwiLCBcImhhc1Jvd1NlbGVjdGlvblwiLCBcImhlYWRUeXBlXCIsIFwiaG9yaXpvbnRhbE9mZnNldFwiLCBcImlzRml4ZWRDb2x1bW5cIiwgXCJ0YWJsZVN0eWxlXCIsIFwidGFibGVXaWR0aFwiLCBcInRIZWFkXCIsIFwidG9wXCIsIFwid2lkdGhcIl0pO1xuXG4gICAgICB2YXIgaXNEb2NrZWQgPSBoZWFkVHlwZSA9PT0gJ2RvY2tlZCc7XG4gICAgICB2YXIgU3R5bGVkQ29udGFpbmVyID0gaXNEb2NrZWQgPyBTdHlsZWREb2NrZWRDb250YWluZXIgOiBTdHlsZWRGaXhlZENvbnRhaW5lcjtcbiAgICAgIHZhciBpbmRleE9mZnNldCA9IDA7XG5cbiAgICAgIGlmIChoYXNSb3dFeHBhbnNpb24pIHtcbiAgICAgICAgaW5kZXhPZmZzZXQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1Jvd1NlbGVjdGlvbikge1xuICAgICAgICBpbmRleE9mZnNldCArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzRHJhZ0NvbHVtbikge1xuICAgICAgICBpbmRleE9mZnNldCArPSAxO1xuICAgICAgfSAvLyBTZXQgdGhlIHdpZHRocyBvZiB0aGUgaGVhZCBjZWxscyBpZiBub3QgZml4ZWQgY29sdW1uXG5cblxuICAgICAgdmFyIGNlbGxzID0gaXNGaXhlZENvbHVtbiA/IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkodEhlYWQucHJvcHMuY2hpbGRyZW4pIDogLy8gZW5zdXJlIGNvbnNpc3RlbnQga2V5c1xuICAgICAgZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheSh0SGVhZC5wcm9wcy5jaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKS5tYXAoZnVuY3Rpb24gKGNlbGwsIGkpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShjZWxsLCB7XG4gICAgICAgICAgc3R5bGU6IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiZXh0ZW5kXCJdKSh7fSwgY2VsbC5wcm9wcy5zdHlsZSwge1xuICAgICAgICAgICAgd2lkdGg6IGNlbGxXaWR0aHNbaSArIGluZGV4T2Zmc2V0XVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2xvbmVkVEhlYWQgPSAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkodEhlYWQsIHtcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZUhlYWRNb3VudCxcbiAgICAgICAgJ2RhdGEtdGVzdCc6IFwiXCIuY29uY2F0KGhlYWRUeXBlLCBcIi1oZWFkXCIpXG4gICAgICB9LCBjZWxscyk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENvbnRhaW5lciwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHRvcDogdG9wLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgICB9LFxuICAgICAgICByZWY6IGVsZW1lbnRSZWZcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChIZWFkVGFibGVTdHlsZXNfU3R5bGVkLCBIZWFkVGFibGVfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiXCIuY29uY2F0KGhlYWRUeXBlLCBcIi1oZWFkLXRhYmxlXCIpLFxuICAgICAgICBzdHlsZTogT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJleHRlbmRcIl0pKHt9LCB0YWJsZVN0eWxlLCB7XG4gICAgICAgICAgbWFyZ2luTGVmdDogaG9yaXpvbnRhbE9mZnNldCxcbiAgICAgICAgICB3aWR0aDogaXNGaXhlZENvbHVtbiA/IHVuZGVmaW5lZCA6IHRhYmxlV2lkdGhcbiAgICAgICAgfSksXG4gICAgICAgIFwiZGF0YS1maXhlZC1jb2x1bW5cIjogaXNGaXhlZENvbHVtbiA/ICd0cnVlJyA6IHVuZGVmaW5lZFxuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKShvdGhlclByb3BzLCAnZHJhZ0luZGV4JykpLCBjbG9uZWRUSGVhZCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBIZWFkVGFibGU7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbkhlYWRUYWJsZV9kZWZpbmVQcm9wZXJ0eShIZWFkVGFibGVfSGVhZFRhYmxlLCBcInByb3BUeXBlc1wiLCBIZWFkVGFibGVfcHJvcFR5cGVzKTtcblxuSGVhZFRhYmxlX2RlZmluZVByb3BlcnR5KEhlYWRUYWJsZV9IZWFkVGFibGUsIFwiZGVmYXVsdFByb3BzXCIsIEhlYWRUYWJsZV9kZWZhdWx0UHJvcHMpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBUYWJsZV9IZWFkVGFibGUgPSAoSGVhZFRhYmxlX0hlYWRUYWJsZSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL3R5cGVzLnRzXG52YXIgdHlwZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFibGUvVGFibGUudHN4XG5mdW5jdGlvbiBUYWJsZV90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IFRhYmxlX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBUYWJsZV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gVGFibGVfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gVGFibGVfZXh0ZW5kcygpIHsgVGFibGVfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBUYWJsZV9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gVGFibGVfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBUYWJsZV9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IFRhYmxlX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IFRhYmxlX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgVGFibGVfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBUYWJsZV9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gVGFibGVfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBUYWJsZV9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gVGFibGVfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIFRhYmxlX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIFRhYmxlX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gVGFibGVfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIFRhYmxlX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIFRhYmxlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gVGFibGVfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIFRhYmxlX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgVGFibGVfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIFRhYmxlX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIFRhYmxlX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIFRhYmxlX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBUYWJsZV9zZXRQcm90b3R5cGVPZihvLCBwKSB7IFRhYmxlX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBUYWJsZV9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBUYWJsZV9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gVGFibGVfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gVGFibGVfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IFRhYmxlX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBUYWJsZV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gVGFibGVfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChUYWJsZV90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBUYWJsZV9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gVGFibGVfZ2V0UHJvdG90eXBlT2YobykgeyBUYWJsZV9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBUYWJsZV9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBUYWJsZV9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cbiAvLyBFeHBvc2VkIGFzIHN0YXRpYyBtZW1iZXJzIG9mIHRoZSBUYWJsZSBjbGFzc1xuXG5cblxuXG5cblxuXG4gLy8gSW50ZXJuYWwgSGVscGVyIE1vZHVsZXNcblxuXG5cblxuLyoqIEBwdWJsaWMgKi9cblxudmFyIFRhYmxlX3Byb3BUeXBlcyA9IHtcbiAgYWN0aW9uczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYXJyYXlPZihleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5lbGVtZW50KSxcbiAgYWN0aW9uc0NvbHVtbldpZHRoOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBkb2NrT2Zmc2V0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIGRvY2tTY3JvbGxCYXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGhlYWRUeXBlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2RvY2tlZCcsICdmaXhlZCcsICdpbmxpbmUnXSksXG4gIGlubmVyU3R5bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdCxcbiAgb25SZXF1ZXN0VG9nZ2xlQWxsUm93czogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25TY3JvbGw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG91dGVyU3R5bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdCxcbiAgcm93RXhwYW5zaW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ3NpbmdsZScsICdtdWx0aScsICdub25lJ10pLFxuICByb3dTZWxlY3Rpb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnYWxsJywgJ3NvbWUnLCAnbm9uZSddKSxcbiAgc3RyaXBlUm93czogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgdGFibGVTdHlsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICBvblJlcXVlc3RNb3ZlQ29sdW1uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblJlcXVlc3RNb3ZlUm93OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblJlcXVlc3RSZXNpemVDb2x1bW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmNcbn07XG52YXIgVGFibGVfZGVmYXVsdFByb3BzID0ge1xuICBhY3Rpb25zOiBbXSxcbiAgZG9ja09mZnNldDogMCxcbiAgaGVhZFR5cGU6ICdpbmxpbmUnLFxuICByb3dFeHBhbnNpb246ICdub25lJyxcbiAgcm93U2VsZWN0aW9uOiAnbm9uZSdcbn07XG5cbnZhciBUYWJsZV9UYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBUYWJsZV9pbmhlcml0cyhUYWJsZSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IFRhYmxlX2NyZWF0ZVN1cGVyKFRhYmxlKTtcblxuICBUYWJsZV9jcmVhdGVDbGFzcyhUYWJsZSwgbnVsbCwgW3tcbiAgICBrZXk6IFwiZ2V0SGVhZEZvY3VzU3RhdGVcIixcbiAgICAvLyBAZG9jcy1wcm9wcy10eXBlIFRhYmxlUHJvcHNCYXNlXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgZm9jdXMgc3RhdGUgb2YgdGhlIHByb3ZpZGVkIGBoZWFkYC5cbiAgICAgKiBAcGFyYW0gaGVhZCAtIEEgcmVmZXJlbmNlIHRvIGEgbW91bnRlZCBgSGVhZGAgY29tcG9uZW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGZvY3VzU3RhdGUgLSBBbiBvYmplY3QgY29udGFpbmluZyBhIHRhcmdldCAoZWl0aGVyICdoZWFkQ2VsbCcgb3JcbiAgICAgKiAncmVzaXplQnV0dG9uJykgYW5kIGFuIGluZGV4LlxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRIZWFkRm9jdXNTdGF0ZShoZWFkKSB7XG4gICAgICB2YXIgX2hlYWQkZ2V0RWwsIF9oZWFkJGdldEVsMjtcblxuICAgICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCB8fCBoZWFkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBoZWFkQ2VsbHMgPSAoX2hlYWQkZ2V0RWwgPSBoZWFkLmdldEVsKCkpID09PSBudWxsIHx8IF9oZWFkJGdldEVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaGVhZCRnZXRFbC5jaGlsZHJlblswXS5jaGlsZHJlbjtcbiAgICAgIHZhciBhY3RpdmVIZWFkQ2VsbEluZGV4ID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpbmRleE9mXCJdKShoZWFkQ2VsbHMsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoYWN0aXZlSGVhZENlbGxJbmRleCA+IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGFyZ2V0OiAnaGVhZENlbGwnLFxuICAgICAgICAgIGluZGV4OiBhY3RpdmVIZWFkQ2VsbEluZGV4XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciByZXNpemVCdXR0b25zID0gKF9oZWFkJGdldEVsMiA9IGhlYWQuZ2V0RWwoKSkgPT09IG51bGwgfHwgX2hlYWQkZ2V0RWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaGVhZCRnZXRFbDIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdGVzdD1yZXNpemVdJyk7XG4gICAgICB2YXIgYWN0aXZlUmVzaXplQnV0dG9uSW5kZXggPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImluZGV4T2ZcIl0pKHJlc2l6ZUJ1dHRvbnMsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoYWN0aXZlUmVzaXplQnV0dG9uSW5kZXggPiAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRhcmdldDogJ3Jlc2l6ZUJ1dHRvbicsXG4gICAgICAgICAgaW5kZXg6IGFjdGl2ZVJlc2l6ZUJ1dHRvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE9mZnNldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPZmZzZXQoZWwpIHtcbiAgICAgIHZhciByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IHJlY3QudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0LFxuICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXRcbiAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBBcHBsaWVzIHRoZSBwcm92aWRlZCBgaGVhZEZvY3VzU3RhdGVgIHRvIHRoZSBwcm92aWRlZCBgaGVhZGAuXG4gICAgICogQHBhcmFtIGhlYWQgLSBBIHJlZmVyZW5jZSB0byBhIG1vdW50ZWQgYEhlYWRgIGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZEZvY3VzU3RhdGVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaGVhZEZvY3VzU3RhdGUudGFyZ2V0IC0gRm9jdXMgY2FuIGJlIGFwcGxpZWQgdG8gYSAnaGVhZENlbGwnIG9yIGFcbiAgICAgKiAncmVzaXplQnV0dG9uJy5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gaGVhZEZvY3VzU3RhdGUuaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gc2V0IGZvY3VzIG9uLlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiYXBwbHlIZWFkRm9jdXNTdGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcHBseUhlYWRGb2N1c1N0YXRlKGhlYWQsIF9yZWYpIHtcbiAgICAgIHZhciBfdGFyZ2V0RWwsIF90YXJnZXRFbCRmb2N1cztcblxuICAgICAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgICAgIGluZGV4ID0gX3JlZi5pbmRleDtcblxuICAgICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgICB2YXIgdGFyZ2V0RWw7XG5cbiAgICAgIGlmICh0YXJnZXQgPT09ICdoZWFkQ2VsbCcpIHtcbiAgICAgICAgdmFyIF9oZWFkJGdldEVsMztcblxuICAgICAgICB0YXJnZXRFbCA9IGhlYWQgPT09IG51bGwgfHwgaGVhZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9oZWFkJGdldEVsMyA9IGhlYWQuZ2V0RWwoKSkgPT09IG51bGwgfHwgX2hlYWQkZ2V0RWwzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaGVhZCRnZXRFbDMuY2hpbGRyZW5bMF0uY2hpbGRyZW5baW5kZXhdO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09ICdyZXNpemVCdXR0b24nKSB7XG4gICAgICAgIHZhciBfaGVhZCRnZXRFbDQ7XG5cbiAgICAgICAgdGFyZ2V0RWwgPSBoZWFkID09PSBudWxsIHx8IGhlYWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfaGVhZCRnZXRFbDQgPSBoZWFkLmdldEVsKCkpID09PSBudWxsIHx8IF9oZWFkJGdldEVsNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2hlYWQkZ2V0RWw0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRlc3Q9cmVzaXplXScpW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgICAoX3RhcmdldEVsID0gdGFyZ2V0RWwpID09PSBudWxsIHx8IF90YXJnZXRFbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90YXJnZXRFbCRmb2N1cyA9IF90YXJnZXRFbC5mb2N1cykgPT09IG51bGwgfHwgX3RhcmdldEVsJGZvY3VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGFyZ2V0RWwkZm9jdXMuY2FsbChfdGFyZ2V0RWwpO1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIFRhYmxlKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgVGFibGVfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGFibGUpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRvY2tlZFNjcm9sbEJhclwiLCBudWxsKTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGVhZFwiLCBudWxsKTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGVhZEZvY3VzU3RhdGVcIiwgdm9pZCAwKTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGVhZFRhYmxlXCIsIG51bGwpO1xuXG4gICAgVGFibGVfZGVmaW5lUHJvcGVydHkoVGFibGVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoZWFkVGFibGVFbFwiLCBudWxsKTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2Nyb2xsU291cmNlXCIsIHZvaWQgMCk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRhYmxlXCIsIG51bGwpO1xuXG4gICAgVGFibGVfZGVmaW5lUHJvcGVydHkoVGFibGVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0YWJsZUNvbnRhaW5lclwiLCBudWxsKTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlRG9ja2VkSGVhZFN0YXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5pc0lubGluZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZSA9IFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgICAgdGFibGVDb250YWluZXIgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemUudGFibGVDb250YWluZXIsXG4gICAgICAgICAgaGVhZCA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZS5oZWFkLFxuICAgICAgICAgIHRhYmxlID0gX2Fzc2VydFRoaXNJbml0aWFsaXplLnRhYmxlO1xuXG4gICAgICB2YXIgZG9ja09mZnNldCA9IF90aGlzLnByb3BzLmRvY2tPZmZzZXQ7XG5cbiAgICAgIGlmICghdGFibGUgfHwgIWhlYWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2VsbFdpZHRocyA9IGhlYWQuZ2V0Q2VsbFdpZHRocygpO1xuICAgICAgdmFyIGhlYWRIZWlnaHQgPSBoZWFkLmdldENsaWVudEhlaWdodCgpO1xuICAgICAgdmFyIHRhYmxlVG9wV3J0V2luZG93ID0gVGFibGUuZ2V0T2Zmc2V0KHRhYmxlKS50b3AgLSB3aW5kb3cucGFnZVlPZmZzZXQgLSAoaGVhZEhlaWdodCAhPT0gbnVsbCAmJiBoZWFkSGVpZ2h0ICE9PSB2b2lkIDAgPyBoZWFkSGVpZ2h0IDogMCkgKyB0YWJsZS5vZmZzZXRIZWlnaHQ7XG4gICAgICB2YXIgdG9wID0gTWF0aC5taW4odGFibGVUb3BXcnRXaW5kb3csIGRvY2tPZmZzZXQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdpZHRoOiB0YWJsZUNvbnRhaW5lciA9PT0gbnVsbCB8fCB0YWJsZUNvbnRhaW5lciA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFibGVDb250YWluZXIuY2xpZW50V2lkdGgsXG4gICAgICAgIHRhYmxlV2lkdGg6IHRhYmxlID09PSBudWxsIHx8IHRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YWJsZS5jbGllbnRXaWR0aCxcbiAgICAgICAgY2VsbFdpZHRoczogY2VsbFdpZHRocyxcbiAgICAgICAgdG9wOiB0b3BcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgVGFibGVfZGVmaW5lUHJvcGVydHkoVGFibGVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTY3JvbGxcIiwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJ0aHJvdHRsZVwiXSkoX3RoaXMudXBkYXRlRG9ja2VkSGVhZFN0YXRlLCAwKSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlc2l6ZVwiLCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcInRocm90dGxlXCJdKShfdGhpcy51cGRhdGVEb2NrZWRIZWFkU3RhdGUsIDUwKSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNvbnRhaW5lclNjcm9sbFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uU2Nyb2xsLCBfdGhpcyRwcm9wcztcblxuICAgICAgKF90aGlzJHByb3BzJG9uU2Nyb2xsID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLm9uU2Nyb2xsKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblNjcm9sbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25TY3JvbGwuY2FsbChfdGhpcyRwcm9wcywgZSk7XG5cbiAgICAgIGlmICgoX3RoaXMuaXNGaXhlZCgpIHx8IF90aGlzLmhlYWRlcklzRG9ja2VkKCkpICYmIF90aGlzLnRhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0OiAtX3RoaXMudGFibGVDb250YWluZXIuc2Nyb2xsTGVmdFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmRvY2tlZFNjcm9sbEJhciAmJiBfdGhpcy5zY3JvbGxTb3VyY2UgIT09ICdkb2NrZWRTY3JvbGxCYXInICYmIF90aGlzLnRhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIF90aGlzLnNjcm9sbFNvdXJjZSA9ICdjb250YWluZXInO1xuICAgICAgICBfdGhpcy5kb2NrZWRTY3JvbGxCYXIuc2Nyb2xsTGVmdCA9IF90aGlzLnRhYmxlQ29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zY3JvbGxTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURvY2tlZFNjcm9sbEJhclNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuc2Nyb2xsU291cmNlICE9PSAnY29udGFpbmVyJyAmJiBfdGhpcy50YWJsZUNvbnRhaW5lciAmJiBfdGhpcy5kb2NrZWRTY3JvbGxCYXIpIHtcbiAgICAgICAgX3RoaXMuc2Nyb2xsU291cmNlID0gJ2RvY2tlZFNjcm9sbEJhcic7XG4gICAgICAgIF90aGlzLnRhYmxlQ29udGFpbmVyLnNjcm9sbExlZnQgPSBfdGhpcy5kb2NrZWRTY3JvbGxCYXIuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNjcm9sbFNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlRHJhZ1N0YXJ0XCIsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgdmFyIGRyYWdJbmRleCA9IF9yZWYyLmRyYWdJbmRleDtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcmFnSW5kZXg6IGRyYWdJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCBfdGhpcy5oYW5kbGVEcmFnRW50ZXIpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgX3RoaXMuaGFuZGxlRHJhZ092ZXIpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBfdGhpcy5oYW5kbGVEcm9wKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgX3RoaXMuaGFuZGxlRHJhZ0VuZCk7XG4gICAgfSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdPdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIG5lY2Vzc2FyeSBmb3IgdGhlIGRyb3AgZXZlbnQgdG8gZmlyZVxuXG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgIH1cblxuICAgICAgX3RoaXMudXBkYXRlRHJhZ1Bvc2l0aW9uKGUuY2xpZW50WCk7XG4gICAgfSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdFbnRlclwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAvLyBuZWNlc3NhcnkgZm9yIHRoZSBkcm9wIGV2ZW50IHRvIGZpcmVcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcmFnUG9zaXRpb246IGUuY2xpZW50WFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyYWdFbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcmFnUG9zaXRpb246IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmNsZWFudXBEcmFnKCk7XG4gICAgfSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZURyb3BcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gbmVjZXNzYXJ5IHRvIHByZXZlbnQgY2VsbCBmcm9tIGFuaW1hdGluZyB0byBvcmlnaW5hbCBwb3NpdGlvbjtcbiAgICB9KTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSGVhZE1vdW50XCIsIGZ1bmN0aW9uIChjb21wKSB7XG4gICAgICBfdGhpcy5oZWFkID0gY29tcDtcbiAgICB9KTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSGVhZFRhYmxlTW91bnRcIiwgZnVuY3Rpb24gKGhlYWRUYWJsZSkge1xuICAgICAgaWYgKGhlYWRUYWJsZSkge1xuICAgICAgICAvLyBPbiBtb3VudCwgZm9jdXMgdGhlIGFwcGxpY2FibGUgZG9ja2VkIGhlYWQgY2VsbCBpZiBhIHByaW1hcnkgaGVhZCBjZWxsIHdhcyBmb2N1c2VkLlxuICAgICAgICBpZiAoX3RoaXMuaGVhZEZvY3VzU3RhdGUpIHtcbiAgICAgICAgICBUYWJsZS5hcHBseUhlYWRGb2N1c1N0YXRlKGhlYWRUYWJsZS5nZXRIZWFkKCksIF90aGlzLmhlYWRGb2N1c1N0YXRlKTtcbiAgICAgICAgICBfdGhpcy5oZWFkRm9jdXNTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF90aGlzJGhlYWRUYWJsZTtcblxuICAgICAgICAvLyBPbiB1bm1vdW50LCBmb2N1cyB0aGUgYXBwbGljYWJsZSBwcmltYXJ5IGhlYWQgY2VsbCBpZiBhIGRvY2tlZCBoZWFkIGNlbGwgd2FzIGZvY3VzZWQuXG4gICAgICAgIHZhciBmb2N1c1N0YXRlID0gVGFibGUuZ2V0SGVhZEZvY3VzU3RhdGUoKF90aGlzJGhlYWRUYWJsZSA9IF90aGlzLmhlYWRUYWJsZSkgPT09IG51bGwgfHwgX3RoaXMkaGVhZFRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRoZWFkVGFibGUuZ2V0SGVhZCgpKTtcblxuICAgICAgICBpZiAoZm9jdXNTdGF0ZSkge1xuICAgICAgICAgIFRhYmxlLmFwcGx5SGVhZEZvY3VzU3RhdGUoX3RoaXMuaGVhZCwgZm9jdXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuaGVhZFRhYmxlID0gaGVhZFRhYmxlO1xuICAgIH0pO1xuXG4gICAgVGFibGVfZGVmaW5lUHJvcGVydHkoVGFibGVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVIZWFkVGFibGVFbGVtZW50TW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBfdGhpcy5oZWFkVGFibGVFbCA9IGVsO1xuICAgIH0pO1xuXG4gICAgVGFibGVfZGVmaW5lUHJvcGVydHkoVGFibGVfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVIZWFkVGFibGVLZXlVcFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCFfdGhpcy5oZWFkVGFibGVFbCB8fCAhX3RoaXMudGFibGVDb250YWluZXIgfHwgT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpICE9PSAndGFiJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzY3JvbGxBZGp1c3QgPSBfdGhpcy5oZWFkVGFibGVFbC5zY3JvbGxMZWZ0O1xuXG4gICAgICBpZiAoc2Nyb2xsQWRqdXN0ICE9PSAwKSB7XG4gICAgICAgIF90aGlzLmhlYWRUYWJsZUVsLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICBfdGhpcy50YWJsZUNvbnRhaW5lci5zY3JvbGxMZWZ0ICs9IHNjcm9sbEFkanVzdDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQXV0b3NpemVDb2x1bW5cIiwgZnVuY3Rpb24gKGUsIF9yZWYzKSB7XG4gICAgICB2YXIgX3RoaXMkdGFibGVDb250YWluZXIsIF90aGlzJHByb3BzJG9uUmVxdWVzdCwgX3RoaXMkcHJvcHMyLCBfd3JhcHBlciRwYXJlbnROb2RlO1xuXG4gICAgICB2YXIgaW5kZXggPSBfcmVmMy5pbmRleCxcbiAgICAgICAgICBjb2x1bW5JZCA9IF9yZWYzLmNvbHVtbklkO1xuXG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXQgPSBfdGhpcy5wcm9wcy5yb3dFeHBhbnNpb24gPT09ICdub25lJyA/IDEgOiAyO1xuICAgICAgdmFyIGNlbGxzID0gKF90aGlzJHRhYmxlQ29udGFpbmVyID0gX3RoaXMudGFibGVDb250YWluZXIpID09PSBudWxsIHx8IF90aGlzJHRhYmxlQ29udGFpbmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyR0YWJsZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwidGhlYWQgdGg6bnRoLWNoaWxkKFwiLmNvbmNhdChpbmRleCArIG9mZnNldCwgXCIpLCB0Ym9keSB0ZDpudGgtY2hpbGQoXCIpLmNvbmNhdChpbmRleCArIG9mZnNldCwgXCIpXCIpKTtcbiAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IC8vIFRPRE86IGZpbmQgYSBzdHlsZWQtY29tcG9uZW50cyBjb21wbGlhbnQgd2F5IHRvIGRvIHRoaXNcblxuICAgICAgd3JhcHBlci5zdHlsZVtcImZsb2F0XCJdID0gJ2xlZnQnO1xuICAgICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICB3cmFwcGVyLnN0eWxlLnRvcCA9ICctMTAwJztcbiAgICAgIHdyYXBwZXIuc3R5bGUubGVmdCA9ICcwJztcbiAgICAgIHdyYXBwZXIuc3R5bGUubWF4SGVpZ2h0ID0gJzEwcHgnO1xuICAgICAgd3JhcHBlci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJmb3JFYWNoXCJdKShjZWxscywgZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgdmFyIGNsb25lID0gY2VsbC5jbG9uZU5vZGUodHJ1ZSk7IC8vIFRTOiB0aGlzIHNlZW1zIHNhZmUgdG8gYXNzdW1lP1xuXG4gICAgICAgIGNsb25lLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBjbG9uZS5zdHlsZS53aWR0aCA9ICdhdXRvJztcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG4gICAgICAoX3RoaXMkcHJvcHMkb25SZXF1ZXN0ID0gKF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzKS5vblJlcXVlc3RSZXNpemVDb2x1bW4pID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uUmVxdWVzdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25SZXF1ZXN0LmNhbGwoX3RoaXMkcHJvcHMyLCBlLCB7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgY29sdW1uSWQ6IGNvbHVtbklkLFxuICAgICAgICB3aWR0aDogd3JhcHBlci5jbGllbnRXaWR0aCArIDFcbiAgICAgIH0pO1xuICAgICAgKF93cmFwcGVyJHBhcmVudE5vZGUgPSB3cmFwcGVyLnBhcmVudE5vZGUpID09PSBudWxsIHx8IF93cmFwcGVyJHBhcmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF93cmFwcGVyJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG4gICAgfSk7XG5cbiAgICBUYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZURyYWdQb3NpdGlvblwiLCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcInRocm90dGxlXCJdKShfdGhpcy51cGRhdGVEcmFnUG9zaXRpb25JbXBsLCAxMDAsIHtcbiAgICAgIHRyYWlsaW5nOiBmYWxzZVxuICAgIH0pKTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgZHJhZ1Bvc2l0aW9uOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVGFibGVfY3JlYXRlQ2xhc3MoVGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgICBoZWFkVGFibGUgPSB0aGlzLmhlYWRUYWJsZTtcblxuICAgICAgaWYgKGhlYWQgJiYgaGVhZFRhYmxlKSB7XG4gICAgICAgIHZhciBjZWxsV2lkdGhzID0gaGVhZC5nZXRDZWxsV2lkdGhzKCk7XG5cbiAgICAgICAgaWYgKCFPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImlzRXF1YWxcIl0pKHRoaXMuc3RhdGUuY2VsbFdpZHRocywgY2VsbFdpZHRocykpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURvY2tlZEhlYWRTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2UHJvcHMuaGVhZFR5cGUgPT09ICdpbmxpbmUnICYmIHRoaXMucHJvcHMuaGVhZFR5cGUgIT09ICdpbmxpbmUnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRG9ja2VkSGVhZFN0YXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxzZSkge31cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnVwZGF0ZURvY2tlZEhlYWRTdGF0ZSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgdGhpcy5oYW5kbGVSZXNpemUuY2FuY2VsKCk7XG4gICAgICB0aGlzLmNsZWFudXBEcmFnKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZUhlYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlSGVhZChiYXNlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3Rpb25zID0gX3RoaXMkcHJvcHMzLmFjdGlvbnMsXG4gICAgICAgICAgYWN0aW9uc0NvbHVtbldpZHRoID0gX3RoaXMkcHJvcHMzLmFjdGlvbnNDb2x1bW5XaWR0aCxcbiAgICAgICAgICBvblJlcXVlc3RNb3ZlQ29sdW1uID0gX3RoaXMkcHJvcHMzLm9uUmVxdWVzdE1vdmVDb2x1bW4sXG4gICAgICAgICAgb25SZXF1ZXN0TW92ZVJvdyA9IF90aGlzJHByb3BzMy5vblJlcXVlc3RNb3ZlUm93LFxuICAgICAgICAgIG9uUmVxdWVzdFJlc2l6ZUNvbHVtbiA9IF90aGlzJHByb3BzMy5vblJlcXVlc3RSZXNpemVDb2x1bW4sXG4gICAgICAgICAgb25SZXF1ZXN0VG9nZ2xlQWxsUm93cyA9IF90aGlzJHByb3BzMy5vblJlcXVlc3RUb2dnbGVBbGxSb3dzLFxuICAgICAgICAgIHJvd0V4cGFuc2lvbiA9IF90aGlzJHByb3BzMy5yb3dFeHBhbnNpb24sXG4gICAgICAgICAgcm93U2VsZWN0aW9uID0gX3RoaXMkcHJvcHMzLnJvd1NlbGVjdGlvbjtcbiAgICAgIHZhciBkcmFnSW5kZXggPSB0aGlzLnN0YXRlLmRyYWdJbmRleDtcbiAgICAgIHZhciBoZWFkQ2VsbHMgPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGJhc2UucHJvcHMuY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSk7XG4gICAgICB2YXIgdmFsaWRBY3Rpb25zID0gYWN0aW9ucy5maWx0ZXIoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pO1xuICAgICAgdmFyIG5ld0hlYWQgPSAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoYmFzZSwge1xuICAgICAgICBhY3Rpb25zOiB2YWxpZEFjdGlvbnMsXG4gICAgICAgIGFjdGlvbnNDb2x1bW5XaWR0aDogYWN0aW9uc0NvbHVtbldpZHRoLFxuICAgICAgICBkcmFnSW5kZXg6IGRyYWdJbmRleCxcbiAgICAgICAgZHJhZ1Bvc2l0aW9uOiB0aGlzLnN0YXRlLmRyYWdQb3NpdGlvbixcbiAgICAgICAgaGFzSW5mb0NvbHVtbjogcm93RXhwYW5zaW9uICE9PSAnbm9uZScsXG4gICAgICAgIGhhc0RyYWdDb2x1bW46ICEhb25SZXF1ZXN0TW92ZVJvdyxcbiAgICAgICAgb25BdXRvc2l6ZUNvbHVtbjogdGhpcy5oYW5kbGVBdXRvc2l6ZUNvbHVtbixcbiAgICAgICAgb25EcmFnU3RhcnQ6IG9uUmVxdWVzdE1vdmVDb2x1bW4gPyB0aGlzLmhhbmRsZURyYWdTdGFydCA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25SZXF1ZXN0TW92ZUNvbHVtbjogb25SZXF1ZXN0TW92ZUNvbHVtbixcbiAgICAgICAgb25SZXF1ZXN0UmVzaXplQ29sdW1uOiBvblJlcXVlc3RSZXNpemVDb2x1bW4sXG4gICAgICAgIG9uUmVxdWVzdFRvZ2dsZUFsbFJvd3M6IG9uUmVxdWVzdFRvZ2dsZUFsbFJvd3MsXG4gICAgICAgIHJlZjogdGhpcy5oYW5kbGVIZWFkTW91bnQsXG4gICAgICAgIHJvd1NlbGVjdGlvbjogcm93U2VsZWN0aW9uXG4gICAgICB9LCBoZWFkQ2VsbHMpO1xuICAgICAgcmV0dXJuIG5ld0hlYWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZUJvZHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlQm9keShiYXNlKSB7XG4gICAgICB2YXIgYWN0aW9ucyA9IHRoaXMucHJvcHMuYWN0aW9ucztcbiAgICAgIHZhciB2YWxpZEFjdGlvbnMgPSBhY3Rpb25zLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL09iamVjdChleHRlcm5hbF9yZWFjdF9bXCJjbG9uZUVsZW1lbnRcIl0pKGJhc2UsIHtcbiAgICAgICAgYWN0aW9uczogdmFsaWRBY3Rpb25zLmxlbmd0aCA+IDAsXG4gICAgICAgIG1vdmFibGVDb2x1bW5zOiAhIXRoaXMucHJvcHMub25SZXF1ZXN0TW92ZUNvbHVtbixcbiAgICAgICAgb25SZXF1ZXN0TW92ZVJvdzogdGhpcy5wcm9wcy5vblJlcXVlc3RNb3ZlUm93LFxuICAgICAgICByb3dFeHBhbnNpb246IHRoaXMucHJvcHMucm93RXhwYW5zaW9uLFxuICAgICAgICBzdHJpcGVSb3dzOiB0aGlzLnByb3BzLnN0cmlwZVJvd3NcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0lubGluZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0lubGluZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmhlYWRUeXBlID09PSAnaW5saW5lJztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGVhZGVySXNEb2NrZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGVhZGVySXNEb2NrZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5oZWFkVHlwZSA9PT0gJ2RvY2tlZCc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzRml4ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNGaXhlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmhlYWRUeXBlID09PSAnZml4ZWQnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG93RG9ja2VkSGVhZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3dEb2NrZWRIZWFkZXIoKSB7XG4gICAgICBpZiAoIXRoaXMuaGVhZGVySXNEb2NrZWQoKSB8fCAhdGhpcy50YWJsZSB8fCAhdGhpcy5oZWFkIHx8ICF0aGlzLnRhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRvY2tPZmZzZXQgPSB0aGlzLnByb3BzLmRvY2tPZmZzZXQ7XG4gICAgICB2YXIgdGFibGVUb3AgPSBUYWJsZS5nZXRPZmZzZXQodGhpcy50YWJsZUNvbnRhaW5lcikudG9wO1xuICAgICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldCA+PSB0YWJsZVRvcCAtIGRvY2tPZmZzZXQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3dEb2NrZWRTY3JvbGxCYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvd0RvY2tlZFNjcm9sbEJhcigpIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5kb2NrU2Nyb2xsQmFyIHx8ICF0aGlzLnRhYmxlIHx8ICF0aGlzLnRhYmxlQ29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY3QgPSB0aGlzLnRhYmxlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIHJlY3QuYm90dG9tID4gd2luZG93LmlubmVySGVpZ2h0ICYmIHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzaG93Rml4ZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvd0ZpeGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZCAmJiB0aGlzLmlzRml4ZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlRHJhZ1Bvc2l0aW9uSW1wbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEcmFnUG9zaXRpb25JbXBsKGRyYWdQb3NpdGlvbikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyYWdQb3NpdGlvbjogZHJhZ1Bvc2l0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYW51cERyYWdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW51cERyYWcoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5oYW5kbGVEcmFnRW50ZXIpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5oYW5kbGVEcmFnT3Zlcik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuaGFuZGxlRHJvcCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMuaGFuZGxlRHJhZ0VuZCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYWdQb3NpdGlvbi5jYW5jZWwoKTsgLy8gY2FuY2VsIHRocm90dGxlXG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckhlYWRUYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJIZWFkVGFibGUodEhlYWQsIGlzRml4ZWRDb2x1bW4pIHtcbiAgICAgIHZhciBzaG93RG9ja2VkSGVhZGVyID0gdGhpcy5zaG93RG9ja2VkSGVhZGVyKCk7XG5cbiAgICAgIGlmICgodGhpcy5zaG93Rml4ZWQoKSB8fCBzaG93RG9ja2VkSGVhZGVyKSAmJiB0aGlzLnByb3BzLmhlYWRUeXBlICE9PSAnaW5saW5lJykge1xuICAgICAgICBpZiAoc2hvd0RvY2tlZEhlYWRlcikge1xuICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgaGVhZCBmb2N1cyBzdGF0ZSBzbyB0aGF0IGl0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBkb2NrZWQgdmVyc2lvblxuICAgICAgICAgIC8vIGFmdGVyIHRoZSBgSGVhZFRhYmxlYCBtb3VudHMuXG4gICAgICAgICAgdGhpcy5oZWFkRm9jdXNTdGF0ZSA9IFRhYmxlLmdldEhlYWRGb2N1c1N0YXRlKHRoaXMuaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgY2VsbFdpZHRocyA9IF90aGlzJHN0YXRlLmNlbGxXaWR0aHMsXG4gICAgICAgICAgICBkcmFnSW5kZXggPSBfdGhpcyRzdGF0ZS5kcmFnSW5kZXgsXG4gICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ID0gX3RoaXMkc3RhdGUuaG9yaXpvbnRhbE9mZnNldCxcbiAgICAgICAgICAgIHRhYmxlV2lkdGggPSBfdGhpcyRzdGF0ZS50YWJsZVdpZHRoLFxuICAgICAgICAgICAgdG9wID0gX3RoaXMkc3RhdGUudG9wLFxuICAgICAgICAgICAgd2lkdGggPSBfdGhpcyRzdGF0ZS53aWR0aDtcblxuICAgICAgICBpZiAoY2VsbFdpZHRocyA9PT0gdW5kZWZpbmVkIHx8IHRhYmxlV2lkdGggPT09IHVuZGVmaW5lZCB8fCB0b3AgPT09IHVuZGVmaW5lZCB8fCB3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUYWJsZV9IZWFkVGFibGUsIHtcbiAgICAgICAgICBoZWFkVHlwZTogdGhpcy5wcm9wcy5oZWFkVHlwZSxcbiAgICAgICAgICB0SGVhZDogdEhlYWQsXG4gICAgICAgICAgY2VsbFdpZHRoczogY2VsbFdpZHRocyxcbiAgICAgICAgICBkcmFnSW5kZXg6IGRyYWdJbmRleCxcbiAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0OiBob3Jpem9udGFsT2Zmc2V0LFxuICAgICAgICAgIHRhYmxlV2lkdGg6IHRhYmxlV2lkdGgsXG4gICAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIHRhYmxlU3R5bGU6IHRoaXMucHJvcHMudGFibGVTdHlsZSxcbiAgICAgICAgICBpc0ZpeGVkQ29sdW1uOiBpc0ZpeGVkQ29sdW1uLFxuICAgICAgICAgIHJlZjogdGhpcy5oYW5kbGVIZWFkVGFibGVNb3VudCxcbiAgICAgICAgICBvbktleVVwOiB0aGlzLmhhbmRsZUhlYWRUYWJsZUtleVVwLFxuICAgICAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaGFuZGxlSGVhZFRhYmxlRWxlbWVudE1vdW50LFxuICAgICAgICAgIGhhc0RyYWdDb2x1bW46ICEhdGhpcy5wcm9wcy5vblJlcXVlc3RNb3ZlUm93LFxuICAgICAgICAgIGhhc1Jvd0V4cGFuc2lvbjogdGhpcy5wcm9wcy5yb3dFeHBhbnNpb24gIT09ICdub25lJyxcbiAgICAgICAgICBoYXNSb3dTZWxlY3Rpb246ICEhdGhpcy5wcm9wcy5vblJlcXVlc3RUb2dnbGVBbGxSb3dzXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRvY2tlZFNjcm9sbGJhclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEb2NrZWRTY3JvbGxiYXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnNob3dEb2NrZWRTY3JvbGxCYXIoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaGlmdFBvc2l0aW9uID0gMDtcblxuICAgICAgaWYgKHRoaXMuZG9ja2VkU2Nyb2xsQmFyICYmIHRoaXMuaGVhZCAmJiB0aGlzLnRhYmxlICYmIHRoaXMuaGVhZCkge1xuICAgICAgICB2YXIgX3RoaXMkaGVhZCRnZXRFbCRvZmZzLCBfdGhpcyRoZWFkJGdldEVsO1xuXG4gICAgICAgIHZhciBhdmFpbGFibGVTcGFjZSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gKChfdGhpcyRoZWFkJGdldEVsJG9mZnMgPSAoX3RoaXMkaGVhZCRnZXRFbCA9IHRoaXMuaGVhZC5nZXRFbCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRoZWFkJGdldEVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRoZWFkJGdldEVsLm9mZnNldEhlaWdodCkgIT09IG51bGwgJiYgX3RoaXMkaGVhZCRnZXRFbCRvZmZzICE9PSB2b2lkIDAgPyBfdGhpcyRoZWFkJGdldEVsJG9mZnMgOiAwKTtcbiAgICAgICAgc2hpZnRQb3NpdGlvbiA9IE1hdGgubWluKGF2YWlsYWJsZVNwYWNlIC0gdGhpcy5kb2NrZWRTY3JvbGxCYXIub2Zmc2V0SGVpZ2h0LCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWREb2NrZWRTY3JvbGxiYXIsIHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICB3aWR0aDogdGhpcy5zdGF0ZS53aWR0aCxcbiAgICAgICAgICBtYXJnaW5Cb3R0b206IHNoaWZ0UG9zaXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgb25TY3JvbGw6IHRoaXMuaGFuZGxlRG9ja2VkU2Nyb2xsQmFyU2Nyb2xsLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImRvY2tlZC1zY3JvbGwtYmFyXCIsXG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGVsKSB7XG4gICAgICAgICAgX3RoaXMyLmRvY2tlZFNjcm9sbEJhciA9IGVsO1xuICAgICAgICB9XG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkRG9ja2VkU2Nyb2xsYmFyQ29udGVudCwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHdpZHRoOiB0aGlzLnN0YXRlLnRhYmxlV2lkdGhcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJkb2NrZWQtc2Nyb2xsLWNvbnRlbnRcIlxuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM0LmNoaWxkcmVuLFxuICAgICAgICAgIGVsZW1lbnRSZWYgPSBfdGhpcyRwcm9wczQuZWxlbWVudFJlZixcbiAgICAgICAgICBpbm5lclN0eWxlID0gX3RoaXMkcHJvcHM0LmlubmVyU3R5bGUsXG4gICAgICAgICAgb25SZXF1ZXN0UmVzaXplQ29sdW1uID0gX3RoaXMkcHJvcHM0Lm9uUmVxdWVzdFJlc2l6ZUNvbHVtbixcbiAgICAgICAgICBvblJlcXVlc3RUb2dnbGVBbGxSb3dzID0gX3RoaXMkcHJvcHM0Lm9uUmVxdWVzdFRvZ2dsZUFsbFJvd3MsXG4gICAgICAgICAgb3V0ZXJTdHlsZSA9IF90aGlzJHByb3BzNC5vdXRlclN0eWxlLFxuICAgICAgICAgIHJvd1NlbGVjdGlvbiA9IF90aGlzJHByb3BzNC5yb3dTZWxlY3Rpb24sXG4gICAgICAgICAgdGFibGVTdHlsZSA9IF90aGlzJHByb3BzNC50YWJsZVN0eWxlO1xuICAgICAgdmFyIHRIZWFkO1xuICAgICAgdmFyIHRCb2R5O1xuICAgICAgdmFyIHRDYXB0aW9uO1xuICAgICAgdmFyIGlzRml4ZWRDb2x1bW4gPSAhIW9uUmVxdWVzdFJlc2l6ZUNvbHVtbjtcbiAgICAgIGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHZhciBzcGx1bmtVaVR5cGUgPSBjaGlsZC50eXBlLnNwbHVua1VpVHlwZTtcblxuICAgICAgICBpZiAoc3BsdW5rVWlUeXBlID09PSAnVGFibGUuSGVhZCcpIHtcbiAgICAgICAgICB0SGVhZCA9IF90aGlzMy5jcmVhdGVIZWFkKGNoaWxkKTtcblxuICAgICAgICAgIGlmICghaXNGaXhlZENvbHVtbikge1xuICAgICAgICAgICAgLy8gaWYgYWxsIHRoZSBIZWFkQ2VsbHMgYXJlIGZpeGVkIHdpZHRoLCB0aGVuIHRoZSB0YWJsZSBpcyBmaXhlZC5cbiAgICAgICAgICAgIGlzRml4ZWRDb2x1bW4gPSAhZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZC5wcm9wcy5jaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKS5zb21lKGZ1bmN0aW9uICh0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gIU9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaGFzXCJdKSh0aC5wcm9wcywgJ3dpZHRoJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3BsdW5rVWlUeXBlID09PSAnVGFibGUuQm9keScpIHtcbiAgICAgICAgICB0Qm9keSA9IF90aGlzMy5jcmVhdGVCb2R5KGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGx1bmtVaVR5cGUgPT09ICdUYWJsZS5DYXB0aW9uJykge1xuICAgICAgICAgIC8vIHRoZSBodG1sIHNwZWMgbWFuZGF0ZXMgdGhhdCBhIGNhcHRpb24gbXVzdCBiZSB0aGUgZmlyc3QgdGFibGUgY2hpbGQuXG4gICAgICAgICAgLy8gY2F0Y2ggdGhlIGNhcHRpb24gaGVyZSBzbyB0aGF0IGl0IGNhbiBiZSBwbGFjZWQgZmlyc3QgbGF0ZXIuIG5vdGU6IGFcbiAgICAgICAgICAvLyBjYXB0aW9uIGNhbiBiZSBwbGFjZWQgb24gdGhlIGJvdHRvbSBzaWRlIG9mIGEgdGFibGUgYnkgYWRqdXN0aW5nIHRoZVxuICAgICAgICAgIC8vIGNhcHRpb24ncyBzaWRlIHByb3AuXG4gICAgICAgICAgdENhcHRpb24gPSBjaGlsZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QodHlwZXNbXCJhXCIgLyogYXNzZXJ0RGVmaW5lZCAqL10pKHRIZWFkLCAnQSBUYWJsZS5IZWFkIGlzIHJlcXVpcmVkLicpO1xuICAgICAgdmFyIGhlYWRUYWJsZSA9IHRoaXMucmVuZGVySGVhZFRhYmxlKHRIZWFkLCBpc0ZpeGVkQ29sdW1uKTsgLy8gV2hlbiBhIGBoZWFkVGFibGVgIGlzIHVzZWQsIHN1cHByZXNzIGZvY3VzIGludGVyYWN0aW9ucyBpbiB0aGUgcHJpbWFyeSBgSGVhZGAuIEZvY3VzXG4gICAgICAvLyBpbnRlcmFjdGlvbnMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBvdmVybGFpZCBgaGVhZFRhYmxlYCBpbnN0ZWFkLlxuXG4gICAgICB2YXIgaGVhZENlbGxzID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheSh0SGVhZC5wcm9wcy5jaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKS5tYXAoZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgLy8gVFM6IG9uQ2xpY2sgaXMgZGlmZmVyZW50IGZvciByZWd1bGFyL2Ryb3Bkb3duIGhlYWQgY2VsbHMsIHRoYXQncyBva1xuICAgICAgICAgIE9iamVjdChleHRlcm5hbF9yZWFjdF9bXCJjbG9uZUVsZW1lbnRcIl0pKGNlbGwsIHtcbiAgICAgICAgICAgIHZpc2libGU6ICFoZWFkVGFibGVcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0SGVhZCA9IC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKSh0SGVhZCwge30sIGhlYWRDZWxscyk7XG4gICAgICB2YXIgZGVmYXVsdFNjcm9sbENvbnRhaW5lciA9IHRoaXMuY29udGV4dCB8fCAnd2luZG93JztcbiAgICAgIHZhciBzY3JvbGxDb250YWluZXIgPSB0aGlzLmlzRml4ZWQoKSA/IHRoaXMudGFibGVDb250YWluZXIgOiBkZWZhdWx0U2Nyb2xsQ29udGFpbmVyO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUYWJsZVN0eWxlc19TdHlsZWQsIFRhYmxlX2V4dGVuZHMoe1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRhYmxlXCIsXG4gICAgICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAgICAgc3R5bGU6IG91dGVyU3R5bGUsXG4gICAgICAgIFwiZGF0YS10ZXN0LXJvdy1zZWxlY3Rpb25cIjogb25SZXF1ZXN0VG9nZ2xlQWxsUm93cyA/IHJvd1NlbGVjdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKSh0aGlzLnByb3BzLCBbXS5jb25jYXQoVGFibGVfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMoVGFibGUucHJvcFR5cGVzKSksIFsnc3R5bGUnXSkpKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyX2RlZmF1bHQuYSwge1xuICAgICAgICB0YXJnZXQ6IFwid2luZG93XCIsXG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLmhhbmRsZVNjcm9sbFxuICAgICAgfSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChleHRlcm5hbF9yZWFjdF9yZXNpemVfZGV0ZWN0b3JfZGVmYXVsdC5hLCB7XG4gICAgICAgIGhhbmRsZVdpZHRoOiB0cnVlLFxuICAgICAgICBvblJlc2l6ZTogdGhpcy5oYW5kbGVSZXNpemVcbiAgICAgIH0pLCBoZWFkVGFibGUsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRUYWJsZUNvbnRhaW5lciwge1xuICAgICAgICBvblNjcm9sbDogdGhpcy5oYW5kbGVDb250YWluZXJTY3JvbGwsXG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGVsKSB7XG4gICAgICAgICAgX3RoaXMzLnRhYmxlQ29udGFpbmVyID0gZWw7XG4gICAgICAgIH0sXG4gICAgICAgIHN0eWxlOiBpbm5lclN0eWxlXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2Nyb2xsQ29udGFpbmVyQ29udGV4dF9bXCJTY3JvbGxDb250YWluZXJQcm92aWRlclwiXSwge1xuICAgICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVGFibGUsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoZWwpIHtcbiAgICAgICAgICBfdGhpczMudGFibGUgPSBlbDtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJtYWluLXRhYmxlXCIsXG4gICAgICAgIHN0eWxlOiB0YWJsZVN0eWxlLFxuICAgICAgICBcImRhdGEtZml4ZWQtY29sdW1uXCI6IGlzRml4ZWRDb2x1bW4gPyAndHJ1ZScgOiB1bmRlZmluZWRcbiAgICAgIH0sIHRDYXB0aW9uLCB0SGVhZCwgdEJvZHkpKSksIHRoaXMucmVuZGVyRG9ja2VkU2Nyb2xsYmFyKCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUYWJsZTtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuVGFibGVfZGVmaW5lUHJvcGVydHkoVGFibGVfVGFibGUsIFwicHJvcFR5cGVzXCIsIFRhYmxlX3Byb3BUeXBlcyk7XG5cblRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX1RhYmxlLCBcImNvbnRleHRUeXBlXCIsIFNjcm9sbENvbnRhaW5lckNvbnRleHRfW1wiU2Nyb2xsQ29udGFpbmVyQ29udGV4dFwiXSk7XG5cblRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX1RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCBUYWJsZV9kZWZhdWx0UHJvcHMpO1xuXG5UYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9UYWJsZSwgXCJDYXB0aW9uXCIsIFRhYmxlX0NhcHRpb24pO1xuXG5UYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9UYWJsZSwgXCJIZWFkXCIsIFRhYmxlX0hlYWQpO1xuXG5UYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9UYWJsZSwgXCJIZWFkQ2VsbFwiLCBUYWJsZV9IZWFkQ2VsbCk7XG5cblRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX1RhYmxlLCBcIkhlYWREcm9wZG93bkNlbGxcIiwgVGFibGVfSGVhZERyb3Bkb3duQ2VsbCk7XG5cblRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX1RhYmxlLCBcIkJvZHlcIiwgVGFibGVfQm9keSk7XG5cblRhYmxlX2RlZmluZVByb3BlcnR5KFRhYmxlX1RhYmxlLCBcIlJvd1wiLCBUYWJsZV9Sb3cpO1xuXG5UYWJsZV9kZWZpbmVQcm9wZXJ0eShUYWJsZV9UYWJsZSwgXCJDZWxsXCIsIFRhYmxlX0NlbGwpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfVGFibGVfVGFibGUgPSAoVGFibGVfVGFibGUpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJsZS9pbmRleC50c1xuXG5cblxuLyoqKi8gfSlcbi8qKioqKiovIF0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTI0KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaWRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfVG9vbHRpcF9Ub29sdGlwOyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Qb3BvdmVyXCJcbnZhciBQb3BvdmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIFBvcG92ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oUG9wb3Zlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9TY3JlZW5SZWFkZXJDb250ZW50XCJcbnZhciBTY3JlZW5SZWFkZXJDb250ZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIFNjcmVlblJlYWRlckNvbnRlbnRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oU2NyZWVuUmVhZGVyQ29udGVudF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pZFwiXG52YXIgaWRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIlxudmFyIGkxOG5fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHXCJcbnZhciBTVkdfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG52YXIgU1ZHX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFNWR18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Ub29sdGlwL0luZm9JY29uLnRzeFxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuXG5cbmZ1bmN0aW9uIEluZm9DaXJjbGUocHJvcHMpIHtcbiAgdmFyIF91c2VTcGx1bmtUaGVtZSA9IE9iamVjdCh0aGVtZXNfW1widXNlU3BsdW5rVGhlbWVcIl0pKCksXG4gICAgICBmYW1pbHkgPSBfdXNlU3BsdW5rVGhlbWUuZmFtaWx5LFxuICAgICAgZGVuc2l0eSA9IF91c2VTcGx1bmtUaGVtZS5kZW5zaXR5O1xuXG4gIGlmIChmYW1pbHkgPT09ICdlbnRlcnByaXNlJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHX2RlZmF1bHQuYSwgX2V4dGVuZHMoe1xuICAgICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0luZm8gQ2lyY2xlJyksXG4gICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gICAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICBkOiBcIk0xMiAyMEMxNi40MTgzIDIwIDIwIDE2LjQxODMgMjAgMTJDMjAgNy41ODE3MiAxNi40MTgzIDQgMTIgNEM3LjU4MTcyIDQgNCA3LjU4MTcyIDQgMTJDNCAxNi40MTgzIDcuNTgxNzIgMjAgMTIgMjBaTTEyIDIyQzE3LjUyMjggMjIgMjIgMTcuNTIyOCAyMiAxMkMyMiA2LjQ3NzE1IDE3LjUyMjggMiAxMiAyQzYuNDc3MTUgMiAyIDYuNDc3MTUgMiAxMkMyIDE3LjUyMjggNi40NzcxNSAyMiAxMiAyMlpNMTMuMjAwMSA4LjE5OTlDMTMuMjAwMSA3LjUzNzE2IDEyLjY2MjggNi45OTk5IDEyLjAwMDEgNi45OTk5QzExLjMzNzMgNi45OTk5IDEwLjgwMDEgNy41MzcxNiAxMC44MDAxIDguMTk5OUMxMC44MDAxIDguODYyNjQgMTEuMzM3MyA5LjM5OTkgMTIuMDAwMSA5LjM5OTlDMTIuNjYyOCA5LjM5OTkgMTMuMjAwMSA4Ljg2MjY0IDEzLjIwMDEgOC4xOTk5Wk0xMS4wMDAxIDE2LjAwOTRWMTEuOTk5OUMxMS4wMDAxIDExLjQ0NzYgMTEuNDQ3OCAxMC45OTk5IDEyLjAwMDEgMTAuOTk5OUMxMi41NTI0IDEwLjk5OTkgMTMuMDAwMSAxMS40NDc2IDEzLjAwMDEgMTEuOTk5OVYxNi4wMDk0QzEzLjAwMDEgMTYuNTYxNyAxMi41NTI0IDE3LjAwOTQgMTIuMDAwMSAxNy4wMDk0QzExLjQ0NzggMTcuMDA5NCAxMS4wMDAxIDE2LjU2MTcgMTEuMDAwMSAxNi4wMDk0WlwiXG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIHNpemUgPSBkZW5zaXR5ID09PSAnY29tcGFjdCcgPyAnMjAnIDogJzI0JztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBzdHlsZToge1xuICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjBDMTYuNDE4MyAyMCAyMCAxNi40MTgzIDIwIDEyQzIwIDcuNTgxNzIgMTYuNDE4MyA0IDEyIDRDNy41ODE3MiA0IDQgNy41ODE3MiA0IDEyQzQgMTYuNDE4MyA3LjU4MTcyIDIwIDEyIDIwWk0xMiAyMkMxNy41MjI4IDIyIDIyIDE3LjUyMjggMjIgMTJDMjIgNi40NzcxNSAxNy41MjI4IDIgMTIgMkM2LjQ3NzE1IDIgMiA2LjQ3NzE1IDIgMTJDMiAxNy41MjI4IDYuNDc3MTUgMjIgMTIgMjJaTTEzLjIwMDMgOC4xOTk5QzEzLjIwMDMgNy41MzcxNiAxMi42NjMgNi45OTk5IDEyLjAwMDMgNi45OTk5QzExLjMzNzYgNi45OTk5IDEwLjgwMDMgNy41MzcxNiAxMC44MDAzIDguMTk5OUMxMC44MDAzIDguODYyNjQgMTEuMzM3NiA5LjM5OTkgMTIuMDAwMyA5LjM5OTlDMTIuNjYzIDkuMzk5OSAxMy4yMDAzIDguODYyNjQgMTMuMjAwMyA4LjE5OTlaTTExLjAwMDUgMTYuMDA5NFYxMS45OTk5QzExLjAwMDUgMTEuNDQ3NiAxMS40NDgyIDEwLjk5OTkgMTIuMDAwNSAxMC45OTk5QzEyLjU1MjggMTAuOTk5OSAxMy4wMDA1IDExLjQ0NzYgMTMuMDAwNSAxMS45OTk5VjE2LjAwOTRDMTMuMDAwNSAxNi41NjE3IDEyLjU1MjggMTcuMDA5NCAxMi4wMDA1IDE3LjAwOTRDMTEuNDQ4MiAxNy4wMDk0IDExLjAwMDUgMTYuNTYxNyAxMS4wMDA1IDE2LjAwOTRaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufVxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBJbmZvSWNvbiA9IChJbmZvQ2lyY2xlKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIlxudmFyIENsaWNrYWJsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBDbGlja2FibGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQ2xpY2thYmxlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1Rvb2x0aXAvVG9vbHRpcFN0eWxlcy50c1xuXG5cblxudmFyIFRvb2x0aXBTdHlsZXNfc2l6ZSA9ICcxNnB4JztcbnZhciBTdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuc3Bhbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVG9vbHRpcFN0eWxlc19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTY3ZnZnbS0wXCJcbn0pKFtcIlwiLCBcIjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJykpO1xudmFyIFN0eWxlZElubGluZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUb29sdGlwU3R5bGVzX19TdHlsZWRJbmxpbmVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNjdmdmdtLTFcIlxufSkoW1wiXCIsIFwiO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnaW5saW5lLWJsb2NrJykpO1xudmFyIFN0eWxlZFRvZ2dsZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUb29sdGlwU3R5bGVzX19TdHlsZWRUb2dnbGVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNjdmdmdtLTJcIlxufSkoW1wiZGlzcGxheTpibG9jaztcIl0pO1xudmFyIFN0eWxlZFRvZ2dsZUlubGluZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUb29sdGlwU3R5bGVzX19TdHlsZWRUb2dnbGVJbmxpbmVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtNjdmdmdtLTNcIlxufSkoW1wiZGlzcGxheTppbmxpbmUtYmxvY2s7XCJdKTtcbnZhciBTdHlsZWRDb250ZW50ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVG9vbHRpcFN0eWxlc19fU3R5bGVkQ29udGVudFwiLFxuICBjb21wb25lbnRJZDogXCJzYy02N2Z2Z20tNFwiXG59KShbXCJwYWRkaW5nOlwiLCBcIjtmb250LXNpemU6XCIsIFwiO2xpbmUtaGVpZ2h0OlwiLCBcIjt1c2VyLXNlbGVjdDpub25lO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ0hhbGYsXG4gIHByaXNtYTogT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRpc0xhYmVsJywge1xuICAgIFwiZmFsc2VcIjogJzEycHggMTZweCcsXG4gICAgXCJ0cnVlXCI6ICc0cHggOHB4J1xuICB9KVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvbnRTaXplU21hbGwsXG4gIHByaXNtYTogJ2luaGVyaXQnXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICcxOHB4JyxcbiAgcHJpc21hOiBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGlzTGFiZWwnLCB7XG4gICAgXCJmYWxzZVwiOiAnaW5oZXJpdCcsXG4gICAgXCJ0cnVlXCI6ICcxOHB4J1xuICB9KVxufSkpO1xudmFyIFN0eWxlZEJ1dHRvbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShDbGlja2FibGVfZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVG9vbHRpcFN0eWxlc19fU3R5bGVkQnV0dG9uXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTY3ZnZnbS01XCJcbn0pKFtcImN1cnNvcjpkZWZhdWx0O1wiLCBcIiBcIiwgXCIgJjpmb2N1c3tib3gtc2hhZG93OlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6XCIsIFwiO2hlaWdodDpcIiwgXCI7Ym9yZGVyOjJweCBzb2xpZCBcIiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgXCI7Zm9udC1zaXplOlwiLCBcIjtmb250LXdlaWdodDpcIiwgXCI7bGluZS1oZWlnaHQ6Y2FsYyhcIiwgXCIgLSAycHgpO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOlwiLCBcIjt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTsmOm5vdChbZGlzYWJsZWRdKXsmOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO319XCJdLCBUb29sdGlwU3R5bGVzX3NpemUsIFRvb2x0aXBTdHlsZXNfc2l6ZSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5saW5rQ29sb3IsIFRvb2x0aXBTdHlsZXNfc2l6ZSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvbnRXZWlnaHRTZW1pQm9sZCwgVG9vbHRpcFN0eWxlc19zaXplLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmtDb2xvciksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiO2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsmOmhvdmVyLCY6Zm9jdXN7Y29sb3I6XCIsIFwiO2JhY2tncm91bmQ6XCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXIpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOjhweDtcIl0pLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6NnB4O1wiXSlcbiAgfVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3cpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Ub29sdGlwL1Rvb2x0aXAudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIFRvb2x0aXBfZXh0ZW5kcygpIHsgVG9vbHRpcF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIFRvb2x0aXBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGNsb3NlRGVsYXk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgY29udGVudDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgY29udGVudFJlbGF0aW9uc2hpcDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydsYWJlbCcsICdkZXNjcmlwdGlvbiddKSxcbiAgZGVmYXVsdFBsYWNlbWVudDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydhYm92ZScsICdiZWxvdycsICdsZWZ0JywgJ3JpZ2h0JywgJ3RoZW1lJ10pLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBpbmxpbmU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIG9uUmVxdWVzdENsb3NlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblJlcXVlc3RPcGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvcGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBvcGVuRGVsYXk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyXSksXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIHNwbHVua1RoZW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3Rcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjbG9zZURlbGF5OiAwLFxuICBjb250ZW50UmVsYXRpb25zaGlwOiAnZGVzY3JpcHRpb24nLFxuICBkZWZhdWx0UGxhY2VtZW50OiAndGhlbWUnLFxuICBpbmxpbmU6IHRydWUsXG4gIG9wZW5EZWxheTogJ3ByaW1hcnknXG59O1xuXG4vKipcbiAqIFRoZSBUb29sdGlwIGNvbXBvbmVudCB3cmFwcyBhcmJpdHJhcnkgY29udGVudCB0byBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgaG92ZXJlZFxuICogb3IgZm9jdXNlZC5cbiAqL1xudmFyIFRvb2x0aXBfVG9vbHRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoVG9vbHRpcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUb29sdGlwKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIFRvb2x0aXBQcm9wc0Jhc2VcbiAgZnVuY3Rpb24gVG9vbHRpcChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb29sdGlwKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFyaWFJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbnRyb2xsZWRFeHRlcm5hbGx5XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlcklkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vdW50XCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgLy8gSGFuZGxlIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgd2l0aCBuYXRpdmUgZXZlbnRzIGR1ZSB0byBjdXJyZW50IGlzc3VlcyB3aXRoIGhvdyB0aGV5XG4gICAgICAvLyBhcmUgaGFuZGxlZCBieSByZWFjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNDI1MSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTk0MTksIGFuZCBTVUktMTIzMi5cbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgX3RoaXMuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBfdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICAgIH0gZWxzZSBpZiAoX3RoaXMuc3RhdGUuYW5jaG9yKSB7XG4gICAgICAgIF90aGlzLnN0YXRlLmFuY2hvci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgX3RoaXMuaGFuZGxlTW91c2VFbnRlcik7XG5cbiAgICAgICAgX3RoaXMuc3RhdGUuYW5jaG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBfdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhbmNob3I6IGVsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVQb3BvdmVyTW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIF90aGlzLmhhbmRsZU1vdXNlRW50ZXJQb3BvdmVyKTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIF90aGlzLmhhbmRsZU1vdXNlTGVhdmVQb3BvdmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoX3RoaXMuc3RhdGUucG9wb3ZlckVsKSB7XG4gICAgICAgIF90aGlzLnN0YXRlLnBvcG92ZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgX3RoaXMuaGFuZGxlTW91c2VFbnRlclBvcG92ZXIpO1xuXG4gICAgICAgIF90aGlzLnN0YXRlLnBvcG92ZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgX3RoaXMuaGFuZGxlTW91c2VMZWF2ZVBvcG92ZXIpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBvcG92ZXJFbDogZWxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vdXNlRW50ZXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzLmhhbmRsZVJlcXVlc3RPcGVuKGUsIHtcbiAgICAgICAgcmVhc29uOiAnbW91c2VFbnRlclRvZ2dsZSdcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vdXNlRW50ZXJQb3BvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoX3RoaXMuc3RhdGUubGFzdENsb3NlUmVhc29uICE9PSAnbW91c2VMZWF2ZVBvcG92ZXInKSB7XG4gICAgICAgIF90aGlzLmhhbmRsZVJlcXVlc3RPcGVuKGUsIHtcbiAgICAgICAgICByZWFzb246ICdtb3VzZUVudGVyUG9wb3ZlcidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91c2VMZWF2ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMuaGFuZGxlUmVxdWVzdENsb3NlKGUsIHtcbiAgICAgICAgcmVhc29uOiAnbW91c2VMZWF2ZVRvZ2dsZSdcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vdXNlTGVhdmVQb3BvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBfdGhpcy5oYW5kbGVSZXF1ZXN0Q2xvc2UoZSwge1xuICAgICAgICByZWFzb246ICdtb3VzZUxlYXZlUG9wb3ZlcidcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUZvY3VzXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBfdGhpcy5oYW5kbGVSZXF1ZXN0T3BlbihlLCB7XG4gICAgICAgIHJlYXNvbjogJ2ZvY3VzVG9nZ2xlJ1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQmx1clwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMuaGFuZGxlUmVxdWVzdENsb3NlKGUsIHtcbiAgICAgICAgcmVhc29uOiAnYmx1clRvZ2dsZSdcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVBvcG92ZXJPblJlcXVlc3RDbG9zZVwiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgX3RoaXMuaGFuZGxlUmVxdWVzdENsb3NlKG51bGwsIGRhdGEpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlcXVlc3RDbG9zZVwiLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgdmFyIGNsb3NlRGVsYXkgPSBfdGhpcy5wcm9wcy5jbG9zZURlbGF5O1xuXG4gICAgICBpZiAoX3RoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25SZXF1ZXN0LCBfdGhpcyRwcm9wcztcblxuICAgICAgICBpZiAoIV90aGlzLmlzQ29udHJvbGxlZCgpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgb3BlbjogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblJlcXVlc3QgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25SZXF1ZXN0Q2xvc2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uUmVxdWVzdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25SZXF1ZXN0LmNhbGwoX3RoaXMkcHJvcHMsIGUsIGRhdGEpO1xuICAgICAgfSwgY2xvc2VEZWxheSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlUmVxdWVzdE9wZW5cIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciBvcGVuRGVsYXkgPSBfdGhpcy5wcm9wcy5vcGVuRGVsYXk7XG4gICAgICB2YXIgbm9ybWFsRGVsYXkgPSBvcGVuRGVsYXkgPT09ICdwcmltYXJ5JyA/IDMwMCA6IDc1MDtcbiAgICAgIHZhciBmaW5hbERlbGF5ID0gdHlwZW9mIG9wZW5EZWxheSA9PT0gJ251bWJlcicgPyBvcGVuRGVsYXkgOiBub3JtYWxEZWxheTtcblxuICAgICAgaWYgKF90aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uUmVxdWVzdDIsIF90aGlzJHByb3BzMjtcblxuICAgICAgICBpZiAoIV90aGlzLmlzQ29udHJvbGxlZCgpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgb3BlbjogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgKF90aGlzJHByb3BzJG9uUmVxdWVzdDIgPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uUmVxdWVzdE9wZW4pID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uUmVxdWVzdDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uUmVxdWVzdDIuY2FsbChfdGhpcyRwcm9wczIsIGUsIGRhdGEpO1xuICAgICAgfSwgZmluYWxEZWxheSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5jb250cm9sbGVkRXh0ZXJuYWxseSA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaGFzXCJdKShwcm9wcywgJ29wZW4nKTtcbiAgICBfdGhpcy5wb3BvdmVySWQgPSBPYmplY3QoaWRfW1wiY3JlYXRlRE9NSURcIl0pKCdwb3BvdmVyJyk7XG4gICAgX3RoaXMuYXJpYUlkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgnYXJpYS1pZCcpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYW5jaG9yOiBudWxsLFxuICAgICAgb3BlbjogZmFsc2UsXG4gICAgICBwb3BvdmVyRWw6IG51bGwsXG4gICAgICBsYXN0Q2xvc2VSZWFzb246IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb29sdGlwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgaWYgKGZhbHNlKSB7fVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNDb250cm9sbGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzQ29udHJvbGxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZWRFeHRlcm5hbGx5O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY29udGVudCA9IF90aGlzJHByb3BzMy5jb250ZW50LFxuICAgICAgICAgIGRlZmF1bHRQbGFjZW1lbnQgPSBfdGhpcyRwcm9wczMuZGVmYXVsdFBsYWNlbWVudCxcbiAgICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHMzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgaW5saW5lID0gX3RoaXMkcHJvcHMzLmlubGluZSxcbiAgICAgICAgICBvblJlcXVlc3RDbG9zZSA9IF90aGlzJHByb3BzMy5vblJlcXVlc3RDbG9zZSxcbiAgICAgICAgICBvblJlcXVlc3RPcGVuID0gX3RoaXMkcHJvcHMzLm9uUmVxdWVzdE9wZW4sXG4gICAgICAgICAgb3BlbiA9IF90aGlzJHByb3BzMy5vcGVuLFxuICAgICAgICAgIHNwbHVua1RoZW1lID0gX3RoaXMkcHJvcHMzLnNwbHVua1RoZW1lLFxuICAgICAgICAgIGNvbnRlbnRSZWxhdGlvbnNoaXAgPSBfdGhpcyRwcm9wczMuY29udGVudFJlbGF0aW9uc2hpcCxcbiAgICAgICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgW1wiY2hpbGRyZW5cIiwgXCJjb250ZW50XCIsIFwiZGVmYXVsdFBsYWNlbWVudFwiLCBcImVsZW1lbnRSZWZcIiwgXCJpbmxpbmVcIiwgXCJvblJlcXVlc3RDbG9zZVwiLCBcIm9uUmVxdWVzdE9wZW5cIiwgXCJvcGVuXCIsIFwic3BsdW5rVGhlbWVcIiwgXCJjb250ZW50UmVsYXRpb25zaGlwXCJdKTtcblxuICAgICAgdmFyIGFuY2hvciA9IHRoaXMuc3RhdGUuYW5jaG9yO1xuICAgICAgdmFyIGhhc0NvbnRlbnQgPSAhIWNvbnRlbnQ7XG4gICAgICB2YXIgb3BlblJlbmRlciA9ICEhYW5jaG9yICYmIHRoaXMuaXNDb250cm9sbGVkKCkgPyBvcGVuIDogaGFzQ29udGVudCAmJiB0aGlzLnN0YXRlLm9wZW47XG4gICAgICB2YXIgU3R5bGVkQ29tcCA9IGlubGluZSA/IFN0eWxlZElubGluZSA6IFN0eWxlZDtcbiAgICAgIHZhciBTdHlsZWRUb2dnbGVDb21wID0gaW5saW5lID8gU3R5bGVkVG9nZ2xlSW5saW5lIDogU3R5bGVkVG9nZ2xlO1xuICAgICAgdmFyIGlzUHJpc21hID0gc3BsdW5rVGhlbWUuZmFtaWx5ID09PSAncHJpc21hJztcbiAgICAgIHZhciBwbGFjZW1lbnQgPSBpc1ByaXNtYSA/ICdiZWxvdycgOiAnYWJvdmUnO1xuICAgICAgdmFyIGNsb25lUHJvcHM7XG5cbiAgICAgIGlmIChjb250ZW50UmVsYXRpb25zaGlwID09PSAnbGFiZWwnKSB7XG4gICAgICAgIGNsb25lUHJvcHMgPSB7XG4gICAgICAgICAgbGFiZWxsZWRCeTogdGhpcy5hcmlhSWQsXG4gICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHRoaXMuYXJpYUlkIC8vIG5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHRoZSBgbGFiZWxsZWRCeWAgcHJvcC5cblxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChjb250ZW50UmVsYXRpb25zaGlwID09PSAnZGVzY3JpcHRpb24nKSB7XG4gICAgICAgIGNsb25lUHJvcHMgPSB7XG4gICAgICAgICAgZGVzY3JpYmVkQnk6IHRoaXMuYXJpYUlkLFxuICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdGhpcy5hcmlhSWRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDb21wLCBUb29sdGlwX2V4dGVuZHMoe1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRvb2x0aXBcIixcbiAgICAgICAgXCJkYXRhLXRlc3Qtb3BlblwiOiBvcGVuUmVuZGVyLFxuICAgICAgICBcImRhdGEtdGVzdC1wb3BvdmVyLWlkXCI6IHRoaXMucG9wb3ZlcklkLFxuICAgICAgICByZWY6IGVsZW1lbnRSZWZcbiAgICAgIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVG9nZ2xlQ29tcCwge1xuICAgICAgICBvbkZvY3VzOiB0aGlzLmhhbmRsZUZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlQmx1cixcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZU1vdW50LFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRvZ2dsZVwiXG4gICAgICB9LCBoYXNDb250ZW50ICYmIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pKGNoaWxkcmVuKSA/IC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShjaGlsZHJlbiwgY2xvbmVQcm9wcykgOiBjaGlsZHJlbiwgaGFzQ29udGVudCAmJiAhY2hpbGRyZW4gJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEJ1dHRvbiwge1xuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogdGhpcy5hcmlhSWRcbiAgICAgIH0sIGlzUHJpc21hID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEluZm9JY29uLCB7XG4gICAgICAgIGhpZGVEZWZhdWx0VG9vbHRpcDogdHJ1ZSxcbiAgICAgICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ01vcmUgaW5mbycpLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogJzIycHgnLFxuICAgICAgICAgIHdpZHRoOiAnMjJweCdcbiAgICAgICAgfVxuICAgICAgfSkgOiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxuICAgICAgfSwgXCI/XCIpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0LmEsIG51bGwsIE9iamVjdChpMThuX1tcIl9cIl0pKCdNb3JlIGluZm8nKSkpKSwgaGFzQ29udGVudCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0LmEsIHtcbiAgICAgICAgaWQ6IHRoaXMuYXJpYUlkXG4gICAgICB9LCBjb250ZW50KSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQb3BvdmVyX2RlZmF1bHQuYSwge1xuICAgICAgICByb2xlOiBcInRvb2x0aXBcIixcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGFuY2hvcjogYW5jaG9yLFxuICAgICAgICBhcHBlYXJhbmNlOiBcImludmVydGVkXCIsXG4gICAgICAgIGNsb3NlUmVhc29uczogWydvZmZTY3JlZW4nLCAnZXNjYXBlS2V5J10sXG4gICAgICAgIGRlZmF1bHRQbGFjZW1lbnQ6IGRlZmF1bHRQbGFjZW1lbnQgPT09ICd0aGVtZScgPyBwbGFjZW1lbnQgOiBkZWZhdWx0UGxhY2VtZW50LFxuICAgICAgICBpZDogdGhpcy5wb3BvdmVySWQsXG4gICAgICAgIG9wZW46IG9wZW5SZW5kZXIsXG4gICAgICAgIG9uUmVxdWVzdENsb3NlOiB0aGlzLmhhbmRsZVBvcG92ZXJPblJlcXVlc3RDbG9zZSxcbiAgICAgICAgZWxlbWVudFJlZjogdGhpcy5oYW5kbGVQb3BvdmVyTW91bnRcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDb250ZW50LCB7XG4gICAgICAgICRpc0xhYmVsOiBjb250ZW50UmVsYXRpb25zaGlwID09PSAnbGFiZWwnXG4gICAgICB9LCBjb250ZW50KSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb29sdGlwO1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoVG9vbHRpcF9Ub29sdGlwLCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoVG9vbHRpcF9Ub29sdGlwLCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG52YXIgVG9vbHRpcFdpdGhUaGVtZSA9IE9iamVjdCh0aGVtZXNfW1wid2l0aFNwbHVua1RoZW1lXCJdKShUb29sdGlwX1Rvb2x0aXApO1xuVG9vbHRpcFdpdGhUaGVtZS5wcm9wVHlwZXMgPSBUb29sdGlwX1Rvb2x0aXAucHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1Rvb2x0aXBfVG9vbHRpcCA9IChUb29sdGlwV2l0aFRoZW1lKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1Rvb2x0aXAvaW5kZXgudHNcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9TY3JlZW5SZWFkZXJDb250ZW50XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvUG9wb3ZlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdHJpbmdUb0tleXdvcmRzID0gc3RyaW5nVG9LZXl3b3JkcztcbmV4cG9ydHMudGVzdFBocmFzZSA9IHRlc3RQaHJhc2U7XG5leHBvcnRzLmtleXdvcmRMb2NhdGlvbnNBbGwgPSBrZXl3b3JkTG9jYXRpb25zQWxsO1xuZXhwb3J0cy5rZXl3b3JkTG9jYXRpb25zID0ga2V5d29yZExvY2F0aW9ucztcbmV4cG9ydHMuZmlsdGVyQnlLZXl3b3JkcyA9IGZpbHRlckJ5S2V5d29yZHM7XG5cbnZhciBfbG9kYXNoID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuLyoqXG4gKiBAZmlsZVxuICogQSBzZXQgb2YgZnVuY3Rpb25zIGZvciBmaWx0ZXJpbmcgaXRlbXMsIG9mdGVuIG1lbnUgaXRlbXMuIEZvciBzaW1wbGUgdXNlIGNhc2VzLFxuICogdXNlIGBmaWx0ZXJCeUtleXdvcmRzYC4gVXNlIGBzdHJpbmdUb0tleXdvcmRzYCBhbmQgYHRlc3RQaHJhc2VgIHdoZW4gbW9yZSBjb250cm9sXG4gKiBvZiB0aGUgZmlsdGVyaW5nIGlzIG5lY2Vzc2FyeS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIChmaWx0ZXJQaHJhc2UpIHRvIGFuIGFycmF5IG9mIGtleXdvcmQgdG9rZW5zLiBUb2tlbnMgYXJlIHVzdWFsbHkgd29yZHMsIGJ1dCBjYW5cbiAqIGJlIGEgbXVsdGktd29yZCBwaHJhc2UgaWYgcXVvdGVzIGFyZSB1c2VkLiBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciB0aGUgYHRlc3RQaHJhc2VgIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWx0ZXJQaHJhc2UgLSBUaGUgcGhyYXNlIHRvIGJlIGJyb2tlbiBpbnRvIGtleXdvcmsgdG9rZW5zLlxuICogQHJldHVybnMge1N0cmluZ1tdfVxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBzdHJpbmdUb0tleXdvcmRzKGZpbHRlclBocmFzZSkge1xuICBpZiAoISgwLCBfbG9kYXNoLmlzU3RyaW5nKShmaWx0ZXJQaHJhc2UpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIChmaWx0ZXJQaHJhc2UubWF0Y2goLyg/OlteXFxzXCJdK3xcIlteXCJdKlwiKSsvZykgfHwgW10pLm1hcChmdW5jdGlvbiAod29yZCkge1xuICAgIHJldHVybiB3b3JkLnJlcGxhY2UoL15cIiguKilcIiQvLCAnJDEnKS50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbn1cbi8qKlxuICogVGVzdHMgaWYgYSBwaHJhc2UgbWF0Y2hlcyBhIGxpc3Qgb2Yga2V5d29yZHMuIEFsbCBrZXl3b3JkcyBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBwaHJhc2UgZm9yIGFcbiAqIG1hdGNoLlxuICpcbiAqIEV4YW1wbGVzOlxuICogYGBganNcbiAqIHN0cmluZ1RvS2V5d29yZHMoJ05hbWVkIEJvYicpOyAvLyBbJ05hbWVkJywgJ0JvYiddXG4gKiBzdHJpbmdUb0tleXdvcmRzKCdcIk5hbWVkIEJvYlwiJyk7IC8vIFsnTmFtZWQgQm9iJ11cbiAqIHN0cmluZ1RvS2V5d29yZHMoJ0EgU3RyZWV0IENhdCBcIk5hbWVkIEJvYlwiJyk7IC8vIFsnQScsICdTdHJlZXQnLCAnQ2F0JywgJ05hbWVkIEJvYiddXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGhyYXNlIC0gVGhlIHRlc3QgcGhyYXNlLlxuICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5d29yZHMgLSBBbiBhcnJheSBvZiBrZXl3b3JkcywgYXMgcmV0dXJuZWQgYnkgYHN0cmluZ1RvS2V5d29yZHNgLlxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiB0ZXN0UGhyYXNlKHBocmFzZSwga2V5d29yZHMpIHtcbiAgaWYgKCEoMCwgX2xvZGFzaC5pc1N0cmluZykocGhyYXNlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwID0gcGhyYXNlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBrZXl3b3Jkcy5ldmVyeShmdW5jdGlvbiAoa2V5d29yZCkge1xuICAgIHJldHVybiAoMCwgX2xvZGFzaC5pbmNsdWRlcykocCwga2V5d29yZCk7XG4gIH0pO1xufVxuLyoqXG4gKiBMb29rcyBmb3Iga2V5d29yZCBsb2NhdGlvbnMgaW4gYSBwaHJhc2UuIE5vdCBhbGwga2V5d29yZHMgbmVlZCB0byBtYXRjaCBmb3IgcmVzdWx0cyB0byBiZSByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcGhyYXNlIC0gVGhlIHRlc3QgcGhyYXNlLlxuICogQHBhcmFtIHtTdHJpbmdbXX0ga2V5d29yZHMgLSBBbiBhcnJheSBvZiBrZXl3b3JkcywgYXMgcmV0dXJuZWQgYnkgYHN0cmluZ1RvS2V5d29yZHNgLlxuICogQHJldHVybnMge09iamVjdFtdIHwgZmFsc2V9IEFuIGFycmF5IG9mIG1hdGNoZXMgd2l0aCBrZXl3b3JkLCBzdGFydCBpbmRleCwgYW5kIGVuZCBpbmRleC4gQXJyYXkgaXMgc29ydGVkXG4gKiBieSBzdGFydCBhbmQgZW5kIGluZGV4LiBLZXl3b3JkXG4gKiByYW5nZXMgbWF5IG92ZXJsYXAuIEV4YW1wbGU6XG4gKiBgYGBqc1xuICogW1xuICogICAgIHtcbiAqICAgICAgICAga2V5d29yZDogJ3RoZSBkYXNoJyxcbiAqICAgICAgICAgc3RhcnQ6IDAsXG4gKiAgICAgICAgIGVuZDogOCxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgICAga2V5d29yZDogJ3NhbGVzJyxcbiAqICAgICAgICAgc3RhcnQ6IDEyLFxuICogICAgICAgICBlbmQ6IDE3LFxuICogICAgIH0sXG4gKiBdXG4gKiBgYGBcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBrZXl3b3JkTG9jYXRpb25zQWxsKHBocmFzZSwga2V5d29yZHMpIHtcbiAgaWYgKCEoMCwgX2xvZGFzaC5pc1N0cmluZykocGhyYXNlKSB8fCAha2V5d29yZHMgfHwgIWtleXdvcmRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwID0gcGhyYXNlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGVzID0ga2V5d29yZHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleXdvcmQpIHtcbiAgICB2YXIgc3RhcnQgPSBwLmluZGV4T2Yoa2V5d29yZCk7XG5cbiAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogc3RhcnQgKyBrZXl3b3JkLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5zdGFydCAhPT0gYi5zdGFydCkge1xuICAgICAgcmV0dXJuIGEuc3RhcnQgPiBiLnN0YXJ0ID8gMSA6IC0xO1xuICAgIH1cblxuICAgIHJldHVybiBhLmVuZCA+IGIuZW5kID8gMSA6IC0xO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIExvb2tzIGZvciBrZXl3b3JkIGxvY2F0aW9ucyBpbiBhIHBocmFzZSBhbmQgcmV0dXJuIHBvcnRpb25zIG9mIHRoZSBzdHJpbmcgdGhhdCBtYXRjaCBvbmUgb3IgbW9yZVxuICoga2V5d29yZHMuIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBtYXRjaGVkIHRleHQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBocmFzZSAtIFRoZSB0ZXN0IHBocmFzZS5cbiAqIEBwYXJhbSB7U3RyaW5nW119IGtleXdvcmRzIC0gQW4gYXJyYXkgb2Yga2V5d29yZHMsIGFzIHJldHVybmVkIGJ5IGBzdHJpbmdUb0tleXdvcmRzYC5cbiAqIEByZXR1cm5zIHtPYmplY3RbXSB8IGZhbHNlfSBBbiBhcnJheSBvZiBsb2NhdGlvbiB3aXRoIHN0YXJ0IGluZGV4IGFuZCBlbmQgaW5kZXguIEtleXdvcmRcbiAqIHJhbmdlcyBjYW4gb3ZlcmxhcC4gRXhhbXBsZTpcbiAqIGBgYGpzXG4gKiBbXG4gKiAgICAge1xuICogICAgICAgICBzdGFydDogMCxcbiAqICAgICAgICAgZW5kOiA4LFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgICBzdGFydDogMTIsXG4gKiAgICAgICAgIGVuZDogMTcsXG4gKiAgICAgfSxcbiAqIF1cbiAqIGBgYFxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24ga2V5d29yZExvY2F0aW9ucyhwaHJhc2UsIGtleXdvcmRzKSB7XG4gIHZhciBtYXRjaGVzID0ga2V5d29yZExvY2F0aW9uc0FsbChwaHJhc2UsIGtleXdvcmRzKTtcblxuICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggIT09IGtleXdvcmRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBfbWF0Y2hlcyQgPSBtYXRjaGVzWzBdLFxuICAgICAgc3RhcnQgPSBfbWF0Y2hlcyQuc3RhcnQsXG4gICAgICBlbmQgPSBfbWF0Y2hlcyQuZW5kO1xuICB2YXIgbG9jYXRpb25zID0gW107XG5cbiAgZnVuY3Rpb24gcHVzaExvY2F0aW9uKCkge1xuICAgIGxvY2F0aW9ucy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgIGVuZDogZW5kXG4gICAgfSk7XG4gIH1cblxuICBtYXRjaGVzLnNsaWNlKDEpLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoLnN0YXJ0ID4gZW5kKSB7XG4gICAgICBwdXNoTG9jYXRpb24oKTtcbiAgICAgIHN0YXJ0ID0gbWF0Y2guc3RhcnQ7XG4gICAgICBlbmQgPSBtYXRjaC5lbmQ7XG4gICAgfSBlbHNlIGlmIChtYXRjaC5lbmQgPiBlbmQpIHtcbiAgICAgIGVuZCA9IG1hdGNoLmVuZDtcbiAgICB9XG4gIH0pO1xuICBwdXNoTG9jYXRpb24oKTtcbiAgcmV0dXJuIGxvY2F0aW9ucztcbn1cbi8qKlxuICogRmlsdGVycyBhbiBhcnJheSBvZiBgaXRlbXNgIGFnYWluc3QgdGhlIGBmaWx0ZXJQaHJhc2VgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGl0ZW1zIC0gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHRvIGZpbHRlci5cbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWx0ZXJQaHJhc2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFt2YWx1ZUdldHRlcl0gLSBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHByb3BlcnR5IG9mIGludGVyZXN0IGlmXG4gKiBmaWx0ZXJpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBmaWx0ZXJlZCBsaXN0IG9mIGl0ZW1zLlxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24gZmlsdGVyQnlLZXl3b3JkcyhpdGVtcywgZmlsdGVyUGhyYXNlKSB7XG4gIHZhciB2YWx1ZUdldHRlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcbiAgdmFyIGtleXdvcmRzID0gc3RyaW5nVG9LZXl3b3JkcyhmaWx0ZXJQaHJhc2UpO1xuICByZXR1cm4gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIHRlc3RQaHJhc2UodmFsdWVHZXR0ZXIoaXRlbSksIGtleXdvcmRzKTtcbiAgfSk7XG59IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNTgpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVJlYWN0UmVmOyB9KTtcbi8qKlxuICogVXBkYXRlcyBhIFJlYWN0IHJlZi4gQ2FsbGJhY2sgcmVmcyBhbmQgb2JqZWN0IHJlZnMgKGZyb20gYGNyZWF0ZVJlZmAgYW5kIGB1c2VSZWZgKSBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSByZWYgLSBUaGUgUmVhY3QgY2FsbGJhY2sgb3Igb2JqZWN0IHJlZi4gQ2FuIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcmVmLlxuICovXG5mdW5jdGlvbiB1cGRhdGVSZWFjdFJlZihyZWYsIGN1cnJlbnQpIHtcbiAgaWYgKHJlZikge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoY3VycmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSBwdWJsaWMgc2lnbmF0dXJlIG9mIHRoaXMgdXRpbCB1c2VzIFJlYWN0LlJlZjxUPiB0byBtaXJyb3IgdGhlIHdheSBSZWFjdCB0eXBlcyByZWZzLlxuICAgICAgLy8gdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIHNpZ25hbCBcIndlIHdpbGwgdGFrZSBjYXJlIG9mIHNldHRpbmcgJ2N1cnJlbnQnLCBub3QgeW91XCIuXG4gICAgICByZWYuY3VycmVudCA9IGN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB9XG4gIH1cbn1cblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9NZW51XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTU4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gc3JjX1Jlc3VsdHNNZW51X1Jlc3VsdHNNZW51OyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL3VzZXJBZ2VudFwiXG52YXIgdXNlckFnZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oOTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9NZW51XCJcbnZhciBNZW51XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIE1lbnVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oTWVudV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvV2FpdFNwaW5uZXJcIlxudmFyIFdhaXRTcGlubmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTEpO1xudmFyIFdhaXRTcGlubmVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFdhaXRTcGlubmVyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1Jlc3VsdHNNZW51L1Jlc3VsdHNNZW51U3R5bGVzLnRzXG5cblxuXG52YXIgU3R5bGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiUmVzdWx0c01lbnVTdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJhdmJobDgtMFwiXG59KShbXCJcIiwgXCI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDIwcHgpO1wiLCBcIlwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnZmxleCcpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItcmFkaXVzOlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyUmFkaXVzLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJhY2tncm91bmRDb2xvclBvcHVwKVxufSkpO1xudmFyIFN0eWxlZEZvb3RlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlJlc3VsdHNNZW51U3R5bGVzX19TdHlsZWRGb290ZXJcIixcbiAgY29tcG9uZW50SWQ6IFwiYXZiaGw4LTFcIlxufSkoW1wicGFkZGluZzpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiLCBcIlwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiAnMTBweCAxNnB4JyxcbiAgICBjb21wYWN0OiAnNnB4IDE2cHgnXG4gIH0sXG4gIGVudGVycHJpc2U6ICc2cHggMTBweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkLFxuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRHcmF5XG59KSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyICRwbGFjZW1lbnQgPSBfcmVmLiRwbGFjZW1lbnQ7XG4gIHJldHVybiAkcGxhY2VtZW50ID09PSAnYWJvdmUnID8gT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItYm90dG9tOjFweCBzb2xpZCBcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLm5ldXRyYWwyMDApLFxuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1ib3R0b206XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXIpXG4gIH0pIDogT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItdG9wOjFweCBzb2xpZCBcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLm5ldXRyYWwyMDApLFxuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci10b3A6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXIpXG4gIH0pO1xufSk7XG52YXIgU3R5bGVkTG9hZGluZyA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5saS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiUmVzdWx0c01lbnVTdHlsZXNfX1N0eWxlZExvYWRpbmdcIixcbiAgY29tcG9uZW50SWQ6IFwiYXZiaGw4LTJcIlxufSkoW1wiXCIsIFwiO3BhZGRpbmc6XCIsIFwiO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnZmxleCcpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6ICcxMHB4IDE2cHgnLFxuICAgIGNvbXBhY3Q6ICc2cHggMTZweCdcbiAgfSxcbiAgZW50ZXJwcmlzZTogJzZweCAxMHB4J1xufSkpO1xudmFyIFN0eWxlZFdhaXQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoV2FpdFNwaW5uZXJfZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiUmVzdWx0c01lbnVTdHlsZXNfX1N0eWxlZFdhaXRcIixcbiAgY29tcG9uZW50SWQ6IFwiYXZiaGw4LTNcIlxufSkoW1wibWFyZ2luLXJpZ2h0OlwiLCBcIjtmbGV4OjAgMCBhdXRvO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nUXVhcnRlcik7XG52YXIgU3R5bGVkTG9hZGluZ01lc3NhZ2UgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJSZXN1bHRzTWVudVN0eWxlc19fU3R5bGVkTG9hZGluZ01lc3NhZ2VcIixcbiAgY29tcG9uZW50SWQ6IFwiYXZiaGw4LTRcIlxufSkoW1wiZmxleDoxIDAgMDtjb2xvcjpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkLFxuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRHcmF5XG59KSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvdXBkYXRlUmVhY3RSZWYudHNcbnZhciB1cGRhdGVSZWFjdFJlZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9SZXN1bHRzTWVudS9SZXN1bHRzTWVudS50c3hcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cblxuXG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIGFuaW1hdGVMb2FkaW5nOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgY2hpbGRyZW5TdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZm9vdGVyTWVzc2FnZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgaXNMb2FkaW5nOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBsb2FkaW5nTWVzc2FnZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgbWF4SGVpZ2h0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIG9uU2Nyb2xsQm90dG9tOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBwbGFjZW1lbnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZ1xufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGFuaW1hdGVMb2FkaW5nOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgbG9hZGluZ01lc3NhZ2U6IE9iamVjdChpMThuX1tcIl9cIl0pKCdMb2FkaW5nLi4uJyksXG4gIG5vT3B0aW9uc01lc3NhZ2U6IE9iamVjdChpMThuX1tcIl9cIl0pKCdObyBtYXRjaGVzJylcbn07XG5cbi8vIEBkb2NzLXByb3BzLXR5cGUgUmVzdWx0c01lbnVQcm9wc0Jhc2VcbnZhciBSZXN1bHRzTWVudV9SZXN1bHRzTWVudSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUmVzdWx0c01lbnUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUmVzdWx0c01lbnUpO1xuXG4gIGZ1bmN0aW9uIFJlc3VsdHNNZW51KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlc3VsdHNNZW51KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNjcm9sbEJvdHRvbU9mZnNldFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIml0ZW1NaW5IZWlnaHRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNZW51TW91bnRcIiwgZnVuY3Rpb24gKG1lbnVFbCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBtZW51RWw6IG1lbnVFbFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNvbnRhaW5lckVsOiBlbFxuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdCh1cGRhdGVSZWFjdFJlZltcImFcIiAvKiB1cGRhdGVSZWFjdFJlZiAqL10pKF90aGlzLnByb3BzLmVsZW1lbnRSZWYsIGVsKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VzZUVudGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgd2luZG93VG9wOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VzZUxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgd2luZG93VG9wOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTY3JvbGxcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLnRhcmdldCAmJiBfdGhpcy5zdGF0ZS5tZW51RWwpIHtcbiAgICAgICAgdmFyIGJvdHRvbVNjcm9sbE1lbnUgPSBfdGhpcy5zdGF0ZS5tZW51RWwuc2Nyb2xsSGVpZ2h0IC0gX3RoaXMuc3RhdGUubWVudUVsLm9mZnNldEhlaWdodCAtIF90aGlzLnNjcm9sbEJvdHRvbU9mZnNldDsgLy8gQWRkaW5nIDEgZHVlIHRvIGJvcmRlciBvZiBtZW51IGl0ZW0uXG5cbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLm1lbnVFbC5zY3JvbGxUb3AgKyAxID49IGJvdHRvbVNjcm9sbE1lbnUpIHtcbiAgICAgICAgICBfdGhpcy5oYW5kbGVTY3JvbGxCb3R0b20oZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVXaGVlbE1lbnVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIFNhZmV0eSBuZXQgdG8gZW5zdXJlIHdpbmRvdyBkb2Vzbid0IHNjcm9sbCBpZiBtZW51IGlzIHNjcm9sbGVkIHBhc3MgdGhlIG51bWJlck9mSXRlbXNMb2FkZWQgYXQgaGlnaCB2ZWxvY2l0eS5cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gX3RoaXMuc3RhdGUud2luZG93VG9wO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVNjcm9sbEJvdHRvbU9uRnVsbE1lbnVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJlbnRDaGlsZHJlbkNvdW50ID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0uY291bnQoX3RoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgY2hpbGRyZW5Db3VudCA9IF90aGlzJHN0YXRlLmNoaWxkcmVuQ291bnQsXG4gICAgICAgICAgbWVudUVsID0gX3RoaXMkc3RhdGUubWVudUVsLFxuICAgICAgICAgIG1lbnVNYXhIZWlnaHQgPSBfdGhpcyRzdGF0ZS5tZW51TWF4SGVpZ2h0OyAvLyBJZiBtZW51IGlzIGZ1bGwgbGVuZ3RoLCBsb2FkIG1vcmUgaXRlbXMuXG5cbiAgICAgIGlmIChtZW51RWwgJiYgbWVudUVsLnNjcm9sbEhlaWdodCA9PT0gbWVudUVsLm9mZnNldEhlaWdodCkge1xuICAgICAgICBfdGhpcy5oYW5kbGVTY3JvbGxCb3R0b20oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lbnVNYXhIZWlnaHQgJiYgY3VycmVudENoaWxkcmVuQ291bnQgIT09IGNoaWxkcmVuQ291bnQpIHtcbiAgICAgICAgLy8gVXBkYXRlIHN0YXRlIGlmIGNoaWxkcmVuIGNvdW50IGRpZmZlcnMuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBudW1iZXJPZkl0ZW1zTG9hZGVkOiBjdXJyZW50Q2hpbGRyZW5Db3VudCAtIChjaGlsZHJlbkNvdW50ICE9PSBudWxsICYmIGNoaWxkcmVuQ291bnQgIT09IHZvaWQgMCA/IGNoaWxkcmVuQ291bnQgOiAwKSxcbiAgICAgICAgICBjaGlsZHJlbkNvdW50OiBjdXJyZW50Q2hpbGRyZW5Db3VudCxcbiAgICAgICAgICBzY3JvbGxCb3R0b21UcmlnZ2VyZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250YWluZXJFbDogbnVsbCxcbiAgICAgIG1lbnVFbDogbnVsbCxcbiAgICAgIG1lbnVNYXhIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgIG51bWJlck9mSXRlbXNMb2FkZWQ6IDAsXG4gICAgICBzY3JvbGxCb3R0b21UcmlnZ2VyZWQ6IGZhbHNlLFxuICAgICAgd2luZG93VG9wOiAwXG4gICAgfTsgLy8gVGhlIHJlbWFpbmluZyBhbW91bnQgb2YgcGl4ZWxzIHdoZW4gc2Nyb2xsZWQgZnJvbSBib3R0b20gb2YgbWVudSB0byB0cmlnZ2VyIG9uU2Nyb2xsQm90dG9tKCkuXG5cbiAgICBfdGhpcy5zY3JvbGxCb3R0b21PZmZzZXQgPSA0MDA7XG4gICAgX3RoaXMuaXRlbU1pbkhlaWdodCA9IDI4O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhSZXN1bHRzTWVudSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGNvbnRhaW5lckVsID0gX3RoaXMkc3RhdGUyLmNvbnRhaW5lckVsLFxuICAgICAgICAgIG1lbnVFbCA9IF90aGlzJHN0YXRlMi5tZW51RWwsXG4gICAgICAgICAgbWVudU1heEhlaWdodCA9IF90aGlzJHN0YXRlMi5tZW51TWF4SGVpZ2h0O1xuXG4gICAgICBpZiAoIXVzZXJBZ2VudF9bXCJpc0lFMTFcIl0gfHwgIWNvbnRhaW5lckVsIHx8ICFtZW51RWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5tYXhIZWlnaHQpIHtcbiAgICAgICAgdmFyIG90aGVyRWxlbWVudHNIZWlnaHQgPSBjb250YWluZXJFbC5zY3JvbGxIZWlnaHQgLSBtZW51RWwuY2xpZW50SGVpZ2h0O1xuICAgICAgICB2YXIgbmV3TWVudU1heEhlaWdodCA9IHRoaXMucHJvcHMubWF4SGVpZ2h0IC0gb3RoZXJFbGVtZW50c0hlaWdodDtcblxuICAgICAgICBpZiAobWVudU1heEhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IE1hdGguYWJzKG1lbnVNYXhIZWlnaHQgLSBuZXdNZW51TWF4SGVpZ2h0KSA+IDEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG1lbnVNYXhIZWlnaHQ6IG5ld01lbnVNYXhIZWlnaHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBJZiBvblNjcm9sbEJvdHRvbSBpcyBkZWZpbmVkLCBkZXRlcm1pbmUgaWYgaXQgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblxuXG4gICAgICBpZiAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLm9uU2Nyb2xsQm90dG9tICYmIHRoaXMucHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTY3JvbGxCb3R0b21PbkZ1bGxNZW51KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZVNjcm9sbEJvdHRvbVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVTY3JvbGxCb3R0b20oZSkge1xuICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBjYWxscyB0byBvblNjcm9sbEJvdHRvbS5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zY3JvbGxCb3R0b21UcmlnZ2VyZWQpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uU2Nyb2xsQiwgX3RoaXMkcHJvcHM7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2Nyb2xsQm90dG9tVHJpZ2dlcmVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25TY3JvbGxCID0gKF90aGlzJHByb3BzID0gdGhpcy5wcm9wcykub25TY3JvbGxCb3R0b20pID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uU2Nyb2xsQiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25TY3JvbGxCLmNhbGwoX3RoaXMkcHJvcHMsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJGb290ZXJNZXNzYWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZvb3Rlck1lc3NhZ2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5mb290ZXJNZXNzYWdlICYmICEhZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5sZW5ndGggJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEZvb3Rlciwge1xuICAgICAgICAkcGxhY2VtZW50OiB0aGlzLnByb3BzLnBsYWNlbWVudCxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJmb290ZXItbWVzc2FnZVwiLFxuICAgICAgICBrZXk6IFwiZm9vdGVyXCJcbiAgICAgIH0sIHRoaXMucHJvcHMuZm9vdGVyTWVzc2FnZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbmltYXRlTG9hZGluZyA9IF90aGlzJHByb3BzMi5hbmltYXRlTG9hZGluZyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMi5jaGlsZHJlbixcbiAgICAgICAgICBjaGlsZHJlblN0YXJ0ID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuU3RhcnQsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBsb2FkaW5nTWVzc2FnZSA9IF90aGlzJHByb3BzMi5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgICBub09wdGlvbnNNZXNzYWdlID0gX3RoaXMkcHJvcHMyLm5vT3B0aW9uc01lc3NhZ2UsXG4gICAgICAgICAgb25TY3JvbGxCb3R0b20gPSBfdGhpcyRwcm9wczIub25TY3JvbGxCb3R0b20sXG4gICAgICAgICAgcGxhY2VtZW50ID0gX3RoaXMkcHJvcHMyLnBsYWNlbWVudCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMi5zdHlsZTtcbiAgICAgIHZhciBvdGhlclByb3BzID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKSh0aGlzLnByb3BzLCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImtleXNcIl0pKFJlc3VsdHNNZW51LnByb3BUeXBlcykpO1xuICAgICAgLy8gQXNzdW1wdGlvbjogdGhhdCB5b3UgY2Fubm90IGJlIGZpbHRlcmVkIGlmIHlvdSBhcmUgYSByZXN1bHRcbiAgICAgIHZhciBoYXNSZXN1bHRzID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKS5zb21lKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciB0eXBlID0gX3JlZi50eXBlO1xuICAgICAgICByZXR1cm4gISh0eXBlID09PSBNZW51X1tcIkRpdmlkZXJcIl0gJiYgdHlwZS5maWx0ZXJGaXJzdCB8fCAodHlwZSA9PT0gTWVudV9bXCJEaXZpZGVyXCJdIHx8IHR5cGUgPT09IE1lbnVfW1wiSGVhZGluZ1wiXSkgJiYgKHR5cGUuZmlsdGVyTGFzdCB8fCB0eXBlLmZpbHRlckNvbnNlY3V0aXZlKSk7XG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2FyaWEtcm9sZSAqL1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IFwid3JhcHBlclwiLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIHJlZjogdGhpcy5oYW5kbGVNb3VudCxcbiAgICAgICAgb25XaGVlbDogb25TY3JvbGxCb3R0b20gPyB0aGlzLmhhbmRsZVdoZWVsTWVudSA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25Nb3VzZUVudGVyOiBvblNjcm9sbEJvdHRvbSA/IHRoaXMuaGFuZGxlTW91c2VFbnRlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25Nb3VzZUxlYXZlOiBvblNjcm9sbEJvdHRvbSA/IHRoaXMuaGFuZGxlTW91c2VMZWF2ZSA6IHVuZGVmaW5lZFxuICAgICAgfSwgb3RoZXJQcm9wcyksIHBsYWNlbWVudCAhPT0gJ2Fib3ZlJyAmJiBjaGlsZHJlblN0YXJ0LCBwbGFjZW1lbnQgPT09ICdhYm92ZScgJiYgdGhpcy5yZW5kZXJGb290ZXJNZXNzYWdlKCksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChNZW51X2RlZmF1bHQuYSwge1xuICAgICAgICBrZXk6IFwibWVudVwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgbWF4SGVpZ2h0OiB0aGlzLnN0YXRlLm1lbnVNYXhIZWlnaHQgfHwgJ2NhbGMoMTAwdmggLSAyMHB4KScsXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgICAgICAgfSxcbiAgICAgICAgZWxlbWVudFJlZjogdGhpcy5oYW5kbGVNZW51TW91bnQsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbEJvdHRvbSA/IHRoaXMuaGFuZGxlU2Nyb2xsIDogdW5kZWZpbmVkLFxuICAgICAgICBzdG9wU2Nyb2xsUHJvcGFnYXRpb246IHRydWUsXG4gICAgICAgIHJvbGU6IFwibGlzdGJveFwiXG4gICAgICB9LCAhaGFzUmVzdWx0cyAmJiBub09wdGlvbnNNZXNzYWdlICYmICFpc0xvYWRpbmcgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KE1lbnVfZGVmYXVsdC5hLkl0ZW0sIHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJuby1yZXN1bHRzLW1lc3NhZ2VcIixcbiAgICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICAgIH0sIG5vT3B0aW9uc01lc3NhZ2UpLCBjaGlsZHJlbiwgb25TY3JvbGxCb3R0b20gJiZcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIEJvdHRvbSBzcGFjZXIgZmlsbHMgaW4gdGhlIHNwYWNlIG9mIG5ldyBpdGVtcyBiZWluZyBsb2FkZWQgYnkgdXNpbmcgdGhlIG1pbmltdW0gcG9zc2libGUgaGVpZ2h0IHggbWVudUl0ZW1zLlxuICAgICAgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogdGhpcy5zdGF0ZS5zY3JvbGxCb3R0b21UcmlnZ2VyZWQgPyB0aGlzLnN0YXRlLm51bWJlck9mSXRlbXNMb2FkZWQgKiB0aGlzLml0ZW1NaW5IZWlnaHQgfHwgMCA6IDBcbiAgICAgICAgfVxuICAgICAgfSksIGlzTG9hZGluZyAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTG9hZGluZywgbnVsbCwgYW5pbWF0ZUxvYWRpbmcgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFdhaXQsIG51bGwpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTG9hZGluZ01lc3NhZ2UsIG51bGwsIGxvYWRpbmdNZXNzYWdlKSkpLCBwbGFjZW1lbnQgIT09ICdhYm92ZScgJiYgdGhpcy5yZW5kZXJGb290ZXJNZXNzYWdlKCksIHBsYWNlbWVudCA9PT0gJ2Fib3ZlJyAmJiBjaGlsZHJlblN0YXJ0KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVzdWx0c01lbnU7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShSZXN1bHRzTWVudV9SZXN1bHRzTWVudSwgXCJwcm9wVHlwZXNcIiwgcHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KFJlc3VsdHNNZW51X1Jlc3VsdHNNZW51LCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfUmVzdWx0c01lbnVfUmVzdWx0c01lbnUgPSAoUmVzdWx0c01lbnVfUmVzdWx0c01lbnUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUmVzdWx0c01lbnUvaW5kZXgudHNcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvdXNlckFnZW50XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvV2FpdFNwaW5uZXJcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuXG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NWR0ludGVybmFsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGVjazsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbmZ1bmN0aW9uIENoZWNrKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ0NoZWNrJylcbiAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUzNi4zIDEyNzguMzY0TDE1MDAgMTIxLjUxNCAxMzU0LjExLjI4MyA1MTMuNyAxMDEwLjIxMmwtMzkxLjQ0LTMxOS41MkwwIDgzNy42MVwiXG4gIH0pKTtcbn1cblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDkpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBIZWFkaW5nX0hlYWRpbmc7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0hlYWRpbmcvSGVhZGluZ1N0eWxlcy50c1xuXG5cbnZhciBzZWN0aW9uID0gT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wibWFyZ2luOjAuNzA3ZW0gMCAwLjJlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7XCJdKTtcbnZhciBTdHlsZWRIMSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5oMS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSGVhZGluZ1N0eWxlc19fU3R5bGVkSDFcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMTVzM3l4My0wXCJcbn0pKFtcIlwiLCBcIjttYXJnaW46MS40MTRlbSAwIDAuNGVtO3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVnaWJpbGl0eTtjb2xvcjpcIiwgXCI7XCIsIFwiIFwiLCBcIiBmb250LXNpemU6XCIsIFwiO2ZvbnQtd2VpZ2h0OlwiLCBcIjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckaXNTZWN0aW9uJywge1xuICBcInRydWVcIjogT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZToge1xuICAgICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5ODAsXG4gICAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5NDVcbiAgICB9LFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0XG4gIH0pLFxuICBcImZhbHNlXCI6IHtcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJsaW5lLWhlaWdodDpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnYXMnLCB7XG4gICAgaDE6ICc0OHB4JyxcbiAgICBoMjogJzI0cHgnLFxuICAgIGgzOiAnMjRweCcsXG4gICAgaDQ6ICcyNHB4JyxcbiAgICBoNTogJzE2cHgnXG4gIH0pKVxufSksIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciAkaXNTZWN0aW9uID0gX3JlZi4kaXNTZWN0aW9uO1xuICByZXR1cm4gJGlzU2VjdGlvbiAmJiBzZWN0aW9uO1xufSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJ2FzJywge1xuICBoMToge1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFNpemVYWExhcmdlLFxuICAgIHByaXNtYTogJzM2cHgnXG4gIH0sXG4gIGgyOiB7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVhMYXJnZSxcbiAgICBwcmlzbWE6ICcyNHB4J1xuICB9LFxuICBoMzoge1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFNpemVMYXJnZSxcbiAgICBwcmlzbWE6ICcyMHB4J1xuICB9LFxuICBoNDoge1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFNpemUsXG4gICAgcHJpc21hOiBmdW5jdGlvbiBwcmlzbWEoX3JlZjIpIHtcbiAgICAgIHZhciAkaXNTZWN0aW9uID0gX3JlZjIuJGlzU2VjdGlvbjtcbiAgICAgIHJldHVybiAkaXNTZWN0aW9uID8gJzE0cHgnIDogJzE2cHgnO1xuICAgIH1cbiAgfSxcbiAgaDU6IGZ1bmN0aW9uIGg1KF9yZWYzKSB7XG4gICAgdmFyICRpc1NlY3Rpb24gPSBfcmVmMy4kaXNTZWN0aW9uO1xuICAgIHJldHVybiAkaXNTZWN0aW9uICYmIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgICAgZW50ZXJwcmlzZTogJzEycHgnLFxuICAgICAgcHJpc21hOiAnMTNweCdcbiAgICB9KTtcbiAgfVxufSksIGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgYXNFbGVtZW50ID0gX3JlZjQuYXMsXG4gICAgICAkaXNTZWN0aW9uID0gX3JlZjQuJGlzU2VjdGlvbjtcbiAgcmV0dXJuIGFzRWxlbWVudCA9PT0gJ2g0JyAmJiAhJGlzU2VjdGlvbiA/ICdib2xkJyA6IE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFdlaWdodFNlbWlCb2xkLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250V2VpZ2h0Qm9sZFxuICB9KTtcbn0pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9IZWFkaW5nL0hlYWRpbmcudHN4XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgbGV2ZWw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsxLCAyLCAzLCA0LCAncycsICdzcyddKVxufTtcbi8vIGgxLWg2IHVzZSB0aGUgc2FtZSBpbnRyaW5zaWMgZWxlbWVudCB0eXBlXG52YXIgbGV2ZWxUb0VsZW1lbnQgPSB7XG4gICcxJzogJ2gxJyxcbiAgJzInOiAnaDInLFxuICAnMyc6ICdoMycsXG4gICc0JzogJ2g0JyxcbiAgczogJ2g0JyxcbiAgc3M6ICdoNSdcbn07XG5cbmZ1bmN0aW9uIEhlYWRpbmcoX3JlZikge1xuICB2YXIgX3JlZiRsZXZlbCA9IF9yZWYubGV2ZWwsXG4gICAgICBsZXZlbCA9IF9yZWYkbGV2ZWwgPT09IHZvaWQgMCA/IDIgOiBfcmVmJGxldmVsLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgZWxlbWVudFJlZiA9IF9yZWYuZWxlbWVudFJlZixcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wibGV2ZWxcIiwgXCJjaGlsZHJlblwiLCBcImVsZW1lbnRSZWZcIl0pO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgSGVhZGluZ1Byb3BzQmFzZVxuICB2YXIgaXNTZWN0aW9uID0gZnVuY3Rpb24gaXNTZWN0aW9uKGwpIHtcbiAgICByZXR1cm4gbC50b1N0cmluZygpLmNoYXJBdCgwKSA9PT0gJ3MnO1xuICB9O1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSDEsIF9leHRlbmRzKHtcbiAgICBhczogbGV2ZWxUb0VsZW1lbnRbbGV2ZWxdLFxuICAgICRpc1NlY3Rpb246IGlzU2VjdGlvbihsZXZlbCksXG4gICAgXCJkYXRhLXRlc3RcIjogXCJoZWFkaW5nXCIsXG4gICAgcmVmOiBlbGVtZW50UmVmXG4gIH0sIG90aGVyUHJvcHMpLCBjaGlsZHJlbik7XG59XG5cbkhlYWRpbmcucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgSGVhZGluZ19IZWFkaW5nID0gKEhlYWRpbmcpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9IZWFkaW5nL2luZGV4LnRzXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUT0FTVF9UWVBFU1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPQVNUX1RZUEVTOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJUT0FTVF9QT1NJVElPTlNcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUT0FTVF9QT1NJVElPTlM7IH0pO1xudmFyIFRPQVNUX1RZUEVTID0ge1xuICBJTkZPOiAnaW5mbycsXG4gIFdBUk5JTkc6ICd3YXJuaW5nJyxcbiAgU1VDQ0VTUzogJ3N1Y2Nlc3MnLFxuICBFUlJPUjogJ2Vycm9yJ1xufTtcbnZhciBUT0FTVF9QT1NJVElPTlMgPSB7XG4gIFRPUF9MRUZUOiAndG9wLWxlZnQnLFxuICBUT1BfQ0VOVEVSOiAndG9wLWNlbnRlcicsXG4gIFRPUF9SSUdIVDogJ3RvcC1yaWdodCcsXG4gIEJPVFRPTV9MRUZUOiAnYm90dG9tLWxlZnQnLFxuICBCT1RUT01fQ0VOVEVSOiAnYm90dG9tLWNlbnRlcicsXG4gIEJPVFRPTV9SSUdIVDogJ2JvdHRvbS1yaWdodCdcbn07XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL1RvYXN0ZXJcIik7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2ZvY3VzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9DbG9zZVwiKTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMva2V5Ym9hcmRcIik7XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9JbmZvQ2lyY2xlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvTGF5ZXJcIik7XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9TdWNjZXNzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvRXJyb3JcIik7XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9XYXJuaW5nXCIpO1xuXG4vKioqLyB9KSxcbi8qIDE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lXCIpO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWZsaXAtbW92ZVwiKTtcblxuLyoqKi8gfSksXG4vKiAxNyAqLyxcbi8qIDE4ICovLFxuLyogMTkgKi8sXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImxvZGFzaFwiXG52YXIgZXh0ZXJuYWxfbG9kYXNoXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0xheWVyXCJcbnZhciBMYXllcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBMYXllcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihMYXllcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL1RvYXN0ZXJcIlxudmFyIFRvYXN0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBUb2FzdGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFRvYXN0ZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvZm9jdXNcIlxudmFyIGZvY3VzXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LWljb25zL0Nsb3NlXCJcbnZhciBDbG9zZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIENsb3NlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKENsb3NlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2tleWJvYXJkXCJcbnZhciBrZXlib2FyZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC1pY29ucy9JbmZvQ2lyY2xlXCJcbnZhciBJbmZvQ2lyY2xlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIEluZm9DaXJjbGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oSW5mb0NpcmNsZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC1pY29ucy9TdWNjZXNzXCJcbnZhciBTdWNjZXNzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xudmFyIFN1Y2Nlc3NfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oU3VjY2Vzc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC1pY29ucy9FcnJvclwiXG52YXIgRXJyb3JfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgRXJyb3JfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oRXJyb3JfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtaWNvbnMvV2FybmluZ1wiXG52YXIgV2FybmluZ18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbnZhciBXYXJuaW5nX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFdhcm5pbmdfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lXCJcbnZhciB1c2VTcGx1bmtUaGVtZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciB1c2VTcGx1bmtUaGVtZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih1c2VTcGx1bmtUaGVtZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL1RvYXN0Q29uc3RhbnRzLmpzXG52YXIgVG9hc3RDb25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0LWZsaXAtbW92ZVwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfZmxpcF9tb3ZlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIGV4dGVybmFsX3JlYWN0X2ZsaXBfbW92ZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF9mbGlwX21vdmVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzXCJcbnZhciB0aGVtZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVG9hc3RTdHlsZXMuanNcbnZhciBfcGlja1ZhcmlhbnQsIF9waWNrVmFyaWFudDIsIF9waWNrVmFyaWFudDM7XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDE1KCkge1xuICB2YXIgZGF0YSA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIFwiLCBcIlxcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHotaW5kZXg6IFwiLCBcIjtcXG4gICAgXCIsIFwiO1xcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0MTUgPSBmdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QxNSgpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MTQoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgYm90dG9tOiAxNnB4O1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xICogXCIsIFwiIC8gMik7XFxuXCJdKTtcblxuICBfdGVtcGxhdGVPYmplY3QxNCA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDE0KCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QxMygpIHtcbiAgdmFyIGRhdGEgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBib3R0b206IDE2cHg7XFxuICAgIHJpZ2h0OiAxNnB4O1xcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0MTMgPSBmdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QxMygpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MTIoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgYm90dG9tOiAxNnB4O1xcbiAgICBsZWZ0OiAxNnB4O1xcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0MTIgPSBmdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QxMigpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MTEoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgdG9wOiAxNnB4O1xcbiAgICBsZWZ0OiAxNnB4O1xcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0MTEgPSBmdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QxMSgpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MTAoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgdG9wOiAxNnB4O1xcbiAgICByaWdodDogMTZweDtcXG5cIl0pO1xuXG4gIF90ZW1wbGF0ZU9iamVjdDEwID0gZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MTAoKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDkoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgdG9wOiAxNnB4O1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xICogXCIsIFwiIC8gMik7XFxuXCJdKTtcblxuICBfdGVtcGxhdGVPYmplY3Q5ID0gZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0OSgpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0OCgpIHtcbiAgdmFyIGRhdGEgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICB3aWR0aDogXCIsIFwiO1xcblxcbiAgICAmID4gZGl2Om5vdCg6bnRoLWxhc3QtY2hpbGQoMSkpIHtcXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgIH1cXG5cIl0pO1xuXG4gIF90ZW1wbGF0ZU9iamVjdDggPSBmdW5jdGlvbiBfdGVtcGxhdGVPYmplY3Q4KCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3Q3KCkge1xuICB2YXIgZGF0YSA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGZsb2F0OiByaWdodDtcXG4gICAgbWFyZ2luOiAzcHggMTJweCAxMnB4IDA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgY29sb3I6IFwiLCBcIjtcXG4gICAgcGFkZGluZzogMXB4IDAgMnB4O1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyNHB4KTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogXCIsIFwiO1xcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0NyA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDcoKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDYoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgICBtYXJnaW4tbGVmdDogNDdweDtcXG4gICAgd2lkdGg6IDQ1M3B4O1xcbiAgICBwYWRkaW5nLXRvcDogOHB4O1xcblwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0NiA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDYoKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDUoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiBcIiwgXCIgMCAwIFwiLCBcIjtcXG4gICAgICAgIFwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0NSA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDUoKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDQoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgd2lkdGg6IDM2cHg7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDExcHg7XFxuICAgIGJhY2tncm91bmQ6IFwiLCBcIjtcXG4gICAgY29sb3I6IFwiLCBcIjtcXG4gICAgXCIsIFwiXFxuXCJdKTtcblxuICBfdGVtcGxhdGVPYmplY3Q0ID0gZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0NCgpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MygpIHtcbiAgdmFyIGRhdGEgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgcGFkZGluZy10b3A6IDVweDtcXG4gICAgbWFyZ2luLWxlZnQ6IDEycHg7XFxuICAgIG1hcmdpbi1yaWdodDogMTJweDtcXG4gICAgbWF4LXdpZHRoOiA0MDRweDtcXG4gICAgaHlwaGVuczogYXV0bztcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIHBhZGRpbmctYm90dG9tOiBcIiwgXCI7XFxuXCJdKTtcblxuICBfdGVtcGxhdGVPYmplY3QzID0gZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MygpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0MigpIHtcbiAgdmFyIGRhdGEgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkXFxuICAgICAgICAgICAgICAgIFwiLCBcIjtcXG4gICAgICAgIFwiXSk7XG5cbiAgX3RlbXBsYXRlT2JqZWN0MiA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdDIoKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgdmFyIGRhdGEgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICB3aWR0aDogXCIsIFwiO1xcbiAgICBtaW4taGVpZ2h0OiA0NnB4O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IFwiLCBcIjtcXG4gICAgYm94LXNoYWRvdzogXCIsIFwiO1xcbiAgICBcIiwgXCI7XFxuICAgIGJvcmRlci1yYWRpdXM6IFwiLCBcIjtcXG5cIl0pO1xuXG4gIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cblxuXG5cblxudmFyIHRvYXN0Q29udGFpbmVyV2lkdGggPSAnNTAwcHgnO1xudmFyIFN0eWxlZFRvYXN0ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdihfdGVtcGxhdGVPYmplY3QoKSwgdG9hc3RDb250YWluZXJXaWR0aCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yUG9wdXBcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5vdmVybGF5U2hhZG93LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZW1ib3NzU2hhZG93XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKF90ZW1wbGF0ZU9iamVjdDIoKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyR0eXBlJywgKF9waWNrVmFyaWFudCA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3BpY2tWYXJpYW50LCBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLklORk8sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY2F0MUNvbG9yKSwgX2RlZmluZVByb3BlcnR5KF9waWNrVmFyaWFudCwgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5XQVJOSU5HLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLndhcm5pbmdDb2xvciksIF9kZWZpbmVQcm9wZXJ0eShfcGlja1ZhcmlhbnQsIFRvYXN0Q29uc3RhbnRzW1wiVE9BU1RfVFlQRVNcIl0uU1VDQ0VTUywgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zdWNjZXNzQ29sb3IpLCBfZGVmaW5lUHJvcGVydHkoX3BpY2tWYXJpYW50LCBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLkVSUk9SLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVycm9yQ29sb3IpLCBfcGlja1ZhcmlhbnQpKSlcbn0pLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlclJhZGl1cyk7XG52YXIgU3R5bGVkTWVzc2FnZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYoX3RlbXBsYXRlT2JqZWN0MygpLCBmdW5jdGlvbiAocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzLmFjdGlvbiA/IG51bGwgOiAnMTNweCc7XG59KTtcbnZhciBTdHlsZWRJY29uID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdihfdGVtcGxhdGVPYmplY3Q0KCksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHR5cGUnLCAoX3BpY2tWYXJpYW50MiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3BpY2tWYXJpYW50MiwgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5JTkZPLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNhdDFDb2xvciksIF9kZWZpbmVQcm9wZXJ0eShfcGlja1ZhcmlhbnQyLCBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLldBUk5JTkcsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ud2FybmluZ0NvbG9yKSwgX2RlZmluZVByb3BlcnR5KF9waWNrVmFyaWFudDIsIFRvYXN0Q29uc3RhbnRzW1wiVE9BU1RfVFlQRVNcIl0uU1VDQ0VTUywgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zdWNjZXNzQ29sb3IpLCBfZGVmaW5lUHJvcGVydHkoX3BpY2tWYXJpYW50MiwgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5FUlJPUiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lcnJvckNvbG9yKSwgX3BpY2tWYXJpYW50MikpLFxuICBwcmlzbWE6IE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckdHlwZScsIChfcGlja1ZhcmlhbnQzID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcGlja1ZhcmlhbnQzLCBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLklORk8sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlKSwgX2RlZmluZVByb3BlcnR5KF9waWNrVmFyaWFudDMsIFRvYXN0Q29uc3RhbnRzW1wiVE9BU1RfVFlQRVNcIl0uV0FSTklORywgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvcldhcm5pbmcpLCBfZGVmaW5lUHJvcGVydHkoX3BpY2tWYXJpYW50MywgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5TVUNDRVNTLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yUG9zaXRpdmUpLCBfZGVmaW5lUHJvcGVydHkoX3BpY2tWYXJpYW50MywgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5FUlJPUiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlKSwgX3BpY2tWYXJpYW50MykpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ud2hpdGUsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JJbnZlcnRlZFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKF90ZW1wbGF0ZU9iamVjdDUoKSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJSYWRpdXMsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyUmFkaXVzKVxufSkpO1xudmFyIFN0eWxlZFRvYXN0Q29udGVudCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYoX3RlbXBsYXRlT2JqZWN0NigpKTtcbnZhciBTdHlsZWRBY3Rpb25CdXR0b24gPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuYnV0dG9uKF90ZW1wbGF0ZU9iamVjdDcoKSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5saW5rQ29sb3IsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJhY2tncm91bmRDb2xvcixcbiAgcHJpc21hOiAndHJhbnNwYXJlbnQnXG59KSk7XG52YXIgU3R5bGVkRmxpcE1vdmUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoZXh0ZXJuYWxfcmVhY3RfZmxpcF9tb3ZlX2RlZmF1bHQuYSkoX3RlbXBsYXRlT2JqZWN0OCgpLCB0b2FzdENvbnRhaW5lcldpZHRoKTtcbnZhciB0b3BDZW50ZXIgPSBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShfdGVtcGxhdGVPYmplY3Q5KCksIHRvYXN0Q29udGFpbmVyV2lkdGgpO1xudmFyIHRvcFJpZ2h0ID0gT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoX3RlbXBsYXRlT2JqZWN0MTAoKSk7XG52YXIgdG9wTGVmdCA9IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKF90ZW1wbGF0ZU9iamVjdDExKCkpO1xudmFyIGJvdHRvbUxlZnQgPSBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShfdGVtcGxhdGVPYmplY3QxMigpKTtcbnZhciBib3R0b21SaWdodCA9IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKF90ZW1wbGF0ZU9iamVjdDEzKCkpO1xudmFyIGJvdHRvbUNlbnRlciA9IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKF90ZW1wbGF0ZU9iamVjdDE0KCksIHRvYXN0Q29udGFpbmVyV2lkdGgpO1xudmFyIFN0eWxlZExheWVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdihfdGVtcGxhdGVPYmplY3QxNSgpLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdibG9jaycpLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnppbmRleFRvYXN0TWVzc2FnZXMsIGZ1bmN0aW9uIChwcm9wcykge1xuICBzd2l0Y2ggKHByb3BzLnBvc2l0aW9uKSB7XG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1BPU0lUSU9OU1wiXS5UT1BfTEVGVDpcbiAgICAgIHJldHVybiB0b3BMZWZ0O1xuXG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1BPU0lUSU9OU1wiXS5UT1BfQ0VOVEVSOlxuICAgICAgcmV0dXJuIHRvcENlbnRlcjtcblxuICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9QT1NJVElPTlNcIl0uVE9QX1JJR0hUOlxuICAgICAgcmV0dXJuIHRvcFJpZ2h0O1xuXG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1BPU0lUSU9OU1wiXS5CT1RUT01fTEVGVDpcbiAgICAgIHJldHVybiBib3R0b21MZWZ0O1xuXG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1BPU0lUSU9OU1wiXS5CT1RUT01fQ0VOVEVSOlxuICAgICAgcmV0dXJuIGJvdHRvbUNlbnRlcjtcblxuICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9QT1NJVElPTlNcIl0uQk9UVE9NX1JJR0hUOlxuICAgICAgcmV0dXJuIGJvdHRvbVJpZ2h0O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0b3BDZW50ZXI7XG4gIH1cbn0pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Ub2FzdEljb24uanN4XG5cblxuXG5cblxuXG5cblxuXG52YXIgSUNPTl9TSVpFID0gJzI0cHgnO1xudmFyIEVSUk9SX0lDT05fU0laRSA9ICcyNnB4JzsgLy8gdGhpcyBpY29uIHJlbmRlcnMgc21hbGxlciB0aGFuIGludGVuZGVkXG5cbnZhciBUb2FzdEljb25fZ2V0RW50ZXJwcmlzZUljb24gPSBmdW5jdGlvbiBnZXRFbnRlcnByaXNlSWNvbih0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5TVUNDRVNTOlxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdWNjZXNzX2RlZmF1bHQuYSwge1xuICAgICAgICBzaXplOiBJQ09OX1NJWkVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLklORk86XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEluZm9DaXJjbGVfZGVmYXVsdC5hLCB7XG4gICAgICAgIHNpemU6IElDT05fU0laRVxuICAgICAgfSk7XG5cbiAgICBjYXNlIFRvYXN0Q29uc3RhbnRzW1wiVE9BU1RfVFlQRVNcIl0uRVJST1I6XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEVycm9yX2RlZmF1bHQuYSwge1xuICAgICAgICBzaXplOiBFUlJPUl9JQ09OX1NJWkVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLldBUk5JTkc6XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFdhcm5pbmdfZGVmYXVsdC5hLCB7XG4gICAgICAgIHNpemU6IElDT05fU0laRVxuICAgICAgfSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChJbmZvQ2lyY2xlX2RlZmF1bHQuYSwge1xuICAgICAgICBzaXplOiBJQ09OX1NJWkVcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgVG9hc3RJY29uX1ByaXNtYUljb24gPSBmdW5jdGlvbiBQcmlzbWFJY29uKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICB3aWR0aDogSUNPTl9TSVpFLFxuICAgIGhlaWdodDogSUNPTl9TSVpFLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuVG9hc3RJY29uX1ByaXNtYUljb24ucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZS5pc1JlcXVpcmVkXG59O1xuXG52YXIgVG9hc3RJY29uX2dldFByaXNtYUljb24gPSBmdW5jdGlvbiBnZXRQcmlzbWFJY29uKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLlNVQ0NFU1M6XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRvYXN0SWNvbl9QcmlzbWFJY29uLCBudWxsLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgICBkOiBcIk0yMiAxMkMyMiAxNy41MjI4IDE3LjUyMjggMjIgMTIgMjJDNi40NzcxNSAyMiAyIDE3LjUyMjggMiAxMkMyIDYuNDc3MTUgNi40NzcxNSAyIDEyIDJDMTcuNTIyOCAyIDIyIDYuNDc3MTUgMjIgMTJaTTE2Ljg3MzggOC42MjYyN0MxNy4yNjQzIDkuMDE2NzkgMTcuMjY0MyA5LjY0OTk2IDE2Ljg3MzggMTAuMDQwNUwxMS41ODUzIDE1LjMyOUMxMC45OTk2IDE1LjkxNDcgMTAuMDQ5OSAxNS45MTQ4IDkuNDY0MTQgMTUuMzI5MUw3LjEyNjM3IDEyLjk5MjFDNi43MzU3OSAxMi42MDE2IDYuNzM1NyAxMS45Njg0IDcuMTI2MTYgMTEuNTc3OUM3LjUxNjYzIDExLjE4NzMgOC4xNDk4IDExLjE4NzIgOC41NDAzOCAxMS41Nzc2TDEwLjUyNDYgMTMuNTYxM0wxNS40NTk2IDguNjI2MjdDMTUuODUwMSA4LjIzNTc0IDE2LjQ4MzMgOC4yMzU3NCAxNi44NzM4IDguNjI2MjdaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH0pKTtcblxuICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5JTkZPOlxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUb2FzdEljb25fUHJpc21hSWNvbiwgbnVsbCwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMjIgMTJDMjIgMTcuNTIyOCAxNy41MjI4IDIyIDEyIDIyQzYuNDc3MTUgMjIgMiAxNy41MjI4IDIgMTJDMiA2LjQ3NzE1IDYuNDc3MTUgMiAxMiAyQzE3LjUyMjggMiAyMiA2LjQ3NzE1IDIyIDEyWk0xMS4wMDAxIDE2LjAwOTRWMTEuOTk5OUMxMS4wMDAxIDExLjQ0NzYgMTEuNDQ3OCAxMC45OTk5IDEyLjAwMDEgMTAuOTk5OUMxMi41NTI0IDEwLjk5OTkgMTMuMDAwMSAxMS40NDc2IDEzLjAwMDEgMTEuOTk5OVYxNi4wMDk0QzEzLjAwMDEgMTYuNTYxNyAxMi41NTI0IDE3LjAwOTQgMTIuMDAwMSAxNy4wMDk0QzExLjQ0NzggMTcuMDA5NCAxMS4wMDAxIDE2LjU2MTcgMTEuMDAwMSAxNi4wMDk0Wk0xMiA2Ljk5OTlDMTIuNjYyOCA2Ljk5OTkgMTMuMiA3LjUzNzE2IDEzLjIgOC4xOTk5QzEzLjIgOC44NjI2NCAxMi42NjI4IDkuMzk5OSAxMiA5LjM5OTlDMTEuMzM3MyA5LjM5OTkgMTAuOCA4Ljg2MjY0IDEwLjggOC4xOTk5QzEwLjggNy41MzcxNiAxMS4zMzczIDYuOTk5OSAxMiA2Ljk5OTlaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH0pKTtcblxuICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5FUlJPUjpcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVG9hc3RJY29uX1ByaXNtYUljb24sIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTIyIDEyQzIyIDYuNDc3MTUgMTcuNTIyOCAyIDEyIDJDNi40NzcxNSAyIDIgNi40NzcxNSAyIDEyQzIgMTcuNTIyOCA2LjQ3NzE1IDIyIDEyIDIyQzE3LjUyMjggMjIgMjIgMTcuNTIyOCAyMiAxMlpNMTEuMDAwMSA3Ljk5MDZWMTIuMDAwMUMxMS4wMDAxIDEyLjU1MjQgMTEuNDQ3OCAxMy4wMDAxIDEyLjAwMDEgMTMuMDAwMUMxMi41NTI0IDEzLjAwMDEgMTMuMDAwMSAxMi41NTI0IDEzLjAwMDEgMTIuMDAwMVY3Ljk5MDZDMTMuMDAwMSA3LjQzODMyIDEyLjU1MjQgNi45OTA2IDEyLjAwMDEgNi45OTA2QzExLjQ0NzggNi45OTA2IDExLjAwMDEgNy40MzgzMiAxMS4wMDAxIDcuOTkwNlpNMTIuMDAwMSAxNy4wMDAxQzEyLjY2MjggMTcuMDAwMSAxMy4yMDAxIDE2LjQ2MjggMTMuMjAwMSAxNS44MDAxQzEzLjIwMDEgMTUuMTM3NCAxMi42NjI4IDE0LjYwMDEgMTIuMDAwMSAxNC42MDAxQzExLjMzNzMgMTQuNjAwMSAxMC44MDAxIDE1LjEzNzQgMTAuODAwMSAxNS44MDAxQzEwLjgwMDEgMTYuNDYyOCAxMS4zMzczIDE3LjAwMDEgMTIuMDAwMSAxNy4wMDAxWlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9KSk7XG5cbiAgICBjYXNlIFRvYXN0Q29uc3RhbnRzW1wiVE9BU1RfVFlQRVNcIl0uV0FSTklORzpcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVG9hc3RJY29uX1ByaXNtYUljb24sIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICAgIGQ6IFwiTTEwLjY4MjcgMi44MjM2OUMxMS4yMzQxIDEuNzI1NDQgMTIuNzY1OSAxLjcyNTQ0IDEzLjMxNzMgMi44MjM2OUwyMS44MzM4IDE5Ljc4NjdDMjIuMzQxMiAyMC43OTczIDIxLjYyNTQgMjIgMjAuNTE2NSAyMkgzLjQ4MzQ5QzIuMzc0NjIgMjIgMS42NTg3OCAyMC43OTczIDIuMTY2MTYgMTkuNzg2N0wxMC42ODI3IDIuODIzNjlaTTExLjAwMDIgMTMuNjYxOFYxMS4wMTMzQzExLjAwMDIgMTAuNDYxIDExLjQ0NzkgMTAuMDEzMyAxMi4wMDAyIDEwLjAxMzNDMTIuNTUyNSAxMC4wMTMzIDEzLjAwMDIgMTAuNDYxIDEzLjAwMDIgMTEuMDEzM1YxMy42NjE4QzEzLjAwMDIgMTQuMjE0MSAxMi41NTI1IDE0LjY2MTggMTIuMDAwMiAxNC42NjE4QzExLjQ0NzkgMTQuNjYxOCAxMS4wMDAyIDE0LjIxNDEgMTEuMDAwMiAxMy42NjE4Wk0xMy4yMDAyIDE2LjkzNDdDMTMuMjAwMiAxNy41OTc1IDEyLjY2MjkgMTguMTM0NyAxMi4wMDAyIDE4LjEzNDdDMTEuMzM3NCAxOC4xMzQ3IDEwLjgwMDIgMTcuNTk3NSAxMC44MDAyIDE2LjkzNDdDMTAuODAwMiAxNi4yNzIgMTEuMzM3NCAxNS43MzQ3IDEyLjAwMDIgMTUuNzM0N0MxMi42NjI5IDE1LjczNDcgMTMuMjAwMiAxNi4yNzIgMTMuMjAwMiAxNi45MzQ3WlwiLFxuICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICB9KSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUb2FzdEljb25fUHJpc21hSWNvbiwgbnVsbCwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgICAgZDogXCJNMjIgMTJDMjIgMTcuNTIyOCAxNy41MjI4IDIyIDEyIDIyQzYuNDc3MTUgMjIgMiAxNy41MjI4IDIgMTJDMiA2LjQ3NzE1IDYuNDc3MTUgMiAxMiAyQzE3LjUyMjggMiAyMiA2LjQ3NzE1IDIyIDEyWk0xMS4wMDAxIDE2LjAwOTRWMTEuOTk5OUMxMS4wMDAxIDExLjQ0NzYgMTEuNDQ3OCAxMC45OTk5IDEyLjAwMDEgMTAuOTk5OUMxMi41NTI0IDEwLjk5OTkgMTMuMDAwMSAxMS40NDc2IDEzLjAwMDEgMTEuOTk5OVYxNi4wMDk0QzEzLjAwMDEgMTYuNTYxNyAxMi41NTI0IDE3LjAwOTQgMTIuMDAwMSAxNy4wMDk0QzExLjQ0NzggMTcuMDA5NCAxMS4wMDAxIDE2LjU2MTcgMTEuMDAwMSAxNi4wMDk0Wk0xMiA2Ljk5OTlDMTIuNjYyOCA2Ljk5OTkgMTMuMiA3LjUzNzE2IDEzLjIgOC4xOTk5QzEzLjIgOC44NjI2NCAxMi42NjI4IDkuMzk5OSAxMiA5LjM5OTlDMTEuMzM3MyA5LjM5OTkgMTAuOCA4Ljg2MjY0IDEwLjggOC4xOTk5QzEwLjggNy41MzcxNiAxMS4zMzczIDYuOTk5OSAxMiA2Ljk5OTlaXCIsXG4gICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgIH0pKTtcbiAgfVxufTtcblxudmFyIFRvYXN0SWNvbl9Ub2FzdEljb24gPSBmdW5jdGlvbiBUb2FzdEljb24oX3JlZjIpIHtcbiAgdmFyIHR5cGUgPSBfcmVmMi50eXBlO1xuXG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSB1c2VTcGx1bmtUaGVtZV9kZWZhdWx0KCkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHk7XG5cbiAgdmFyIGljb24gPSBmYW1pbHkgPT09ICdwcmlzbWEnID8gVG9hc3RJY29uX2dldFByaXNtYUljb24odHlwZSkgOiBUb2FzdEljb25fZ2V0RW50ZXJwcmlzZUljb24odHlwZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwge1xuICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgXCJkYXRhLXRlc3RcIjogdHlwZSxcbiAgICBcImFyaWEtbGFiZWxcIjogXCJcIi5jb25jYXQodHlwZSwgXCIgdG9hc3QgaWNvblwiKSxcbiAgICAkdHlwZTogdHlwZVxuICB9LCBpY29uKTtcbn07XG5cblRvYXN0SWNvbl9Ub2FzdEljb24ucHJvcFR5cGVzID0ge1xuICB0eXBlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcuaXNSZXF1aXJlZFxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19Ub2FzdEljb24gPSAoVG9hc3RJY29uX1RvYXN0SWNvbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Ub2FzdC5qc3hcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gVG9hc3RfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS10YWJpbmRleCAqL1xuXG5cblxuXG5cblxuXG52YXIgREVGQVVMVF9USU1FT1VUID0gNTAwMDtcbi8qKlxuICogVGhlIFRvYXN0ZXIgY29tcG9uZW50IGxldmVyYWdlcyB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgZnJvbSBgbWFrZUNyZWF0ZVRvYXN0KFRvYXN0ZXIpYFxuICogd2hpY2ggd2UgcmVmZXIgdG8gYXMgYGNyZWF0ZVRvYXN0YC4gVGhpcyBmdW5jdGlvbiBleHBlY3RzIGEgc2V0IG9mIHByb3BzIGFzIHBhcmFtZXRlcnNcbiAqIHdoaWNoIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4gKi9cblxudmFyIFRvYXN0X1RvYXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb2FzdCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUb2FzdCk7XG5cbiAgZnVuY3Rpb24gVG9hc3QoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvYXN0KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBUb2FzdF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk1vdXNlRW50ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmF1dG9EaXNtaXNzKSB7XG4gICAgICAgIF90aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBUb2FzdF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk1vdXNlTGVhdmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmF1dG9EaXNtaXNzKSB7XG4gICAgICAgIF90aGlzLnJlc3VtZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgVG9hc3RfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25BY3Rpb25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5mdWxmaWxsQWN0aW9uQ2FsbGJhY2soKTtcbiAgICB9KTtcblxuICAgIFRvYXN0X2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNsb3NlS2V5RG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKCdlbnRlcicpKSB7XG4gICAgICAgIF90aGlzLnJlcXVlc3RIaWRlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBUb2FzdF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVBY3Rpb25CdXR0b25LZXlEb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSBPYmplY3Qoa2V5Ym9hcmRfW1wia2V5Y29kZVwiXSkoJ2VudGVyJykpIHtcbiAgICAgICAgX3RoaXMuZnVsZmlsbEFjdGlvbkNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBUb2FzdF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc1ZhbGlkVG9hc3RUeXBlXCIsIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2FzdENvbnN0YW50c1tcIlRPQVNUX1RZUEVTXCJdLlNVQ0NFU1M6XG4gICAgICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5JTkZPOlxuICAgICAgICBjYXNlIFRvYXN0Q29uc3RhbnRzW1wiVE9BU1RfVFlQRVNcIl0uRVJST1I6XG4gICAgICAgIGNhc2UgVG9hc3RDb25zdGFudHNbXCJUT0FTVF9UWVBFU1wiXS5XQVJOSU5HOlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgVG9hc3RfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiVGltZXJcIiwgZnVuY3Rpb24gKGNhbGxiYWNrLCBkZWxheSkge1xuICAgICAgdmFyIHN0YXJ0ID0gZGVsYXk7XG4gICAgICB2YXIgcmVtYWluaW5nID0gZGVsYXk7XG5cbiAgICAgIF90aGlzLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVySWQpO1xuICAgICAgICByZW1haW5pbmcgLT0gbmV3IERhdGUoKSAtIHN0YXJ0O1xuICAgICAgfTtcblxuICAgICAgX3RoaXMucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSwgcmVtYWluaW5nKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcy5yZXN1bWUoKTtcbiAgICB9KTtcblxuICAgIFRvYXN0X2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlcXVlc3RIaWRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvblJlcXVlc3RIaWRlID0gX3RoaXMucHJvcHMub25SZXF1ZXN0SGlkZTtcbiAgICAgIG9uUmVxdWVzdEhpZGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb2FzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5hdXRvRGlzbWlzcykge1xuICAgICAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dCB8fCBERUZBVUxUX1RJTUVPVVQ7XG4gICAgICAgIHRoaXMudGltZXJJZCA9IHRoaXMuVGltZXIodGhpcy5yZXF1ZXN0SGlkZSwgdGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0Rpc21pc3MgJiYgdGhpcy50aW1lcklkKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lcklkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZnVsZmlsbEFjdGlvbkNhbGxiYWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZ1bGZpbGxBY3Rpb25DYWxsYmFjaygpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlzbWlzc09uQWN0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5kaXNtaXNzT25BY3Rpb25DbGljayxcbiAgICAgICAgICBhY3Rpb24gPSBfdGhpcyRwcm9wcy5hY3Rpb247XG4gICAgICBhY3Rpb24uY2FsbGJhY2soKTtcblxuICAgICAgaWYgKGRpc21pc3NPbkFjdGlvbkNsaWNrKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdEhpZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHR5cGUgPSBfdGhpcyRwcm9wczIudHlwZSxcbiAgICAgICAgICBhY3Rpb24gPSBfdGhpcyRwcm9wczIuYWN0aW9uLFxuICAgICAgICAgIG1lc3NhZ2UgPSBfdGhpcyRwcm9wczIubWVzc2FnZSxcbiAgICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHMyLm9uRm9jdXMsXG4gICAgICAgICAgb25CbHVyID0gX3RoaXMkcHJvcHMyLm9uQmx1cixcbiAgICAgICAgICBvblJlcXVlc3RIaWRlID0gX3RoaXMkcHJvcHMyLm9uUmVxdWVzdEhpZGUsXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIFtcInR5cGVcIiwgXCJhY3Rpb25cIiwgXCJtZXNzYWdlXCIsIFwib25Gb2N1c1wiLCBcIm9uQmx1clwiLCBcIm9uUmVxdWVzdEhpZGVcIl0pO1xuXG4gICAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICAgIHZhciBpY29uID0gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KHNyY19Ub2FzdEljb24sIHtcbiAgICAgICAgdHlwZTogdHlwZVxuICAgICAgfSk7XG4gICAgICB2YXIgbXNnID0gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZE1lc3NhZ2UsIHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJ0b2FzdC1tZXNzYWdlXCIsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBtZXNzYWdlLFxuICAgICAgICBsYW5nOiBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgbmF2aWdhdG9yLnVzZXJMYW5ndWFnZSxcbiAgICAgICAgdGl0bGU6IG1lc3NhZ2VcbiAgICAgIH0sIG1lc3NhZ2UpO1xuICAgICAgdmFyIGFjdGlvbkJ0biA9IGFjdGlvbiA/IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRBY3Rpb25CdXR0b24sIF9leHRlbmRzKHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJ0b2FzdC1hY3Rpb25cIixcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25BY3Rpb25DbGljayxcbiAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVBY3Rpb25CdXR0b25LZXlEb3duLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiXG4gICAgICB9LCBhY3Rpb24ucHJvcHMpLCBhY3Rpb24ubGFiZWwpIDogbnVsbDsgLy8gVE9ETzogVGhlIGNsb3NlIGljb24gaXMgaW5jb3JyZWN0IGZvciBQcmlzbWEgU1VJLTIzODhcbiAgICAgIC8vIE11c3QgYmUgYWJzb2x1dGUgcG9zaXRpb25lZCB0byBlbnN1cmUgcHJvcGVyIHRhYkluZGV4IG9yZGVyLlxuXG4gICAgICB2YXIgZGlzbWlzcyA9IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwidG9hc3QtZGlzbWlzc1wiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIHRvcDogJzEzcHgnLFxuICAgICAgICAgIHJpZ2h0OiAnMTJweCcsXG4gICAgICAgICAgY29sb3I6ICcjODE4ZDk5JyxcbiAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJ1xuICAgICAgICB9LFxuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgZm9jdXNhYmxlOiBcInRydWVcIixcbiAgICAgICAgb25DbGljazogdGhpcy5yZXF1ZXN0SGlkZSxcbiAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVDbG9zZUtleURvd25cbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDbG9zZV9kZWZhdWx0LmEsIHtcbiAgICAgICAgc2l6ZTogXCIxMnB4XCJcbiAgICAgIH0pKTsgLy8gUGxhY2VkIGluLWxpbmUgYmVuZWF0aCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZGlzbWlzcyBidXR0b24gdG8gZW5zdXJlXG4gICAgICAvLyBwcm9wZXIgd3JhcHBpbmcgb2YgYWN0aW9uIGJ1dHRvbi5cblxuICAgICAgdmFyIGRpc21pc3NQbGFjZWhvbGRlciA9IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgbWFyZ2luVG9wOiAnNXB4JyxcbiAgICAgICAgICBtYXJnaW5SaWdodDogJzEycHgnLFxuICAgICAgICAgIFwiZmxvYXRcIjogJ3JpZ2h0JyxcbiAgICAgICAgICBjb2xvcjogJyM4MThkOTknLFxuICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInXG4gICAgICAgIH1cbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDbG9zZV9kZWZhdWx0LmEsIHtcbiAgICAgICAgc2l6ZTogXCIxMnB4XCJcbiAgICAgIH0pKTtcbiAgICAgIHZhciB0b2FzdENvbnRlbnQgPSAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVG9hc3RDb250ZW50LCB7XG4gICAgICAgIHJvbGU6IFwiZ3JvdXBcIixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiVG9hc3QgY29udGVudFwiXG4gICAgICB9LCBtc2csIFwiIFwiLCBkaXNtaXNzUGxhY2Vob2xkZXIsIFwiIFwiLCBhY3Rpb25CdG4sIFwiIFwiLCBkaXNtaXNzKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVG9hc3QsIF9leHRlbmRzKHtcbiAgICAgICAgcm9sZTogXCJncm91cFwiLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRvYXN0XCIsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBcIlRvYXN0IGNvbnRhaW5lclwiLFxuICAgICAgICBvbk1vdXNlRW50ZXI6IHRoaXMub25Nb3VzZUVudGVyLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IHRoaXMub25Nb3VzZUxlYXZlLFxuICAgICAgICAkdHlwZTogdHlwZVxuICAgICAgfSwgb3RoZXJQcm9wcyksIGljb24sIHRvYXN0Q29udGVudCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRvYXN0O1xufShleHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuQ29tcG9uZW50KTtcblxuVG9hc3RfVG9hc3QucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIHRvYXN0LlxuICAgKi9cbiAgbWVzc2FnZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRvYXN0LiBUaGVzZSB0eXBlcyBhcmUgcHJlLWRlZmluZWQgaW4gYFRvYXN0Q29uc3RhbnRzLmpzYCBhcyBgVE9BU1RfVFlQRVNgLlxuICAgKiBJZiBhbiB1bmtub3duIHRvYXN0IHR5cGUgaXMgc2VudCB0byBgVG9hc3RNZXNzYWdlc2AsIGl0IHdpbGwgZGVmYXVsdCB0byBgVE9BU1RfVFlQRVMuSU5GT2AgYW5kIHNob3cgd2FybmluZ3MgdG8gdGhlIGRldmVsb3Blci5cbiAgICogV2UgZG8gbm90IGVuZm9yY2UgYFRPQVNUX1RZUEVTYCBpbiBwcm9wcyBiZWNhdXNlIGlmIG11bHRpcGxlIGFwcHMgdXNlIHRoZSBzYW1lIGBUb2FzdE1lc3NhZ2VzYCBjb250YWluZXIgd2hlcmVcbiAgICogb25lIG9mIHRoZXNlIHZlcnNpb25zIGhhdmUgYSBuZXdlciB2ZXJzaW9uIGBUb2FzdGVyYCB3aXRoIHBlcmhhcHMgbmV3IHR5cGVzLCB3ZSBkbyBub3Qgd2FudCB0byBzaG93IG5vdGhpbmcsXG4gICAqIGJ1dCByYXRoZXIgc2hvdyB0aGUgbWVzc2FnZSBhbmQgZGVmYXVsdCB0byBgVE9BU1RfVFlQRVMuSU5GT2AuXG4gICAqL1xuICB0eXBlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdG9hc3QgbWVzc2FnZSBzaG91bGQgYXV0b21hdGljYWxseSBkaXNtaXNzIGFmdGVyIDUgc2Vjb25kcy5cbiAgICovXG4gIGF1dG9EaXNtaXNzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0b2FzdCBtZXNzYWdlIHNob3VsZCBhdXRvbWF0aWNhbGx5IGRpc21pc3MgYWZ0ZXIgYW4gYWN0aW9uIGlzIGNsaWNrZWQuXG4gICAqL1xuICBkaXNtaXNzT25BY3Rpb25DbGljazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcblxuICAvKipcbiAgICogQW4gYWN0aW9uYWJsZSBidXR0b24gdGhhdCBoYXMgYSByZXF1aXJlZCBsYWJlbCBhbmQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIGBwcm9wc2AgY2FuIG9wdGlvbmFsbHkgYmUgYWRkZWQgdG8gcGFzcyBhbnkgYWRkaXRpb25hbCBwcm9wcyB0byB0aGUgYnV0dG9uLlxuICAgKi9cbiAgYWN0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zaGFwZSh7XG4gICAgbGFiZWw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlXSkuaXNSZXF1aXJlZCxcbiAgICBjYWxsYmFjazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHByb3BzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RcbiAgfSksXG5cbiAgLyoqXG4gICAqIEludGVybmFsbHkgY29udHJvbGxlZCBwcm9wc1xuICAgKi9cblxuICAvKipcbiAgICogVGltZSAobXMpIGJlZm9yZSB0aGUgdG9hc3Qgd2lsbCBkaXNtaXNzXG4gICAqL1xuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICB0aW1lb3V0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB3aGVuIGEgdG9hc3QgaXMgZGlzbWlzc2VkXG4gICAqL1xuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBvblJlcXVlc3RIaWRlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3Igd2hlbiBhIHRvYXN0IGZvY3VzZWRcbiAgICovXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIG9uRm9jdXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB3aGVuIGEgdG9hc3QgdW5mb2N1c2VkXG4gICAqL1xuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBvbkJsdXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmNcbn07XG5Ub2FzdF9Ub2FzdC5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzOiB0cnVlLFxuICBkaXNtaXNzT25BY3Rpb25DbGljazogdHJ1ZSxcbiAgb25SZXF1ZXN0SGlkZTogZnVuY3Rpb24gb25SZXF1ZXN0SGlkZSgpIHt9LFxuICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKCkge30sXG4gIG9uQmx1cjogZnVuY3Rpb24gb25CbHVyKCkge31cbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfVG9hc3QgPSAoVG9hc3RfVG9hc3QpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVG9hc3RNZXNzYWdlc0ludGVybmFsLmpzeFxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgVG9hc3RNZXNzYWdlc0ludGVybmFsX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZXh0ZW5kcygpIHsgVG9hc3RNZXNzYWdlc0ludGVybmFsX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gVG9hc3RNZXNzYWdlc0ludGVybmFsX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgVG9hc3RNZXNzYWdlc0ludGVybmFsX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX3NldFByb3RvdHlwZU9mKG8sIHApIHsgVG9hc3RNZXNzYWdlc0ludGVybmFsX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gVG9hc3RNZXNzYWdlc0ludGVybmFsX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoVG9hc3RNZXNzYWdlc0ludGVybmFsX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gVG9hc3RNZXNzYWdlc0ludGVybmFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gVG9hc3RNZXNzYWdlc0ludGVybmFsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZ2V0UHJvdG90eXBlT2YobykgeyBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gVG9hc3RNZXNzYWdlc0ludGVybmFsX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBBTklNQVRJT05fRFVSQVRJT04gPSAyMDA7XG52YXIgVE9QX0VOVEVSX0FOSU1BVElPTiA9IHtcbiAgZnJvbToge1xuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJyxcbiAgICBvcGFjaXR5OiAnMCdcbiAgfSxcbiAgdG86IHtcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyxcbiAgICBvcGFjaXR5OiAnJ1xuICB9XG59O1xudmFyIEJPVFRPTV9FTlRFUl9BTklNQVRJT04gPSB7XG4gIGZyb206IHtcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJyxcbiAgICBvcGFjaXR5OiAnMCdcbiAgfSxcbiAgdG86IHtcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyxcbiAgICBvcGFjaXR5OiAnJ1xuICB9XG59O1xuLyoqXG4gKiBBbiBpbnRlcm5hbCBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGRpc3BsYXlpbmcgYW5kIG1hbmFnaW5nIHRvYXN0IG1lc3NhZ2VzLlxuICovXG5cbnZhciBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfVG9hc3RNZXNzYWdlc0ludGVybmFsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9pbmhlcml0cyhUb2FzdE1lc3NhZ2VzSW50ZXJuYWwsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfY3JlYXRlU3VwZXIoVG9hc3RNZXNzYWdlc0ludGVybmFsKTtcblxuICBmdW5jdGlvbiBUb2FzdE1lc3NhZ2VzSW50ZXJuYWwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfY2xhc3NDYWxsQ2hlY2sodGhpcywgVG9hc3RNZXNzYWdlc0ludGVybmFsKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgVG9hc3RNZXNzYWdlc0ludGVybmFsX2RlZmluZVByb3BlcnR5KFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vZGFsTW91bnRcIiwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIF90aGlzLmVsID0gZWxlbWVudDtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJkZWZlclwiXSkoZm9jdXNfW1widGFrZUZvY3VzXCJdLCBlbGVtZW50LCAnY29udGFpbmVyJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZGVmaW5lUHJvcGVydHkoVG9hc3RNZXNzYWdlc0ludGVybmFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW9kYWxLZXlEb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBPYmplY3QoZm9jdXNfW1wiaGFuZGxlVGFiXCJdKShfdGhpcy5lbCwgZSk7XG4gICAgfSk7XG5cbiAgICBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfZGVmaW5lUHJvcGVydHkoVG9hc3RNZXNzYWdlc0ludGVybmFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVG9hc3RDcmVhdGVcIiwgZnVuY3Rpb24gKHRvYXN0KSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSBfdGhpcy5wcm9wcy5wb3NpdGlvbjtcbiAgICAgIHZhciBwb3NpdGlvbklzVG9wID0gcG9zaXRpb24uaW5kZXhPZigndG9wJykgIT09IC0xO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uSXNUb3ApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9hc3RzOiBbdG9hc3RdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3RhdGUudG9hc3RzKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2FzdHM6IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3RhdGUudG9hc3RzKSwgW3RvYXN0XSlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgVG9hc3RNZXNzYWdlc0ludGVybmFsX2RlZmluZVByb3BlcnR5KFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVRvYXN0Rm9jdXNcIiwgZnVuY3Rpb24gKGlkKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGZvY3VzZWRUb2FzdENhbmRpZGF0ZSA9IHN0YXRlLnRvYXN0cy5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gdC5pZCA9PT0gaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmb2N1c2VkVG9hc3RDYW5kaWRhdGUubGVuZ3RoID4gMCAmJiBzdGF0ZS5mb2N1c2VkVG9hc3QgIT09IGZvY3VzZWRUb2FzdENhbmRpZGF0ZVswXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb2N1c2VkVG9hc3Q6IGZvY3VzZWRUb2FzdENhbmRpZGF0ZVswXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgVG9hc3RNZXNzYWdlc0ludGVybmFsX2RlZmluZVByb3BlcnR5KFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlcXVlc3RIaWRlXCIsIGZ1bmN0aW9uICh0b2FzdCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciB0b2FzdFRvUmVtb3ZlID0gc3RhdGUuZm9jdXNlZFRvYXN0IHx8IHRvYXN0O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvYXN0czogc3RhdGUudG9hc3RzLmZpbHRlcihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRvYXN0VG9SZW1vdmUuaWQgIT09IHQuaWQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9jdXNlZFRvYXN0OiBudWxsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9kZWZpbmVQcm9wZXJ0eShUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5kZXJMYXllclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBwb3NpdGlvbiA9IF90aGlzJHByb3BzLnBvc2l0aW9uLFxuICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uID0gX3RoaXMkcHJvcHMuYW5pbWF0aW9uRHVyYXRpb247XG4gICAgICB2YXIgcG9zaXRpb25Jc1RvcCA9IHBvc2l0aW9uLmluZGV4T2YoJ3RvcCcpICE9PSAtMTtcbiAgICAgIHZhciBlbnRlckFuaW1hdGlvbiA9IHBvc2l0aW9uSXNUb3AgPyBUT1BfRU5URVJfQU5JTUFUSU9OIDogQk9UVE9NX0VOVEVSX0FOSU1BVElPTjtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTGF5ZXIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uc1xuICAgICAgLCB7XG4gICAgICAgIHJlZjogX3RoaXMuaGFuZGxlTW9kYWxNb3VudCxcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRvYXN0LW1lc3NhZ2VzXCIsXG4gICAgICAgIHJvbGU6IFwiZ3JvdXBcIixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiVG9hc3QgbWVzc2FnZXMgY29udGFpbmVyXCIsXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgb25LZXlEb3duOiBfdGhpcy5oYW5kbGVNb2RhbEtleURvd25cbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRGbGlwTW92ZSwge1xuICAgICAgICBlbnRlckFuaW1hdGlvbjogZW50ZXJBbmltYXRpb24sXG4gICAgICAgIGFwcGVhckFuaW1hdGlvbjogZW50ZXJBbmltYXRpb24sXG4gICAgICAgIGxlYXZlQW5pbWF0aW9uOiBcImZhZGVcIixcbiAgICAgICAgZHVyYXRpb246IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaXNOaWxcIl0pKGFuaW1hdGlvbkR1cmF0aW9uKSA/IEFOSU1BVElPTl9EVVJBVElPTiA6IGFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICBlYXNpbmc6IFwiY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpXCIsXG4gICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBwb3NpdGlvbklzVG9wID8gJ3RvcCcgOiAnYm90dG9tJ1xuICAgICAgfSwgX3RoaXMuc3RhdGUudG9hc3RzLm1hcChmdW5jdGlvbiAodG9hc3QpIHtcbiAgICAgICAgdmFyIGlkID0gdG9hc3QuaWQsXG4gICAgICAgICAgICBtZXNzYWdlID0gdG9hc3QubWVzc2FnZSxcbiAgICAgICAgICAgIHR5cGUgPSB0b2FzdC50eXBlLFxuICAgICAgICAgICAgYXV0b0Rpc21pc3MgPSB0b2FzdC5hdXRvRGlzbWlzcyxcbiAgICAgICAgICAgIGRpc21pc3NPbkFjdGlvbkNsaWNrID0gdG9hc3QuZGlzbWlzc09uQWN0aW9uQ2xpY2ssXG4gICAgICAgICAgICBhY3Rpb24gPSB0b2FzdC5hY3Rpb24sXG4gICAgICAgICAgICB0aW1lT3V0ID0gdG9hc3QudGltZU91dCxcbiAgICAgICAgICAgIG90aGVyUHJvcHMgPSBUb2FzdE1lc3NhZ2VzSW50ZXJuYWxfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModG9hc3QsIFtcImlkXCIsIFwibWVzc2FnZVwiLCBcInR5cGVcIiwgXCJhdXRvRGlzbWlzc1wiLCBcImRpc21pc3NPbkFjdGlvbkNsaWNrXCIsIFwiYWN0aW9uXCIsIFwidGltZU91dFwiXSk7XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChzcmNfVG9hc3QsIFRvYXN0TWVzc2FnZXNJbnRlcm5hbF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IGlkLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICBhdXRvRGlzbWlzczogYXV0b0Rpc21pc3MsXG4gICAgICAgICAgZGlzbWlzc09uQWN0aW9uQ2xpY2s6IGRpc21pc3NPbkFjdGlvbkNsaWNrLFxuICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgIHRpbWVvdXQ6IHRpbWVPdXQsXG4gICAgICAgICAgb25SZXF1ZXN0SGlkZTogZnVuY3Rpb24gb25SZXF1ZXN0SGlkZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVSZXF1ZXN0SGlkZSh0b2FzdCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZVRvYXN0Rm9jdXMoaWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlVG9hc3RCbHVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBvdGhlclByb3BzKSk7XG4gICAgICB9KSkpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB0b2FzdHM6IHByb3BzLnRvYXN0cyB8fCBbXSxcbiAgICAgIGZvY3VzZWRUb2FzdDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVG9hc3RNZXNzYWdlc0ludGVybmFsX2NyZWF0ZUNsYXNzKFRvYXN0TWVzc2FnZXNJbnRlcm5hbCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBUb2FzdGVyX2RlZmF1bHQuYS5hZGRDcmVhdGVMaXN0ZW5lcih0aGlzLmhhbmRsZVRvYXN0Q3JlYXRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdG9hc3RzOiBbXSxcbiAgICAgICAgZm9jdXNlZFRvYXN0OiBudWxsXG4gICAgICB9KTtcbiAgICAgIFRvYXN0ZXJfZGVmYXVsdC5hLnJlbW92ZUNyZWF0ZUxpc3RlbmVyKHRoaXMuaGFuZGxlVG9hc3RDcmVhdGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVUb2FzdEJsdXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVG9hc3RCbHVyKCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZm9jdXNlZFRvYXN0KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGZvY3VzZWRUb2FzdDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnByb3BzLnBvc2l0aW9uO1xuICAgICAgdmFyIHBvc2l0aW9uSXNUb3AgPSBwb3NpdGlvbi5pbmRleE9mKCd0b3AnKSAhPT0gLTE7XG4gICAgICB2YXIgaW5kZXhUb1JlbW92ZSA9IHBvc2l0aW9uSXNUb3AgPyAwIDogTWF0aC5tYXgodGhpcy5zdGF0ZS50b2FzdHMubGVuZ3RoIC0gMSwgMCk7XG4gICAgICB2YXIgb3BlbiA9IHRoaXMuc3RhdGUudG9hc3RzLmxlbmd0aCA+IDA7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5lc2NhcGVUb0Nsb3NlVG9hc3RzID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KExheWVyX2RlZmF1bHQuYSwge1xuICAgICAgICBjbG9zZVJlYXNvbnM6IFsnZXNjYXBlS2V5J10sXG4gICAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXJMYXllcixcbiAgICAgICAgb25SZXF1ZXN0Q2xvc2U6IGZ1bmN0aW9uIG9uUmVxdWVzdENsb3NlKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlUmVxdWVzdEhpZGUoX3RoaXMyLnN0YXRlLnRvYXN0c1tpbmRleFRvUmVtb3ZlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW46IG9wZW5cbiAgICAgIH0sIG9wZW4gJiYgdGhpcy5yZW5kZXJMYXllcigpKSA6IHRoaXMucmVuZGVyTGF5ZXIoKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9hc3RNZXNzYWdlc0ludGVybmFsO1xufShleHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuQ29tcG9uZW50KTtcblxuVG9hc3RNZXNzYWdlc0ludGVybmFsX1RvYXN0TWVzc2FnZXNJbnRlcm5hbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIHBvc2l0aW9uIG9uIHRoZSBzY3JlZW4gdGhhdCB0b2FzdHMgd2lsbCBkaXNwbGF5LlxuICAgKi9cblxuICAvKiogQHByaXZhdGUgKi9cbiAgcG9zaXRpb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1widmFsdWVzXCJdKShUb2FzdENvbnN0YW50c1tcIlRPQVNUX1BPU0lUSU9OU1wiXSkpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIER1cmF0aW9uIChtcykgdGhhdCBhIHRvYXN0IHdpbGwgdGFrZSB0byBhbmltYXRlIChpbiBhbmQgb3V0KS5cbiAgICovXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIFRvYXN0IG9iamVjdHMuXG4gICAqL1xuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICB0b2FzdHM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFycmF5T2YoZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0KSxcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgY2xpY2tpbmcgdGhlIGVzY2FwZSBrZXkgd2lsbCBjbG9zZSB0aGUgbW9zdCByZWNlbnRcbiAgICogdG9hc3QgbWVzc2FnZS5cbiAgICovXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIGVzY2FwZVRvQ2xvc2VUb2FzdHM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xcbn07XG5Ub2FzdE1lc3NhZ2VzSW50ZXJuYWxfVG9hc3RNZXNzYWdlc0ludGVybmFsLmRlZmF1bHRQcm9wcyA9IHtcbiAgZXNjYXBlVG9DbG9zZVRvYXN0czogdHJ1ZVxufTtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19Ub2FzdE1lc3NhZ2VzSW50ZXJuYWwgPSAoVG9hc3RNZXNzYWdlc0ludGVybmFsX1RvYXN0TWVzc2FnZXNJbnRlcm5hbCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Ub2FzdE1lc3NhZ2VzLmpzeFxuXG5cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBhIHNpbmdsZXRvbiB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBkaXNwbGF5aW5nIHBvc3RlZCB0b2FzdCBub3RpZmljYXRpb25zLlxuICogQmVjYXVzZSBpdCBpcyBhIHNpbmdsZXRvbiwgb25seSBjcmVhdGUgb25lIGluc3RhbmNlIHdpdGhpbiBhbiBhcHAuXG4gKi9cblxudmFyIFRvYXN0TWVzc2FnZXNfVG9hc3RNZXNzYWdlcyA9IGZ1bmN0aW9uIFRvYXN0TWVzc2FnZXMocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChzcmNfVG9hc3RNZXNzYWdlc0ludGVybmFsLCB7XG4gICAgcG9zaXRpb246IHByb3BzLnBvc2l0aW9uXG4gIH0pO1xufTtcblxuVG9hc3RNZXNzYWdlc19Ub2FzdE1lc3NhZ2VzLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBzdGF0aWMgcG9zaXRpb24gb24gdGhlIHNjcmVlbiB0aGF0IHRvYXN0cyB3aWxsIGRpc3BsYXkuXG4gICAqL1xuICBwb3NpdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWyd0b3AtbGVmdCcsICd0b3AtY2VudGVyJywgJ3RvcC1yaWdodCcsICdib3R0b20tbGVmdCcsICdib3R0b20tY2VudGVyJywgJ2JvdHRvbS1yaWdodCddKVxufTtcblRvYXN0TWVzc2FnZXNfVG9hc3RNZXNzYWdlcy5kZWZhdWx0UHJvcHMgPSB7XG4gIHBvc2l0aW9uOiAndG9wLWNlbnRlcidcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfVG9hc3RNZXNzYWdlcyA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKFRvYXN0TWVzc2FnZXNfVG9hc3RNZXNzYWdlcyk7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX2xpZ2h0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9saWdodFwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIGRyYWdIYW5kbGVEYXJrID0gXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBMVNVUkJWSGdCN2RLaEVRQWdEQVBBaEhtd1NLWkhZdG1IVnRaVlZOVGtYUzUzVWVHNTd5UFlhekxtckI4bzZoOFFnUHFCT0FPYm9SQVBKVUdJT0FBQUFBQkpSVTVFcmtKZ2dnPT1cIjsgLy8gc2VlIGJhYmVsLXBsdWdpbi1iYXNlNjQtcG5nXG5cbnZhciBkYXJrID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6IF9saWdodFtcImRlZmF1bHRcIl0uZ3JheTIwLFxuICBiYWNrZ3JvdW5kQ29sb3JIb3ZlcjogX2xpZ2h0W1wiZGVmYXVsdFwiXS5ncmF5MzAsXG4gIGJvcmRlckNvbG9yOiBfbGlnaHRbXCJkZWZhdWx0XCJdLmdyYXkyMixcbiAgYm9yZGVyRGFya0NvbG9yOiBfbGlnaHRbXCJkZWZhdWx0XCJdLmJsYWNrLFxuICBib3JkZXJMaWdodENvbG9yOiBfbGlnaHRbXCJkZWZhdWx0XCJdLmdyYXk2MCxcbiAgdGV4dENvbG9yOiBfbGlnaHRbXCJkZWZhdWx0XCJdLndoaXRlLFxuICB0ZXh0R3JheTogX2xpZ2h0W1wiZGVmYXVsdFwiXS5ncmF5OTIsXG4gIHRleHREaXNhYmxlZENvbG9yOiBfbGlnaHRbXCJkZWZhdWx0XCJdLmdyYXk0NSxcbiAgbGlua0NvbG9yOiBfbGlnaHRbXCJkZWZhdWx0XCJdLmFjY2VudENvbG9yTDEwLFxuICBsaW5rQ29sb3JIb3ZlcjogX2xpZ2h0W1wiZGVmYXVsdFwiXS5hY2NlbnRDb2xvckwyMCxcbiAgYm9yZGVyOiBcIjFweCBzb2xpZCBcIi5jb25jYXQoX2xpZ2h0W1wiZGVmYXVsdFwiXS5ncmF5MjIpLFxuICBib3JkZXJEYXJrOiBcIjFweCBzb2xpZCBcIi5jb25jYXQoX2xpZ2h0W1wiZGVmYXVsdFwiXS5ibGFjayksXG4gIGJvcmRlckxpZ2h0OiBcIjFweCBzb2xpZCBcIi5jb25jYXQoX2xpZ2h0W1wiZGVmYXVsdFwiXS5ncmF5NjApLFxuICBmb2N1c1NoYWRvd0luc2V0OiBcImluc2V0IDAgMCAxcHggMXB4IFwiLmNvbmNhdChfbGlnaHRbXCJkZWZhdWx0XCJdLmdyYXkyNSwgXCIsIGluc2V0IDAgMCAwIDNweCBcIikuY29uY2F0KF9saWdodFtcImRlZmF1bHRcIl0uZm9jdXNDb2xvciksXG4gIGRyYWdnYWJsZUJhY2tncm91bmQ6IFwidXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsXCIuY29uY2F0KGRyYWdIYW5kbGVEYXJrLCBcIicpIDAgMCAvIDhweCA4cHggcmVwZWF0XCIpXG59O1xuXG52YXIgdGhlbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF9saWdodFtcImRlZmF1bHRcIl0pLCBkYXJrKTtcblxudmFyIF9kZWZhdWx0ID0gdGhlbWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbi8qKlxuICogIyBNZWFzdXJlc1xuICogU3BhY2luZyBpcyB1c2VkIGZvciBtYXJnaW4gb24gYW55IGVsZW1lbnQgb3IgcGFkZGluZyBvbiBjb250YWluZXJzLCBidXQgY2FuIGJlIHVzZWQgZm9yIG90aGVyXG4gKiBwcm9wZXJ0aWVzIHRoYXQgcG9zaXRpb24gZWxlbWVudHMuXG4gKiAqIExhcmdlciBjb250YWluZXJzLCBzdWNoIGFzIGBDYXJkYCBvciBgTW9kYWxgLCB1c2UgYHNwYWNpbmdgLlxuICogKiBgc3BhY2luZ0hhbGZgIGFuZCBgc3BhY2luZ1F1YXJ0ZXJgIGFyZSBwcmltYXJpbHkgZm9yIGhvcml6b250YWwgc3BhY2luZyBiZXR3ZWVuIHNtYWxsZXIgZWxlbWVudHMuXG4gKiAqIEp1c3QgYmVjYXVzZSBhIGRlc2lyZWQgdmFsdWUgZXF1YWxzIDIwLCAxMCwgb3IgNSBwaXhlbHMsIGRvZXMgbm90IG1lYW4gaXQncyBhcHByb3ByaWF0ZSB0b1xuICogdXNlIHNwYWNpbmcgdmFyaWFibGVzLlxuICpcbiAqIEB2YWx1ZVNldFxuICovXG52YXIgbWVhc3VyZXMgPSB7XG4gIHNwYWNpbmdRdWFydGVyOiAnNXB4JyxcbiAgc3BhY2luZ0hhbGY6ICcxMHB4JyxcbiAgc3BhY2luZzogJzIwcHgnLFxuICBmb250U2l6ZVNtYWxsOiAnMTJweCcsXG4gIGZvbnRTaXplOiAnMTJweCcsXG4gIGZvbnRTaXplTGFyZ2U6ICcxNnB4JyxcbiAgZm9udFNpemVYTGFyZ2U6ICcxOHB4JyxcbiAgZm9udFNpemVYWExhcmdlOiAnMjRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgaW5wdXRIZWlnaHQ6ICcyOHB4JyxcbiAgYm9yZGVyUmFkaXVzOiAnM3B4J1xufTtcbnZhciBfZGVmYXVsdCA9IG1lYXN1cmVzO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG4vKipcbiAqICMgTWVhc3VyZXNcbiAqIFNwYWNpbmcgaXMgdXNlZCBmb3IgbWFyZ2luIG9uIGFueSBlbGVtZW50IG9yIHBhZGRpbmcgb24gY29udGFpbmVycywgYnV0IGNhbiBiZSB1c2VkIGZvciBvdGhlclxuICogcHJvcGVydGllcyB0aGF0IHBvc2l0aW9uIGVsZW1lbnRzLlxuICpcbiAqIEB2YWx1ZVNldFxuICovXG52YXIgbWVhc3VyZXMgPSB7XG4gIHNwYWNpbmdRdWFydGVyOiAnNXB4JyxcbiAgc3BhY2luZ0hhbGY6ICcxMHB4JyxcbiAgc3BhY2luZzogJzIwcHgnLFxuICBmb250U2l6ZVNtYWxsOiAnMTJweCcsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGZvbnRTaXplTGFyZ2U6ICcxNnB4JyxcbiAgZm9udFNpemVYTGFyZ2U6ICcxOHB4JyxcbiAgZm9udFNpemVYWExhcmdlOiAnMjRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgaW5wdXRIZWlnaHQ6ICczMnB4JyxcbiAgYm9yZGVyUmFkaXVzOiAnM3B4J1xufTtcbnZhciBfZGVmYXVsdCA9IG1lYXN1cmVzO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLyoqXG4gKiAjIEJhY2tncm91bmQgQ29sb3JzXG4gKiBCYWNrZ3JvdW5kIGNvbG9ycyBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBiYWNrZ3JvdW5kcyBvZiBoaWdoZXIgbGV2ZWwgc2VjdGlvbnMgJiBjb250YWluZXJzIG9mIGEgVUkuXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xudmFyIGJhY2tncm91bmRDb2xvcnMgPSB7XG4gIGJhY2tncm91bmRDb2xvclBvcHVwOiAnI2ZmZmZmZicsXG4gIGJhY2tncm91bmRDb2xvclNlY3Rpb246ICcjZmZmZmZmJyxcbiAgYmFja2dyb3VuZENvbG9yU2lkZWJhcjogJyNmOGY4ZjgnLFxuICBiYWNrZ3JvdW5kQ29sb3JQYWdlOiAnI2Y5ZjlmOScsXG4gIGJhY2tncm91bmRDb2xvck5hdmlnYXRpb246ICcjZjdmN2Y3JyxcbiAgYmFja2dyb3VuZENvbG9yRmxvYXRpbmc6ICcjMDAwMDAwJyxcbiAgYmFja2dyb3VuZENvbG9yRGlhbG9nOiAnI2ZmZmZmZicsXG4gIGJhY2tncm91bmRDb2xvclNjcmltOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KSdcbn07XG4vKipcbiAqICMgQ29udGVudCBDb2xvcnNcbiAqIENvbnRlbnQgY29sb3JzIHNob3VsZCBiZSB1c2VkIGZvciB0ZXh0LCBpY29ucyBhbmQgZGl2aWRlcnMuIFRoZXkgdXNlIHRyYW5zcGFyZW50IGNvbG9ycywgdG8gZW5zdXJlIG9wdGltYWwgY29udHJhc3Qgb24gZXZlcnkgYmFja2dyb3VuZC5cbiAqXG4gKiBAY29sb3JTZXQgdmVyYm9zZVxuICovXG5cbnZhciBjb250ZW50Q29sb3JzID0ge1xuICBjb250ZW50Q29sb3JBY3RpdmU6ICcjMmMyYzJjJyxcbiAgY29udGVudENvbG9yRGVmYXVsdDogJ3JnYmEoMCwgMCwgMCwgMC42NSknLFxuICBjb250ZW50Q29sb3JNdXRlZDogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICBjb250ZW50Q29sb3JEaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4zKScsXG4gIGNvbnRlbnRDb2xvckludmVydGVkOiAnI2ZmZmZmZidcbn07XG4vKipcbiAqICMgSW50ZXJhY3RpdmUgQ29sb3JzXG4gKiBJbnRlcmFjdGl2ZSBjb2xvcnMgYXJlIHNwZWNpZmljYWxseSBjaG9zZW4gZm9yIGJvcmRlcnMgYW5kIGJhY2tncm91bmRzIG9mIGNvbnRyb2xzIGFuZCBvdGhlciBpbnRlcmFjdGl2ZSBjb250ZW50LlxuICogXCJPdmVybGF5XCIgY29sb3JzIGFyZSBpbnRlbmRlZCB0byBiZSBwbGFjZWQgb3ZlciB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yLCBzdWNoIGFzIGludGVyYWN0aXZlQ29sb3JQcmltYXJ5LlxuICogSWYgdGhlIGRlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBpcyBub3QgdHJhbnNwYXJlbnQsIHRoZSBgYmxlbmRgIG1peGluIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBjb2xvciB0aGF0IGNvbWJpbmVzIHRoZSB0d28uXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgaW50ZXJhY3RpdmVDb2xvcnMgPSB7XG4gIGludGVyYWN0aXZlQ29sb3JQcmltYXJ5OiAnIzAyNjRkNycsXG4gIGludGVyYWN0aXZlQ29sb3JCb3JkZXI6ICdyZ2JhKDAsIDAsIDAsIDAuNCknLFxuICBpbnRlcmFjdGl2ZUNvbG9yQm9yZGVySG92ZXI6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICBpbnRlcmFjdGl2ZUNvbG9yQm9yZGVyRGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMyknLFxuICBpbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheVNlbGVjdGVkOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gIGludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMDMpJyxcbiAgaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlBY3RpdmU6ICdyZ2JhKDAsIDAsIDAsIDAuMDcpJyxcbiAgaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlEcmFnOiAncmdiYSgyLCAxMDAsIDIxNSwgMC4xNiknLFxuICBpbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZDogJyNlZWVlZWUnLFxuICBpbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZERpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjEpJ1xufTtcbi8qKlxuICogIyBOZXV0cmFsIENvbG9yc1xuICogTmV1dHJhbHMgYXJlIHVzZWQgZm9yIGRpdmlkZXJzIGFuZCBhcyBiYWNrdXAgY29sb3JzIHRoYXQgY2FuIHNwYXJpbmdseSBiZSB1c2VkIGZvciBjYXNlcywgd2hlbiB0aGUgb3RoZXIgZGVmaW5lZCBjb2xvcnMgYXJlIG5vdCBlbm91Z2guXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgbmV1dHJhbENvbG9ycyA9IHtcbiAgd2hpdGU6ICcjZmZmZmZmJyxcbiAgbmV1dHJhbDEwMDogJyNmMGYwZjAnLFxuICBuZXV0cmFsMjAwOiAnI2U2ZTZlNicsXG4gIG5ldXRyYWwzMDA6ICcjZGRkZGRkJyxcbiAgbmV1dHJhbDQwMDogJyNjYWNhY2EnLFxuICBuZXV0cmFsNTAwOiAnI2I4YjhiOCcsXG4gIGJsYWNrOiAnIzAwMDAwMCdcbn07XG4vKipcbiAqICMgQWNjZW50IENvbG9yc1xuICogQWNjZW50IGNvbG9ycyBhaWQgYW5kIGNhdGVnb3JpemUgdGhlIHZpc3VhbCBjb21tdW5pY2F0aW9uIG9mIHRoZSBzeXN0ZW0gcmVzcG9uc2UuXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgYWNjZW50Q29sb3JzID0ge1xuICBhY2NlbnRDb2xvclBvc2l0aXZlOiAnIzExODgzMicsXG4gIGFjY2VudENvbG9yV2FybmluZzogJyNjY2E3MDAnLFxuICBhY2NlbnRDb2xvckFsZXJ0OiAnI2NmNzUwYycsXG4gIGFjY2VudENvbG9yTmVnYXRpdmU6ICcjZDQxZjFmJ1xufTtcbi8qKlxuICogIyBTdGF0dXMgQ29sb3JzXG4gKiBTdGF0dXMgY29sb3JzIGFyZSByZXNlcnZlZCBmb3IgY29tbXVuaWNhdGluZyB1cmdlbmN5IGFuZCBzZXZlcml0eSBhc3NvY2lhdGVkIHdpdGggZGF0YSBvYmplY3RzLlxuICpcbiAqIEBjb2xvclNldCB2ZXJib3NlXG4gKi9cblxudmFyIHN0YXR1c0NvbG9ycyA9IHtcbiAgc3RhdHVzQ29sb3JJbmZvOiAnIzYxY2FmYScsXG4gIHN0YXR1c0NvbG9yTm9ybWFsOiAnIzg1ZWI0OCcsXG4gIHN0YXR1c0NvbG9yTG93OiAnI2ZhZTc1ZicsXG4gIHN0YXR1c0NvbG9yTWVkaXVtOiAnI2Y1YjUzZicsXG4gIHN0YXR1c0NvbG9ySGlnaDogJyNlYzRCNDMnLFxuICBzdGF0dXNDb2xvckNyaXRpY2FsOiAnIzljMDMwMCdcbn07XG4vKipcbiAqICMgRWxldmF0aW9uIFNoYWRvd3NcbiAqXG4gKiBAc2hhZG93U2V0XG4gKlxuICovXG5cbnZhciBlbGV2YXRpb25TaGFkb3dzID0ge1xuICBlbWJvc3NTaGFkb3c6ICcgMHB4IDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjA3KSwgMHB4IDBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3KScsXG4gIG92ZXJsYXlTaGFkb3c6ICcwcHggMjZweCAxMDNweCByZ2JhKDAsIDAsIDAsIDAuMTMpLCAwcHggMTFweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4wNiksIDBweCAzcHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wNiknLFxuICBkcmFnU2hhZG93OiAnMHB4IDI2cHggMTAzcHggcmdiYSgwLCAwLCAwLCAwLjEzKSwgMHB4IDExcHggMThweCByZ2JhKDAsIDAsIDAsIDAuMDYpLCAwcHggM3B4IDZweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgbW9kYWxTaGFkb3c6ICcwcHggNTBweCAyMDBweCByZ2JhKDAsIDAsIDAsIDAuMyksIDBweCAyOXB4IDY2cHggcmdiYSgwLCAwLCAwLCAwLjA4KSwgMHB4IDI5cHggNDdweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwcHggNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjAzKSdcbn07XG4vKipcbiAqICMgU3ludGF4IENvbG9yc1xuICogU3ludGF4IGNvbG9ycyBhcmUgdXNlZCBvbmx5IGZvciBjb2RlIGJsb2Nrcy5cbiAqXG4gKiBAY29sb3JTZXQgdmVyYm9zZSBhbHBoYWJldGljYWxcbiAqL1xuXG52YXIgc3ludGF4Q29sb3JzID0ge1xuICBzeW50YXhCbHVlOiAnIzEwN2Q5ZicsXG4gIHN5bnRheEJyb3duOiAnI2EyNjYwNCcsXG4gIHN5bnRheEdyYXk6ICcjNzM3MzczJyxcbiAgc3ludGF4R3JlZW46ICcjNjA3ZDBkJyxcbiAgc3ludGF4T3JhbmdlOiAnI2I3NTgwOCcsXG4gIHN5bnRheFBpbms6ICcjZDAxNWIyJyxcbiAgc3ludGF4UHVycGxlOiAnIzdmNTJmNScsXG4gIHN5bnRheFJlZDogJyNkZjFmNDgnLFxuICBzeW50YXhUZWFsOiAnIzFlODE2Zidcbn07XG5cbnZhciB0aGVtZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjZW50Q29sb3JzKSwgc3RhdHVzQ29sb3JzKSwgZWxldmF0aW9uU2hhZG93cyksIGJhY2tncm91bmRDb2xvcnMpLCBjb250ZW50Q29sb3JzKSwgbmV1dHJhbENvbG9ycyksIGludGVyYWN0aXZlQ29sb3JzKSwgc3ludGF4Q29sb3JzKTtcblxudmFyIF9kZWZhdWx0ID0gdGhlbWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqICMgQmFja2dyb3VuZCBDb2xvcnNcbiAqIEJhY2tncm91bmQgY29sb3JzIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIGJhY2tncm91bmRzIG9mIGhpZ2hlciBsZXZlbCBzZWN0aW9ucyAmIGNvbnRhaW5lcnMgb2YgYSBVSS5cbiAqXG4gKiBAY29sb3JTZXQgdmVyYm9zZVxuICovXG52YXIgYmFja2dyb3VuZENvbG9ycyA9IHtcbiAgYmFja2dyb3VuZENvbG9yUG9wdXA6ICcjMjcyOTJlJyxcbiAgYmFja2dyb3VuZENvbG9yU2VjdGlvbjogJyMxYTFjMjAnLFxuICBiYWNrZ3JvdW5kQ29sb3JTaWRlYmFyOiAnIzBiMGMwZScsXG4gIGJhY2tncm91bmRDb2xvclBhZ2U6ICcjMTExMjE1JyxcbiAgYmFja2dyb3VuZENvbG9yTmF2aWdhdGlvbjogJyMwODA5MGEnLFxuICBiYWNrZ3JvdW5kQ29sb3JGbG9hdGluZzogJyNmZmZmZmYnLFxuICBiYWNrZ3JvdW5kQ29sb3JEaWFsb2c6ICcjMWUyMDI0JyxcbiAgYmFja2dyb3VuZENvbG9yU2NyaW06ICdyZ2JhKDAsIDAsIDAsIDAuOCknXG59O1xuLyoqXG4gKiAjIENvbnRlbnQgQ29sb3JzXG4gKiBDb250ZW50IGNvbG9ycyBzaG91bGQgYmUgdXNlZCBmb3IgdGV4dCwgaWNvbnMgYW5kIGRpdmlkZXJzLiBUaGV5IHVzZSB0cmFuc3BhcmVudCBjb2xvcnMsIHRvIGVuc3VyZSBvcHRpbWFsIGNvbnRyYXN0IG9uIGV2ZXJ5IGJhY2tncm91bmQuXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgY29udGVudENvbG9ycyA9IHtcbiAgY29udGVudENvbG9yQWN0aXZlOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KScsXG4gIGNvbnRlbnRDb2xvckRlZmF1bHQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICBjb250ZW50Q29sb3JNdXRlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gIGNvbnRlbnRDb2xvckRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgY29udGVudENvbG9ySW52ZXJ0ZWQ6ICcjMDAwJ1xufTtcbi8qKlxuICogIyBJbnRlcmFjdGl2ZSBDb2xvcnNcbiAqIEludGVyYWN0aXZlIGNvbG9ycyBhcmUgc3BlY2lmaWNhbGx5IGNob3NlbiBmb3IgYm9yZGVycyBhbmQgYmFja2dyb3VuZHMgb2YgY29udHJvbHMgYW5kIG90aGVyIGludGVyYWN0aXZlIGNvbnRlbnQuXG4gKiBcIk92ZXJsYXlcIiBjb2xvcnMgYXJlIGludGVuZGVkIHRvIGJlIHBsYWNlZCBvdmVyIHRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3IsIHN1Y2ggYXMgaW50ZXJhY3RpdmVDb2xvclByaW1hcnkuXG4gKiBJZiB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIGlzIG5vdCB0cmFuc3BhcmVudCwgdGhlIGBibGVuZGAgbWl4aW4gY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3IGNvbG9yIHRoYXQgY29tYmluZXMgdGhlIHR3by5cbiAqXG4gKiBAY29sb3JTZXQgdmVyYm9zZVxuICovXG5cbnZhciBpbnRlcmFjdGl2ZUNvbG9ycyA9IHtcbiAgaW50ZXJhY3RpdmVDb2xvclByaW1hcnk6ICcjMzk5M0ZGJyxcbiAgaW50ZXJhY3RpdmVDb2xvckJvcmRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gIGludGVyYWN0aXZlQ29sb3JCb3JkZXJIb3ZlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gIGludGVyYWN0aXZlQ29sb3JCb3JkZXJEaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4zMCknLFxuICBpbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheVNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJyxcbiAgaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlIb3ZlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSknLFxuICBpbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC4yKScsXG4gIGludGVyYWN0aXZlQ29sb3JPdmVybGF5RHJhZzogJ3JnYmEoNTcsIDE0NywgMjU1LCAwLjE2KScsXG4gIGludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kOiAnIzI3MmEyZicsXG4gIGludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kRGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpJ1xufTtcbi8qKlxuICogIyBOZXV0cmFsIENvbG9yc1xuICogTmV1dHJhbHMgYXJlIHVzZWQgZm9yIGRpdmlkZXJzIGFuZCBhcyBiYWNrdXAgY29sb3JzIHRoYXQgY2FuIHNwYXJpbmdseSBiZSB1c2VkIGZvciBjYXNlcywgd2hlbiB0aGUgb3RoZXIgZGVmaW5lZCBjb2xvcnMgYXJlIG5vdCBlbm91Z2guXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgbmV1dHJhbENvbG9ycyA9IHtcbiAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgbmV1dHJhbDEwMDogJyMzMzM0M2InLFxuICBuZXV0cmFsMjAwOiAnIzQzNDU0YicsXG4gIG5ldXRyYWwzMDA6ICcjNTA1MTU4JyxcbiAgbmV1dHJhbDQwMDogJyM4MTgyODUnLFxuICBuZXV0cmFsNTAwOiAnI2FjYWNhZCcsXG4gIHdoaXRlOiAnI2ZmZmZmZidcbn07XG4vKipcbiAqICMgQWNjZW50IENvbG9yc1xuICogQWNjZW50IGNvbG9ycyBhaWQgYW5kIGNhdGVnb3JpemUgdGhlIHZpc3VhbCBjb21tdW5pY2F0aW9uIG9mIHRoZSBzeXN0ZW0gcmVzcG9uc2UuXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2VcbiAqL1xuXG52YXIgYWNjZW50Q29sb3JzID0ge1xuICBhY2NlbnRDb2xvclBvc2l0aXZlOiAnIzI3ZjU2MScsXG4gIGFjY2VudENvbG9yV2FybmluZzogJyNmZmQ0NDInLFxuICBhY2NlbnRDb2xvckFsZXJ0OiAnI2ZmOTc1MCcsXG4gIGFjY2VudENvbG9yTmVnYXRpdmU6ICcjZmY1YzVjJ1xufTtcbi8qKlxuICogIyBTdGF0dXMgQ29sb3JzXG4gKiBTdGF0dXMgY29sb3JzIGFyZSByZXNlcnZlZCBmb3IgY29tbXVuaWNhdGluZyB1cmdlbmN5IGFuZCBzZXZlcml0eSBhc3NvY2lhdGVkIHdpdGggZGF0YSBvYmplY3RzLlxuICpcbiAqIEBjb2xvclNldCB2ZXJib3NlXG4gKi9cblxudmFyIHN0YXR1c0NvbG9ycyA9IHtcbiAgc3RhdHVzQ29sb3JJbmZvOiAnIzYxY2FmYScsXG4gIHN0YXR1c0NvbG9yTm9ybWFsOiAnIzg1ZWI0OCcsXG4gIHN0YXR1c0NvbG9yTG93OiAnI2ZhZTc1ZicsXG4gIHN0YXR1c0NvbG9yTWVkaXVtOiAnI2Y1YjUzZicsXG4gIHN0YXR1c0NvbG9ySGlnaDogJyNlYzRCNDMnLFxuICBzdGF0dXNDb2xvckNyaXRpY2FsOiAnI2E4MTkxNidcbn07XG4vKipcbiAqICMgRWxldmF0aW9uIFNoYWRvd3NcbiAqXG4gKiBAc2hhZG93U2V0XG4gKlxuICovXG5cbnZhciBlbGV2YXRpb25TaGFkb3dzID0ge1xuICBlbWJvc3NTaGFkb3c6ICcwcHggMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMzUpLCAwcHggMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMzUpJyxcbiAgb3ZlcmxheVNoYWRvdzogJzBweCAyNnB4IDEwM3B4IHJnYmEoMCwgMCwgMCwgMC42NCksIDBweCAxMXB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjMyKSwgMHB4IDNweCA2cHggcmdiYSgwLCAwLCAwLCAwLjMpJyxcbiAgZHJhZ1NoYWRvdzogJzBweCAyNnB4IDEwM3B4IHJnYmEoMCwgMCwgMCwgMC42NCksIDBweCAxMXB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjMyKSwgMHB4IDNweCA2cHggcmdiYSgwLCAwLCAwLCAwLjMpJyxcbiAgbW9kYWxTaGFkb3c6ICcwcHggNTBweCAyMDBweCAjMDAwMDAwLCAwcHggMjlweCA2NnB4IHJnYmEoMCwgMCwgMCwgMC40MSksIDBweCAxNHB4IDQ3cHggcmdiYSgwLCAwLCAwLCAwLjE3KSwgMHB4IDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xNSknXG59O1xuLyoqXG4gKiAjIFN5bnRheCBDb2xvcnNcbiAqIFN5bnRheCBjb2xvcnMgYXJlIHVzZWQgb25seSBmb3IgY29kZSBibG9ja3MuXG4gKlxuICogQGNvbG9yU2V0IHZlcmJvc2UgYWxwaGFiZXRpY2FsXG4gKi9cblxudmFyIHN5bnRheENvbG9ycyA9IHtcbiAgc3ludGF4Qmx1ZTogJyM2Y2QwZjAnLFxuICBzeW50YXhCcm93bjogJyNmY2NmODcnLFxuICBzeW50YXhHcmF5OiAnIzdkN2Q3ZCcsXG4gIHN5bnRheEdyZWVuOiAnI2NlZjA2YycsXG4gIHN5bnRheE9yYW5nZTogJyNmNzkzM2YnLFxuICBzeW50YXhQaW5rOiAnI2Y0OTRlNScsXG4gIHN5bnRheFB1cnBsZTogJyNhODcwZWYnLFxuICBzeW50YXhSZWQ6ICcjZTg1Yjc5JyxcbiAgc3ludGF4VGVhbDogJyM0NWQ0YmEnXG59O1xuXG52YXIgdGhlbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjY2VudENvbG9ycyksIHN0YXR1c0NvbG9ycyksIGVsZXZhdGlvblNoYWRvd3MpLCBiYWNrZ3JvdW5kQ29sb3JzKSwgY29udGVudENvbG9ycyksIG5ldXRyYWxDb2xvcnMpLCBpbnRlcmFjdGl2ZUNvbG9ycyksIHN5bnRheENvbG9ycyk7XG5cbnZhciBfZGVmYXVsdCA9IHRoZW1lO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xlYXJWYXJpYWJsZXNDYWNoZSA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX21lbW9pemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJsb2Rhc2gvbWVtb2l6ZVwiKSk7XG5cbnZhciBfZ2V0VGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2dldFRoZW1lXCIpKTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qKlxuICogQGZpbGVcbiAqICMjIFRoZW1lIFZhcmlhYmxlc1xuICogQWxsIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIGluIG9uZSB1dGlsIGZvciB1c2UgaW4gc3R5bGVkLWNvbXBvbmVudCB0ZW1wbGF0ZXMuXG4gKiBFYWNoIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb24gd2hpY2ggc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBjYWxsIHdpdGggdGhlIGF2YWlsYWJsZSB0aGVtZSBpbmZvcm1hdGlvbi5cbiAqIElmIHRoZXJlIGlzIG5vIFNwbHVua1RoZW1lUHJvdmlkZXIsIHZhcmlhYmxlcyB3aWxsIGRlZmF1bHQgdG8gUHJpc21hIERhcmsgQ29tZm9ydGFibGUuXG4gKlxuICogVmFyaWFibGVzIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIGlmIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB0aGVtZS5cbiAqIGBgYFxuICogaW1wb3J0IHZhcmlhYmxlcyBmcm9tICdAc3BsdW5rL3RoZW1lcy92YXJpYWJsZXMnO1xuICogaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKiAuLi5cbiAqIGNvbnN0IFByaXNtYVdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICogICAgIGNvbG9yOiAke3ZhcmlhYmxlcy5jb250ZW50Q29sb3JEZWZhdWx0fTtcbiAqIGA7XG4gKiBgYGBcbiAqXG4gKiBWYXJpYWJsZXMgbWF5IGFsc28gYmUgaW1wb3J0ZWQgaW5kaXZpZHVhbGx5LlxuICogYGBgXG4gKiBpbXBvcnQgeyBjb250ZW50Q29sb3JEZWZhdWx0IH0gZnJvbSAnQHNwbHVuay90aGVtZXMvdmFyaWFibGVzJztcbiAqIGltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuICogLi4uXG4gKiBjb25zdCBQcmlzbWFXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAqICAgICBjb2xvcjogJHtjb250ZW50Q29sb3JEZWZhdWx0fTtcbiAqIGA7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBwaWNrYCBpZiBkaWZmZXJlbnQgdmFyaWFibGVzIGFyZSBuZWVkZWQgaW4gZGlmZmVyZW50IHRoZW1lcy5cbiAqIGBgYFxuICogaW1wb3J0IHsgcGljaywgdmFyaWFibGVzIH0gZnJvbSAnQHNwbHVuay90aGVtZXMnO1xuICogaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3QgV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gKiAgICAgY29sb3I6ICR7cGljayh7XG4gKiAgICAgICAgICBlbnRlcnByaXNlOiB2YXJpYWJsZXMudGV4dENvbG9yLFxuICogICAgICAgICAgcHJpc21hOiB2YXJpYWJsZXMuY29udGVudENvbG9yRGVmYXVsdFxuICogICAgIH0pO1xuICogYDtcbiAqIGBgYFxuICogIyMgQ3VzdG9tIFZhcmlhYmxlc1xuICogQ3VzdG9tIHZhcmlhYmxlcyBjYW5ub3QgYmUgYWRkZWQgdG8gdGhpcyBwYWNrYWdlLiBIb3dldmVyLCBgcGljaygpYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2V0cyBvZlxuICogdGhlbWUgdmFyaWFibGVzLiBUaGVzZSBjYW4gYmUgdGhlbiBiZSBpbXBvcnRlZCBzZXBhcmF0ZWx5IGFuZCB1c2VkIGFzIGFib3ZlLlxuICogYGBgXG4gKiBpbXBvcnQgcGljayBmcm9tICdAc3BsdW5rL3RoZW1lcy9waWNrJztcbiAqXG4gKiBleHBvcnQgY29uc3QgbXlWYXJpYWJsZXMgPSB7XG4gKiAgICBvcmFuZ2U6IHBpY2soe1xuICogICAgICAgIGxpZ2h0OiAnI0M4MCcsXG4gKiAgICAgICAgZGFyazogJyNGOTAnLFxuICogICAgfSksXG4gKiAgICBzcGFjZTogcGljayh7XG4gKiAgICAgICAgZW50ZXJwcmlzZTogJzIwcHgnLFxuICogICAgICAgIHByaXNtYToge1xuICogICAgICAgICAgICBjb21mb3J0YWJsZTogJzE2cHgnLFxuICogICAgICAgICAgICBjb21wYWN0OiAnMTJweCcsXG4gKiAgICAgICAgfSxcbiAqICAgIH0pLFxuICogfTtcbiAqIGBgYFxuICovXG52YXIgZ2V0VGhlbWVWYXJpYWJsZSA9IGZ1bmN0aW9uIGdldFRoZW1lVmFyaWFibGUobmFtZSwgc2V0dGluZ3MsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIHRoZW1lID0gKDAsIF91dGlscy5nZXRDdXN0b21pemVkVGhlbWUpKHNldHRpbmdzLCBjdXN0b21pemVyKTtcbiAgdmFyIHJldHVyblZhbHVlID0gdGhlbWVbbmFtZV07XG5cbiAgaWYgKGZhbHNlICYmIHR5cGVvZiByZXR1cm5WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihcIlRoZSB2YXJpYWJsZSAnXCIuY29uY2F0KG5hbWUsIFwiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGhlbWUgJ1wiKS5jb25jYXQodGhlbWUuZmFtaWx5LCBcIiBcIikuY29uY2F0KHRoZW1lLmNvbG9yU2NoZW1lLCBcIiBcIikuY29uY2F0KHRoZW1lLmRlbnNpdHksIFwiJy5cIikpO1xuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxudmFyIGdldFRoZW1lVmFyaWFibGVNZW1vaXplZCA9ICgwLCBfbWVtb2l6ZVtcImRlZmF1bHRcIl0pKGdldFRoZW1lVmFyaWFibGUsIGZ1bmN0aW9uIChuYW1lLCBfcmVmLCBjdXN0b21pemVyKSB7XG4gIHZhciBmYW1pbHkgPSBfcmVmLmZhbWlseSxcbiAgICAgIGNvbG9yU2NoZW1lID0gX3JlZi5jb2xvclNjaGVtZSxcbiAgICAgIGRlbnNpdHkgPSBfcmVmLmRlbnNpdHk7XG4gIHJldHVybiBcIlwiLmNvbmNhdChuYW1lLCBcIi1cIikuY29uY2F0KGZhbWlseSwgXCItXCIpLmNvbmNhdChjb2xvclNjaGVtZSwgXCItXCIpLmNvbmNhdChkZW5zaXR5LCBcIi1cIikuY29uY2F0KCEhY3VzdG9taXplcik7XG59KTtcblxudmFyIGNsZWFyVmFyaWFibGVzQ2FjaGUgPSBmdW5jdGlvbiBjbGVhclZhcmlhYmxlc0NhY2hlKCkge1xuICB2YXIgX2dldFRoZW1lVmFyaWFibGVNZW1vLCBfZ2V0VGhlbWVWYXJpYWJsZU1lbW8yO1xuXG4gIHJldHVybiAoX2dldFRoZW1lVmFyaWFibGVNZW1vID0gKF9nZXRUaGVtZVZhcmlhYmxlTWVtbzIgPSBnZXRUaGVtZVZhcmlhYmxlTWVtb2l6ZWQuY2FjaGUpLmNsZWFyKSA9PT0gbnVsbCB8fCBfZ2V0VGhlbWVWYXJpYWJsZU1lbW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nZXRUaGVtZVZhcmlhYmxlTWVtby5jYWxsKF9nZXRUaGVtZVZhcmlhYmxlTWVtbzIpO1xufTtcbi8qKlxuICogVGhlIGBnZXRgIGhlbHBlciB3aWxsIGluc2VydCBhIHRoZW1lIHZhcmlhYmxlIGludG8gYSBgc3R5bGVkLWNvbXBvbmVudHNgIGNzcyB0ZW1wbGF0ZS5cbiAqIE5vdGUsIHRoaXMgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgaWYgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHRoZW1lLlxuICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgcGlja2AgaWYgZGlmZmVyZW50IHZhcmlhYmxlcyBhcmUgbmVlZGVkIGluIGRpZmZlcmVudCB0aGVtZXMuXG4gKiBgYGBcbiAqIGltcG9ydCBnZXQgZnJvbSAnQHNwbHVuay90aGVtZXMvZ2V0JztcbiAqIC4uLlxuICogY29uc3QgV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gKiAgICAgY29sb3I6ICR7Z2V0KCdjb250ZW50Q29sb3JEZWZhdWx0RGVmYXVsdCcpfTsgLy8gcHJpc21hIHRoZW1lIG9ubHlcbiAqIGA7XG4gKiBgYGBcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGdldCBmcm9tIHRoZSBjdXJyZW50IHRoZW1lIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IFRoZSByZXR1cm5lZCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYHN0eWxlZC1jb21wb25lbnRzYCwgd2hpY2ggcHJvdmlkZXMgdGhlIHRoZW1lIGNvbnRleHQuXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZXhwb3J0cy5jbGVhclZhcmlhYmxlc0NhY2hlID0gY2xlYXJWYXJpYWJsZXNDYWNoZTtcblxudmFyIGdldCA9IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgX3JlZjIkdGhlbWUgPSBfcmVmMi50aGVtZTtcbiAgICBfcmVmMiR0aGVtZSA9IF9yZWYyJHRoZW1lID09PSB2b2lkIDAgPyB7fSA6IF9yZWYyJHRoZW1lO1xuICAgIHZhciBzcGx1bmtUaGVtZVYxID0gX3JlZjIkdGhlbWUuc3BsdW5rVGhlbWVWMTtcblxuICAgIHZhciBfcmVmMyA9IHNwbHVua1RoZW1lVjEgfHwge30sXG4gICAgICAgIGZhbWlseSA9IF9yZWYzLmZhbWlseSxcbiAgICAgICAgY29sb3JTY2hlbWUgPSBfcmVmMy5jb2xvclNjaGVtZSxcbiAgICAgICAgZGVuc2l0eSA9IF9yZWYzLmRlbnNpdHksXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBfcmVmMy5jdXN0b21pemVyO1xuXG4gICAgcmV0dXJuIGdldFRoZW1lVmFyaWFibGVNZW1vaXplZChuYW1lLCB7XG4gICAgICBmYW1pbHk6IGZhbWlseSxcbiAgICAgIGNvbG9yU2NoZW1lOiBjb2xvclNjaGVtZSxcbiAgICAgIGRlbnNpdHk6IGRlbnNpdHlcbiAgICB9LCBjdXN0b21pemVyKTtcbiAgfTtcbn07XG5cbnZhciB2YXJpYWJsZU5hbWVzID0gT2JqZWN0LmtleXMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCAoMCwgX2dldFRoZW1lW1wiZGVmYXVsdFwiXSkoe1xuICBmYW1pbHk6ICdwcmlzbWEnXG59KSksICgwLCBfZ2V0VGhlbWVbXCJkZWZhdWx0XCJdKSh7XG4gIGZhbWlseTogJ2VudGVycHJpc2UnXG59KSkpOyAvLyBlYWNoIHZhcmlhYmxlIGlzIGNvbnZlcnRlZCB0byBhIGdldCgpIGZ1bmN0aW9uLlxuLy8gVFM6IFRoZSBBbGxWYXJpYWJsZXMgdHlwZSBhbGxvd3Mgc2FmZSBhY2Nlc3MgdG8gYWxsIHZhcmlhYmxlcyBzaGFyZWQgYWNyb3NzIHRoZW1lcyxcbi8vIGFuZCB1bnNhZmUgYWNjZXNzIHRvIHZhcmlhYmxlcyBleGNsdXNpdmUgdG8gRW50ZXJwcmlzZSBvciBQcmlzbWFcblxudmFyIHZhcmlhYmxlcyA9IHZhcmlhYmxlTmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnRWYWx1ZSkge1xuICAvLyB1c2luZyBkZWZpbmVQcm9wZXJ0eSBpbnN0ZWFkIG9mIGFjY1tjdXJyZW50VmFsdWVdIHRvIHdvcmsgYXJvdW5kIHJlYWRvbmx5IGlzc3VlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhY2MsIGN1cnJlbnRWYWx1ZSwge1xuICAgIHZhbHVlOiBnZXQoY3VycmVudFZhbHVlKVxuICB9KTtcbiAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbnZhciBfZGVmYXVsdCA9IHZhcmlhYmxlcztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9zdHlsZWRDb21wb25lbnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKipcbiAqIFJlYWN0IGhvb2sgdGhhdCBhbGxvd3MgdGhlbWUgdmFyaWFibGVzIHRvIGJlIGVhc2lseSB1c2VkIHdpdGhpbiBhIFJlYWN0IGZ1bmN0aW9uYWwgY29tcG9uZW50LlxuICogVGhpcyBpbmNsdWRlcyB0aGUgYmFzaWMgY29uZmlndXJhdGlvbiBvZiBgZmFtaWx5YCwgYGNvbG9yU2NoZW1lYCBhbmQgYGRlbnNpdHlgLFxuICogYXMgd2VsbCBhcyBhbGwgdGhlIHNwZWNpZmljIHZhcmlhYmxlcyBhdmFpbGFibGUgaW4gdGhhdCB0aGVtZS5cbiAqXG4gKiBJZiBubyBkYXRhIGBTcGx1bmtUaGVtZVByb3ZpZGVyYCB3YXMgY29uZmlndXJlZCwgdGhlIFByaXNtYSBEYXJrIENvbWZvcnRhYmxlIHRoZW1lIGlzIHJldHVybmVkLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHVzZVNwbHVua1RoZW1lIGZyb20gJ0BzcGx1bmsvdGhlbWVzL3VzZVNwbHVua1RoZW1lJztcbiAqIC4uLlxuICogZXhwb3J0IGZ1bmN0aW9uKCkge1xuICogICAgIGNvbnN0IHsgZGVuc2l0eSwgZm9jdXNDb2xvciB9ID0gdXNlU3BsdW5rVGhlbWUoKTtcbiAqXG4gKiAgICAgY29uc3Qgc3R5bGUgPSB7XG4gKiAgICAgICAgIGNvbG9yOiBmb2N1c0NvbG9yLFxuICogICAgICAgICBwYWRkaW5nOiBkZW5zaXR5ID09PSAnY29tZm9ydGFibGUnID8gJzEwcHgnIDogJzVweCcsXG4gKiAgICAgfVxuICpcbiAqICAgICAuLi5cbiAqXG4gKiAgICAgcmV0dXJuIChcbiAqICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGV9PlxuICogICAgICAgICAgICAgSGVsbG9cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgKVxuICogfVxuICogYGBgXG4gKiBAcHVibGljXG4gKi9cbnZhciB1c2VTcGx1bmtUaGVtZSA9IGZ1bmN0aW9uIHVzZVNwbHVua1RoZW1lKCkge1xuICB2YXIgX3JlZiA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX3N0eWxlZENvbXBvbmVudHMuVGhlbWVDb250ZXh0KSB8fCB7fSxcbiAgICAgIF9yZWYkc3BsdW5rVGhlbWVWID0gX3JlZi5zcGx1bmtUaGVtZVYxLFxuICAgICAgc3BsdW5rVGhlbWVWMSA9IF9yZWYkc3BsdW5rVGhlbWVWID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkc3BsdW5rVGhlbWVWLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJzcGx1bmtUaGVtZVYxXCJdKTtcblxuICB2YXIgZmFtaWx5ID0gc3BsdW5rVGhlbWVWMS5mYW1pbHksXG4gICAgICBjb2xvclNjaGVtZSA9IHNwbHVua1RoZW1lVjEuY29sb3JTY2hlbWUsXG4gICAgICBkZW5zaXR5ID0gc3BsdW5rVGhlbWVWMS5kZW5zaXR5LFxuICAgICAgY3VzdG9taXplciA9IHNwbHVua1RoZW1lVjEuY3VzdG9taXplcjtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksICgwLCBfdXRpbHMuZ2V0Q3VzdG9taXplZFRoZW1lKSh7XG4gICAgZmFtaWx5OiBmYW1pbHksXG4gICAgY29sb3JTY2hlbWU6IGNvbG9yU2NoZW1lLFxuICAgIGRlbnNpdHk6IGRlbnNpdHlcbiAgfSwgY3VzdG9taXplcikpO1xufTtcblxudmFyIF9kZWZhdWx0ID0gdXNlU3BsdW5rVGhlbWU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTExKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBNb3JlVmVydGljYWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuZnVuY3Rpb24gTW9yZVZlcnRpY2FsKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ01vcmUnKSxcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiXG4gIH0sIHByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiwzYzEuNywwLDMsMS4zLDMsM3MtMS4zLDMtMywzcy0zLTEuMy0zLTNTMTQuMywzLDE2LDN6IE0xNiwxM2MxLjcsMCwzLDEuMywzLDNzLTEuMywzLTMsM3MtMy0xLjMtMy0zUzE0LjMsMTMsMTYsMTN6TTE2LDIzYzEuNywwLDMsMS4zLDMsM3MtMS4zLDMtMywzcy0zLTEuMy0zLTNTMTQuMywyMywxNiwyM3pcIlxuICB9KSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NWR0ludGVybmFsXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE0OCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE0ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIEJ1dHRvbkdyb3VwX0J1dHRvbkdyb3VwOyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Cb3hcIlxudmFyIEJveF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIEJveF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihCb3hfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzXCJcbnZhciB0aGVtZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkJ1dHRvbkdyb3VwU3R5bGVzX19TdHlsZWRCb3hcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMTRmczJ4cy0wXCJcbn0pKFtcInBvc2l0aW9uOnJlbGF0aXZlO1tkYXRhLWlubGluZV0gKyAme21hcmdpbi1sZWZ0OlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nSGFsZixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdTbWFsbFxufSkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9CdXR0b25Hcm91cC9CdXR0b25Hcm91cC50c3hcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBmbGV4OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sXG59O1xuXG5mdW5jdGlvbiBCdXR0b25Hcm91cChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNoaWxkcmVuXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIEJ1dHRvbkdyb3VwUHJvcHNCYXNlXG4gIHZhciBjaGlsZHJlbkNsZWFuZWQgPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKS5maWx0ZXIoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pLm1hcChmdW5jdGlvbiAoaXRlbSwgaSwgX3JlZjIpIHtcbiAgICB2YXIgbGVuZ3RoID0gX3JlZjIubGVuZ3RoO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoaXRlbSwge1xuICAgICAgcHJlcGVuZDogaSA+IDAsXG4gICAgICBhcHBlbmQ6IGkgPCBsZW5ndGggLSAxLFxuICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgIHJvbGU6IGl0ZW0ucHJvcHMgJiYgaXRlbS5wcm9wcy5yb2xlIHx8ICdtZW51aXRlbSdcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkQm94LCBfZXh0ZW5kcyh7XG4gICAgaW5saW5lOiB0cnVlLFxuICAgIGZsZXg6IHRydWUsXG4gICAgXCJkYXRhLXRlc3RcIjogXCJidXR0b24tZ3JvdXBcIixcbiAgICByb2xlOiBcIm1lbnViYXJcIlxuICB9LCBvdGhlclByb3BzKSwgY2hpbGRyZW5DbGVhbmVkKTtcbn1cblxuQnV0dG9uR3JvdXAucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQnV0dG9uR3JvdXBfQnV0dG9uR3JvdXAgPSAoQnV0dG9uR3JvdXApO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQnV0dG9uR3JvdXAvaW5kZXgudHNcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG5cbiIsInZhciBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlID0gcmVxdWlyZShcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiKTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcztcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEyNSk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2lkXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTI1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gc3JjX1NlbGVjdF9TZWxlY3Q7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRGl2aWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIE1lbnVfW1wiRGl2aWRlclwiXTsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIZWFkaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gTWVudV9bXCJIZWFkaW5nXCJdOyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk9wdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFNlbGVjdF9PcHRpb247IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImxvZGFzaFwiXG52YXIgZXh0ZXJuYWxfbG9kYXNoXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2ZpbHRlclwiXG52YXIgZmlsdGVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2tleWJvYXJkXCJcbnZhciBrZXlib2FyZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pZFwiXG52YXIgaWRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0Ryb3Bkb3duXCJcbnZhciBEcm9wZG93bl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBEcm9wZG93bl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihEcm9wZG93bl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9MaW5rXCJcbnZhciBMaW5rXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xudmFyIExpbmtfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oTGlua18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9NZW51XCJcbnZhciBNZW51XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9SZXN1bHRzTWVudVwiXG52YXIgUmVzdWx0c01lbnVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG52YXIgUmVzdWx0c01lbnVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oUmVzdWx0c01lbnVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvVGV4dFwiXG52YXIgVGV4dF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbnZhciBUZXh0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFRleHRfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9DYXJldERvd24udHN4XG52YXIgQ2FyZXREb3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1NlbGVjdC9PcHRpb24udHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgLyoqIEBwcml2YXRlICovXG4gIGFjdGl2ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGRlc2NyaXB0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGRlc2NyaXB0aW9uUG9zaXRpb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsncmlnaHQnLCAnYm90dG9tJ10pLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaGlkZGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBpY29uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBsYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG1hdGNoUmFuZ2VzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheU9mKGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnNoYXBlKHtcbiAgICBzdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgZW5kOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSksXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIG9uQ2xpY2s6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIHNlbGVjdGVkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICB0cnVuY2F0ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgdmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xdKS5pc1JlcXVpcmVkXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgYWN0aXZlOiBmYWxzZSxcbiAgZGVzY3JpcHRpb25Qb3NpdGlvbjogJ2JvdHRvbScsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgc2VsZWN0ZWQ6IGZhbHNlLFxuICB0cnVuY2F0ZTogZmFsc2Vcbn07XG5cbi8qKlxuICogQW4gb3B0aW9uIHdpdGhpbiBhIGBTZWxlY3RgLiBUaGlzIGluaGVyaXRzIGZyb21cbiAqIFtQdXJlQ29tcG9uZW50XShodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RwdXJlY29tcG9uZW50KVxuICogc28gYW55IGVsZW1lbnRzIHBhc3NlZCB0byBpdCBtdXN0IGFsc28gYmUgcHVyZS5cbiAqL1xudmFyIE9wdGlvbl9PcHRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhPcHRpb24sIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKE9wdGlvbik7XG5cbiAgZnVuY3Rpb24gT3B0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPcHRpb24pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMub25DbGljayxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzLnZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQ7XG5cbiAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNsaWNrKGUsIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIF90aGlzLmMgPSBjO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE9wdGlvbiwgW3tcbiAgICBrZXk6IFwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKCkge1xuICAgICAgdmFyIF90aGlzJGM7XG5cbiAgICAgIChfdGhpcyRjID0gdGhpcy5jKSA9PT0gbnVsbCB8fCBfdGhpcyRjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGxhY2UgZm9jdXMgb24gdGhlIGJ1dHRvbi5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzJGMyO1xuXG4gICAgICAoX3RoaXMkYzIgPSB0aGlzLmMpID09PSBudWxsIHx8IF90aGlzJGMyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjMi5mb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChNZW51X1tcIkl0ZW1cIl0sIF9leHRlbmRzKHtcbiAgICAgICAgXCJkYXRhLXRlc3QtdmFsdWVcIjogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJvcHRpb25cIixcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZU1vdW50LFxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZS50b1N0cmluZygpXG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKHRoaXMucHJvcHMsIFsnbGFiZWwnLCAndmFsdWUnXSksIHtcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IHRoaXMucHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCJcbiAgICAgIH0pLCB0aGlzLnByb3BzLmNoaWxkcmVuIHx8IHRoaXMucHJvcHMubGFiZWwpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBPcHRpb247XG59KGV4dGVybmFsX3JlYWN0X1tcIlB1cmVDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoT3B0aW9uX09wdGlvbiwgXCJwcm9wVHlwZXNcIiwgcHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KE9wdGlvbl9PcHRpb24sIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFNlbGVjdF9PcHRpb24gPSAoT3B0aW9uX09wdGlvbik7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQnV0dG9uXCJcbnZhciBCdXR0b25fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgQnV0dG9uX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEJ1dHRvbl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TZWxlY3QvU2VsZWN0U3R5bGVzLnRzXG5cblxuXG52YXIgU3R5bGVkQnV0dG9uVG9nZ2xlID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKEJ1dHRvbl9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTZWxlY3RTdHlsZXNfX1N0eWxlZEJ1dHRvblRvZ2dsZVwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xY24xOW40LTBcIlxufSkoW1wiZmxleC1ncm93OjA7XCJdKTtcbnZhciBTdHlsZWRGaWx0ZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTZWxlY3RTdHlsZXNfX1N0eWxlZEZpbHRlclwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xY24xOW40LTFcIlxufSkoW1wicGFkZGluZzo4cHg7bWluLXdpZHRoOjE2MHB4O1wiLCBcIlwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6Zmlyc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpcIiwgXCI7fSY6bGFzdC1jaGlsZHtib3JkZXItdG9wOlwiLCBcIjt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlciwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXIpLFxuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6Zmlyc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgXCIsIFwiO30mOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcDoxcHggc29saWQgXCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubmV1dHJhbDIwMCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5uZXV0cmFsMjAwKVxufSkpO1xudmFyIFN0eWxlZExpbmtJY29uID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLnNwYW4ud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlNlbGVjdFN0eWxlc19fU3R5bGVkTGlua0ljb25cIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWNuMTluNC0yXCJcbn0pKFtcInBhZGRpbmctcmlnaHQ6MnB4O1wiXSk7XG52YXIgU3R5bGVkTGlua0NhcmV0ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLnNwYW4ud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlNlbGVjdFN0eWxlc19fU3R5bGVkTGlua0NhcmV0XCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFjbjE5bjQtM1wiXG59KShbXCJwYWRkaW5nLWxlZnQ6MnB4O1wiXSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1NlbGVjdC9TZWxlY3QudHN4XG5mdW5jdGlvbiBTZWxlY3RfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBTZWxlY3RfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IFNlbGVjdF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gU2VsZWN0X3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IFNlbGVjdF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIFNlbGVjdF9leHRlbmRzKCkgeyBTZWxlY3RfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBTZWxlY3RfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIFNlbGVjdF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIFNlbGVjdF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gU2VsZWN0X2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgU2VsZWN0X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBTZWxlY3RfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gU2VsZWN0X2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIFNlbGVjdF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gU2VsZWN0X3NldFByb3RvdHlwZU9mKG8sIHApIHsgU2VsZWN0X3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBTZWxlY3Rfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gU2VsZWN0X2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBTZWxlY3RfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gU2VsZWN0X2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBTZWxlY3RfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIFNlbGVjdF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gU2VsZWN0X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoU2VsZWN0X3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gU2VsZWN0X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBTZWxlY3RfZ2V0UHJvdG90eXBlT2YobykgeyBTZWxlY3RfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gU2VsZWN0X2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBTZWxlY3RfcHJvcFR5cGVzID0ge1xuICBhbmltYXRlTG9hZGluZzogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgYXBwZWFyYW5jZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydkZWZhdWx0JywgJ2xpbmsnLCAncHJpbWFyeScsICdwaWxsJywgJ3RvZ2dsZScsICdmbGF0J10pLFxuICBhcHBlbmQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBkZWZhdWx0UGxhY2VtZW50OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2Fib3ZlJywgJ2JlbG93JywgJ3ZlcnRpY2FsJ10pLFxuICBkZWZhdWx0VmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xdKSxcbiAgZGVzY3JpYmVkQnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGVycm9yOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBmaWx0ZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFtmYWxzZSwgdHJ1ZSwgJ2NvbnRyb2xsZWQnXSksXG4gIGZvb3Rlck1lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGlubGluZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaW5wdXRJZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBpc0xvYWRpbmdPcHRpb25zOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBsYWJlbGxlZEJ5OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGxhYmVsVGV4dDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBsb2FkaW5nTWVzc2FnZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgbWVudVN0eWxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3QsXG4gIG5hbWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgbm9PcHRpb25zTWVzc2FnZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgb25DaGFuZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uQ2xvc2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uRmlsdGVyQ2hhbmdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbk9wZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uU2Nyb2xsQm90dG9tOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBwbGFjZWhvbGRlcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBwcmVmaXhMYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBwcmVwZW5kOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBzdWZmaXhMYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICB2YWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlciwgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbF0pXG59O1xudmFyIFNlbGVjdF9kZWZhdWx0UHJvcHMgPSB7XG4gIGFuaW1hdGVMb2FkaW5nOiBmYWxzZSxcbiAgYXBwZWFyYW5jZTogJ3RvZ2dsZScsXG4gIGFwcGVuZDogZmFsc2UsXG4gIGNoaWxkcmVuOiBbXSxcbiAgZGVmYXVsdFBsYWNlbWVudDogJ3ZlcnRpY2FsJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBlcnJvcjogZmFsc2UsXG4gIGZpbHRlcjogZmFsc2UsXG4gIGlubGluZTogdHJ1ZSxcbiAgaXNMb2FkaW5nT3B0aW9uczogZmFsc2UsXG4gIG1lbnVTdHlsZToge30sXG4gIG5vT3B0aW9uc01lc3NhZ2U6IE9iamVjdChpMThuX1tcIl9cIl0pKCdObyBtYXRjaGVzJyksXG4gIHBsYWNlaG9sZGVyOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnU2VsZWN0Li4uJyksXG4gIHByZXBlbmQ6IGZhbHNlXG59O1xuXG52YXIgU2VsZWN0X1NlbGVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBTZWxlY3RfaW5oZXJpdHMoU2VsZWN0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gU2VsZWN0X2NyZWF0ZVN1cGVyKFNlbGVjdCk7XG5cbiAgU2VsZWN0X2NyZWF0ZUNsYXNzKFNlbGVjdCwgbnVsbCwgW3tcbiAgICBrZXk6IFwidmFsaWRhdGVBcHBlYXJhbmNlXCIsXG4gICAgLy8gQGRvY3MtcHJvcHMtdHlwZSBTZWxlY3RQcm9wc0Jhc2VcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGVBcHBlYXJhbmNlKHByb3BzKSB7XG4gICAgICBpZiAoZmFsc2UpIHt9XG4gICAgfVxuICB9XSk7XG5cbiAgZnVuY3Rpb24gU2VsZWN0KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgU2VsZWN0X2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlbGVjdCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhY3RpdmVJdGVtSWRcIiwgdm9pZCAwKTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhY3RpdmVWYWx1ZVwiLCB2b2lkIDApO1xuXG4gICAgU2VsZWN0X2RlZmluZVByb3BlcnR5KFNlbGVjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF2YWlsYWJsZU9wdGlvbkNvdW50XCIsIHZvaWQgMCk7XG5cbiAgICBTZWxlY3RfZGVmaW5lUHJvcGVydHkoU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udHJvbGxlZEV4dGVybmFsbHlcIiwgdm9pZCAwKTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkcm9wZG93blwiLCBudWxsKTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtZW51SWRcIiwgdm9pZCAwKTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWxlY3RlZE9wdGlvblwiLCBudWxsKTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWxlY3RlZE9wdGlvbkluZGV4XCIsIHZvaWQgMCk7XG5cbiAgICBTZWxlY3RfZGVmaW5lUHJvcGVydHkoU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQWN0aXZlT3B0aW9uTW91bnRcIiwgZnVuY3Rpb24gKGNvbXApIHtcbiAgICAgIGlmIChjb21wKSB7XG4gICAgICAgIGNvbXAuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgU2VsZWN0X2RlZmluZVByb3BlcnR5KFNlbGVjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVRleHRLZXlEb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpID09PSAndGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qoa2V5Ym9hcmRfW1wia2V5Y29kZVwiXSkoZS5uYXRpdmVFdmVudCkgPT09ICdkb3duJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgdmFyIF9zdGF0ZSRhY3RpdmVJbmRleDtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3RpdmVJbmRleDogTWF0aC5taW4oKChfc3RhdGUkYWN0aXZlSW5kZXggPSBzdGF0ZS5hY3RpdmVJbmRleCkgIT09IG51bGwgJiYgX3N0YXRlJGFjdGl2ZUluZGV4ICE9PSB2b2lkIDAgPyBfc3RhdGUkYWN0aXZlSW5kZXggOiAwKSArIDEsIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50IC0gMSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KSA9PT0gJ3VwJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgdmFyIF9zdGF0ZSRhY3RpdmVJbmRleDI7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZlSW5kZXg6IE1hdGgubWF4KCgoX3N0YXRlJGFjdGl2ZUluZGV4MiA9IHN0YXRlLmFjdGl2ZUluZGV4KSAhPT0gbnVsbCAmJiBfc3RhdGUkYWN0aXZlSW5kZXgyICE9PSB2b2lkIDAgPyBfc3RhdGUkYWN0aXZlSW5kZXgyIDogMCkgLSAxLCAwKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpID09PSAnZW50ZXInICYmIF90aGlzLmFjdGl2ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIF90aGlzLnNlbGVjdFZhbHVlKGUsIHtcbiAgICAgICAgICB2YWx1ZTogX3RoaXMuYWN0aXZlVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTZWxlY3RfZGVmaW5lUHJvcGVydHkoU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVGV4dENoYW5nZVwiLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRmlsdGVyQywgX3RoaXMkcHJvcHM7XG5cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgICAgZmlsdGVyS2V5d29yZDogZGF0YS52YWx1ZSxcbiAgICAgICAgb3BlbjogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkZpbHRlckMgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25GaWx0ZXJDaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRmlsdGVyQyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25GaWx0ZXJDLmNhbGwoX3RoaXMkcHJvcHMsIGUsIHtcbiAgICAgICAga2V5d29yZDogZGF0YS52YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBTZWxlY3RfZGVmaW5lUHJvcGVydHkoU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVGV4dEtleVVwXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpID09PSAndGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTZWxlY3RfZGVmaW5lUHJvcGVydHkoU2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlU2VsZWN0ZWRJdGVtTW91bnRcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIF90aGlzLnNlbGVjdGVkT3B0aW9uID0gYztcbiAgICB9KTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJdGVtQ2xpY2tcIiwgZnVuY3Rpb24gKGUsIF9yZWYpIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWU7XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUub3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNlbGVjdFZhbHVlKGUsIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVSZXF1ZXN0T3BlblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wZW46IHRydWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uT3BlbiwgX3RoaXMkcHJvcHMyO1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvbk9wZW4gPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uT3BlbikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25PcGVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbk9wZW4uY2FsbChfdGhpcyRwcm9wczIpO1xuXG4gICAgICAgIGlmIChfdGhpcy5zZWxlY3RlZE9wdGlvbiAmJiAhX3RoaXMucHJvcHMuZmlsdGVyKSB7XG4gICAgICAgICAgX3RoaXMuc2VsZWN0ZWRPcHRpb24uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcm9wcy5maWx0ZXIpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmVJbmRleDogX3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVSZXF1ZXN0Q2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgYWN0aXZlSW5kZXg6IDBcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2xvc2UsIF90aGlzJHByb3BzMztcblxuICAgICAgICAoX3RoaXMkcHJvcHMkb25DbG9zZSA9IChfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcykub25DbG9zZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbG9zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DbG9zZS5jYWxsKF90aGlzJHByb3BzMyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIFNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTY3JvbGxCb3R0b21cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnN0YXRlLm9wZW4gJiYgIV90aGlzLnByb3BzLmlzTG9hZGluZ09wdGlvbnMpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uU2Nyb2xsQiwgX3RoaXMkcHJvcHM0O1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblNjcm9sbEIgPSAoX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMpLm9uU2Nyb2xsQm90dG9tKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblNjcm9sbEIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uU2Nyb2xsQi5jYWxsKF90aGlzJHByb3BzNCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfdGhpcy5jb250cm9sbGVkRXh0ZXJuYWxseSA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaGFzXCJdKShwcm9wcywgJ3ZhbHVlJyk7XG4gICAgX3RoaXMuYXZhaWxhYmxlT3B0aW9uQ291bnQgPSAwO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgIGZpbHRlcktleXdvcmQ6IF90aGlzLnByb3BzLmZpbHRlciA/ICcnIDogdW5kZWZpbmVkLFxuICAgICAgb3BlbjogZmFsc2UsXG4gICAgICB2YWx1ZTogT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKHByb3BzLCAnZGVmYXVsdFZhbHVlJykgPyBwcm9wcy5kZWZhdWx0VmFsdWUgOiAnJ1xuICAgIH07XG5cbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICBTZWxlY3QudmFsaWRhdGVBcHBlYXJhbmNlKHByb3BzKTtcbiAgICBfdGhpcy5tZW51SWQgPSBPYmplY3QoaWRfW1wiY3JlYXRlRE9NSURcIl0pKCdtZW51Jyk7XG4gICAgX3RoaXMuYWN0aXZlSXRlbUlkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgnYWN0aXZlLWl0ZW0nKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBTZWxlY3RfY3JlYXRlQ2xhc3MoU2VsZWN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICAgIFNlbGVjdC52YWxpZGF0ZUFwcGVhcmFuY2UodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEN1cnJlbnRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDdXJyZW50VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NvbnRyb2xsZWQoKSA/IHRoaXMucHJvcHMudmFsdWUgOiB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZWxlY3RWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZWxlY3RWYWx1ZShlLCBfcmVmMikge1xuICAgICAgdmFyIHZhbHVlID0gX3JlZjIudmFsdWU7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcblxuICAgICAgaWYgKCF0aGlzLmlzQ29udHJvbGxlZCgpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0Q2xvc2UoKTtcbiAgICAgIHRoaXMuZm9jdXMoKTtcblxuICAgICAgaWYgKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkgIT09IHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNoYW5nZSwgX3RoaXMkcHJvcHM1O1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZSA9IChfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzKS5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2hhbmdlLmNhbGwoX3RoaXMkcHJvcHM1LCBlLCB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzQ29udHJvbGxlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NvbnRyb2xsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVkRXh0ZXJuYWxseTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGxhY2UgZm9jdXMgb24gdGhlIHRvZ2dsZS5cbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImZvY3VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzJGRyb3Bkb3duO1xuXG4gICAgICAoX3RoaXMkZHJvcGRvd24gPSB0aGlzLmRyb3Bkb3duKSA9PT0gbnVsbCB8fCBfdGhpcyRkcm9wZG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZHJvcGRvd24uZm9jdXMoKTtcbiAgICB9IC8vIFNldHVwIEZpbHRlclxuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRmlsdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckZpbHRlcigpIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L3RhYmluZGV4LW5vLXBvc2l0aXZlICovXG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5maWx0ZXIgPyAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkRmlsdGVyLCB7XG4gICAgICAgIGtleTogXCJmaWx0ZXJcIlxuICAgICAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRleHRfZGVmYXVsdC5hLCB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLmZpbHRlcktleXdvcmQsXG4gICAgICAgIGFwcGVhcmFuY2U6IFwic2VhcmNoXCIsXG4gICAgICAgIGF1dG9DYXBpdGFsaXplOiBcIm9mZlwiLFxuICAgICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgIGF1dG9Db3JyZWN0OiBcIm9mZlwiLFxuICAgICAgICBzcGVsbENoZWNrOiBmYWxzZSxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlVGV4dENoYW5nZSxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLmhhbmRsZVRleHRLZXlEb3duLFxuICAgICAgICBvbktleVVwOiB0aGlzLmhhbmRsZVRleHRLZXlVcCxcbiAgICAgICAgcGxhY2Vob2xkZXI6IE9iamVjdChpMThuX1tcIl9cIl0pKCdmaWx0ZXInKSxcbiAgICAgICAgdGFiSW5kZXg6IDEsXG4gICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogdGhpcy5hY3RpdmVJdGVtSWQsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBcInRydWVcIixcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IHRoaXMubWVudUlkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0ZpbHRlcicpLFxuICAgICAgICBpbnB1dElkOiB0aGlzLnByb3BzLmlucHV0SWRcbiAgICAgIH0pKSA6IG51bGw7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGpzeC1hMTF5L3RhYmluZGV4LW5vLXBvc2l0aXZlICovXG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXBwZWFyYW5jZSA9IF90aGlzJHByb3BzNi5hcHBlYXJhbmNlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM2LmNoaWxkcmVuLFxuICAgICAgICAgIGRlZmF1bHRQbGFjZW1lbnQgPSBfdGhpcyRwcm9wczYuZGVmYXVsdFBsYWNlbWVudCxcbiAgICAgICAgICBkZXNjcmliZWRCeSA9IF90aGlzJHByb3BzNi5kZXNjcmliZWRCeSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzNi5kaXNhYmxlZCxcbiAgICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHM2LmVsZW1lbnRSZWYsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczYuZXJyb3IsXG4gICAgICAgICAgZmlsdGVyID0gX3RoaXMkcHJvcHM2LmZpbHRlcixcbiAgICAgICAgICBpbnB1dElkID0gX3RoaXMkcHJvcHM2LmlucHV0SWQsXG4gICAgICAgICAgaXNMb2FkaW5nT3B0aW9ucyA9IF90aGlzJHByb3BzNi5pc0xvYWRpbmdPcHRpb25zLFxuICAgICAgICAgIGxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wczYubGFiZWxsZWRCeSxcbiAgICAgICAgICBsYWJlbFRleHQgPSBfdGhpcyRwcm9wczYubGFiZWxUZXh0LFxuICAgICAgICAgIG1lbnVTdHlsZSA9IF90aGlzJHByb3BzNi5tZW51U3R5bGUsXG4gICAgICAgICAgb25TY3JvbGxCb3R0b20gPSBfdGhpcyRwcm9wczYub25TY3JvbGxCb3R0b20sXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczYucGxhY2Vob2xkZXI7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGZpbHRlcktleXdvcmQgPSBfdGhpcyRzdGF0ZS5maWx0ZXJLZXl3b3JkLFxuICAgICAgICAgIG9wZW4gPSBfdGhpcyRzdGF0ZS5vcGVuO1xuICAgICAgdmFyIGxhYmVsO1xuICAgICAgdmFyIGljb247XG4gICAgICB2YXIga2V5d29yZHMgPSBPYmplY3QoZmlsdGVyX1tcInN0cmluZ1RvS2V5d29yZHNcIl0pKGZpbHRlcktleXdvcmQpO1xuXG4gICAgICBmdW5jdGlvbiBpc09wdGlvbihjaGlsZCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKGNoaWxkLCBbJ3Byb3BzJywgJ3ZhbHVlJ10pO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNBbnlWYWx1ZVNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB2YXIgZmlsdGVyZWRDaGlsZHJlbiA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSk7XG4gICAgICB2YXIgY2hpbGRyZW5DbG9uZWQgPSBmaWx0ZXJlZENoaWxkcmVuLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoIWlzT3B0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgLy8gaWdub3JlIEhlYWRpbmdzIGFuZCBEaXZpZGVyc1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGVjdGVkID0gaXRlbS5wcm9wcy52YWx1ZSA9PT0gX3RoaXMyLmdldEN1cnJlbnRWYWx1ZSgpO1xuXG4gICAgICAgIHZhciBzdHJpbmdMYWJlbCA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaGFzXCJdKShpdGVtLnByb3BzLCAnbGFiZWwnKSA/IGl0ZW0ucHJvcHMubGFiZWwgOiBpdGVtLnByb3BzLnZhbHVlOyAvLyBJZiBzZWxlY3RlZCwgc2V0IHVwIHRoZSBsYWJlbCBhbmQgaWNvbiBmb3IgdGhlIHRvZ2dsZSBidXR0b24uXG5cbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgaXNBbnlWYWx1ZVNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBsYWJlbCA9IGl0ZW0ucHJvcHMuY2hpbGRyZW4gfHwgc3RyaW5nTGFiZWw7XG4gICAgICAgICAgaWNvbiA9IGl0ZW0ucHJvcHMuaWNvbjtcblxuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMucHJlZml4TGFiZWwpIHtcbiAgICAgICAgICAgIGxhYmVsID0gXCJcIi5jb25jYXQoX3RoaXMyLnByb3BzLnByZWZpeExhYmVsLCBcIjogXCIpLmNvbmNhdChsYWJlbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5zdWZmaXhMYWJlbCkge1xuICAgICAgICAgICAgbGFiZWwgPSBcIlwiLmNvbmNhdChsYWJlbCwgXCIgXCIpLmNvbmNhdChfdGhpczIucHJvcHMuc3VmZml4TGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLnByb3BzLmhpZGRlbikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShpdGVtLCB7XG4gICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICAgIHJlZjogc2VsZWN0ZWQgPyBfdGhpczIuaGFuZGxlU2VsZWN0ZWRJdGVtTW91bnQgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0gIT09IG51bGwgJiYgaXNPcHRpb24oaXRlbSkgJiYgZmlsdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdChmaWx0ZXJfW1widGVzdFBocmFzZVwiXSkoaXRlbS5wcm9wcy5sYWJlbCwga2V5d29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IG51bGw7IC8vIEtlZXAgYWxsIGhlYWRlcnMgYW5kIG5vbi1pbnRlcmFjdGl2ZSBvcHRpb25zXG4gICAgICB9KS4gLy8gcmVtb3ZlIG51bGwgY2hpbGRyZW4gdHlwZSBtYW51YWxseSAoZmlsdGVyZWQgb3V0IGFib3ZlKVxuICAgICAgbWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHt9O1xuXG4gICAgICAgIGlmIChpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgIHByb3BzLm9uQ2xpY2sgPSBfdGhpczIuaGFuZGxlSXRlbUNsaWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT3B0aW9uKGl0ZW0pICYmIGZpbHRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHByb3BzLm1hdGNoUmFuZ2VzID0gT2JqZWN0KGZpbHRlcl9bXCJrZXl3b3JkTG9jYXRpb25zXCJdKShpdGVtLnByb3BzLmxhYmVsLCBrZXl3b3JkcykgfHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShpdGVtLCBwcm9wcyk7XG4gICAgICB9KTtcbiAgICAgIC8qIEhpZ2hsaWdodCBBY3RpdmUgT3B0aW9uXG4gICAgICAgKiBUaGUgYWN0aXZlIG9wdGlvbiBpcyBzaG93biBhcyBoaWdobGlnaHRlZCB3aGVuIGZvY3VzZWQgaW4gdGhlIGZpbHRlci5cbiAgICAgICAqIFByZXNzaW5nIGVudGVyIHNlbGVjdHMgdGhlIGFjdGl2ZSBvcHRpb24sIGp1c3QgYXMgaWYgdGhlIHVzZXIgY2xpY2tlZCBpdC5cbiAgICAgICAqIFVwIGFuZCBkb3duIGFycm93cyBzaGlmdHMgdGhlIGFjdGl2ZSBvcHRpb24gdG8gdGhlIHByZXZpb3VzIG9yIG5leHQuXG4gICAgICAgKi9cbiAgICAgIC8vIGF2YWlsYWJsZU9wdGlvbkNvdW50IGRlZmluZXMgdGhlIG1heCB2YWx1ZSBmb3IgdGhpcy5zdGF0ZS5hY3RpdmVJbmRleC5cblxuICAgICAgdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCA9IDA7IC8vIE9uIGVudGVyIGtleXByZXNzIGluIHRoZSBmaWx0ZXIsIHRoZSBhY3RpdmVWYWx1ZSBpcyBzZWxlY3RlZC5cblxuICAgICAgdGhpcy5hY3RpdmVWYWx1ZSA9IHVuZGVmaW5lZDsgLy8gT24gbW91bnQsIHNlbGVjdGVkT3B0aW9uSW5kZXggaXMgdXNlZCB0byBoaWdobGlnaHQgc2VsZWN0ZWQgdGhlIGl0ZW0uXG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA9IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIGhpZ2hsaWdodEFjdGl2ZSA9IGZ1bmN0aW9uIGhpZ2hsaWdodEFjdGl2ZShpdGVtKSB7XG4gICAgICAgIGlmICghaXNPcHRpb24oaXRlbSkpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgSGVhZGluZ3MgYW5kIERpdmlkZXJzXG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5wcm9wcy5zZWxlY3RlZCAmJiAhaXRlbS5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgIF90aGlzMi5zZWxlY3RlZE9wdGlvbkluZGV4ID0gX3RoaXMyLmF2YWlsYWJsZU9wdGlvbkNvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdGl2ZSA9IF90aGlzMi5hdmFpbGFibGVPcHRpb25Db3VudCA9PT0gX3RoaXMyLnN0YXRlLmFjdGl2ZUluZGV4O1xuICAgICAgICBfdGhpczIuYXZhaWxhYmxlT3B0aW9uQ291bnQgKz0gMTtcblxuICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpdGVtLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgX3RoaXMyLmFjdGl2ZVZhbHVlID0gaXRlbS5wcm9wcy52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoaXRlbSwge1xuICAgICAgICAgIHJlZjogX3RoaXMyLmhhbmRsZUFjdGl2ZU9wdGlvbk1vdW50LFxuICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBpZDogX3RoaXMyLmFjdGl2ZUl0ZW1JZFxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBhcmlhTGFiZWwgPSBcIlwiLmNvbmNhdChsYWJlbFRleHQgPyBcIlwiLmNvbmNhdChsYWJlbFRleHQsIFwiLCBcIikgOiAnJykuY29uY2F0KGxhYmVsIHx8IHBsYWNlaG9sZGVyKTtcbiAgICAgIHZhciBmaW5hbENoaWxkcmVuID0gZmlsdGVyID8gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0ubWFwKGNoaWxkcmVuQ2xvbmVkLCBoaWdobGlnaHRBY3RpdmUpIDogZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZHJlbkNsb25lZCk7IC8vIGVuc3VyZSBjb25zaXN0ZW50IGtleXNcblxuICAgICAgdmFyIHRvZ2dsZSA9IGFwcGVhcmFuY2UgPT09ICdsaW5rJyA/IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChMaW5rX2RlZmF1bHQuYSwgU2VsZWN0X2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogZGVzY3JpYmVkQnksXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsVGV4dCA/IHVuZGVmaW5lZCA6IGxhYmVsbGVkQnksXG4gICAgICAgIFwiZGF0YS1zZWxlY3QtYXBwZWFyYW5jZVwiOiBcImxpbmtcIixcbiAgICAgICAgXCJkYXRhLXRlc3QtdmFsdWVcIjogdGhpcy5nZXRDdXJyZW50VmFsdWUoKSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJzZWxlY3RcIixcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBlbGVtZW50UmVmOiBlbGVtZW50UmVmXG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKHRoaXMucHJvcHMsIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wia2V5c1wiXSkoU2VsZWN0LnByb3BUeXBlcykpKSwgISFpY29uICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRMaW5rSWNvbiwgbnVsbCwgaWNvbiksIGxhYmVsIHx8IHBsYWNlaG9sZGVyLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTGlua0NhcmV0LCBudWxsLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQ2FyZXREb3duW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB7XG4gICAgICAgIGVudGVycHJpc2VTaXplOiAwLjUsXG4gICAgICAgIHByaXNtYVNpemU6IFwic21hbGxcIlxuICAgICAgfSkpKSA6IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRCdXR0b25Ub2dnbGUsIFNlbGVjdF9leHRlbmRzKHtcbiAgICAgICAgYXBwZWFyYW5jZTogdGhpcy5wcm9wcy5hcHBlYXJhbmNlIC8vIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogZGVzY3JpYmVkQnksXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsVGV4dCA/IHVuZGVmaW5lZCA6IGxhYmVsbGVkQnksXG4gICAgICAgIFwiZGF0YS1zZWxlY3QtYXBwZWFyYW5jZVwiOiB0aGlzLnByb3BzLmFwcGVhcmFuY2UsXG4gICAgICAgIFwiZGF0YS10ZXN0LXZhbHVlXCI6IHRoaXMuZ2V0Q3VycmVudFZhbHVlKCksXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwic2VsZWN0XCIsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgaXNNZW51OiB0cnVlLFxuICAgICAgICBsYWJlbDogbGFiZWwgfHwgcGxhY2Vob2xkZXIgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2VwdCBpbmNvbnNpc3RlbmN5IHdpdGggQnV0dG9uXG4gICAgICAgICxcbiAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrXG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKHRoaXMucHJvcHMsIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJrZXlzXCJdKShTZWxlY3QucHJvcFR5cGVzKSksIFsnb25DbGljayddKSksIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wicGlja1wiXSkodGhpcy5wcm9wcywgJ2FwcGVuZCcsICdkaXNhYmxlZCcsICdlbGVtZW50UmVmJywgJ2lubGluZScsICdwcmVwZW5kJykpKTtcblxuICAgICAgdmFyIGNyZWF0ZU1lbnUgPSBmdW5jdGlvbiBjcmVhdGVNZW51KF9yZWYzKSB7XG4gICAgICAgIHZhciBhbmNob3JXaWR0aCA9IF9yZWYzLmFuY2hvcldpZHRoLFxuICAgICAgICAgICAgbWF4SGVpZ2h0ID0gX3JlZjMubWF4SGVpZ2h0LFxuICAgICAgICAgICAgcGxhY2VtZW50ID0gX3JlZjMucGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFJlc3VsdHNNZW51X2RlZmF1bHQuYSwgU2VsZWN0X2V4dGVuZHMoe1xuICAgICAgICAgIGNoaWxkcmVuU3RhcnQ6IF90aGlzMi5yZW5kZXJGaWx0ZXIoKSxcbiAgICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCAhPT0gbnVsbCAmJiBtYXhIZWlnaHQgIT09IHZvaWQgMCA/IG1heEhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvblNjcm9sbEJvdHRvbTogb25TY3JvbGxCb3R0b20gPyBfdGhpczIuaGFuZGxlU2Nyb2xsQm90dG9tIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50ICE9PSBudWxsICYmIHBsYWNlbWVudCAhPT0gdm9pZCAwID8gcGxhY2VtZW50IDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nT3B0aW9ucyxcbiAgICAgICAgICBpZDogX3RoaXMyLm1lbnVJZFxuICAgICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcInBpY2tcIl0pKF90aGlzMi5wcm9wcywgJ25vT3B0aW9uc01lc3NhZ2UnLCAnZm9vdGVyTWVzc2FnZScsICdhbmltYXRlTG9hZGluZycsICdsb2FkaW5nTWVzc2FnZScpLCB7XG4gICAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgbWluV2lkdGg6IGFuY2hvcldpZHRoICE9PSBudWxsICYmIGFuY2hvcldpZHRoICE9PSB2b2lkIDAgPyBhbmNob3JXaWR0aCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBNYXRoLm1heChhbmNob3JXaWR0aCAhPT0gbnVsbCAmJiBhbmNob3JXaWR0aCAhPT0gdm9pZCAwID8gYW5jaG9yV2lkdGggOiAwLCAzMDApXG4gICAgICAgICAgfSwgbWVudVN0eWxlKVxuICAgICAgICB9KSwgZmluYWxDaGlsZHJlbik7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KERyb3Bkb3duX2RlZmF1bHQuYSwge1xuICAgICAgICB0b2dnbGU6IHRvZ2dsZSxcbiAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgcmV0YWluRm9jdXM6ICFmaWx0ZXIsXG4gICAgICAgIHRha2VGb2N1czogIWlzQW55VmFsdWVTZWxlY3RlZCB8fCAhIWZpbHRlcixcbiAgICAgICAgY2xvc2VSZWFzb25zOiBbJ2NsaWNrQXdheScsICdlc2NhcGVLZXknLCAnb2ZmU2NyZWVuJywgJ3RvZ2dsZUNsaWNrJ10sXG4gICAgICAgIG9uUmVxdWVzdENsb3NlOiB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSxcbiAgICAgICAgb25SZXF1ZXN0T3BlbjogdGhpcy5oYW5kbGVSZXF1ZXN0T3BlbixcbiAgICAgICAgZGVmYXVsdFBsYWNlbWVudDogZmlsdGVyID8gZGVmYXVsdFBsYWNlbWVudCA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FuQ292ZXJBbmNob3I6IHdpbmRvdy5pbm5lckhlaWdodCA8IDUwMCxcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoYykge1xuICAgICAgICAgIF90aGlzMi5kcm9wZG93biA9IGM7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0SWQ6IGlucHV0SWRcbiAgICAgIH0sIGNyZWF0ZU1lbnUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTZWxlY3Q7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cblNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfU2VsZWN0LCBcInByb3BUeXBlc1wiLCBTZWxlY3RfcHJvcFR5cGVzKTtcblxuU2VsZWN0X2RlZmluZVByb3BlcnR5KFNlbGVjdF9TZWxlY3QsIFwiZGVmYXVsdFByb3BzXCIsIFNlbGVjdF9kZWZhdWx0UHJvcHMpO1xuXG5TZWxlY3RfZGVmaW5lUHJvcGVydHkoU2VsZWN0X1NlbGVjdCwgXCJPcHRpb25cIiwgU2VsZWN0X09wdGlvbik7XG5cblNlbGVjdF9kZWZpbmVQcm9wZXJ0eShTZWxlY3RfU2VsZWN0LCBcIkRpdmlkZXJcIiwgTWVudV9bXCJEaXZpZGVyXCJdKTtcblxuU2VsZWN0X2RlZmluZVByb3BlcnR5KFNlbGVjdF9TZWxlY3QsIFwiSGVhZGluZ1wiLCBNZW51X1tcIkhlYWRpbmdcIl0pO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfU2VsZWN0X1NlbGVjdCA9IChTZWxlY3RfU2VsZWN0KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU2VsZWN0L2luZGV4LnRzXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvTWVudVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0Ryb3Bkb3duXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQnV0dG9uXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9maWx0ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9UZXh0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9MaW5rXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvUmVzdWx0c01lbnVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENhcmV0RG93bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX0NhcmV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX0NhcmV0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19DYXJldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuXG5cbmZ1bmN0aW9uIFByaXNtYTI0KF9yZWYpIHtcbiAgdmFyIG90aGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgX3JlZik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzg4IDkuMDAwMDJDNi44NDYwOSA5LjAwMDAyIDYuNjE3NjggOS41MTIzOSA2LjkwNjkxIDkuODM0MjNMMTEuNDA3OCAxNC44NDI2QzExLjYwNjUgMTUuMDYzNyAxMS45NTMgMTUuMDYzNiAxMi4xNTE3IDE0Ljg0MjVMMTYuNjQ5OSA5LjgzNDFDMTYuOTM5IDkuNTEyMjMgMTYuNzEwNiA5IDE2LjI3NzkgOUw3LjI3ODggOS4wMDAwMlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ2FyZXREb3duKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DYXJldF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWEyNDogUHJpc21hMjRcbiAgfSwgcHJvcHMpKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL0NhcmV0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNWRzsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cbnZhciBTdHlsZWQgPSBzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdmcud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlNWR19fU3R5bGVkXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFiejByeWgtMFwiXG59KShbXCJmbGV4OjAgMCBhdXRvO1wiXSk7XG5mdW5jdGlvbiBTVkcocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgfSwgcHJvcHMpKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJY29uOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTtcbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG52YXIgaW5saW5lU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgZmxleDogJzAgMCBhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZSdcbn07XG52YXIgYmxvY2tTdHlsZXMgPSB7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIG1hcmdpbjogJzAgYXV0bycsXG4gIG92ZXJmbG93OiAndmlzaWJsZSdcbn07XG52YXIgcHJvcFR5cGVzID0ge1xuICBFbnRlcnByaXNlOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIGVudGVycHJpc2VTaXplOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIGVudGVycHJpc2VXaWR0aDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBlbnRlcnByaXNlSGVpZ2h0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIFByaXNtYTI0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcbiAgUHJpc21hMjA6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgUHJpc21hMTY6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgcHJpc21hU2l6ZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSxcbiAgaW5saW5lOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmJvb2wsXG4gIHNjcmVlblJlYWRlclRleHQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgaW5saW5lOiB0cnVlLFxuICBwcmlzbWFTaXplOiAnbWVkaXVtJ1xufTtcbmZ1bmN0aW9uIEljb24oX3JlZikge1xuICB2YXIgRW50ZXJwcmlzZSA9IF9yZWYuRW50ZXJwcmlzZSxcbiAgICAgIFByaXNtYTI0ID0gX3JlZi5QcmlzbWEyNCxcbiAgICAgIFByaXNtYTIwID0gX3JlZi5QcmlzbWEyMCxcbiAgICAgIFByaXNtYTE2ID0gX3JlZi5QcmlzbWExNixcbiAgICAgIHByaXNtYVNpemUgPSBfcmVmLnByaXNtYVNpemUsXG4gICAgICBpbmxpbmUgPSBfcmVmLmlubGluZSxcbiAgICAgIGVudGVycHJpc2VTaXplID0gX3JlZi5lbnRlcnByaXNlU2l6ZSxcbiAgICAgIGVudGVycHJpc2VXaWR0aCA9IF9yZWYuZW50ZXJwcmlzZVdpZHRoLFxuICAgICAgZW50ZXJwcmlzZUhlaWdodCA9IF9yZWYuZW50ZXJwcmlzZUhlaWdodCxcbiAgICAgIHNjcmVlblJlYWRlclRleHQgPSBfcmVmLnNjcmVlblJlYWRlclRleHQsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcIkVudGVycHJpc2VcIiwgXCJQcmlzbWEyNFwiLCBcIlByaXNtYTIwXCIsIFwiUHJpc21hMTZcIiwgXCJwcmlzbWFTaXplXCIsIFwiaW5saW5lXCIsIFwiZW50ZXJwcmlzZVNpemVcIiwgXCJlbnRlcnByaXNlV2lkdGhcIiwgXCJlbnRlcnByaXNlSGVpZ2h0XCIsIFwic2NyZWVuUmVhZGVyVGV4dFwiXSk7XG5cbiAgdmFyIF91c2VTcGx1bmtUaGVtZSA9IE9iamVjdChfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1widXNlU3BsdW5rVGhlbWVcIl0pKCksXG4gICAgICBmYW1pbHkgPSBfdXNlU3BsdW5rVGhlbWUuZmFtaWx5LFxuICAgICAgZGVuc2l0eSA9IF91c2VTcGx1bmtUaGVtZS5kZW5zaXR5OyAvLyBFbnRlcnByaXNlIC0gYWxsIHZhcmlhbnRzXG5cblxuICBpZiAoZmFtaWx5ID09PSAnZW50ZXJwcmlzZScpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoRW50ZXJwcmlzZSwgX2V4dGVuZHMoe1xuICAgICAgc2l6ZTogZW50ZXJwcmlzZVNpemUsXG4gICAgICB3aWR0aDogZW50ZXJwcmlzZVdpZHRoLFxuICAgICAgaGVpZ2h0OiBlbnRlcnByaXNlSGVpZ2h0LFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dDogc2NyZWVuUmVhZGVyVGV4dCB8fCBudWxsLFxuICAgICAgaGlkZURlZmF1bHRUb29sdGlwOiB0cnVlLFxuICAgICAgaW5saW5lOiBpbmxpbmVcbiAgICB9LCBvdGhlclByb3BzKSk7XG4gIH1cblxuICB2YXIgcHJpc21hUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAnYXJpYS1sYWJlbCc6IHNjcmVlblJlYWRlclRleHQsXG4gICAgc3R5bGU6IGlubGluZSA/IGlubGluZVN0eWxlcyA6IGJsb2NrU3R5bGVzXG4gIH0sIG90aGVyUHJvcHMpOyAvLyBQcmlzbWEgLSBzbWFsbCtjb21wYWN0LCBzbWFsbCtjb21mb3J0YWJsZVxuXG5cbiAgaWYgKHByaXNtYVNpemUgPT09ICdzbWFsbCcpIHtcbiAgICB2YXIgU1ZHID0gUHJpc21hMTYgfHwgUHJpc21hMjQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNWRywgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IFwiMTZcIixcbiAgICAgIGhlaWdodDogXCIxNlwiXG4gICAgfSwgcHJpc21hUHJvcHMpKTtcbiAgfSAvLyBQcmlzbWEgLSBtZWRpdW0rY29tcGFjdFxuXG5cbiAgaWYgKGRlbnNpdHkgPT09ICdjb21wYWN0Jykge1xuICAgIHZhciBfU1ZHID0gUHJpc21hMjAgfHwgUHJpc21hMjQ7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWRywgX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IFwiMjBcIixcbiAgICAgIGhlaWdodDogXCIyMFwiXG4gICAgfSwgcHJpc21hUHJvcHMpKTtcbiAgfSAvLyBQcmlzbWEgLSBtZWRpdW0rY29tZm9ydGFibGVcblxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQcmlzbWEyNCwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgaGVpZ2h0OiBcIjI0XCJcbiAgfSwgcHJpc21hUHJvcHMpKTtcbn1cbkljb24ucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuSWNvbi5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2tleWJvYXJkXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25WYWx1ZScpLFxuICAgIGJhc2VBc3NpZ24gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduJyksXG4gICAgYmFzZUFzc2lnbkluID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbkluJyksXG4gICAgY2xvbmVCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUJ1ZmZlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGNvcHlTeW1ib2xzID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHMnKSxcbiAgICBjb3B5U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fY29weVN5bWJvbHNJbicpLFxuICAgIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaW5pdENsb25lQXJyYXkgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVBcnJheScpLFxuICAgIGluaXRDbG9uZUJ5VGFnID0gcmVxdWlyZSgnLi9faW5pdENsb25lQnlUYWcnKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNNYXAgPSByZXF1aXJlKCcuL2lzTWFwJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNTZXQgPSByZXF1aXJlKCcuL2lzU2V0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbnZhciBjbG9uZWFibGVUYWdzID0ge307XG5jbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG5jbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9XG5jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbmNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9XG5jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xvbmVgIGFuZCBgXy5jbG9uZURlZXBgIHdoaWNoIHRyYWNrc1xuICogdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBEZWVwIGNsb25lXG4gKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBhbmQgdGhlaXIgY2xvbmUgY291bnRlcnBhcnRzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2spIHtcbiAgdmFyIHJlc3VsdCxcbiAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICBpc0ZsYXQgPSBiaXRtYXNrICYgQ0xPTkVfRkxBVF9GTEFHLFxuICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICBpZiAoY3VzdG9taXplcikge1xuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcbiAgfVxuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICBpZiAoaXNBcnIpIHtcbiAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc0RlZXApIHtcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xuICAgIH1cbiAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICByZXN1bHQgPSAoaXNGbGF0IHx8IGlzRnVuYykgPyB7fSA6IGluaXRDbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgPyBjb3B5U3ltYm9sc0luKHZhbHVlLCBiYXNlQXNzaWduSW4ocmVzdWx0LCB2YWx1ZSkpXG4gICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQodmFsdWUpO1xuICBpZiAoc3RhY2tlZCkge1xuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG4gIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSkge1xuICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpc01hcCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKVxuICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICBhcnJheUVhY2gocHJvcHMgfHwgdmFsdWUsIGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDbG9uZTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RWFjaDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IG5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7XG4gICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVBcnJheTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVEYXRhVmlldztcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lU3ltYm9sO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlSXNTZXQgPSByZXF1aXJlKCcuL19iYXNlSXNTZXQnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1NldDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcblxuIiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMzYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVJlYWN0UmVmOyB9KTtcbi8qKlxuICogVXBkYXRlcyBhIFJlYWN0IHJlZi4gQ2FsbGJhY2sgcmVmcyBhbmQgb2JqZWN0IHJlZnMgKGZyb20gYGNyZWF0ZVJlZmAgYW5kIGB1c2VSZWZgKSBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSByZWYgLSBUaGUgUmVhY3QgY2FsbGJhY2sgb3Igb2JqZWN0IHJlZi4gQ2FuIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcmVmLlxuICovXG5mdW5jdGlvbiB1cGRhdGVSZWFjdFJlZihyZWYsIGN1cnJlbnQpIHtcbiAgaWYgKHJlZikge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoY3VycmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSBwdWJsaWMgc2lnbmF0dXJlIG9mIHRoaXMgdXRpbCB1c2VzIFJlYWN0LlJlZjxUPiB0byBtaXJyb3IgdGhlIHdheSBSZWFjdCB0eXBlcyByZWZzLlxuICAgICAgLy8gdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIHNpZ25hbCBcIndlIHdpbGwgdGFrZSBjYXJlIG9mIHNldHRpbmcgJ2N1cnJlbnQnLCBub3QgeW91XCIuXG4gICAgICByZWYuY3VycmVudCA9IGN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB9XG4gIH1cbn1cblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMzY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfU2Nyb2xsX1Njcm9sbDsgfSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdFwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBleHRlcm5hbF9yZWFjdF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicHJvcC10eXBlc1wiXG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcHJvcF90eXBlc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwibG9kYXNoXCJcbnZhciBleHRlcm5hbF9sb2Rhc2hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQW5pbWF0aW9uXCJcbnZhciBBbmltYXRpb25fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3QtZXZlbnQtbGlzdGVuZXJcIlxudmFyIGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0X2V2ZW50X2xpc3RlbmVyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1Njcm9sbENvbnRhaW5lckNvbnRleHRcIlxudmFyIFNjcm9sbENvbnRhaW5lckNvbnRleHRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvdXBkYXRlUmVhY3RSZWYudHNcbnZhciB1cGRhdGVSZWFjdFJlZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TY3JvbGwvSW5uZXIudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBkZWZhdWx0TGVmdDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuICBkZWZhdWx0VG9wOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGxlZnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgb25TY3JvbGw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHN0b3BTY3JvbGxQcm9wYWdhdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoW3RydWUsIGZhbHNlLCAnd2luZG93J10pLFxuICB0YWdOYW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIHRvcDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgZGVmYXVsdExlZnQ6IDAsXG4gIGRlZmF1bHRUb3A6IDAsXG4gIHRhZ05hbWU6ICdkaXYnXG59O1xuXG52YXIgSW5uZXJfSW5uZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKElubmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKElubmVyKTtcblxuICBmdW5jdGlvbiBJbm5lcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbm5lcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZWZhdWx0V2luZG93T3ZlcmZsb3dYXCIsICd2aXNpYmxlJyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGVmYXVsdFdpbmRvd092ZXJmbG93WVwiLCAndmlzaWJsZScpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVdoZWVsXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgZWwgPSBfdGhpcy5zdGF0ZS5jb250YWluZXJFbDtcblxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGlmIHRoZSBlbGVtZW50IGlzIHNjcm9sbGFibGUgaW4gYm90aCBkaXJlY3Rpb25zLCBpdCdzIG5vdCBzYWZlIHRvIHN0b3AgcHJvcGFnYXRpb24uXG5cblxuICAgICAgaWYgKGVsLmNsaWVudFdpZHRoICE9PSBlbC5zY3JvbGxXaWR0aCAmJiBlbC5jbGllbnRIZWlnaHQgIT09IGVsLnNjcm9sbEhlaWdodCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbC5jbGllbnRXaWR0aCAhPT0gZWwuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgaWYgKGUuZGVsdGFYIDwgMCAmJiBlbC5zY3JvbGxMZWZ0IDwgTWF0aC5hYnMoZS5kZWx0YVgpKSB7XG4gICAgICAgICAgZWwuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1heExlZnQgPSBlbC5zY3JvbGxXaWR0aCAtIGVsLmNsaWVudFdpZHRoO1xuXG4gICAgICAgIGlmIChlLmRlbHRhWCAmJiBlLmRlbHRhWCArIGVsLnNjcm9sbExlZnQgPiBtYXhMZWZ0KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsTGVmdCA9IG1heExlZnQ7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVsLmNsaWVudEhlaWdodCAhPT0gZWwuc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgIGlmIChlLmRlbHRhWSA8IDAgJiYgZWwuc2Nyb2xsVG9wIDwgTWF0aC5hYnMoZS5kZWx0YVkpKSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWF4VG9wID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0O1xuXG4gICAgICAgIGlmIChlLmRlbHRhWSAmJiBlLmRlbHRhWSArIGVsLnNjcm9sbFRvcCA+IG1heFRvcCkge1xuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IG1heFRvcDtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1vdW50XCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjb250YWluZXJFbDogZWxcbiAgICAgIH0pO1xuXG4gICAgICBPYmplY3QodXBkYXRlUmVhY3RSZWZbXCJhXCIgLyogdXBkYXRlUmVhY3RSZWYgKi9dKShfdGhpcy5wcm9wcy5lbGVtZW50UmVmLCBlbCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91c2VFbnRlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5kZWZhdWx0V2luZG93T3ZlcmZsb3dYID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1g7XG4gICAgICBfdGhpcy5kZWZhdWx0V2luZG93T3ZlcmZsb3dZID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1k7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93WCA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VzZUxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3dYID0gX3RoaXMuZGVmYXVsdFdpbmRvd092ZXJmbG93WDtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3dZID0gX3RoaXMuZGVmYXVsdFdpbmRvd092ZXJmbG93WTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGFpbmVyRWw6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhJbm5lciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuY29udGFpbmVyRWwpIHtcbiAgICAgICAgaWYgKCFwcmV2U3RhdGUuY29udGFpbmVyRWwpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRhaW5lckVsLnNjcm9sbFRvcCA9IHRoaXMucHJvcHMuZGVmYXVsdFRvcDtcbiAgICAgICAgICB0aGlzLnN0YXRlLmNvbnRhaW5lckVsLnNjcm9sbExlZnQgPSB0aGlzLnByb3BzLmRlZmF1bHRMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaXNGaW5pdGVcIl0pKHRoaXMucHJvcHMudG9wKSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGFpbmVyRWwuc2Nyb2xsVG9wID0gdGhpcy5wcm9wcy50b3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc0Zpbml0ZVwiXSkodGhpcy5wcm9wcy5sZWZ0KSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUuY29udGFpbmVyRWwuc2Nyb2xsTGVmdCA9IHRoaXMucHJvcHMubGVmdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHMub25TY3JvbGwsXG4gICAgICAgICAgc3RvcFNjcm9sbFByb3BhZ2F0aW9uID0gX3RoaXMkcHJvcHMuc3RvcFNjcm9sbFByb3BhZ2F0aW9uO1xuICAgICAgdmFyIGNvbnRhaW5lckVsID0gdGhpcy5zdGF0ZS5jb250YWluZXJFbDsgLy8gVFM6IHJlbmRlcmluZyB0aGlzLnByb3BzLnRhZ05hbWUgKGV2ZW4gaWYgbWFkZSBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHMpIGNhdXNlcyBhIFwidG9vIGNvbXBsZXhcIiB0eXBlIGVycm9yXG5cbiAgICAgIHZhciBUYWcgPSB0aGlzLnByb3BzLnRhZ05hbWU7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KGV4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRhZywgX2V4dGVuZHMoe30sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wib21pdFwiXSkodGhpcy5wcm9wcywgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJrZXlzXCJdKShJbm5lci5wcm9wVHlwZXMpKSwge1xuICAgICAgICByZWY6IHRoaXMuaGFuZGxlTW91bnQsXG4gICAgICAgIG9uTW91c2VFbnRlcjogc3RvcFNjcm9sbFByb3BhZ2F0aW9uID09PSAnd2luZG93JyA/IHRoaXMuaGFuZGxlTW91c2VFbnRlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgb25Nb3VzZUxlYXZlOiBzdG9wU2Nyb2xsUHJvcGFnYXRpb24gPT09ICd3aW5kb3cnID8gdGhpcy5oYW5kbGVNb3VzZUxlYXZlIDogdW5kZWZpbmVkLFxuICAgICAgICBvblNjcm9sbDogb25TY3JvbGxcbiAgICAgIH0pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2Nyb2xsQ29udGFpbmVyQ29udGV4dF9bXCJTY3JvbGxDb250YWluZXJQcm92aWRlclwiXSwge1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyRWxcbiAgICAgIH0sIGNoaWxkcmVuKSksIHN0b3BTY3JvbGxQcm9wYWdhdGlvbiA9PT0gdHJ1ZSAmJiBjb250YWluZXJFbCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoZXh0ZXJuYWxfcmVhY3RfZXZlbnRfbGlzdGVuZXJfZGVmYXVsdC5hLCB7XG4gICAgICAgIG9uV2hlZWw6IE9iamVjdChleHRlcm5hbF9yZWFjdF9ldmVudF9saXN0ZW5lcl9bXCJ3aXRoT3B0aW9uc1wiXSkodGhpcy5oYW5kbGVXaGVlbCwge1xuICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICAgIH0pLFxuICAgICAgICB0YXJnZXQ6IGNvbnRhaW5lckVsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIElubmVyO1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoSW5uZXJfSW5uZXIsIFwicHJvcFR5cGVzXCIsIHByb3BUeXBlcyk7XG5cbl9kZWZpbmVQcm9wZXJ0eShJbm5lcl9Jbm5lciwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgU2Nyb2xsX0lubmVyID0gKElubmVyX0lubmVyKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1Njcm9sbC9TY3JvbGxTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRJbm5lciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShTY3JvbGxfSW5uZXIpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTY3JvbGxTdHlsZXNfX1N0eWxlZElubmVyXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTF4c3B0dGYtMFwiXG59KShbXCJcIiwgXCI7b3ZlcmZsb3c6YXV0bztvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW47XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdibG9jaycpKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU2Nyb2xsL1Njcm9sbC50c3hcbmZ1bmN0aW9uIFNjcm9sbF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IFNjcm9sbF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgU2Nyb2xsX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBTY3JvbGxfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gU2Nyb2xsX2V4dGVuZHMoKSB7IFNjcm9sbF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIFNjcm9sbF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gU2Nyb2xsX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gU2Nyb2xsX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBTY3JvbGxfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBTY3JvbGxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIFNjcm9sbF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBTY3JvbGxfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgU2Nyb2xsX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBTY3JvbGxfc2V0UHJvdG90eXBlT2YobywgcCkgeyBTY3JvbGxfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIFNjcm9sbF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBTY3JvbGxfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IFNjcm9sbF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBTY3JvbGxfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IFNjcm9sbF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gU2Nyb2xsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBTY3JvbGxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChTY3JvbGxfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBTY3JvbGxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIFNjcm9sbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBTY3JvbGxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIFNjcm9sbF9nZXRQcm90b3R5cGVPZihvKSB7IFNjcm9sbF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBTY3JvbGxfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gU2Nyb2xsX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cbnZhciBTY3JvbGxfcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgbGVmdDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuICBvblNjcm9sbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25TY3JvbGxDb21wbGV0ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgc3RvcFNjcm9sbFByb3BhZ2F0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbdHJ1ZSwgZmFsc2UsICd3aW5kb3cnXSksXG4gIHRhZ05hbWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgdG9wOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXJcbn07XG52YXIgU2Nyb2xsX2RlZmF1bHRQcm9wcyA9IHtcbiAgc3RvcFNjcm9sbFByb3BhZ2F0aW9uOiBmYWxzZSxcbiAgdGFnTmFtZTogJ2Rpdidcbn07XG5cbnZhciBTY3JvbGxfU2Nyb2xsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIFNjcm9sbF9pbmhlcml0cyhTY3JvbGwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBTY3JvbGxfY3JlYXRlU3VwZXIoU2Nyb2xsKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIFNjcm9sbFByb3BzQmFzZVxuICBmdW5jdGlvbiBTY3JvbGwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBTY3JvbGxfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2Nyb2xsKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgU2Nyb2xsX2RlZmluZVByb3BlcnR5KFNjcm9sbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlc3RcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uU2Nyb2xsQywgX3RoaXMkcHJvcHM7XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvblNjcm9sbEMgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25TY3JvbGxDb21wbGV0ZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25TY3JvbGxDID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvblNjcm9sbEMuY2FsbChfdGhpcyRwcm9wcyk7XG4gICAgfSk7XG5cbiAgICBTY3JvbGxfZGVmaW5lUHJvcGVydHkoU2Nyb2xsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlU2Nyb2xsXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25TY3JvbGwsIF90aGlzJHByb3BzMjtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjdXJyZW50TGVmdDogZS5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgIGN1cnJlbnRUb3A6IGUuY3VycmVudFRhcmdldC5zY3JvbGxUb3BcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25TY3JvbGwgPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uU2Nyb2xsKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblNjcm9sbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25TY3JvbGwuY2FsbChfdGhpcyRwcm9wczIsIGUpO1xuICAgIH0pO1xuXG4gICAgU2Nyb2xsX2RlZmluZVByb3BlcnR5KFNjcm9sbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlcklubmVyXCIsIGZ1bmN0aW9uICh0YXJnZXRTY3JvbGwpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICBlbGVtZW50UmVmID0gX3RoaXMkcHJvcHMzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgbGVmdCA9IF90aGlzJHByb3BzMy5sZWZ0LFxuICAgICAgICAgIHRvcCA9IF90aGlzJHByb3BzMy50b3AsXG4gICAgICAgICAgb25TY3JvbGxDb21wbGV0ZSA9IF90aGlzJHByb3BzMy5vblNjcm9sbENvbXBsZXRlLFxuICAgICAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBbXCJjaGlsZHJlblwiLCBcImVsZW1lbnRSZWZcIiwgXCJsZWZ0XCIsIFwidG9wXCIsIFwib25TY3JvbGxDb21wbGV0ZVwiXSk7XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSW5uZXIsIFNjcm9sbF9leHRlbmRzKHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJzY3JvbGxcIlxuICAgICAgfSwgb3RoZXJQcm9wcywge1xuICAgICAgICBrZXk6IFwiaW5uZXJcIixcbiAgICAgICAgdG9wOiBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImlzRmluaXRlXCJdKSh0b3ApID8gdGFyZ2V0U2Nyb2xsLnRvcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGVmdDogT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc0Zpbml0ZVwiXSkobGVmdCkgPyB0YXJnZXRTY3JvbGwubGVmdCA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWxlbWVudFJlZjogZWxlbWVudFJlZixcbiAgICAgICAgb25TY3JvbGw6IF90aGlzLmhhbmRsZVNjcm9sbFxuICAgICAgfSksIGNoaWxkcmVuKTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY3VycmVudExlZnQ6IDAsXG4gICAgICBjdXJyZW50VG9wOiAwXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBTY3JvbGxfY3JlYXRlQ2xhc3MoU2Nyb2xsLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgbGVmdCA9IF90aGlzJHByb3BzNC5sZWZ0LFxuICAgICAgICAgIHRvcCA9IF90aGlzJHByb3BzNC50b3A7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGN1cnJlbnRMZWZ0ID0gX3RoaXMkc3RhdGUuY3VycmVudExlZnQsXG4gICAgICAgICAgY3VycmVudFRvcCA9IF90aGlzJHN0YXRlLmN1cnJlbnRUb3A7XG4gICAgICB2YXIgdGFyZ2V0U2Nyb2xsID0ge307IC8vIFdoZW4gaXNGaW5pdGUsIHRoZSBwcm9wIGlzIGRlZmluZWQgYW5kIHRoZXJlZm9yZSBhbmltYXRpbmcuXG5cbiAgICAgIGlmIChPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImlzRmluaXRlXCJdKShsZWZ0KSkge1xuICAgICAgICB0YXJnZXRTY3JvbGwubGVmdCA9IGxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRTY3JvbGwubGVmdCA9IGN1cnJlbnRMZWZ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc0Zpbml0ZVwiXSkodG9wKSkge1xuICAgICAgICB0YXJnZXRTY3JvbGwudG9wID0gdG9wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0U2Nyb2xsLnRvcCA9IGN1cnJlbnRUb3A7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQW5pbWF0aW9uX1tcIlNwcmluZ1wiXSwge1xuICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICB0b3A6IDBcbiAgICAgICAgfSxcbiAgICAgICAgdG86IHRhcmdldFNjcm9sbCxcbiAgICAgICAgb25SZXN0OiB0aGlzLmhhbmRsZVJlc3QsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIHByZWNpc2lvbjogMTBcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcy5yZW5kZXJJbm5lcik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFNjcm9sbDtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuU2Nyb2xsX2RlZmluZVByb3BlcnR5KFNjcm9sbF9TY3JvbGwsIFwicHJvcFR5cGVzXCIsIFNjcm9sbF9wcm9wVHlwZXMpO1xuXG5TY3JvbGxfZGVmaW5lUHJvcGVydHkoU2Nyb2xsX1Njcm9sbCwgXCJkZWZhdWx0UHJvcHNcIiwgU2Nyb2xsX2RlZmF1bHRQcm9wcyk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19TY3JvbGxfU2Nyb2xsID0gKFNjcm9sbF9TY3JvbGwpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU2Nyb2xsL2luZGV4LnRzXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1ldmVudC1saXN0ZW5lclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQW5pbWF0aW9uXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9TY3JvbGxDb250YWluZXJDb250ZXh0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE2Nyk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTY3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVHJpYW5nbGVSaWdodFNtYWxsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuZnVuY3Rpb24gVHJpYW5nbGVSaWdodFNtYWxsKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ1RyaWFuZ2xlIFJpZ2h0IFNtYWxsJyksXG4gICAgdmlld0JveDogXCIwIDAgNjc3IDEwNjJcIlxuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTc1IDEwMDFsNDU4LTM5N2MxNy4zMzMtMTggMjktMzEuODMzIDM1LTQxLjUgNi05LjY2NyA5LTIwLjE2NyA5LTMxLjUgMC0xMy4zMzMtMy0yNC44MzMtOS0zNC41LTYtOS42NjctMTcuNjY3LTIyLjUtMzUtMzguNUwxNjcgNDNDMTMyLjMzMyAxNC4zMzMgMTAxIDAgNzMgMCA1MS42NjcgMCAzNC4xNjcgNi41IDIwLjUgMTkuNSA2LjgzMyAzMi41IDAgNDkuNjY3IDAgNzF2OTE4YzAgMjEuMzMzIDYuODMzIDM4LjgzMyAyMC41IDUyLjUgMTMuNjY3IDEzLjY2NyAzMS4xNjcgMjAuNSA1Mi41IDIwLjUgMTMuMzMzIDAgMjcuMzMzLTQuODMzIDQyLTE0LjUgMTQuNjY3LTkuNjY3IDM0LjY2Ny0yNS4xNjcgNjAtNDYuNXpcIlxuICB9KSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NWR0ludGVybmFsXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBfZXhwb3J0TmFtZXMgPSB7XG4gIGdldFNldHRpbmdzRnJvbVRoZW1lZFByb3BzOiB0cnVlLFxuICBnZXRUaGVtZTogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwaWNrOiB0cnVlLFxuICBwaWNrVmFyaWFudDogdHJ1ZSxcbiAgU3BsdW5rVGhlbWVQcm92aWRlcjogdHJ1ZSxcbiAgdXNlU3BsdW5rVGhlbWU6IHRydWUsXG4gIHdpdGhTcGx1bmtUaGVtZTogdHJ1ZSxcbiAgdmFyaWFibGVzOiB0cnVlXG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2V0dGluZ3NGcm9tVGhlbWVkUHJvcHNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dldFNldHRpbmdzRnJvbVRoZW1lZFByb3BzW1wiZGVmYXVsdFwiXTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRUaGVtZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2V0VGhlbWVbXCJkZWZhdWx0XCJdO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1peGluc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWl4aW5zW1wiZGVmYXVsdFwiXTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaWNrXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waWNrW1wiZGVmYXVsdFwiXTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaWNrVmFyaWFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGlja1ZhcmlhbnRbXCJkZWZhdWx0XCJdO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNwbHVua1RoZW1lUHJvdmlkZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1NwbHVua1RoZW1lUHJvdmlkZXJbXCJkZWZhdWx0XCJdO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZVNwbHVua1RoZW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91c2VTcGx1bmtUaGVtZVtcImRlZmF1bHRcIl07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2l0aFNwbHVua1RoZW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF93aXRoU3BsdW5rVGhlbWVbXCJkZWZhdWx0XCJdO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhcmlhYmxlc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFibGVzW1wiZGVmYXVsdFwiXTtcbiAgfVxufSk7XG5cbnZhciBfZ2V0U2V0dGluZ3NGcm9tVGhlbWVkUHJvcHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2dldFNldHRpbmdzRnJvbVRoZW1lZFByb3BzXCIpKTtcblxudmFyIF9nZXRUaGVtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZ2V0VGhlbWVcIikpO1xuXG52YXIgX21peGlucyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWl4aW5zXCIpKTtcblxudmFyIF9waWNrID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9waWNrXCIpKTtcblxudmFyIF9waWNrVmFyaWFudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGlja1ZhcmlhbnRcIikpO1xuXG52YXIgX1NwbHVua1RoZW1lUHJvdmlkZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1NwbHVua1RoZW1lUHJvdmlkZXJcIikpO1xuXG52YXIgX3VzZVNwbHVua1RoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91c2VTcGx1bmtUaGVtZVwiKSk7XG5cbnZhciBfd2l0aFNwbHVua1RoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi93aXRoU3BsdW5rVGhlbWVcIikpO1xuXG52YXIgX3ZhcmlhYmxlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFyaWFibGVzXCIpKTtcblxudmFyIF90eXBlcyA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuXG5PYmplY3Qua2V5cyhfdHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF90eXBlc1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuXG4vKipcbiAqIFRoZSB0aGVtZSBzZXR0aW5ncyBpbiBgcHJvcHMudGhlbWVgIGFyZSBub3QgY29uc2lkZXJlZCBhbiBBUEkgdG8gYWxsb3cgc3VwcG9ydCBmb3IgZmFsbGJhY2tzXG4gKiBhbmQgZm9yd2FyZCBjb21wYXRpYmlsaXR5IGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBgU3BsdW5rVGhlbWVQcm92aWRlcmAuIFVzZSB0aGlzIHV0aWxpdHkgdG9cbiAqIGFjY2VzcyBgZmFtaWx5YCwgYGNvbG9yU2NoZW1lYCwgYW5kIGBkZW5zaXR5YCBmcm9tIGEgY29tcG9uZW50J3MgcHJvcHMuIFRoaXMgaXMgdXNlZnVsXG4gKiBpbiBsaW1pdGVkIG1pZ3JhdGlvbiBzY2VuYXJpb3MuIFVzZSBgd2l0aFNwbHVua1RoZW1lYCBvciBgdXNlU3BsdW5rVGhlbWVgIGluc3RlYWQuXG4gKlxuICogYGBganNcbiAqIGltcG9ydCBnZXRTZXR0aW5nc0Zyb21UaGVtZWRQcm9wcyBmcm9tICdAc3BsdW5rL3RoZW1lcy9nZXRTZXR0aW5nc0Zyb21UaGVtZWRQcm9wcyc7XG4gKiAuLi5cbiAqIGNvbnN0IHsgZmFtaWx5LCBjb2xvclNjaGVtZSB9ID0gZ2V0U2V0dGluZ3NGcm9tVGhlbWVkUHJvcHMocHJvcHMpO1xuICpcbiAqIGBgYFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzIC0gVGhlIHRoZW1lZCBwcm9wcyBwYXNzZWQgdG8gYSBzdHlsZWQtY29tcG9uZW50LlxuICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYHsgZmFtaWx5LCBjb2xvclNjaGVtZSwgZGVuc2l0eSB9YC5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZ2V0U2V0dGluZ3NGcm9tVGhlbWVkUHJvcHMocHJvcHMpIHtcbiAgdmFyIF9wcm9wcyR0aGVtZTtcblxuICAvLyBwcm9wcy50aGVtZSBpcyBzb21ldGltZXMgbnVsbFxuICB2YXIgX3JlZiA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09PSBudWxsIHx8IF9wcm9wcyR0aGVtZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnNwbHVua1RoZW1lVjEpIHx8IHt9LFxuICAgICAgZmFtaWx5ID0gX3JlZi5mYW1pbHksXG4gICAgICBjb2xvclNjaGVtZSA9IF9yZWYuY29sb3JTY2hlbWUsXG4gICAgICBkZW5zaXR5ID0gX3JlZi5kZW5zaXR5O1xuXG4gIHJldHVybiAoMCwgX3V0aWxzLmFkZFRoZW1lRGVmYXVsdHMpKHtcbiAgICBmYW1pbHk6IGZhbWlseSxcbiAgICBjb2xvclNjaGVtZTogY29sb3JTY2hlbWUsXG4gICAgZGVuc2l0eTogZGVuc2l0eVxuICB9KTtcbn1cblxudmFyIF9kZWZhdWx0ID0gZ2V0U2V0dGluZ3NGcm9tVGhlbWVkUHJvcHM7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfbGlnaHQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2xpZ2h0XCIpKTtcblxudmFyIF9kYXJrID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kYXJrXCIpKTtcblxudmFyIF9jb21wYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wYWN0XCIpKTtcblxudmFyIF9jb21mb3J0YWJsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tZm9ydGFibGVcIikpO1xuXG52YXIgX3ByaXNtYUFsaWFzZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ByaXNtYUFsaWFzZXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGVycHJpc2VUaGVtZShfcmVmKSB7XG4gIHZhciBjb2xvclNjaGVtZSA9IF9yZWYuY29sb3JTY2hlbWUsXG4gICAgICBkZW5zaXR5ID0gX3JlZi5kZW5zaXR5O1xuICB2YXIgY3MgPSB7XG4gICAgbGlnaHQ6IF9saWdodFtcImRlZmF1bHRcIl0sXG4gICAgZGFyazogX2RhcmtbXCJkZWZhdWx0XCJdXG4gIH1bY29sb3JTY2hlbWVdO1xuICB2YXIgZCA9IHtcbiAgICBjb21wYWN0OiBfY29tcGFjdFtcImRlZmF1bHRcIl0sXG4gICAgY29tZm9ydGFibGU6IF9jb21mb3J0YWJsZVtcImRlZmF1bHRcIl1cbiAgfVtkZW5zaXR5XTtcbiAgdmFyIHBhID0gKDAsIF9wcmlzbWFBbGlhc2VzW1wiZGVmYXVsdFwiXSkoe1xuICAgIGNvbG9yU2NoZW1lOiBjb2xvclNjaGVtZSxcbiAgICBkZW5zaXR5OiBkZW5zaXR5XG4gIH0pO1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNzKSwgZCksIHBhKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gY3JlYXRlRW50ZXJwcmlzZVRoZW1lO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Rpbnljb2xvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInRpbnljb2xvcjJcIikpO1xuXG52YXIgX2xpZ2h0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9saWdodFwiKSk7XG5cbnZhciBfZGFyayA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGFya1wiKSk7XG5cbnZhciBfY29tcGFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcGFjdFwiKSk7XG5cbnZhciBfY29tZm9ydGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbWZvcnRhYmxlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5mdW5jdGlvbiBjcmVhdGVQcmlzbWFBbGlhc2VzKF9yZWYpIHtcbiAgdmFyIGNvbG9yU2NoZW1lID0gX3JlZi5jb2xvclNjaGVtZSxcbiAgICAgIGRlbnNpdHkgPSBfcmVmLmRlbnNpdHk7XG4gIHZhciBjcyA9IHtcbiAgICBsaWdodDogX2xpZ2h0W1wiZGVmYXVsdFwiXSxcbiAgICBkYXJrOiBfZGFya1tcImRlZmF1bHRcIl1cbiAgfVtjb2xvclNjaGVtZV07XG4gIHZhciBkID0ge1xuICAgIGNvbXBhY3Q6IF9jb21wYWN0W1wiZGVmYXVsdFwiXSxcbiAgICBjb21mb3J0YWJsZTogX2NvbWZvcnRhYmxlW1wiZGVmYXVsdFwiXVxuICB9W2RlbnNpdHldO1xuICAvKipcbiAgICogIyBQcmlzbWEgQWxpYXNlc1xuICAgKiBUaGUgZm9sbG93aW5nIGFsaWFzZXMgZm9yIHByaXNtYSB2YXJpYWJsZXMgYXJlIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZS4gSnVzdCBiZWNhdXNlIGFuIGFsaWFzIGlzIHByb3ZpZGVkLFxuICAgKiBkb2VzIG5vdCBtZWFuIGl0IGlzIGlkZWFsIGZvciBlbnRlcnByaXNlIHRoZW1lcyBpbiBhbGwgc2NlbmFyaW9zLlxuICAgKlxuICAgKiBUaGV5IGNvdmVyIGFsbCB2YWx1ZXMgZXhjZXB0IG1vc3QgYGludGVyYWN0aXZlQ29sb3IqYCB2YXJpYWJsZXMuXG4gICAqXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB1c2VcbiAgICogIGBgYCBjc3NcbiAgICogIGNvbnN0IG15Q2xpY2thYmxlID0gc3R5bGVkKENsaWNrYWJsZSlgXG4gICAqICAgICAgY29sb3I6ICR7dmFyaWFibGVzLmNvbnRlbnRDb2xvckRlZmF1bHR9O1xuICAgKiAgfVxuICAgKiAgYGBgXG4gICAqIGluc3RlYWQgb2ZcbiAgICogIGBgYCBjc3NcbiAgICogIGNvbnN0IG15Q2xpY2thYmxlID0gc3R5bGVkKENsaWNrYWJsZSlgXG4gICAqICAgICAgY29sb3I6ICR7cGljayh7XG4gICAqICAgICAgICAgIGVudGVycHJpc2U6IHZhcmlhYmxlcy50ZXh0Q29sb3I7XG4gICAqICAgICAgICAgIHByaXNtYTogdmFyaWFibGVzLmNvbnRlbnRDb2xvckRlZmF1bHQ7XG4gICAqICAgICAgfSl9O1xuICAgKiAgfVxuICAgKiAgYGBgXG4gICAqXG4gICAqIEB2YWx1ZVNldFxuICAgKi9cblxuICB2YXIgcHJpc21hQWxpYXNlcyA9IHtcbiAgICBhY2NlbnRDb2xvclBvc2l0aXZlOiBjcy5zdWNjZXNzQ29sb3IsXG4gICAgYWNjZW50Q29sb3JXYXJuaW5nOiBjcy53YXJuaW5nQ29sb3IsXG4gICAgYWNjZW50Q29sb3JBbGVydDogY3MuYWxlcnRDb2xvcixcbiAgICBhY2NlbnRDb2xvck5lZ2F0aXZlOiBjcy5lcnJvckNvbG9yLFxuICAgIHN0YXR1c0NvbG9ySW5mbzogY3MuaW5mb0NvbG9yTDEwLFxuICAgIHN0YXR1c0NvbG9yTm9ybWFsOiBjcy5zdWNjZXNzQ29sb3JMMTAsXG4gICAgc3RhdHVzQ29sb3JMb3c6IGNzLndhcm5pbmdDb2xvckwxMCxcbiAgICBzdGF0dXNDb2xvck1lZGl1bTogY3MuYWxlcnRDb2xvckwxMCxcbiAgICBzdGF0dXNDb2xvckhpZ2g6IGNzLmVycm9yQ29sb3JMMTAsXG4gICAgc3RhdHVzQ29sb3JDcml0aWNhbDogY3MuZXJyb3JDb2xvckQyMCxcbiAgICBlbWJvc3NTaGFkb3c6IGNzLm92ZXJsYXlTaGFkb3csXG4gICAgZHJhZ1NoYWRvdzogY3Mub3ZlcmxheVNoYWRvdyxcbiAgICBtb2RhbFNoYWRvdzogY3Mub3ZlcmxheVNoYWRvdyxcbiAgICBiYWNrZ3JvdW5kQ29sb3JQb3B1cDogY3MuYmFja2dyb3VuZENvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvclNlY3Rpb246IGNzLmJhY2tncm91bmRDb2xvcixcbiAgICBiYWNrZ3JvdW5kQ29sb3JTaWRlYmFyOiBjcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgYmFja2dyb3VuZENvbG9yUGFnZTogY3MuYmFja2dyb3VuZENvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvck5hdmlnYXRpb246IGNzLmJhY2tncm91bmRDb2xvcixcbiAgICBiYWNrZ3JvdW5kQ29sb3JGbG9hdGluZzogY3MuYmFja2dyb3VuZENvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvckRpYWxvZzogY3MuYmFja2dyb3VuZENvbG9yLFxuICAgIGJhY2tncm91bmRDb2xvclNjcmltOiAoMCwgX3Rpbnljb2xvcltcImRlZmF1bHRcIl0pKGNzLmdyYXkzMCkuc2V0QWxwaGEoMC44KS50b1JnYlN0cmluZygpLFxuICAgIGNvbnRlbnRDb2xvckFjdGl2ZTogY3MudGV4dENvbG9yLFxuICAgIGNvbnRlbnRDb2xvckRlZmF1bHQ6IGNzLnRleHRDb2xvcixcbiAgICBjb250ZW50Q29sb3JNdXRlZDogY3MudGV4dEdyYXksXG4gICAgY29udGVudENvbG9yRGlzYWJsZWQ6IGNzLnRleHREaXNhYmxlZENvbG9yLFxuICAgIGNvbnRlbnRDb2xvckludmVydGVkOiBjb2xvclNjaGVtZSA9PT0gJ2RhcmsnID8gY3MuZ3JheTMwIDogY3MuZ3JheTMwLFxuICAgIG5ldXRyYWwxMDA6IGNvbG9yU2NoZW1lID09PSAnZGFyaycgPyBjcy5ncmF5MjUgOiBjcy5ncmF5OTgsXG4gICAgbmV1dHJhbDIwMDogY29sb3JTY2hlbWUgPT09ICdkYXJrJyA/IGNzLmdyYXkzMCA6IGNzLmdyYXk5NixcbiAgICBuZXV0cmFsMzAwOiBjb2xvclNjaGVtZSA9PT0gJ2RhcmsnID8gY3MuZ3JheTQ1IDogY3MuZ3JheTkyLFxuICAgIG5ldXRyYWw0MDA6IGNvbG9yU2NoZW1lID09PSAnZGFyaycgPyBjcy5ncmF5NjAgOiBfdGlueWNvbG9yW1wiZGVmYXVsdFwiXS5taXgoY3MuZ3JheTkyLCBjcy5ncmF5ODApLnRvUmdiU3RyaW5nKCksXG4gICAgbmV1dHJhbDUwMDogY3MuZ3JheTgwLFxuICAgIGludGVyYWN0aXZlQ29sb3JQcmltYXJ5OiBjcy5icmFuZENvbG9yLFxuICAgIGludGVyYWN0aXZlQ29sb3JCb3JkZXI6IGNzLmJvcmRlckNvbG9yLFxuICAgIHNwYWNpbmdYU21hbGw6IGQuc3BhY2luZ1F1YXJ0ZXIsXG4gICAgc3BhY2luZ1NtYWxsOiBkLnNwYWNpbmdIYWxmLFxuICAgIHNwYWNpbmdNZWRpdW06IFwiY2FsYyhcIi5jb25jYXQoZC5zcGFjaW5nLCBcIiAqIDAuNzUpXCIpLFxuICAgIHNwYWNpbmdMYXJnZTogZC5zcGFjaW5nLFxuICAgIHNwYWNpbmdYTGFyZ2U6IFwiY2FsYyhcIi5jb25jYXQoZC5zcGFjaW5nLCBcIiAqIDEuNSlcIiksXG4gICAgc3BhY2luZ1hYTGFyZ2U6IFwiY2FsYyhcIi5jb25jYXQoZC5zcGFjaW5nLCBcIiAqIDIpXCIpLFxuICAgIHNwYWNpbmdYWFhMYXJnZTogXCJjYWxjKFwiLmNvbmNhdChkLnNwYWNpbmcsIFwiICogMi41KVwiKVxuICB9O1xuICByZXR1cm4gcHJpc21hQWxpYXNlcztcbn1cblxudmFyIF9kZWZhdWx0ID0gY3JlYXRlUHJpc21hQWxpYXNlcztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9saWdodCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbGlnaHRcIikpO1xuXG52YXIgX2RhcmsgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RhcmtcIikpO1xuXG52YXIgX2NvbXBhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBhY3RcIikpO1xuXG52YXIgX2NvbWZvcnRhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21mb3J0YWJsZVwiKSk7XG5cbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYmFzZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gY3JlYXRlUHJpc21hVGhlbWUoX3JlZikge1xuICB2YXIgY29sb3JTY2hlbWUgPSBfcmVmLmNvbG9yU2NoZW1lLFxuICAgICAgZGVuc2l0eSA9IF9yZWYuZGVuc2l0eTtcbiAgdmFyIGNvbG9yU2NoZW1lVmFycyA9IHtcbiAgICBsaWdodDogX2xpZ2h0W1wiZGVmYXVsdFwiXSxcbiAgICBkYXJrOiBfZGFya1tcImRlZmF1bHRcIl1cbiAgfVtjb2xvclNjaGVtZV07XG4gIHZhciBkZW5zaXR5VmFycyA9IHtcbiAgICBjb21wYWN0OiBfY29tcGFjdFtcImRlZmF1bHRcIl0sXG4gICAgY29tZm9ydGFibGU6IF9jb21mb3J0YWJsZVtcImRlZmF1bHRcIl1cbiAgfVtkZW5zaXR5XTtcbiAgdmFyIHByaXNtYUJhc2UgPSAoMCwgX2Jhc2VbXCJkZWZhdWx0XCJdKSh7XG4gICAgY29sb3JTY2hlbWU6IGNvbG9yU2NoZW1lXG4gIH0pO1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByaXNtYUJhc2UpLCBjb2xvclNjaGVtZVZhcnMpLCBkZW5zaXR5VmFycyk7XG59XG5cbnZhciBfZGVmYXVsdCA9IGNyZWF0ZVByaXNtYVRoZW1lO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG4vKipcbiAqICMgTWVhc3VyZXNcbiAqIFNwYWNpbmcgaXMgdXNlZCBmb3IgbWFyZ2luIG9uIGFueSBlbGVtZW50IG9yIHBhZGRpbmcgb24gY29udGFpbmVycywgYnV0IGNhbiBiZSB1c2VkIGZvciBvdGhlclxuICogcHJvcGVydGllcyB0aGF0IHBvc2l0aW9uIGVsZW1lbnRzLlxuICogKiBMYXJnZXIgY29udGFpbmVycywgc3VjaCBhcyBgQ2FyZGAgb3IgYE1vZGFsYCwgdXNlIGBzcGFjaW5nYC5cbiAqICogYHNwYWNpbmdIYWxmYCBhbmQgYHNwYWNpbmdRdWFydGVyYCBhcmUgcHJpbWFyaWx5IGZvciBob3Jpem9udGFsIHNwYWNpbmcgYmV0d2VlbiBzbWFsbGVyIGVsZW1lbnRzLlxuICogKiBKdXN0IGJlY2F1c2UgYSBkZXNpcmVkIHZhbHVlIGVxdWFscyAyMCwgMTAsIG9yIDUgcGl4ZWxzLCBkb2VzIG5vdCBtZWFuIGl0J3MgYXBwcm9wcmlhdGUgdG9cbiAqIHVzZSBzcGFjaW5nIHZhcmlhYmxlcy5cbiAqXG4gKiBAdmFsdWVTZXRcbiAqL1xudmFyIG1lYXN1cmVzID0ge1xuICBzcGFjaW5nWFNtYWxsOiAnNHB4JyxcbiAgc3BhY2luZ1NtYWxsOiAnOHB4JyxcbiAgc3BhY2luZ01lZGl1bTogJzEycHgnLFxuICBzcGFjaW5nTGFyZ2U6ICcxNnB4JyxcbiAgc3BhY2luZ1hMYXJnZTogJzI0cHgnLFxuICBzcGFjaW5nWFhMYXJnZTogJzMycHgnLFxuICBzcGFjaW5nWFhYTGFyZ2U6ICc0MHB4JyxcbiAgZm9udFNpemVTbWFsbDogJzEycHgnLFxuICBmb250U2l6ZTogJzE0cHgnLFxuICBmb250U2l6ZUxhcmdlOiAnMTZweCcsXG4gIGZvbnRTaXplWExhcmdlOiAnMThweCcsXG4gIGZvbnRTaXplWFhMYXJnZTogJzI0cHgnLFxuICBsaW5lSGVpZ2h0OiAnMjBweCcsXG4gIGlucHV0SGVpZ2h0OiAnMzJweCcsXG4gIGJvcmRlclJhZGl1czogJzRweCdcbn07XG52YXIgX2RlZmF1bHQgPSBtZWFzdXJlcztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxuLyoqXG4gKiAjIE1lYXN1cmVzXG4gKiBTcGFjaW5nIGlzIHVzZWQgZm9yIG1hcmdpbiBvbiBhbnkgZWxlbWVudCBvciBwYWRkaW5nIG9uIGNvbnRhaW5lcnMsIGJ1dCBjYW4gYmUgdXNlZCBmb3Igb3RoZXJcbiAqIHByb3BlcnRpZXMgdGhhdCBwb3NpdGlvbiBlbGVtZW50cy5cbiAqXG4gKiBAdmFsdWVTZXRcbiAqL1xudmFyIG1lYXN1cmVzID0ge1xuICBzcGFjaW5nWFNtYWxsOiAnNHB4JyxcbiAgc3BhY2luZ1NtYWxsOiAnOHB4JyxcbiAgc3BhY2luZ01lZGl1bTogJzEycHgnLFxuICBzcGFjaW5nTGFyZ2U6ICcxNnB4JyxcbiAgc3BhY2luZ1hMYXJnZTogJzI0cHgnLFxuICBzcGFjaW5nWFhMYXJnZTogJzMycHgnLFxuICBzcGFjaW5nWFhYTGFyZ2U6ICc0MHB4JyxcbiAgZm9udFNpemVTbWFsbDogJzEycHgnLFxuICBmb250U2l6ZTogJzE0cHgnLFxuICBmb250U2l6ZUxhcmdlOiAnMTZweCcsXG4gIGZvbnRTaXplWExhcmdlOiAnMThweCcsXG4gIGZvbnRTaXplWFhMYXJnZTogJzI0cHgnLFxuICBsaW5lSGVpZ2h0OiAnMjBweCcsXG4gIGlucHV0SGVpZ2h0OiAnNDBweCcsXG4gIGJvcmRlclJhZGl1czogJzRweCdcbn07XG52YXIgX2RlZmF1bHQgPSBtZWFzdXJlcztcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF90aW55Y29sb3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0aW55Y29sb3IyXCIpKTtcblxudmFyIF9saWdodCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbGlnaHRcIikpO1xuXG52YXIgX2RhcmsgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RhcmtcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5mdW5jdGlvbiBjcmVhdGVQcmlzbWFCYXNlKF9yZWYpIHtcbiAgdmFyIGNvbG9yU2NoZW1lID0gX3JlZi5jb2xvclNjaGVtZTtcbiAgdmFyIGNvbG9yU2NoZW1lVmFycyA9IHtcbiAgICBsaWdodDogX2xpZ2h0W1wiZGVmYXVsdFwiXSxcbiAgICBkYXJrOiBfZGFya1tcImRlZmF1bHRcIl1cbiAgfVtjb2xvclNjaGVtZV07XG4gIC8qKlxuICAgKiAjIE1pc2MgQ29sb3JzXG4gICAqXG4gICAqIEBjb2xvclNldCB2ZXJib3NlXG4gICAqL1xuXG4gIHZhciB1c2FnZUNvbG9ycyA9IHtcbiAgICBmb2N1c0NvbG9yOiAoMCwgX3Rpbnljb2xvcltcImRlZmF1bHRcIl0pKGNvbG9yU2NoZW1lVmFycy5pbnRlcmFjdGl2ZUNvbG9yUHJpbWFyeSkuc2V0QWxwaGEoMC43KS50b1JnYlN0cmluZygpLFxuICAgIHRyYW5zcGFyZW50OiAndHJhbnNwYXJlbnQnLFxuICAgIGxpbmtDb2xvcjogY29sb3JTY2hlbWVWYXJzLmludGVyYWN0aXZlQ29sb3JQcmltYXJ5XG4gIH07XG4gIC8qKlxuICAgKiAjIEludGVyYWN0aXZlIFN0YXRlIFNoYWRvd3NcbiAgICpcbiAgICogQHNoYWRvd1NldFxuICAgKlxuICAgKi9cblxuICB2YXIgc2hhZG93cyA9IHtcbiAgICBob3ZlclNoYWRvdzogXCIwIDAgMCAycHggXCIuY29uY2F0KGNvbG9yU2NoZW1lVmFycy5iYWNrZ3JvdW5kQ29sb3JQYWdlLCBcIiwgMCAwIDAgNXB4IFwiKS5jb25jYXQoY29sb3JTY2hlbWVWYXJzLmludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXIpLFxuICAgIGZvY3VzU2hhZG93OiBcIjAgMCAwIDJweCBcIi5jb25jYXQoY29sb3JTY2hlbWVWYXJzLmJhY2tncm91bmRDb2xvclBhZ2UsIFwiLCAwIDAgMCA1cHggXCIpLmNvbmNhdCh1c2FnZUNvbG9ycy5mb2N1c0NvbG9yKSxcbiAgICBmb2N1c1NoYWRvd0luc2V0OiBcImluc2V0IDAgMCAwIDNweCBcIi5jb25jYXQodXNhZ2VDb2xvcnMuZm9jdXNDb2xvcilcbiAgfTtcbiAgLyoqXG4gICAqICMgQmFja2dyb3VuZHNcbiAgICpcbiAgICogQGNvbG9yU2V0IHZlcmJvc2VcbiAgICovXG5cbiAgdmFyIGJhY2tncm91bmRzID0ge1xuICAgIGRyYWdnYWJsZUJhY2tncm91bmQ6IFwicmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxcHggMXB4LCBcIi5jb25jYXQoY29sb3JTY2hlbWVWYXJzLmNvbnRlbnRDb2xvck11dGVkLCBcIiwgXCIpLmNvbmNhdChjb2xvclNjaGVtZVZhcnMuY29udGVudENvbG9yTXV0ZWQsIFwiIDFweCwgdHJhbnNwYXJlbnQgMXB4KSAwIDAgLyA0cHggNnB4XCIpXG4gIH07XG4gIHZhciBzYW5zRm9udEZhbWlseSA9IFwiJ1NwbHVuayBQbGF0Zm9ybSBTYW5zJywgJ1NwbHVuayBEYXRhIFNhbnMnLCBSb2JvdG8sIERyb2lkLCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCI7XG4gIC8qKlxuICAgKiAjIEZvbnRzXG4gICAqXG4gICAqIEB2YWx1ZVNldFxuICAgKi9cblxuICB2YXIgZm9udHMgPSB7XG4gICAgc2Fuc0ZvbnRGYW1pbHk6IHNhbnNGb250RmFtaWx5LFxuICAgIHNlcmlmRm9udEZhbWlseTogXCJHZW9yZ2lhLCAnVGltZXMgTmV3IFJvbWFuJywgVGltZXMsIHNlcmlmXCIsXG4gICAgbW9ub0ZvbnRGYW1pbHk6IFwiJ1NwbHVuayBQbGF0Zm9ybSBNb25vJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdEcm9pZCBTYW5zIE1vbm8nLCBNb25hY28sICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxuICAgIGZvbnRGYW1pbHk6IHNhbnNGb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHRCb2xkOiAnNzAwJyxcbiAgICBmb250V2VpZ2h0U2VtaUJvbGQ6ICc1MDAnXG4gIH07XG4gIC8qKlxuICAgKiAjIExheWVyc1xuICAgKiBJZiBhIHZhcmlhYmxlIGRvZXMgbm90IHN1aXQgeW91ciBwdXJwb3NlLCBzZXQgYSB2YWx1ZSByZWxhdGl2ZWx5LCBzdWNoIGFzIHppbmRleE1vZGFsICsxLlxuICAgKlxuICAgKiBAdmFsdWVTZXRcbiAgICovXG5cbiAgdmFyIHppbmRleGVzID0ge1xuICAgIHppbmRleEZpeGVkTmF2YmFyOiAxMDMwLFxuICAgIHppbmRleE1vZGFsQmFja2Ryb3A6IDEwNDAsXG4gICAgemluZGV4TW9kYWw6IDEwNTAsXG4gICAgemluZGV4UG9wb3ZlcjogMTA2MCxcbiAgICB6aW5kZXhUb2FzdE1lc3NhZ2VzOiAyMDAwXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGZvbnRzKSwgdXNhZ2VDb2xvcnMpLCBzaGFkb3dzKSwgYmFja2dyb3VuZHMpLCB6aW5kZXhlcyk7XG59XG5cbnZhciBfZGVmYXVsdCA9IGNyZWF0ZVByaXNtYUJhc2U7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbGVhcmZpeCA9IGNsZWFyZml4O1xuZXhwb3J0cy5lbGxpcHNpcyA9IGVsbGlwc2lzO1xuZXhwb3J0cy5wcmludFdpZHRoMTAwUGVyY2VudCA9IHByaW50V2lkdGgxMDBQZXJjZW50O1xuZXhwb3J0cy5wcmludEhpZGUgPSBwcmludEhpZGU7XG5leHBvcnRzLnByaW50Tm9CYWNrZ3JvdW5kID0gcHJpbnROb0JhY2tncm91bmQ7XG5leHBvcnRzLnByaW50V3JhcEFsbCA9IHByaW50V3JhcEFsbDtcbmV4cG9ydHMuc2NyZWVuUmVhZGVyQ29udGVudCA9IHNjcmVlblJlYWRlckNvbnRlbnQ7XG5leHBvcnRzLm92ZXJsYXlDb2xvcnMgPSBvdmVybGF5Q29sb3JzO1xuZXhwb3J0cy5jb2xvcldpdGhBbHBoYSA9IGNvbG9yV2l0aEFscGhhO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBleHBvcnRzLnJlc2V0ID0gdm9pZCAwO1xuXG52YXIgX3Rpbnljb2xvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInRpbnljb2xvcjJcIikpO1xuXG52YXIgX3N0eWxlZENvbXBvbmVudHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbnZhciBfY29sb3JCbGVuZCA9IHJlcXVpcmUoXCJjb2xvci1ibGVuZFwiKTtcblxudmFyIF92YXJpYWJsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhcmlhYmxlc1wiKSk7XG5cbnZhciBfcGljayA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGlja1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gIHZhciBkYXRhID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICAgIC8qIEdlbmVyaWMgcmVzZXRzICovXFxuICAgICAgICBhbmltYXRpb246IG5vbmUgMHMgZWFzZSAwcyAxIG5vcm1hbCBub25lIHJ1bm5pbmc7XFxuICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm9uZSByZXBlYXQgMCAwIC8gYXV0byBhdXRvIHBhZGRpbmctYm94IGJvcmRlci1ib3ggc2Nyb2xsO1xcbiAgICAgICAgYm9yZGVyOiBtZWRpdW0gbm9uZSBjdXJyZW50Q29sb3I7XFxuICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xcbiAgICAgICAgYm9yZGVyLWltYWdlOiBub25lO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcXG4gICAgICAgIGJvcmRlci1zcGFjaW5nOiAwO1xcbiAgICAgICAgYm90dG9tOiBhdXRvO1xcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcXG4gICAgICAgIGNhcHRpb24tc2lkZTogdG9wO1xcbiAgICAgICAgY2xlYXI6IG5vbmU7XFxuICAgICAgICBjbGlwOiBhdXRvO1xcbiAgICAgICAgY29sdW1uczogYXV0bztcXG4gICAgICAgIGNvbHVtbi1jb3VudDogYXV0bztcXG4gICAgICAgIGNvbHVtbi1maWxsOiBiYWxhbmNlO1xcbiAgICAgICAgY29sdW1uLWdhcDogbm9ybWFsO1xcbiAgICAgICAgY29sdW1uLXJ1bGU6IG1lZGl1bSBub25lIGN1cnJlbnRDb2xvcjtcXG4gICAgICAgIGNvbHVtbi1zcGFuOiAxO1xcbiAgICAgICAgY29sdW1uLXdpZHRoOiBhdXRvO1xcbiAgICAgICAgY29udGVudDogbm9ybWFsO1xcbiAgICAgICAgY291bnRlci1pbmNyZW1lbnQ6IG5vbmU7XFxuICAgICAgICBjb3VudGVyLXJlc2V0OiBub25lO1xcbiAgICAgICAgZW1wdHktY2VsbHM6IHNob3c7XFxuICAgICAgICBmbG9hdDogbm9uZTtcXG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtc3RyZXRjaDogbm9ybWFsO1xcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgaHlwaGVuczogbm9uZTtcXG4gICAgICAgIGxlZnQ6IGF1dG87XFxuICAgICAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgICAgICAgbGlzdC1zdHlsZTogZGlzYyBvdXRzaWRlIG5vbmU7XFxuICAgICAgICBtYXJnaW46IDA7XFxuICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xcbiAgICAgICAgbWF4LXdpZHRoOiBub25lO1xcbiAgICAgICAgbWluLWhlaWdodDogMDtcXG4gICAgICAgIG1pbi13aWR0aDogMDtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICBvcnBoYW5zOiAyO1xcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlO1xcbiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcXG4gICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdXRvO1xcbiAgICAgICAgcGFnZS1icmVhay1iZWZvcmU6IGF1dG87XFxuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXV0bztcXG4gICAgICAgIHBlcnNwZWN0aXZlOiBub25lO1xcbiAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiA1MCUgNTAlO1xcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxuICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICAgICAgcmlnaHQ6IGF1dG87XFxuICAgICAgICB0YWItc2l6ZTogODtcXG4gICAgICAgIHRhYmxlLWxheW91dDogYXV0bztcXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgICAgICB0ZXh0LWFsaWduLWxhc3Q6IGF1dG87XFxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICAgICAgICB0ZXh0LWluZGVudDogMDtcXG4gICAgICAgIHRleHQtc2hhZG93OiBub25lO1xcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICAgICAgICB0b3A6IGF1dG87XFxuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XFxuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlIDA7XFxuICAgICAgICB0cmFuc2Zvcm0tc3R5bGU6IGZsYXQ7XFxuICAgICAgICB0cmFuc2l0aW9uOiBub25lIDBzIGVhc2UgMHM7XFxuICAgICAgICB1c2VyLXNlbGVjdDogYXV0bztcXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICAgICAgICB3aWRvd3M6IDI7XFxuICAgICAgICB3aWR0aDogYXV0bztcXG4gICAgICAgIHdvcmQtc3BhY2luZzogbm9ybWFsO1xcbiAgICAgICAgei1pbmRleDogYXV0bztcXG4gICAgICAgIC8qIFNwbHVuay1zcGVjaWZpYyByZXNldHMgKi9cXG4gICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgIGNvbG9yOiBcIiwgXCI7XFxuICAgICAgICBjdXJzb3I6IGluaGVyaXQ7XFxuICAgICAgICBkaXNwbGF5OiBcIiwgXCI7XFxuICAgICAgICBmb250LWZhbWlseTogXCIsIFwiO1xcbiAgICAgICAgZm9udC1zaXplOiBcIiwgXCI7XFxuICAgICAgICBsaW5lLWhlaWdodDogXCIsIFwiO1xcbiAgICAgICAgb3V0bGluZTogbWVkaXVtIG5vbmUgXCIsIFwiO1xcbiAgICAgICAgdmlzaWJpbGl0eTogaW5oZXJpdDtcXG4gICAgXCJdKTtcblxuICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG4vKipcbiAqIEBmaWxlXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc3R5bGUtcmVsYXRlZCBoZWxwZXIgZnVuY3Rpb25zLiBBbGwgb2YgdGhlbSByZXR1cm4gYSBzaW5nbGUgb2JqZWN0IGNvbnRhaW5pbmdcbiAqIERPTSBDU1MgcHJvcGVydGllcywgZm9yIGV4YW1wbGU6IGB7IGRpc3BsYXk6IOKApiwgZm9udEZhbWlseTog4oCmIH1gLlxuICovXG5cbi8qKlxuICogVGhlIGByZXNldGAgbWl4aW4gcmVzZXRzIGNzcyBwcm9wZXJ0aWVzIHRvIHRoZWlyIGJyb3dzZXIgZGVmYXVsdHMsIHBsdXMgbWFueSB0b1xuICogdGhlbWUtc3BlY2lmaWMgdmFsdWVzLiBUaGlzIGVuc3VyZXMgYW4gZWxlbWVudCBpcyBub3QgaW5oZXJpdGluZyBpbmFwcHJvcHJpYXRlIHN0eWxlcy5cbiAqXG4gKiAgIyMjIyMgRXhhbXBsZVxuICogIGBgYGpzXG4gKiAgaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKiAgaW1wb3J0IHsgcmVzZXQgfSBmcm9tICdAc3BsdW5rL3RoZW1lcy9taXhpbnMnO1xuICpcbiAqICBjb25zdCBteUJsb2NrID0gc3R5bGVkLmRpdmBcbiAqICAgICAgJHtyZXNldCgnYmxvY2snKX07XG4gKiAgYFxuICogIGBgYFxuICogQG5hbWUgcmVzZXRcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Rpc3BsYXk9aW5saW5lXSBTZXQgdGhlIGBkaXNwbGF5YCBwcm9wZXJ0eSAoYmxvY2ssIGlubGluZS1ibG9jaywg4oCmKVxuICogQHB1YmxpY1xuICovXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgdmFyIGRpc3BsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdpbmxpbmUnO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX3N0eWxlZENvbXBvbmVudHMuY3NzKShfdGVtcGxhdGVPYmplY3QoKSwgKDAsIF9waWNrW1wiZGVmYXVsdFwiXSkoe1xuICAgICAgZW50ZXJwcmlzZTogX3ZhcmlhYmxlc1tcImRlZmF1bHRcIl0udGV4dENvbG9yLFxuICAgICAgcHJpc21hOiBfdmFyaWFibGVzW1wiZGVmYXVsdFwiXS5jb250ZW50Q29sb3JEZWZhdWx0XG4gICAgfSksIGRpc3BsYXksIF92YXJpYWJsZXNbXCJkZWZhdWx0XCJdLmZvbnRGYW1pbHksIF92YXJpYWJsZXNbXCJkZWZhdWx0XCJdLmZvbnRTaXplLCBfdmFyaWFibGVzW1wiZGVmYXVsdFwiXS5saW5lSGVpZ2h0LCBfdmFyaWFibGVzW1wiZGVmYXVsdFwiXS5mb2N1c0NvbG9yKTtcbiAgfTtcbn07XG4vKipcbiAqIGBjbGVhcmZpeGAgaXMgdXNlZCBvbiBhIGNvbnRhaW5lciB0byBlbnN1cmUgaXRzIGhlaWdodCBpcyBhdCBsZWFzdCBhcyB0YWxsIGFzIGFueSBmbG9hdGluZ1xuICogY2hpbGRyZW4uXG4gKlxuICogICMjIyMjIEV4YW1wbGVcbiAqICBgYGBqc1xuICogIGltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuICogIGltcG9ydCB7IGNsZWFyZml4IH0gZnJvbSAnQHNwbHVuay90aGVtZXMvbWl4aW5zJztcbiAqXG4gKiAgY29uc3QgbXlCbG9jayA9IHN0eWxlZC5kaXZgXG4gKiAgICAgICR7Y2xlYXJmaXgoKX07XG4gKiAgYFxuICogIGBgYFxuICogQHB1YmxpY1xuICovXG5cblxuZXhwb3J0cy5yZXNldCA9IHJlc2V0O1xuXG5mdW5jdGlvbiBjbGVhcmZpeCgpIHtcbiAgcmV0dXJuIHtcbiAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICBkaXNwbGF5OiAndGFibGUnLFxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgY2xlYXI6ICdib3RoJ1xuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogVXNlIGBlbGxpcHNpc2AgZm9yIG92ZXJmbG93aW5nIHRleHQuIFJlcXVpcmVzIGBkaXNwbGF5YCB0byBiZSBzZXQgdG8gYGlubGluZS1ibG9ja2Agb3IgYGJsb2NrYC5cbiAqXG4gKiAgIyMjIyMgRXhhbXBsZVxuICogIGBgYGpzXG4gKiAgaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKiAgaW1wb3J0IHsgZWxsaXBzaXMgfSBmcm9tICdAc3BsdW5rL3RoZW1lcy9taXhpbnMnO1xuICpcbiAqICBjb25zdCBteUJsb2NrID0gc3R5bGVkLmRpdmBcbiAqICAgICAgJHtjbGVhcmZpeCgpfTtcbiAqICAgICAgd2lkdGg6IDMwMHB4O1xuICogIGBcbiAqICBgYGBcbiAqIEBwdWJsaWNcbiAqL1xuXG5cbmZ1bmN0aW9uIGVsbGlwc2lzKCkge1xuICByZXR1cm4ge1xuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgfTtcbn1cbi8qKlxuICogRm9yY2UgYW4gZWxlbWVudCB0byBiZSBleGFjdGx5IDEwMCUgd2lkZSBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBhZ2UuXG4gKlxuICogICMjIyMjIEV4YW1wbGVcbiAqICBgYGBqc1xuICogIGltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuICogIGltcG9ydCB7IHByaW50V2lkdGgxMDBQZXJjZW50IH0gZnJvbSAnQHNwbHVuay90aGVtZXMvbWl4aW5zJztcbiAqXG4gKiAgY29uc3QgbXlCbG9jayA9IHN0eWxlZC5kaXZgXG4gKiAgICAgIEBtZWRpYSBwcmludCB7XG4gKiAgICAgICAgICAubXlFbGVtZW50IHtcbiAqICAgICAgICAgICAgICR7cHJpbnRXaWR0aDEwMFBlcmNlbnQoKX07XG4gKiAgICAgICAgICB9XG4gKiAgICAgIH1cbiAqICB9XG4gKiAgYFxuICogIGBgYFxuICogIEBwdWJsaWNcbiAqL1xuXG5cbmZ1bmN0aW9uIHByaW50V2lkdGgxMDBQZXJjZW50KCkge1xuICByZXR1cm4ge1xuICAgIG1heFdpZHRoOiAnMTAwJSAhaW1wb3J0YW50JyxcbiAgICB3aWR0aDogJzEwMCUgIWltcG9ydGFudCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4gIWltcG9ydGFudCdcbiAgfTtcbn1cbi8qKlxuICogSGlkZSBhbiBlbGVtZW50IChzdWNoIGFzIGEgYnV0dG9uKS5cbiAqXG4gKiAgIyMjIyMgRXhhbXBsZVxuICogIGBgYGpzXG4gKiAgaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKiAgaW1wb3J0IHsgcHJpbnRIaWRlIH0gZnJvbSAnQHNwbHVuay90aGVtZXMvbWl4aW5zJztcbiAqXG4gKiAgY29uc3QgbXlCbG9jayA9IHN0eWxlZC5kaXZgXG4gKiAgICAgIEBtZWRpYSBwcmludCB7XG4gKiAgICAgICAgICAubXlFbGVtZW50IHtcbiAqICAgICAgICAgICAgICAke3ByaW50SGlkZSgpfTtcbiAqICAgICAgICAgIH1cbiAqICAgICAgfVxuICogIH1cbiAqICBgYGBcbiAqIEBwdWJsaWNcbiAqL1xuXG5cbmZ1bmN0aW9uIHByaW50SGlkZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBkaXNwbGF5OiAnbm9uZSAhaW1wb3J0YW50J1xuICB9O1xufVxuLyoqXG4gKiBSZW1vdmUgYmFja2dyb3VuZCBncmFkaWVudHMgYW5kIGltYWdlcy5cbiAqXG4gKiAgIyMjIyMgRXhhbXBsZVxuICogIGBgYGpzXG4gKiAgaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKiAgaW1wb3J0IHsgcHJpbnROb0JhY2tncm91bmQgfSBmcm9tICdAc3BsdW5rL3RoZW1lcy9taXhpbnMnO1xuICpcbiAqICBjb25zdCBteUJsb2NrID0gc3R5bGVkLmRpdmBcbiAqICAgICAgQG1lZGlhIHByaW50IHtcbiAqICAgICAgICAgIC5teUVsZW1lbnQge1xuICogICAgICAgICAgICAgICR7cHJpbnROb0JhY2tncm91bmQoKX07XG4gKiAgICAgICAgICB9XG4gKiAgICAgIH1cbiAqICB9XG4gKiAgYGBgXG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBwcmludE5vQmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZSAhaW1wb3J0YW50J1xuICB9O1xufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBhbGwgdGV4dCB3cmFwcyBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBhZ2UuXG4gKlxuICogICMjIyMjIEV4YW1wbGVcbiAqICBgYGBqc1xuICogIGltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuICogIGltcG9ydCB7IHByaW50V3JhcEFsbCB9IGZyb20gJ0BzcGx1bmsvdGhlbWVzL21peGlucyc7XG4gKlxuICogIGNvbnN0IG15QmxvY2sgPSBzdHlsZWQuZGl2YFxuICogICAgICBAbWVkaWEgcHJpbnQge1xuICogICAgICAgICAgLm15RWxlbWVudCB7XG4gKiAgICAgICAgICAgICAgJHtwcmludFdyYXBBbGwoKX07XG4gKiAgICAgICAgICB9XG4gKiAgICAgIH1cbiAqICB9XG4gKiAgYGBgXG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBwcmludFdyYXBBbGwoKSB7XG4gIC8vIFRTOiBoYXZlIHRvIGFzc2VydCBhcyBDU1NPYmplY3QgYmVjYXVzZSBjc3N0eXBlIGRvZXNuJ3QgYWxsb3cgIWltcG9ydGFudFxuICByZXR1cm4ge1xuICAgIHdvcmRCcmVhazogJ2JyZWFrLWFsbCAhaW1wb3J0YW50JyxcbiAgICB3b3JkV3JhcDogJ2JyZWFrLXdvcmQgIWltcG9ydGFudCcsXG4gICAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCAhaW1wb3J0YW50JyxcbiAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsICFpbXBvcnRhbnQnXG4gIH07XG59XG4vKipcbiAqIFZpc3VhbGx5IGhpZGUgY29udGVudC4gVHlwaWNhbGx5IHVzZWQgdG8gdGFyZ2V0IGNvbnRlbnQgZm9yIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMuXG4gKlxuICogICMjIyMjIEV4YW1wbGVcbiAqICBgYGAganNcbiAqICBpbXBvcnQgc2NyZWVuUmVhZGVyQ29udGVudCBmcm9tICdAc3BsdW5rL3RoZW1lcy9taXhpbnMnO1xuICpcbiAqICAubXlFbGVtZW50IHtcbiAqICAgICAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5taXhpbnMuc2NyZWVuUmVhZGVyQ29udGVudCgpfTtcbiAqICB9XG4gKiAgYGBgXG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBzY3JlZW5SZWFkZXJDb250ZW50KCkge1xuICByZXR1cm4ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBjbGlwOiAncmVjdCgwIDAgMCAwKScsXG4gICAgaGVpZ2h0OiAnMXB4JyxcbiAgICB3aWR0aDogJzFweCcsXG4gICAgbWFyZ2luOiAnLTFweCcsXG4gICAgcGFkZGluZzogMCxcbiAgICBib3JkZXI6IDBcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIGhvdyBvbmUgY29sb3Igd291bGQgYXBwZWFyIG92ZXIgYW5vdGhlciB1c2luZyBhIG5vcm1hbCBibGVuZCBtb2RlLlxuICogQ29sb3JzIGNhbiBlaXRoZXIgYmUgc3RyaW5ncyBvciBmdW5jdGlvbnMsIHN1Y2ggYXMgdmFyaWFibGUgZnVuY3Rpb25zLlxuICpcbiAqICAjIyMjIyBFeGFtcGxlXG4gKiAgYGBganNcbiAqICBpbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbiAqICBpbXBvcnQgeyBvdmVybGF5Q29sb3JzIH0gZnJvbSAnQHNwbHVuay90aGVtZXMvbWl4aW5zJztcbiAqICBpbXBvcnQgeyBpbnRlcmFjdGl2ZUNvbG9yUHJpbWFyeSwgaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlTZWxlY3RlZCB9IGZyb20gJ0BzcGx1bmsvdGhlbWVzL3ZhcmlhYmxlcyc7XG4gKlxuICogIGNvbnN0IG15QnV0dG9uID0gc3R5bGVkLmJ1dHRvbmBcbiAqICAgICAgYmFja2dyb3VuZDogJHtvdmVybGF5Q29sb3JzKGludGVyYWN0aXZlQ29sb3JQcmltYXJ5LCBpbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheVNlbGVjdGVkKX07XG4gKiAgYFxuICogIGBgYFxuICogQG5hbWUgb3ZlcmxheUNvbG9yc1xuICogQGtpbmQgZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfGZ1bmN0aW9ufSBiYWNrZ3JvdW5kXG4gKiBAcGFyYW0ge3N0cmluZ3xmdW5jdGlvbn0gZm9yZWdyb3VuZCBUaGUgY29sb3IgdG8gb3ZlcmxheSBvdmVyIHRoZSBiYWNrZ3JvdW5kLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBvdmVybGF5Q29sb3JzKGMxLCBjMikge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGMxVmFsdWUgPSB0eXBlb2YgYzEgPT09ICdmdW5jdGlvbicgPyBjMShwcm9wcykgOiBjMTtcbiAgICB2YXIgYzJWYWx1ZSA9IHR5cGVvZiBjMiA9PT0gJ2Z1bmN0aW9uJyA/IGMyKHByb3BzKSA6IGMyO1xuICAgIHZhciBjMyA9ICgwLCBfY29sb3JCbGVuZC5ub3JtYWwpKCgwLCBfdGlueWNvbG9yW1wiZGVmYXVsdFwiXSkoYzFWYWx1ZSkudG9SZ2IoKSwgKDAsIF90aW55Y29sb3JbXCJkZWZhdWx0XCJdKShjMlZhbHVlKS50b1JnYigpKTtcbiAgICByZXR1cm4gKDAsIF90aW55Y29sb3JbXCJkZWZhdWx0XCJdKShjMykudG9SZ2JTdHJpbmcoKTtcbiAgfTtcbn1cbi8qKlxuICogU2V0cyB0aGUgYWxwaGEgdmFsdWUgb24gYSBnaXZlbiBjb2xvci5cbiAqXG4gKiAgIyMjIyMgRXhhbXBsZVxuICogIGBgYGpzXG4gKiAgaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG4gKiAgaW1wb3J0IHsgY29sb3JXaXRoQWxwaGEgfSBmcm9tICdAc3BsdW5rL3RoZW1lcy9taXhpbnMnO1xuICogIGltcG9ydCB7IGludGVyYWN0aXZlQ29sb3JQcmltYXJ5IH0gZnJvbSAnQHNwbHVuay90aGVtZXMvdmFyaWFibGVzJztcbiAqXG4gKiAgY29uc3QgbXlCdXR0b24gPSBzdHlsZWQuYnV0dG9uYFxuICogICAgICBiYWNrZ3JvdW5kOiAke2NvbG9yV2l0aEFscGhhKGludGVyYWN0aXZlQ29sb3JQcmltYXJ5LCAwLjUpfTtcbiAqICBgXG4gKiAgYGBgXG4gKiBAbmFtZSBjb2xvcldpdGhBbHBoYVxuICogQGtpbmQgZnVuY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfGZ1bmN0aW9ufSBjb2xvclxuICogQHBhcmFtIHtudW1iZXJ9IGFscGhhIFRoZSBhbHBoYSB2YWx1ZSBhY2NlcHRzIHJhbmdlIGJldHdlZW4gMC0xLlxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24gY29sb3JXaXRoQWxwaGEoY29sb3IsIGFscGhhKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgY29sb3JWYWx1ZSA9IHR5cGVvZiBjb2xvciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbG9yKHByb3BzKSA6IGNvbG9yO1xuXG4gICAgaWYgKGZhbHNlICYmIChhbHBoYSA8IDAgfHwgYWxwaGEgPiAxKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlRoZSBhbHBoYSB2YWx1ZSBcXFwiXCIuY29uY2F0KGFscGhhLCBcIlxcXCIgaXMgbm90IHdpdGhpbiBhY2NlcHRhYmxlIDAtMSByYW5nZS5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3Rpbnljb2xvcltcImRlZmF1bHRcIl0pKGNvbG9yVmFsdWUpLnNldEFscGhhKGFscGhhKS50b1JnYlN0cmluZygpO1xuICB9O1xufVxuXG52YXIgX2RlZmF1bHQgPSB7XG4gIHJlc2V0OiByZXNldCxcbiAgY2xlYXJmaXg6IGNsZWFyZml4LFxuICBlbGxpcHNpczogZWxsaXBzaXMsXG4gIHByaW50V2lkdGgxMDBQZXJjZW50OiBwcmludFdpZHRoMTAwUGVyY2VudCxcbiAgcHJpbnRIaWRlOiBwcmludEhpZGUsXG4gIHByaW50Tm9CYWNrZ3JvdW5kOiBwcmludE5vQmFja2dyb3VuZCxcbiAgcHJpbnRXcmFwQWxsOiBwcmludFdyYXBBbGwsXG4gIHNjcmVlblJlYWRlckNvbnRlbnQ6IHNjcmVlblJlYWRlckNvbnRlbnQsXG4gIGNvbG9yV2l0aEFscGhhOiBjb2xvcldpdGhBbHBoYSxcbiAgb3ZlcmxheUNvbG9yczogb3ZlcmxheUNvbG9yc1xufTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9waWNrID0gcmVxdWlyZShcIi4vcGlja1wiKTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuXG4vKipcbiAqIFBpY2sgVmFyaWFudCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGVtZS1zcGVjaWZpYyBjc3MuXG4gKlxuICogVGhpcyBleGFtcGxlIHNlbGVjdHMgYW4gYXBwcm9wcmlhdGUgdmFyaWFibGUgZm9yIHRoZSBjdXJyZW50IHRoZW1lLlxuICogYGBgXG4gKiBpbXBvcnQgeyBwaWNrVmFyaWFudCB9IGZyb20gJ0BzcGx1bmsvdGhlbWVzJztcbiAqXG4gKiAuLi5cbiAqXG4gKiBjb25zdCBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAqICAgICAgJHtwaWNrVmFyaWFudCgnYXBwZWFyYW5jZScsIHtcbiAqICAgICAgICAgIGZpbGxlZDogJ2JhY2tncm91bmQ6IHJlZCcsXG4gKiAgICAgICAgICBvcGVuOiAnYm9yZGVyOiAxcHggc29saWQgcmVkJyxcbiAqICAgICAgfSl9XG4gKiBgO1xuICogYGBgXG4gKiBUaGlzIGV4YW1wbGUgc2VsZWN0cyBhbiBhcHByb3ByaWF0ZSBibG9jayBvZiBjc3MgZm9yIHRoZSBjdXJyZW50IHRoZW1lLlxuICogYGBgXG4gKiAgY29uc3QgV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gKiAgICAgICR7cGlja1ZhcmlhbnQoJ2FwcGVhcmFuY2UnLCB7XG4gKiAgICAgICAgICBmaWxsZWQ6IHtcbiAqICAgICAgICAgICAgICBlbnRlcnByaXNlOiAnYmFja2dyb3VuZDogZ3JlZW4nLFxuICogICAgICAgICAgICAgIHByaXNtYTogJ2JhY2tncm91bmQ6IGJsdWUnLFxuICogICAgICAgICAgfSxcbiAqICAgICAgICAgIG9wZW46IHtcbiAqICAgICAgICAgICAgICBlbnRlcnByaXNlOiAnYm9yZGVyOiAxcHggc29saWQgZ3JlZW4nLFxuICogICAgICAgICAgICAgIHByaXNtYTogJ2JvcmRlcjogMXB4IHNvbGlkIGJsdWUnLFxuICogICAgICAgICAgfSxcbiAqICAgICAgfSl9XG4gKiBgO1xuICogYGBgXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcE5hbWUgLSBUaGUgcHJvcCBuYW1lIHVzZWQgdG8gcmVzb2x2ZSB0aGUgdmFyaWFudHMuIFRoZSBwcm9wIHZhbHVlIG11c3QgYmUgYSBgc3RyaW5nYCBvciBgYm9vbGVhbmAuXG4gKiBAcGFyYW0ge29iamVjdH0gdGhlbWVPcHRpb25zIC0gQW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYSB0cmVlIG9mIHRoZW1lIG9wdGlvbnMsIHdpdGggdGhlIHByb3AgdmFyaWFudHMgdGhlIHRvcCBvZiB0aGUgdHJlZSBhbmQgb3B0aW9uYWxcbiAqIHRoZW1lIHZhcmlhbnRzIGJlbG93IChgZW50ZXJwcmlzZXxwcmlzbWFgLCBgbGlnaHR8ZGFya2AsIG9yIGBjb21wYWN0fGNvbWZvcnRhYmxlYCkuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IFRoZSByZXR1cm5lZCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYHN0eWxlZC1jb21wb25lbnRzYCwgd2hpY2ggcHJvdmlkZXMgdGhlIHByb3BzIGFuZCB0aGVtZSBjb250ZXh0LlxuICogQHB1YmxpY1xuICovXG52YXIgcGlja1ZhcmlhbnQgPSBmdW5jdGlvbiBwaWNrVmFyaWFudChwcm9wTmFtZSwgdHJlZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9wcm9wcyR0aGVtZTtcblxuICAgIC8vIFRTOiBtdXN0IGFzc3VtZSBwcm9wIHZhbHVlIGNhbiBiZSB1c2VkIGFzIHN0cmluZyBrZXlcbiAgICB2YXIgdmFyaWFudEtleSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgc3ViVHJlZSA9IHRyZWVbdmFyaWFudEtleV07XG5cbiAgICBpZiAoKDAsIF9waWNrLmlzSW50ZXJwb2xhdGlvblJlc3VsdCkoc3ViVHJlZSkpIHtcbiAgICAgIHJldHVybiBzdWJUcmVlO1xuICAgIH1cblxuICAgIHZhciB0aGVtZSA9ICgwLCBfdXRpbHMuYWRkVGhlbWVEZWZhdWx0cykoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PT0gbnVsbCB8fCBfcHJvcHMkdGhlbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS5zcGx1bmtUaGVtZVYxKTtcbiAgICByZXR1cm4gKDAsIF9waWNrLmdldFRoZW1lVmFyaWFudCkoc3ViVHJlZSwgdGhlbWUpO1xuICB9O1xufTtcblxudmFyIF9kZWZhdWx0ID0gcGlja1ZhcmlhbnQ7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IFNwbHVua1RoZW1lUHJvdmlkZXI7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX3N0eWxlZENvbXBvbmVudHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKiogU3BsdW5rVGhlbWVQcm92aWRlciBkZWZhdWx0cyB0byBgcHJpc21hYCBgZGFya2AgYGNvbWZvcnRhYmxlYCwgdW5sZXNzIHRoZSBwcm9wZXJ0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaGVyZSB0aGUgbmVzdGVkIGBTcGx1bmtUaGVtZVByb3ZpZGVyYCBkZWZhdWx0cyB0byBgZW50ZXJwcmlzZWAgYGxpZ2h0YDpcbiAqIGBgYGpzeFxuICogcmV0dXJuIChcbiAqICAgICA8U3BsdW5rVGhlbWVQcm92aWRlciBmYW1pbHk9XCJlbnRlcnByaXNlXCIgY29sb3JTY2hlbWU9XCJsaWdodFwiIGRlbnNpdHk9XCJjb21mb3J0YWJsZVwiPlxuICogICAgICAgICBNYWluIHBhcnQgb2YgdGhlIHBhZ2UgaW4gZW50ZXJwcmlzZS1saWdodC1jb21mb3J0YWJsZS5cbiAqICAgICAgICAgPFNwbHVua1RoZW1lUHJvdmlkZXIgZGVuc2l0eT1cImNvbXBhY3RcIj5cbiAqICAgICAgICAgICAgIFBhcnQgb2YgdGhlIHBhZ2UgaW4gZW50ZXJwcmlzZS1saWdodC1jb21wYWN0LlxuICogICAgICAgICA8L1NwbHVua1RoZW1lUHJvdmlkZXI+XG4gKiAgICAgPC9TcGx1bmtUaGVtZVByb3ZpZGVyPlxuICogKVxuICovXG5mdW5jdGlvbiBTcGx1bmtUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGZhbWlseSA9IF9yZWYuZmFtaWx5LFxuICAgICAgY29sb3JTY2hlbWUgPSBfcmVmLmNvbG9yU2NoZW1lLFxuICAgICAgZGVuc2l0eSA9IF9yZWYuZGVuc2l0eSxcbiAgICAgIGFkZGl0aW9uYWxUaGVtZVByb3BlcnRpZXMgPSBfcmVmLmFkZGl0aW9uYWxUaGVtZVByb3BlcnRpZXMsXG4gICAgICBjdXN0b21pemVUaGVtZSA9IF9yZWYuY3VzdG9taXplVGhlbWUsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImZhbWlseVwiLCBcImNvbG9yU2NoZW1lXCIsIFwiZGVuc2l0eVwiLCBcImFkZGl0aW9uYWxUaGVtZVByb3BlcnRpZXNcIiwgXCJjdXN0b21pemVUaGVtZVwiXSk7XG5cbiAgdmFyIF9yZWYyID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfc3R5bGVkQ29tcG9uZW50cy5UaGVtZUNvbnRleHQpIHx8IHt9LFxuICAgICAgX3JlZjIkc3BsdW5rVGhlbWVWID0gX3JlZjIuc3BsdW5rVGhlbWVWMSxcbiAgICAgIHNwbHVua1RoZW1lVjEgPSBfcmVmMiRzcGx1bmtUaGVtZVYgPT09IHZvaWQgMCA/IHt9IDogX3JlZjIkc3BsdW5rVGhlbWVWO1xuXG4gIHZhciBjb21wb3NlZFRoZW1lID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhZGRpdGlvbmFsVGhlbWVQcm9wZXJ0aWVzKSwge30sIHtcbiAgICBzcGx1bmtUaGVtZVYxOiB7XG4gICAgICBmYW1pbHk6IGZhbWlseSB8fCBzcGx1bmtUaGVtZVYxLmZhbWlseSB8fCAncHJpc21hJyxcbiAgICAgIGNvbG9yU2NoZW1lOiBjb2xvclNjaGVtZSB8fCBzcGx1bmtUaGVtZVYxLmNvbG9yU2NoZW1lIHx8ICdkYXJrJyxcbiAgICAgIGRlbnNpdHk6IGRlbnNpdHkgfHwgc3BsdW5rVGhlbWVWMS5kZW5zaXR5IHx8ICdjb21mb3J0YWJsZScsXG4gICAgICBjdXN0b21pemVyOiBjdXN0b21pemVUaGVtZSB8fCBzcGx1bmtUaGVtZVYxLmN1c3RvbWl6ZXJcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KF9zdHlsZWRDb21wb25lbnRzLlRoZW1lUHJvdmlkZXIsIF9leHRlbmRzKHtcbiAgICB0aGVtZTogY29tcG9zZWRUaGVtZVxuICB9LCBvdGhlclByb3BzKSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9zdHlsZWRDb21wb25lbnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vLyBpbXBsZW1lbnRhdGlvbiBmb3IgYm90aFxuXG4vKipcbiAqIGB3aXRoU3BsdW5rVGhlbWVgIGFsbG93cyB0aGVtZSB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aXRoaW4gYSBSZWFjdCBjbGFzcyBjb21wb25lbnQuXG4gKiBUaGlzIGluY2x1ZGVzIHRoZSBiYXNpYyBjb25maWd1cmF0aW9uIG9mIGBmYW1pbHlgLCBgY29sb3JTY2hlbWVgIGFuZCBgZGVuc2l0eWAsXG4gKiBhcyB3ZWxsIGFzIGFsbCB0aGUgc3BlY2lmaWMgdmFyaWFibGVzIGF2YWlsYWJsZSBpbiB0aGF0IHRoZW1lLlxuICpcbiAqIElmIG5vIGRhdGEgYFNwbHVua1RoZW1lUHJvdmlkZXJgIHdhcyBjb25maWd1cmVkLCB0aGUgUHJpc21hIERhcmsgQ29tZm9ydGFibGUgdGhlbWUgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuICogaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbiAqIGltcG9ydCB3aXRoU3BsdW5rVGhlbWUgZnJvbSAnQHNwbHVuay90aGVtZXMvd2l0aFNwbHVua1RoZW1lJztcbiAqXG4gKlxuICogY2xhc3MgTXlDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICogICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gKiAgICAgICAgIHNwbHVua1RoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICogICAgIH07XG4gKlxuICogICAgIHJlbmRlcigpIHtcbiAqICAgICAgICAgY29uc3QgeyBkZW5zaXR5LCBmb2N1c0NvbG9yIH0gPSB0aGlzLnByb3BzLnNwbHVua1RoZW1lO1xuICpcbiAqICAgICAgICAgY29uc3Qgc3R5bGUgPSB7XG4gKiAgICAgICAgICAgICBjb2xvcjogZm9jdXNDb2xvcixcbiAqICAgICAgICAgICAgIHBhZGRpbmc6IGRlbnNpdHkgPT09ICdjb21mb3J0YWJsZScgPyAnMTBweCcgOiAnNXB4JyxcbiAqICAgICAgICAgfVxuICpcbiAqICAgICAgICAgcmV0dXJuIChcbiAqICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfT5cbiAqICAgICAgICAgICAgICAgICBIZWxsb1xuICogICAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgIClcbiAqICAgICB9XG4gKiB9XG4gKlxuICogY29uc3QgTXlDb21wb25lbnRXaXRoVGhlbWUgPSB3aXRoU3BsdW5rVGhlbWUoTXlDb21wb25lbnQpO1xuICogTXlDb21wb25lbnRXaXRoVGhlbWUucHJvcFR5cGVzID0gTXlDb21wb25lbnQucHJvcFR5cGVzO1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IE15Q29tcG9uZW50V2l0aFRoZW1lO1xuICpcbiAqIGBgYFxuICogQG5hbWUgd2l0aFNwbHVua1RoZW1lXG4gKiBAZnVuY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gd2l0aFNwbHVua1RoZW1lKCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbkNvbXBvbmVudCkge1xuICB2YXIgQ29tcG9uZW50V2l0aFNwbHVua1RoZW1lID0gLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIHZhciBfcmVmID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfc3R5bGVkQ29tcG9uZW50cy5UaGVtZUNvbnRleHQpIHx8IHt9LFxuICAgICAgICBzcGx1bmtUaGVtZVYxID0gX3JlZi5zcGx1bmtUaGVtZVYxLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcInNwbHVua1RoZW1lVjFcIl0pO1xuXG4gICAgdmFyIF9yZWYyID0gc3BsdW5rVGhlbWVWMSB8fCB7fSxcbiAgICAgICAgZmFtaWx5ID0gX3JlZjIuZmFtaWx5LFxuICAgICAgICBjb2xvclNjaGVtZSA9IF9yZWYyLmNvbG9yU2NoZW1lLFxuICAgICAgICBkZW5zaXR5ID0gX3JlZjIuZGVuc2l0eSxcbiAgICAgICAgY3VzdG9taXplciA9IF9yZWYyLmN1c3RvbWl6ZXI7XG5cbiAgICB2YXIgdGhlbWVTZXR0aW5ncyA9ICgwLCBfdXRpbHMuYWRkVGhlbWVEZWZhdWx0cykoe1xuICAgICAgZmFtaWx5OiBmYW1pbHksXG4gICAgICBjb2xvclNjaGVtZTogY29sb3JTY2hlbWUsXG4gICAgICBkZW5zaXR5OiBkZW5zaXR5XG4gICAgfSk7XG5cbiAgICB2YXIgc3BsdW5rVGhlbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3QpLCAoMCwgX3V0aWxzLmdldEN1c3RvbWl6ZWRUaGVtZSkodGhlbWVTZXR0aW5ncywgY3VzdG9taXplcikpO1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgc3BsdW5rVGhlbWU6IHNwbHVua1RoZW1lXG4gICAgfSkpO1xuICB9KTtcblxuICB2YXIgZGlzcGxheU5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIENvbXBvbmVudFdpdGhTcGx1bmtUaGVtZS5kaXNwbGF5TmFtZSA9IFwid2l0aFNwbHVua1RoZW1lKFwiLmNvbmNhdChkaXNwbGF5TmFtZSwgXCIpXCIpO1xuICByZXR1cm4gQ29tcG9uZW50V2l0aFNwbHVua1RoZW1lO1xufSAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yODkzOCBmb3IgdGhlIHR3byBcImFzIFRcIiBhc3NlcnRpb25zIGFib3ZlXG5cblxudmFyIF9kZWZhdWx0ID0gd2l0aFNwbHVua1RoZW1lO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJpbXBvcnQgUmVhY3QsIHsgQ2hpbGRyZW4sIENvbXBvbmVudCwgY2xvbmVFbGVtZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NLCB7IGZpbmRET01Ob2RlIH0gZnJvbSAncmVhY3QtZG9tJztcblxuZnVuY3Rpb24gd2Fybk9uY2UobXNnKSB7XG4gIHZhciBoYXNXYXJuZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWhhc1dhcm5lZCkge1xuICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICBoYXNXYXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgfTtcbn1cblxuXG52YXIgc3RhdGVsZXNzRnVuY3Rpb25hbENvbXBvbmVudFN1cHBsaWVkID0gd2Fybk9uY2UoJ1xcbj4+IEVycm9yLCB2aWEgcmVhY3QtZmxpcC1tb3ZlIDw8XFxuXFxuWW91IHByb3ZpZGVkIGEgc3RhdGVsZXNzIGZ1bmN0aW9uYWwgY29tcG9uZW50IGFzIGEgY2hpbGQgdG8gPEZsaXBNb3ZlPi4gVW5mb3J0dW5hdGVseSwgU0ZDcyBhcmVuXFwndCBzdXBwb3J0ZWQsIGJlY2F1c2UgRmxpcCBNb3ZlIG5lZWRzIGFjY2VzcyB0byB0aGUgYmFja2luZyBpbnN0YW5jZXMgdmlhIHJlZnMsIGFuZCBTRkNzIGRvblxcJ3QgaGF2ZSBhIHB1YmxpYyBpbnN0YW5jZSB0aGF0IGhvbGRzIHRoYXQgaW5mby5cXG5cXG5QbGVhc2Ugd3JhcCB5b3VyIGNvbXBvbmVudHMgaW4gYSBuYXRpdmUgZWxlbWVudCAoZWcuIDxkaXY+KSwgb3IgYSBub24tZnVuY3Rpb25hbCBjb21wb25lbnQuXFxuJyk7XG5cbnZhciBwcmltaXRpdmVOb2RlU3VwcGxpZWQgPSB3YXJuT25jZSgnXFxuPj4gRXJyb3IsIHZpYSByZWFjdC1mbGlwLW1vdmUgPDxcXG5cXG5Zb3UgcHJvdmlkZWQgYSBwcmltaXRpdmUgKHRleHQgb3IgbnVtYmVyKSBub2RlIGFzIGEgY2hpbGQgdG8gPEZsaXBNb3ZlPi4gRmxpcCBNb3ZlIG5lZWRzIGNvbnRhaW5lcnMgd2l0aCB1bmlxdWUga2V5cyB0byBtb3ZlIGNoaWxkcmVuIGFyb3VuZC5cXG5cXG5QbGVhc2Ugd3JhcCB5b3VyIHZhbHVlIGluIGEgbmF0aXZlIGVsZW1lbnQgKGVnLiA8c3Bhbj4pLCBvciBhIGNvbXBvbmVudC5cXG4nKTtcblxudmFyIGludmFsaWRUeXBlRm9yVGltaW5nUHJvcCA9IGZ1bmN0aW9uIGludmFsaWRUeXBlRm9yVGltaW5nUHJvcChhcmdzXG4vLyBwcmV0dGllci1pZ25vcmVcbikge1xuICByZXR1cm4gY29uc29sZS5lcnJvcignXFxuPj4gRXJyb3IsIHZpYSByZWFjdC1mbGlwLW1vdmUgPDxcXG5cXG5UaGUgcHJvcCB5b3UgcHJvdmlkZWQgZm9yIFxcJycgKyBhcmdzLnByb3AgKyAnXFwnIGlzIGludmFsaWQuIEl0IG5lZWRzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgb3IgYSBzdHJpbmcgdGhhdCBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBudW1iZXIuIFRoZSB2YWx1ZSB5b3UgcHJvdmlkZWQgaXMgXFwnJyArIGFyZ3MudmFsdWUgKyAnXFwnLlxcblxcbkFzIGEgcmVzdWx0LCAgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCwgd2hpY2ggaXMgXFwnJyArIGFyZ3MuZGVmYXVsdFZhbHVlICsgJ1xcJy5cXG4nKTtcbn07XG5cbnZhciBpbnZhbGlkRW50ZXJMZWF2ZVByZXNldCA9IGZ1bmN0aW9uIGludmFsaWRFbnRlckxlYXZlUHJlc2V0KGFyZ3Ncbi8vIHByZXR0aWVyLWlnbm9yZVxuKSB7XG4gIHJldHVybiBjb25zb2xlLmVycm9yKCdcXG4+PiBFcnJvciwgdmlhIHJlYWN0LWZsaXAtbW92ZSA8PFxcblxcblRoZSBlbnRlci9sZWF2ZSBwcmVzZXQgeW91IHByb3ZpZGVkIGlzIGludmFsaWQuIFdlIGRvblxcJ3QgY3VycmVudGx5IGhhdmUgYSBcXCcnICsgYXJncy52YWx1ZSArICcgcHJlc2V0LlxcJ1xcblxcbkFjY2VwdGFibGUgdmFsdWVzIGFyZSAnICsgYXJncy5hY2NlcHRhYmxlVmFsdWVzICsgJy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgXFwnJyArIGFyZ3MuZGVmYXVsdFZhbHVlICsgJ1xcJyB3aWxsIGJlIHVzZWQuXFxuJyk7XG59O1xuXG52YXIgcGFyZW50Tm9kZVBvc2l0aW9uU3RhdGljID0gd2Fybk9uY2UoJ1xcbj4+IFdhcm5pbmcsIHZpYSByZWFjdC1mbGlwLW1vdmUgPDxcXG5cXG5XaGVuIHVzaW5nIFwid3JhcHBlcmxlc3NcIiBtb2RlIChieSBzdXBwbHlpbmcgXFwndHlwZU5hbWVcXCcgb2YgXFwnbnVsbFxcJyksIHN0cmFuZ2UgdGhpbmdzIGhhcHBlbiB3aGVuIHRoZSBkaXJlY3QgcGFyZW50IGhhcyB0aGUgZGVmYXVsdCBcInN0YXRpY1wiIHBvc2l0aW9uLlxcblxcbkZsaXBNb3ZlIGhhcyBhZGRlZCBcXCdwb3NpdGlvbjogcmVsYXRpdmVcXCcgdG8gdGhpcyBub2RlLCB0byBlbnN1cmUgRmxpcCBNb3ZlIGFuaW1hdGVzIGNvcnJlY3RseS5cXG5cXG5UbyBhdm9pZCBzZWVpbmcgdGhpcyB3YXJuaW5nLCBzaW1wbHkgYXBwbHkgYSBub24tc3RhdGljIHBvc2l0aW9uIHRvIHRoYXQgcGFyZW50IG5vZGUuXFxuJyk7XG5cbnZhciBjaGlsZElzRGlzYWJsZWQgPSB3YXJuT25jZSgnXFxuPj4gV2FybmluZywgdmlhIHJlYWN0LWZsaXAtbW92ZSA8PFxcblxcbk9uZSBvciBtb3JlIG9mIEZsaXAgTW92ZVxcJ3MgY2hpbGQgZWxlbWVudHMgaGF2ZSB0aGUgaHRtbCBhdHRyaWJ1dGUgXFwnZGlzYWJsZWRcXCcgc2V0IHRvIHRydWUuXFxuXFxuUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2F1c2UgYW5pbWF0aW9ucyB0byBicmVhayBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMSBhbmQgYmVsb3cuIEVpdGhlciByZW1vdmUgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBvciBzZXQgXFwnYW5pbWF0aW9uXFwnIHRvIGZhbHNlLlxcbicpO1xuXG52YXIgZW50ZXJQcmVzZXRzID0ge1xuICBlbGV2YXRvcjoge1xuICAgIGZyb206IHsgdHJhbnNmb3JtOiAnc2NhbGUoMCknLCBvcGFjaXR5OiAnMCcgfSxcbiAgICB0bzogeyB0cmFuc2Zvcm06ICcnLCBvcGFjaXR5OiAnJyB9XG4gIH0sXG4gIGZhZGU6IHtcbiAgICBmcm9tOiB7IG9wYWNpdHk6ICcwJyB9LFxuICAgIHRvOiB7IG9wYWNpdHk6ICcnIH1cbiAgfSxcbiAgYWNjb3JkaW9uVmVydGljYWw6IHtcbiAgICBmcm9tOiB7IHRyYW5zZm9ybTogJ3NjYWxlWSgwKScsIHRyYW5zZm9ybU9yaWdpbjogJ2NlbnRlciB0b3AnIH0sXG4gICAgdG86IHsgdHJhbnNmb3JtOiAnJywgdHJhbnNmb3JtT3JpZ2luOiAnY2VudGVyIHRvcCcgfVxuICB9LFxuICBhY2NvcmRpb25Ib3Jpem9udGFsOiB7XG4gICAgZnJvbTogeyB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLCB0cmFuc2Zvcm1PcmlnaW46ICdsZWZ0IGNlbnRlcicgfSxcbiAgICB0bzogeyB0cmFuc2Zvcm06ICcnLCB0cmFuc2Zvcm1PcmlnaW46ICdsZWZ0IGNlbnRlcicgfVxuICB9LFxuICBub25lOiBudWxsXG59O1xuLyoqXG4gKiBSZWFjdCBGbGlwIE1vdmUgfCBlbnRlckxlYXZlUHJlc2V0c1xuICogKGMpIDIwMTYtcHJlc2VudCBKb3NodWEgQ29tZWF1XG4gKlxuICogVGhpcyBjb250YWlucyB0aGUgbWFzdGVyIGxpc3Qgb2YgcHJlc2V0cyBhdmFpbGFibGUgZm9yIGVudGVyL2xlYXZlIGFuaW1hdGlvbnMsXG4gKiBhbG9uZyB3aXRoIHRoZSBtYXBwaW5nIGJldHdlZW4gcHJlc2V0IGFuZCBzdHlsZXMuXG4gKi9cblxuXG52YXIgbGVhdmVQcmVzZXRzID0ge1xuICBlbGV2YXRvcjoge1xuICAgIGZyb206IHsgdHJhbnNmb3JtOiAnc2NhbGUoMSknLCBvcGFjaXR5OiAnMScgfSxcbiAgICB0bzogeyB0cmFuc2Zvcm06ICdzY2FsZSgwKScsIG9wYWNpdHk6ICcwJyB9XG4gIH0sXG4gIGZhZGU6IHtcbiAgICBmcm9tOiB7IG9wYWNpdHk6ICcxJyB9LFxuICAgIHRvOiB7IG9wYWNpdHk6ICcwJyB9XG4gIH0sXG4gIGFjY29yZGlvblZlcnRpY2FsOiB7XG4gICAgZnJvbTogeyB0cmFuc2Zvcm06ICdzY2FsZVkoMSknLCB0cmFuc2Zvcm1PcmlnaW46ICdjZW50ZXIgdG9wJyB9LFxuICAgIHRvOiB7IHRyYW5zZm9ybTogJ3NjYWxlWSgwKScsIHRyYW5zZm9ybU9yaWdpbjogJ2NlbnRlciB0b3AnIH1cbiAgfSxcbiAgYWNjb3JkaW9uSG9yaXpvbnRhbDoge1xuICAgIGZyb206IHsgdHJhbnNmb3JtOiAnc2NhbGVYKDEpJywgdHJhbnNmb3JtT3JpZ2luOiAnbGVmdCBjZW50ZXInIH0sXG4gICAgdG86IHsgdHJhbnNmb3JtOiAnc2NhbGVYKDApJywgdHJhbnNmb3JtT3JpZ2luOiAnbGVmdCBjZW50ZXInIH1cbiAgfSxcbiAgbm9uZTogbnVsbFxufTtcblxuLy8gRm9yIG5vdywgYXBwZWFyUHJlc2V0cyB3aWxsIGJlIGlkZW50aWNhbCB0byBlbnRlclByZXNldHMuXG4vLyBBc3NpZ25pbmcgYSBjdXN0b20gZXhwb3J0IGluIGNhc2Ugd2UgZXZlciB3YW50IHRvIGFkZCBhcHBlYXItc3BlY2lmaWMgb25lcy5cbnZhciBhcHBlYXJQcmVzZXRzID0gZW50ZXJQcmVzZXRzO1xuXG52YXIgZGVmYXVsdFByZXNldCA9ICdlbGV2YXRvcic7XG52YXIgZGlzYWJsZVByZXNldCA9ICdub25lJztcblxudmFyIGZpbmQgPSBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSwgYXJyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJbaV0sIGksIGFycikpIHtcbiAgICAgIHJldHVybiBhcnJbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cblxudmFyIGV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkocHJlZGljYXRlLCBhcnIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXByZWRpY2F0ZShhcnJbaV0sIGksIGFycikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIF9pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnIpIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG4gIHJldHVybiBfaXNBcnJheShhcnIpO1xufTtcblxudmFyIGlzRWxlbWVudEFuU0ZDID0gZnVuY3Rpb24gaXNFbGVtZW50QW5TRkMoZWxlbWVudCkge1xuICB2YXIgaXNOYXRpdmVET01FbGVtZW50ID0gdHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGlzTmF0aXZlRE9NRWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2YgZWxlbWVudC50eXBlID09PSAnZnVuY3Rpb24nICYmICFlbGVtZW50LnR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG59O1xuXG5mdW5jdGlvbiBvbWl0KG9iaikge1xuICB2YXIgYXR0cnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuXG4gIHZhciByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoYXR0cnMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBhcnJheXNFcXVhbChhLCBiKSB7XG4gIHZhciBzYW1lT2JqZWN0ID0gYSA9PT0gYjtcbiAgaWYgKHNhbWVPYmplY3QpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBub3RCb3RoQXJyYXlzID0gIV9pc0FycmF5KGEpIHx8ICFfaXNBcnJheShiKTtcbiAgdmFyIGRpZmZlcmVudExlbmd0aHMgPSBhLmxlbmd0aCAhPT0gYi5sZW5ndGg7XG5cbiAgaWYgKG5vdEJvdGhBcnJheXMgfHwgZGlmZmVyZW50TGVuZ3Rocykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBldmVyeShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHtcbiAgICByZXR1cm4gZWxlbWVudCA9PT0gYltpbmRleF07XG4gIH0sIGEpO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplU3RyaW5nKGZuKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgaWYgKCFjYWNoZVtzdHJdKSB7XG4gICAgICBjYWNoZVtzdHJdID0gZm4oc3RyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW3N0cl07XG4gIH07XG59XG5cbnZhciBoeXBoZW5hdGUgPSBtZW1vaXplU3RyaW5nKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csICctJDEnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG5cblxuXG5cblxuXG5cblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cblxuXG52YXIgaW5oZXJpdHMgPSBmdW5jdGlvbiAoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG4vKipcbiAqIFJlYWN0IEZsaXAgTW92ZSB8IHByb3BDb252ZXJ0ZXJcbiAqIChjKSAyMDE2LXByZXNlbnQgSm9zaHVhIENvbWVhdVxuICpcbiAqIEFic3RyYWN0ZWQgYXdheSBhIGJ1bmNoIG9mIHRoZSBtZXNzeSBidXNpbmVzcyB3aXRoIHByb3BzLlxuICogICAtIHByb3BzIGZsb3cgdHlwZXMgYW5kIGRlZmF1bHRQcm9wc1xuICogICAtIFR5cGUgY29udmVyc2lvbiAoV2UgYWNjZXB0ICdzdHJpbmcnIGFuZCAnbnVtYmVyJyB2YWx1ZXMgZm9yIGR1cmF0aW9uLFxuICogICAgIGRlbGF5LCBhbmQgb3RoZXIgZmllbGRzLCBidXQgd2UgYWN0dWFsbHkgbmVlZCB0aGVtIHRvIGJlIGludHMuKVxuICogICAtIENoaWxkcmVuIGNvbnZlcnNpb24gKHdlIG5lZWQgdGhlIGNoaWxkcmVuIHRvIGJlIGFuIGFycmF5LiBNYXkgbm90IGFsd2F5c1xuICogICAgIGJlLCBpZiBhIHNpbmdsZSBjaGlsZCBpcyBwYXNzZWQgaW4uKVxuICogICAtIFJlc29sdmluZyBhbmltYXRpb24gcHJlc2V0cyBpbnRvIHRoZWlyIGJhc2UgQ1NTIHN0eWxlc1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBibG9jay1zY29wZWQtdmFyICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGUtaW1wb3J0c1xuXG5cbmZ1bmN0aW9uIHByb3BDb252ZXJ0ZXIoQ29tcG9zZWRDb21wb25lbnQpIHtcbiAgdmFyIF9jbGFzcywgX3RlbXA7XG5cbiAgcmV0dXJuIF90ZW1wID0gX2NsYXNzID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICBpbmhlcml0cyhGbGlwTW92ZVByb3BDb252ZXJ0ZXIsIF9Db21wb25lbnQpO1xuXG4gICAgZnVuY3Rpb24gRmxpcE1vdmVQcm9wQ29udmVydGVyKCkge1xuICAgICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgRmxpcE1vdmVQcm9wQ29udmVydGVyKTtcbiAgICAgIHJldHVybiBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Db21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBGbGlwTW92ZVByb3BDb252ZXJ0ZXIucHJvdG90eXBlLmNoZWNrQ2hpbGRyZW4gPSBmdW5jdGlvbiBjaGVja0NoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAvLyBTa2lwIGFsbCBjb25zb2xlIHdhcm5pbmdzIGluIHByb2R1Y3Rpb24uXG4gICAgICAvLyBCYWlsIGVhcmx5LCB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3b3JrLlxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzYW1lIGFzIFJlYWN0Lk5vZGUsIGJ1dCB3aXRob3V0IGZyYWdtZW50cywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80NzgxXG5cblxuICAgICAgLy8gRmxpcE1vdmUgZG9lcyBub3Qgc3VwcG9ydCBzdGF0ZWxlc3MgZnVuY3Rpb25hbCBjb21wb25lbnRzLlxuICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFueSBzdXBwbGllZCBjb21wb25lbnRzIHdvbid0IHdvcmsuXG4gICAgICAvLyBJZiB0aGUgY2hpbGQgZG9lc24ndCBoYXZlIGEga2V5LCBpdCBtZWFucyB3ZSBhcmVuJ3QgYW5pbWF0aW5nIGl0LlxuICAgICAgLy8gSXQncyBhbGxvd2VkIHRvIGJlIGFuIFNGQywgc2luY2Ugd2UgaWdub3JlIGl0LlxuICAgICAgQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIC8vIG51bGwsIHVuZGVmaW5lZCwgYW5kIGJvb2xlYW5zIHdpbGwgYmUgZmlsdGVyZWQgb3V0IGJ5IENoaWxkcmVuLnRvQXJyYXlcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwgfHwgdHlwZW9mIGNoaWxkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHR5cGVvZiBjaGlsZCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoY2hpbGQpKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBwcmltaXRpdmVOb2RlU3VwcGxpZWQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNFbGVtZW50QW5TRkMoY2hpbGQpICYmIGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVsZXNzRnVuY3Rpb25hbENvbXBvbmVudFN1cHBsaWVkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBGbGlwTW92ZVByb3BDb252ZXJ0ZXIucHJvdG90eXBlLmNvbnZlcnRQcm9wcyA9IGZ1bmN0aW9uIGNvbnZlcnRQcm9wcyhwcm9wcykge1xuICAgICAgdmFyIHdvcmtpbmdQcm9wcyA9IHtcbiAgICAgICAgLy8gZXhwbGljaXRseSBieXBhc3MgdGhlIHByb3BzIHRoYXQgZG9uJ3QgbmVlZCBjb252ZXJzaW9uXG4gICAgICAgIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZWFzaW5nOiBwcm9wcy5lYXNpbmcsXG4gICAgICAgIG9uU3RhcnQ6IHByb3BzLm9uU3RhcnQsXG4gICAgICAgIG9uRmluaXNoOiBwcm9wcy5vbkZpbmlzaCxcbiAgICAgICAgb25TdGFydEFsbDogcHJvcHMub25TdGFydEFsbCxcbiAgICAgICAgb25GaW5pc2hBbGw6IHByb3BzLm9uRmluaXNoQWxsLFxuICAgICAgICB0eXBlTmFtZTogcHJvcHMudHlwZU5hbWUsXG4gICAgICAgIGRpc2FibGVBbGxBbmltYXRpb25zOiBwcm9wcy5kaXNhYmxlQWxsQW5pbWF0aW9ucyxcbiAgICAgICAgZ2V0UG9zaXRpb246IHByb3BzLmdldFBvc2l0aW9uLFxuICAgICAgICBtYWludGFpbkNvbnRhaW5lckhlaWdodDogcHJvcHMubWFpbnRhaW5Db250YWluZXJIZWlnaHQsXG4gICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBwcm9wcy52ZXJ0aWNhbEFsaWdubWVudCxcblxuICAgICAgICAvLyBEbyBzdHJpbmctdG8taW50IGNvbnZlcnNpb24gZm9yIGFsbCB0aW1pbmctcmVsYXRlZCBwcm9wc1xuICAgICAgICBkdXJhdGlvbjogdGhpcy5jb252ZXJ0VGltaW5nUHJvcCgnZHVyYXRpb24nKSxcbiAgICAgICAgZGVsYXk6IHRoaXMuY29udmVydFRpbWluZ1Byb3AoJ2RlbGF5JyksXG4gICAgICAgIHN0YWdnZXJEdXJhdGlvbkJ5OiB0aGlzLmNvbnZlcnRUaW1pbmdQcm9wKCdzdGFnZ2VyRHVyYXRpb25CeScpLFxuICAgICAgICBzdGFnZ2VyRGVsYXlCeTogdGhpcy5jb252ZXJ0VGltaW5nUHJvcCgnc3RhZ2dlckRlbGF5QnknKSxcblxuICAgICAgICAvLyBPdXIgZW50ZXIvbGVhdmUgYW5pbWF0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGFzIGJvb2xlYW4gKGRlZmF1bHQgb3JcbiAgICAgICAgLy8gZGlzYWJsZWQpLCBzdHJpbmcgKHByZXNldCBuYW1lKSwgb3Igb2JqZWN0IChhY3R1YWwgYW5pbWF0aW9uIHZhbHVlcykuXG4gICAgICAgIC8vIExldCdzIHN0YW5kYXJkaXplIHRoaXMgc28gdGhhdCB0aGV5J3JlIGFsd2F5cyBvYmplY3RzXG4gICAgICAgIGFwcGVhckFuaW1hdGlvbjogdGhpcy5jb252ZXJ0QW5pbWF0aW9uUHJvcChwcm9wcy5hcHBlYXJBbmltYXRpb24sIGFwcGVhclByZXNldHMpLFxuICAgICAgICBlbnRlckFuaW1hdGlvbjogdGhpcy5jb252ZXJ0QW5pbWF0aW9uUHJvcChwcm9wcy5lbnRlckFuaW1hdGlvbiwgZW50ZXJQcmVzZXRzKSxcbiAgICAgICAgbGVhdmVBbmltYXRpb246IHRoaXMuY29udmVydEFuaW1hdGlvblByb3AocHJvcHMubGVhdmVBbmltYXRpb24sIGxlYXZlUHJlc2V0cyksXG5cbiAgICAgICAgZGVsZWdhdGVkOiB7fVxuICAgICAgfTtcblxuICAgICAgdGhpcy5jaGVja0NoaWxkcmVuKHdvcmtpbmdQcm9wcy5jaGlsZHJlbik7XG5cbiAgICAgIC8vIEdhdGhlciBhbnkgYWRkaXRpb25hbCBwcm9wcztcbiAgICAgIC8vIHRoZXkgd2lsbCBiZSBkZWxlZ2F0ZWQgdG8gdGhlIFJlYWN0RWxlbWVudCBjcmVhdGVkLlxuICAgICAgdmFyIHByaW1hcnlQcm9wS2V5cyA9IE9iamVjdC5rZXlzKHdvcmtpbmdQcm9wcyk7XG4gICAgICB2YXIgZGVsZWdhdGVkUHJvcHMgPSBvbWl0KHRoaXMucHJvcHMsIHByaW1hcnlQcm9wS2V5cyk7XG5cbiAgICAgIC8vIFRoZSBGbGlwTW92ZSBjb250YWluZXIgZWxlbWVudCBuZWVkcyB0byBoYXZlIGEgbm9uLXN0YXRpYyBwb3NpdGlvbi5cbiAgICAgIC8vIFdlIHVzZSBgcmVsYXRpdmVgIGJ5IGRlZmF1bHQsIGJ1dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlci5cbiAgICAgIC8vIE5vdyB0aGF0IHdlJ3JlIGRlbGVnYXRpbmcgcHJvcHMsIHdlIG5lZWQgdG8gbWVyZ2UgdGhpcyBpbi5cbiAgICAgIGRlbGVnYXRlZFByb3BzLnN0eWxlID0gX2V4dGVuZHMoe1xuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgICAgfSwgZGVsZWdhdGVkUHJvcHMuc3R5bGUpO1xuXG4gICAgICB3b3JraW5nUHJvcHMuZGVsZWdhdGVkID0gZGVsZWdhdGVkUHJvcHM7XG5cbiAgICAgIHJldHVybiB3b3JraW5nUHJvcHM7XG4gICAgfTtcblxuICAgIEZsaXBNb3ZlUHJvcENvbnZlcnRlci5wcm90b3R5cGUuY29udmVydFRpbWluZ1Byb3AgPSBmdW5jdGlvbiBjb252ZXJ0VGltaW5nUHJvcChwcm9wKSB7XG4gICAgICB2YXIgcmF3VmFsdWUgPSB0aGlzLnByb3BzW3Byb3BdO1xuXG4gICAgICB2YXIgdmFsdWUgPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8gcmF3VmFsdWUgOiBwYXJzZUludChyYXdWYWx1ZSwgMTApO1xuXG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBGbGlwTW92ZVByb3BDb252ZXJ0ZXIuZGVmYXVsdFByb3BzW3Byb3BdO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgaW52YWxpZFR5cGVGb3JUaW1pbmdQcm9wKHtcbiAgICAgICAgICAgIHByb3A6IHByb3AsXG4gICAgICAgICAgICB2YWx1ZTogcmF3VmFsdWUsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuXG5cbiAgICBGbGlwTW92ZVByb3BDb252ZXJ0ZXIucHJvdG90eXBlLmNvbnZlcnRBbmltYXRpb25Qcm9wID0gZnVuY3Rpb24gY29udmVydEFuaW1hdGlvblByb3AoYW5pbWF0aW9uLCBwcmVzZXRzKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiBhbmltYXRpb24gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGFuaW1hdGlvbikpIHtcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gSWYgaXQncyB0cnVlLCB3ZSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBwcmVzZXQuXG4gICAgICAgICAgICAvLyBJZiBpdCdzIGZhbHNlLCB3ZSB3YW50IHRvIHVzZSB0aGUgJ25vbmUnIHByZXNldC5cbiAgICAgICAgICAgIHJldHVybiBwcmVzZXRzW2FuaW1hdGlvbiA/IGRlZmF1bHRQcmVzZXQgOiBkaXNhYmxlUHJlc2V0XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcHJlc2V0S2V5cyA9IE9iamVjdC5rZXlzKHByZXNldHMpO1xuXG4gICAgICAgICAgICBpZiAocHJlc2V0S2V5cy5pbmRleE9mKGFuaW1hdGlvbikgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaW52YWxpZEVudGVyTGVhdmVQcmVzZXQoe1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IGFuaW1hdGlvbixcbiAgICAgICAgICAgICAgICAgIGFjY2VwdGFibGVWYWx1ZXM6IHByZXNldEtleXMuam9pbignLCAnKSxcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFByZXNldFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHByZXNldHNbZGVmYXVsdFByZXNldF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVzZXRzW2FuaW1hdGlvbl07XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIEZsaXBNb3ZlUHJvcENvbnZlcnRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9zZWRDb21wb25lbnQsIHRoaXMuY29udmVydFByb3BzKHRoaXMucHJvcHMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEZsaXBNb3ZlUHJvcENvbnZlcnRlcjtcbiAgfShDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGVhc2luZzogJ2Vhc2UtaW4tb3V0JyxcbiAgICBkdXJhdGlvbjogMzUwLFxuICAgIGRlbGF5OiAwLFxuICAgIHN0YWdnZXJEdXJhdGlvbkJ5OiAwLFxuICAgIHN0YWdnZXJEZWxheUJ5OiAwLFxuICAgIHR5cGVOYW1lOiAnZGl2JyxcbiAgICBlbnRlckFuaW1hdGlvbjogZGVmYXVsdFByZXNldCxcbiAgICBsZWF2ZUFuaW1hdGlvbjogZGVmYXVsdFByZXNldCxcbiAgICBkaXNhYmxlQWxsQW5pbWF0aW9uczogZmFsc2UsXG4gICAgZ2V0UG9zaXRpb246IGZ1bmN0aW9uIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH0sXG4gICAgbWFpbnRhaW5Db250YWluZXJIZWlnaHQ6IGZhbHNlLFxuICAgIHZlcnRpY2FsQWxpZ25tZW50OiAndG9wJ1xuICB9LCBfdGVtcDtcbn1cblxuLyoqXG4gKiBSZWFjdCBGbGlwIE1vdmVcbiAqIChjKSAyMDE2LXByZXNlbnQgSm9zaHVhIENvbWVhdVxuICpcbiAqIFRoZXNlIG1ldGhvZHMgcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgRE9NLlxuICogVGhleSBhbG1vc3QgYWx3YXlzIGhhdmUgc2lkZSBlZmZlY3RzLCBhbmQgd2lsbCBob3BlZnVsbHkgYmVjb21lIHRoZVxuICogb25seSBzcG90IGluIHRoZSBjb2RlYmFzZSB3aXRoIGltcHVyZSBmdW5jdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzVG9ET01Ob2RlKF9yZWYpIHtcbiAgdmFyIGRvbU5vZGUgPSBfcmVmLmRvbU5vZGUsXG4gICAgICBzdHlsZXMgPSBfcmVmLnN0eWxlcztcblxuICAvLyBDYW4ndCBqdXN0IGRvIGFuIG9iamVjdCBtZXJnZSBiZWNhdXNlIGRvbU5vZGUuc3R5bGVzIGlzIG5vIHJlZ3VsYXIgb2JqZWN0LlxuICAvLyBOZWVkIHRvIGRvIGl0IHRoaXMgd2F5IGZvciB0aGUgZW5naW5lIHRvIGZpcmUgaXRzIGBzZXRgIGxpc3RlbmVycy5cbiAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBkb21Ob2RlLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShrZXkpLCBzdHlsZXNba2V5XSk7XG4gIH0pO1xufVxuXG4vLyBNb2RpZmllZCBmcm9tIE1vZGVybml6clxuZnVuY3Rpb24gd2hpY2hUcmFuc2l0aW9uRXZlbnQoKSB7XG4gIHZhciB0cmFuc2l0aW9ucyA9IHtcbiAgICB0cmFuc2l0aW9uOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgJy1vLXRyYW5zaXRpb24nOiAnb1RyYW5zaXRpb25FbmQnLFxuICAgICctbW96LXRyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgJy13ZWJraXQtdHJhbnNpdGlvbic6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJ1xuICB9O1xuXG4gIC8vIElmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VybGVzcyBlbnZpcm9ubWVudCAoZWcuIFNTUiksIGl0IGRvZXNuJ3QgYXBwbHkuXG4gIC8vIFJldHVybiBhIHBsYWNlaG9sZGVyIHN0cmluZywgZm9yIGNvbnNpc3RlbnQgdHlwZSByZXR1cm4uXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gJyc7XG5cbiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmFrZWVsZW1lbnQnKTtcblxuICB2YXIgbWF0Y2ggPSBmaW5kKGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIGVsLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCkgIT09IHVuZGVmaW5lZDtcbiAgfSwgT2JqZWN0LmtleXModHJhbnNpdGlvbnMpKTtcblxuICAvLyBJZiBubyBgdHJhbnNpdGlvbmAgaXMgZm91bmQsIHdlIG11c3QgYmUgcnVubmluZyBpbiBhIGJyb3dzZXIgc28gYW5jaWVudCxcbiAgLy8gUmVhY3QgaXRzZWxmIHdvbid0IHJ1bi4gUmV0dXJuIGFuIGVtcHR5IHN0cmluZywgZm9yIGNvbnNpc3RlbnQgdHlwZSByZXR1cm5cbiAgcmV0dXJuIG1hdGNoID8gdHJhbnNpdGlvbnNbbWF0Y2hdIDogJyc7XG59XG5cbnZhciBnZXRSZWxhdGl2ZUJvdW5kaW5nQm94ID0gZnVuY3Rpb24gZ2V0UmVsYXRpdmVCb3VuZGluZ0JveChfcmVmMikge1xuICB2YXIgY2hpbGREb21Ob2RlID0gX3JlZjIuY2hpbGREb21Ob2RlLFxuICAgICAgcGFyZW50RG9tTm9kZSA9IF9yZWYyLnBhcmVudERvbU5vZGUsXG4gICAgICBnZXRQb3NpdGlvbiA9IF9yZWYyLmdldFBvc2l0aW9uO1xuXG4gIHZhciBwYXJlbnRCb3ggPSBnZXRQb3NpdGlvbihwYXJlbnREb21Ob2RlKTtcblxuICB2YXIgX2dldFBvc2l0aW9uID0gZ2V0UG9zaXRpb24oY2hpbGREb21Ob2RlKSxcbiAgICAgIHRvcCA9IF9nZXRQb3NpdGlvbi50b3AsXG4gICAgICBsZWZ0ID0gX2dldFBvc2l0aW9uLmxlZnQsXG4gICAgICByaWdodCA9IF9nZXRQb3NpdGlvbi5yaWdodCxcbiAgICAgIGJvdHRvbSA9IF9nZXRQb3NpdGlvbi5ib3R0b20sXG4gICAgICB3aWR0aCA9IF9nZXRQb3NpdGlvbi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9nZXRQb3NpdGlvbi5oZWlnaHQ7XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRvcCAtIHBhcmVudEJveC50b3AsXG4gICAgbGVmdDogbGVmdCAtIHBhcmVudEJveC5sZWZ0LFxuICAgIHJpZ2h0OiBwYXJlbnRCb3gucmlnaHQgLSByaWdodCxcbiAgICBib3R0b206IHBhcmVudEJveC5ib3R0b20gLSBib3R0b20sXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59O1xuXG4vKiogZ2V0UG9zaXRpb25EZWx0YVxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVsdGEgYmV0d2VlbiB0d28gYm91bmRpbmcgYm94ZXMsIHRvIGZpZ3VyZSBvdXRcbiAqIGhvdyBtYW55IHBpeGVscyBvbiBlYWNoIGF4aXMgdGhlIGVsZW1lbnQgaGFzIG1vdmVkLlxuICpcbiAqL1xudmFyIGdldFBvc2l0aW9uRGVsdGEgPSBmdW5jdGlvbiBnZXRQb3NpdGlvbkRlbHRhKF9yZWYzKSB7XG4gIHZhciBjaGlsZERvbU5vZGUgPSBfcmVmMy5jaGlsZERvbU5vZGUsXG4gICAgICBjaGlsZEJvdW5kaW5nQm94ID0gX3JlZjMuY2hpbGRCb3VuZGluZ0JveCxcbiAgICAgIHBhcmVudEJvdW5kaW5nQm94ID0gX3JlZjMucGFyZW50Qm91bmRpbmdCb3gsXG4gICAgICBnZXRQb3NpdGlvbiA9IF9yZWYzLmdldFBvc2l0aW9uO1xuXG4gIC8vIFRFTVA6IEEgbXlzdGVyeSBidWcgaXMgc29tZXRpbWVzIGNhdXNpbmcgdW5uZWNlc3NhcnkgYm91bmRpbmdCb3hlcyB0b1xuICB2YXIgZGVmYXVsdEJveCA9IHtcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIHdpZHRoOiAwXG4gIH07XG5cbiAgLy8gT3VyIG9sZCBib3ggaXMgaXRzIGxhc3QgY2FsY3VsYXRlZCBwb3NpdGlvbiwgZGVyaXZlZCBvbiBtb3VudCBvciBhdCB0aGVcbiAgLy8gc3RhcnQgb2YgdGhlIHByZXZpb3VzIGFuaW1hdGlvbi5cbiAgdmFyIG9sZFJlbGF0aXZlQm94ID0gY2hpbGRCb3VuZGluZ0JveCB8fCBkZWZhdWx0Qm94O1xuICB2YXIgcGFyZW50Qm94ID0gcGFyZW50Qm91bmRpbmdCb3ggfHwgZGVmYXVsdEJveDtcblxuICAvLyBPdXIgbmV3IGJveCBpcyB0aGUgbmV3IGZpbmFsIHJlc3RpbmcgcGxhY2U6IFdoZXJlIHdlIGV4cGVjdCBpdCB0byB3aW5kIHVwXG4gIC8vIGFmdGVyIHRoZSBhbmltYXRpb24uIEZpcnN0IHdlIGdldCB0aGUgYm94IGluIGFic29sdXRlIHRlcm1zIChBS0EgcmVsYXRpdmVcbiAgLy8gdG8gdGhlIHZpZXdwb3J0KSwgYW5kIHRoZW4gd2UgY2FsY3VsYXRlIGl0cyByZWxhdGl2ZSBib3ggKHJlbGF0aXZlIHRvIHRoZVxuICAvLyBwYXJlbnQgY29udGFpbmVyKVxuICB2YXIgbmV3QWJzb2x1dGVCb3ggPSBnZXRQb3NpdGlvbihjaGlsZERvbU5vZGUpO1xuICB2YXIgbmV3UmVsYXRpdmVCb3ggPSB7XG4gICAgdG9wOiBuZXdBYnNvbHV0ZUJveC50b3AgLSBwYXJlbnRCb3gudG9wLFxuICAgIGxlZnQ6IG5ld0Fic29sdXRlQm94LmxlZnQgLSBwYXJlbnRCb3gubGVmdFxuICB9O1xuXG4gIHJldHVybiBbb2xkUmVsYXRpdmVCb3gubGVmdCAtIG5ld1JlbGF0aXZlQm94LmxlZnQsIG9sZFJlbGF0aXZlQm94LnRvcCAtIG5ld1JlbGF0aXZlQm94LnRvcF07XG59O1xuXG4vKiogcmVtb3ZlTm9kZUZyb21ET01GbG93XG4gKiBUaGlzIG1ldGhvZCBkb2VzIHNvbWV0aGluZyB2ZXJ5IHNuZWFreTogaXQgcmVtb3ZlcyBhIERPTSBub2RlIGZyb20gdGhlXG4gKiBkb2N1bWVudCBmbG93LCBidXQgd2l0aG91dCBhY3R1YWxseSBjaGFuZ2luZyBpdHMgb24tc2NyZWVuIHBvc2l0aW9uLlxuICpcbiAqIEl0IHdvcmtzIGJ5IGNhbGN1bGF0aW5nIHdoZXJlIHRoZSBub2RlIGlzLCBhbmQgdGhlbiBhcHBseWluZyBzdHlsZXNcbiAqIHNvIHRoYXQgaXQgd2luZHMgdXAgYmVpbmcgcG9zaXRpb25lZCBhYnNvbHV0ZWx5LCBidXQgaW4gZXhhY3RseSB0aGVcbiAqIHNhbWUgcGxhY2UuXG4gKlxuICogVGhpcyBpcyBhIHZpdGFsIHBhcnQgb2YgdGhlIEZMSVAgdGVjaG5pcXVlLlxuICovXG52YXIgcmVtb3ZlTm9kZUZyb21ET01GbG93ID0gZnVuY3Rpb24gcmVtb3ZlTm9kZUZyb21ET01GbG93KGNoaWxkRGF0YSwgdmVydGljYWxBbGlnbm1lbnQpIHtcbiAgdmFyIGRvbU5vZGUgPSBjaGlsZERhdGEuZG9tTm9kZSxcbiAgICAgIGJvdW5kaW5nQm94ID0gY2hpbGREYXRhLmJvdW5kaW5nQm94O1xuXG5cbiAgaWYgKCFkb21Ob2RlIHx8ICFib3VuZGluZ0JveCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvciB0aGlzIHRvIHdvcmssIHdlIGhhdmUgdG8gb2Zmc2V0IGFueSBnaXZlbiBgbWFyZ2luYC5cbiAgdmFyIGNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tTm9kZSk7XG5cbiAgLy8gV2UgbmVlZCB0byBjbGVhbiB1cCBtYXJnaW5zLCBieSBjb252ZXJ0aW5nIGFuZCByZW1vdmluZyBzdWZmaXg6XG4gIC8vIGVnLiAnMjFweCcgLT4gMjFcbiAgdmFyIG1hcmdpbkF0dHJzID0gWydtYXJnaW4tdG9wJywgJ21hcmdpbi1sZWZ0JywgJ21hcmdpbi1yaWdodCddO1xuICB2YXIgbWFyZ2lucyA9IG1hcmdpbkF0dHJzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBtYXJnaW4pIHtcbiAgICB2YXIgX2JhYmVsSGVscGVycyRleHRlbmRzO1xuXG4gICAgdmFyIHByb3BlcnR5VmFsID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZShtYXJnaW4pO1xuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhY2MsIChfYmFiZWxIZWxwZXJzJGV4dGVuZHMgPSB7fSwgX2JhYmVsSGVscGVycyRleHRlbmRzW21hcmdpbl0gPSBOdW1iZXIocHJvcGVydHlWYWwucmVwbGFjZSgncHgnLCAnJykpLCBfYmFiZWxIZWxwZXJzJGV4dGVuZHMpKTtcbiAgfSwge30pO1xuXG4gIC8vIElmIHdlJ3JlIGJvdHRvbS1hbGlnbmVkLCB3ZSBuZWVkIHRvIGFkZCB0aGUgaGVpZ2h0IG9mIHRoZSBjaGlsZCB0byBpdHNcbiAgLy8gdG9wIG9mZnNldC4gVGhpcyBpcyBiZWNhdXNlLCB3aGVuIHRoZSBjb250YWluZXIgaXMgYm90dG9tLWFsaWduZWQsIGl0c1xuICAvLyBoZWlnaHQgc2hyaW5rcyBmcm9tIHRoZSB0b3AsIG5vdCB0aGUgYm90dG9tLiBXZSdyZSByZW1vdmluZyB0aGlzIG5vZGVcbiAgLy8gZnJvbSB0aGUgZmxvdywgc28gdGhlIHRvcCBpcyBnb2luZyB0byBkcm9wIGJ5IGl0cyBoZWlnaHQuXG4gIHZhciB0b3BPZmZzZXQgPSB2ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2JvdHRvbScgPyBib3VuZGluZ0JveC50b3AgLSBib3VuZGluZ0JveC5oZWlnaHQgOiBib3VuZGluZ0JveC50b3A7XG5cbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IHRvcE9mZnNldCAtIG1hcmdpbnNbJ21hcmdpbi10b3AnXSArICdweCcsXG4gICAgbGVmdDogYm91bmRpbmdCb3gubGVmdCAtIG1hcmdpbnNbJ21hcmdpbi1sZWZ0J10gKyAncHgnLFxuICAgIHJpZ2h0OiBib3VuZGluZ0JveC5yaWdodCAtIG1hcmdpbnNbJ21hcmdpbi1yaWdodCddICsgJ3B4J1xuICB9O1xuXG4gIGFwcGx5U3R5bGVzVG9ET01Ob2RlKHsgZG9tTm9kZTogZG9tTm9kZSwgc3R5bGVzOiBzdHlsZXMgfSk7XG59O1xuXG4vKiogdXBkYXRlSGVpZ2h0UGxhY2Vob2xkZXJcbiAqIEFuIG9wdGlvbmFsIHByb3BlcnR5IHRvIEZsaXBNb3ZlIGlzIGEgYG1haW50YWluQ29udGFpbmVySGVpZ2h0YCBib29sZWFuLlxuICogVGhpcyBwcm9wZXJ0eSBjcmVhdGVzIGEgbm9kZSB0aGF0IGZpbGxzIHNwYWNlLCBzbyB0aGF0IHRoZSBwYXJlbnRcbiAqIGNvbnRhaW5lciBkb2Vzbid0IGNvbGxhcHNlIHdoZW4gaXRzIGNoaWxkcmVuIGFyZSByZW1vdmVkIGZyb20gdGhlXG4gKiBkb2N1bWVudCBmbG93LlxuICovXG52YXIgdXBkYXRlSGVpZ2h0UGxhY2Vob2xkZXIgPSBmdW5jdGlvbiB1cGRhdGVIZWlnaHRQbGFjZWhvbGRlcihfcmVmNCkge1xuICB2YXIgZG9tTm9kZSA9IF9yZWY0LmRvbU5vZGUsXG4gICAgICBwYXJlbnREYXRhID0gX3JlZjQucGFyZW50RGF0YSxcbiAgICAgIGdldFBvc2l0aW9uID0gX3JlZjQuZ2V0UG9zaXRpb247XG5cbiAgdmFyIHBhcmVudERvbU5vZGUgPSBwYXJlbnREYXRhLmRvbU5vZGU7XG4gIHZhciBwYXJlbnRCb3VuZGluZ0JveCA9IHBhcmVudERhdGEuYm91bmRpbmdCb3g7XG5cbiAgaWYgKCFwYXJlbnREb21Ob2RlIHx8ICFwYXJlbnRCb3VuZGluZ0JveCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgKndpdGhvdXQqIHRoZSBwbGFjZWhvbGRlci5cbiAgLy8gU2luY2UgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwbGFjZWhvbGRlciBtaWdodCBhbHJlYWR5IGJlIHByZXNlbnQsXG4gIC8vIHdlIGZpcnN0IHNldCBpdHMgaGVpZ2h0IHRvIDAuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSBjb250YWluZXIgdG8gY29sbGFwc2UgZG93biB0byB0aGUgc2l6ZSBvZiBqdXN0IGl0c1xuICAvLyBjb250ZW50IChwbHVzIGNvbnRhaW5lciBwYWRkaW5nIG9yIGJvcmRlcnMgaWYgYW55KS5cbiAgYXBwbHlTdHlsZXNUb0RPTU5vZGUoeyBkb21Ob2RlOiBkb21Ob2RlLCBzdHlsZXM6IHsgaGVpZ2h0OiAnMCcgfSB9KTtcblxuICAvLyBGaW5kIHRoZSBkaXN0YW5jZSBieSB3aGljaCB0aGUgY29udGFpbmVyIHdvdWxkIGJlIGNvbGxhcHNlZCBieSBlbGVtZW50c1xuICAvLyBsZWF2aW5nLiBXZSBjb21wYXJlIHRoZSBmcmVzaGx5LWF2YWlsYWJsZSBwYXJlbnQgaGVpZ2h0IHdpdGggdGhlIG9yaWdpbmFsLFxuICAvLyBjYWNoZWQgY29udGFpbmVyIGhlaWdodC5cbiAgdmFyIG9yaWdpbmFsUGFyZW50SGVpZ2h0ID0gcGFyZW50Qm91bmRpbmdCb3guaGVpZ2h0O1xuICB2YXIgY29sbGFwc2VkUGFyZW50SGVpZ2h0ID0gZ2V0UG9zaXRpb24ocGFyZW50RG9tTm9kZSkuaGVpZ2h0O1xuICB2YXIgcmVkdWN0aW9uSW5IZWlnaHQgPSBvcmlnaW5hbFBhcmVudEhlaWdodCAtIGNvbGxhcHNlZFBhcmVudEhlaWdodDtcblxuICAvLyBJZiB0aGUgY29udGFpbmVyIGhhcyBiZWNvbWUgc2hvcnRlciwgdXBkYXRlIHRoZSBwYWRkaW5nIGVsZW1lbnQnc1xuICAvLyBoZWlnaHQgdG8gdGFrZSB1cCB0aGUgZGlmZmVyZW5jZS4gT3RoZXJ3aXNlIHNldCBpdHMgaGVpZ2h0IHRvIHplcm8sXG4gIC8vIHNvIHRoYXQgaXQgaGFzIG5vIGVmZmVjdC5cbiAgdmFyIHN0eWxlcyA9IHtcbiAgICBoZWlnaHQ6IHJlZHVjdGlvbkluSGVpZ2h0ID4gMCA/IHJlZHVjdGlvbkluSGVpZ2h0ICsgJ3B4JyA6ICcwJ1xuICB9O1xuXG4gIGFwcGx5U3R5bGVzVG9ET01Ob2RlKHsgZG9tTm9kZTogZG9tTm9kZSwgc3R5bGVzOiBzdHlsZXMgfSk7XG59O1xuXG52YXIgZ2V0TmF0aXZlTm9kZSA9IGZ1bmN0aW9uIGdldE5hdGl2ZU5vZGUoZWxlbWVudCkge1xuICAvLyBXaGVuIHJ1bm5pbmcgaW4gYSB3aW5kb3dsZXNzIGVudmlyb25tZW50LCBhYm9ydCFcbiAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGBlbGVtZW50YCBtYXkgYWxyZWFkeSBiZSBhIG5hdGl2ZSBub2RlLlxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvLyBXaGlsZSBSZWFjdERPTSdzIGBmaW5kRE9NTm9kZWAgaXMgZGlzY291cmFnZWQsIGl0J3MgdGhlIG9ubHlcbiAgLy8gcHVibGljbHktZXhwb3NlZCB3YXkgdG8gZmluZCB0aGUgdW5kZXJseWluZyBET00gbm9kZSBmb3JcbiAgLy8gY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gIHZhciBmb3VuZE5vZGUgPSBmaW5kRE9NTm9kZShlbGVtZW50KTtcblxuICBpZiAoZm91bmROb2RlICYmIGZvdW5kTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAvLyBUZXh0IG5vZGVzIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZsb3d0eXBlL25vLXdlYWstdHlwZXNcbiAgcmV0dXJuIGZvdW5kTm9kZTtcbn07XG5cbnZhciBjcmVhdGVUcmFuc2l0aW9uU3RyaW5nID0gZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvblN0cmluZyhpbmRleCwgcHJvcHMpIHtcbiAgdmFyIGRlbGF5ID0gcHJvcHMuZGVsYXksXG4gICAgICBkdXJhdGlvbiA9IHByb3BzLmR1cmF0aW9uO1xuICB2YXIgc3RhZ2dlckR1cmF0aW9uQnkgPSBwcm9wcy5zdGFnZ2VyRHVyYXRpb25CeSxcbiAgICAgIHN0YWdnZXJEZWxheUJ5ID0gcHJvcHMuc3RhZ2dlckRlbGF5QnksXG4gICAgICBlYXNpbmcgPSBwcm9wcy5lYXNpbmc7XG5cblxuICBkZWxheSArPSBpbmRleCAqIHN0YWdnZXJEZWxheUJ5O1xuICBkdXJhdGlvbiArPSBpbmRleCAqIHN0YWdnZXJEdXJhdGlvbkJ5O1xuXG4gIHZhciBjc3NQcm9wZXJ0aWVzID0gWyd0cmFuc2Zvcm0nLCAnb3BhY2l0eSddO1xuXG4gIHJldHVybiBjc3NQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgIHJldHVybiBwcm9wICsgJyAnICsgZHVyYXRpb24gKyAnbXMgJyArIGVhc2luZyArICcgJyArIGRlbGF5ICsgJ21zJztcbiAgfSkuam9pbignLCAnKTtcbn07XG5cbi8qKlxuICogUmVhY3QgRmxpcCBNb3ZlXG4gKiAoYykgMjAxNi1wcmVzZW50IEpvc2h1YSBDb21lYXVcbiAqXG4gKiBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgY29kZSBpcyBsYWlkIG91dCwgY2hlY2sgb3V0IENPREVfVE9VUi5tZFxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZS1pbXBvcnRzXG5cblxudmFyIHRyYW5zaXRpb25FbmQgPSB3aGljaFRyYW5zaXRpb25FdmVudCgpO1xudmFyIG5vQnJvd3NlclN1cHBvcnQgPSAhdHJhbnNpdGlvbkVuZDtcblxuZnVuY3Rpb24gZ2V0S2V5KGNoaWxkRGF0YSkge1xuICByZXR1cm4gY2hpbGREYXRhLmtleSB8fCAnJztcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIC8vIEZpeCBpbmNvbXBsZXRlIHR5cGluZyBvZiBDaGlsZHJlbi50b0FycmF5XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmbG93dHlwZS9uby13ZWFrLXR5cGVzXG4gIHJldHVybiBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcbn1cblxudmFyIEZsaXBNb3ZlJDEgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBpbmhlcml0cyhGbGlwTW92ZSwgX0NvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRmxpcE1vdmUoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEZsaXBNb3ZlKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLnN0YXRlID0ge1xuICAgICAgY2hpbGRyZW46IGdldEVsZW1lbnRDaGlsZHJlbihcbiAgICAgIC8vIGB0aGlzLnByb3BzYCBvdWdodCB0byBhbHdheXMgYmUgZGVmaW5lZCBhdCB0aGlzIHBvaW50LCBidXQgYSByZXBvcnRcbiAgICAgIC8vIHdhcyBtYWRlIGFib3V0IGl0IG5vdCBiZWluZyBkZWZpbmVkIGluIElFMTAuXG4gICAgICAvLyBUT0RPOiBUZXN0IGluIElFMTAsIHRvIHNlZSBpZiB0aGVyZSdzIGFuIHVuZGVybHlpbmcgY2F1c2UgdGhhdCBjYW5cbiAgICAgIC8vIGJlIGFkZHJlc3NlZC5cbiAgICAgIF90aGlzLnByb3BzID8gX3RoaXMucHJvcHMuY2hpbGRyZW4gOiBbXSkubWFwKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgZWxlbWVudCwge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgYXBwZWFyaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICB9LCBfdGhpcy5jaGlsZHJlbkRhdGEgPSB7fSwgX3RoaXMucGFyZW50RGF0YSA9IHtcbiAgICAgIGRvbU5vZGU6IG51bGwsXG4gICAgICBib3VuZGluZ0JveDogbnVsbFxuICAgIH0sIF90aGlzLmhlaWdodFBsYWNlaG9sZGVyRGF0YSA9IHtcbiAgICAgIGRvbU5vZGU6IG51bGxcbiAgICB9LCBfdGhpcy5yZW1haW5pbmdBbmltYXRpb25zID0gMCwgX3RoaXMuY2hpbGRyZW5Ub0FuaW1hdGUgPSBbXSwgX3RoaXMuZmluZERPTUNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1maW5kLWRvbS1ub2RlXG4gICAgICB2YXIgZG9tTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKF90aGlzKTtcbiAgICAgIHZhciBwYXJlbnROb2RlID0gZG9tTm9kZSAmJiBkb21Ob2RlLnBhcmVudE5vZGU7XG5cbiAgICAgIC8vIFRoaXMgb3VnaHQgdG8gYmUgaW1wb3NzaWJsZSwgYnV0IGhhbmRsaW5nIGl0IGZvciBGbG93J3Mgc2FrZS5cbiAgICAgIGlmICghcGFyZW50Tm9kZSB8fCAhKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgcGFyZW50IG5vZGUgaGFzIHN0YXRpYyBwb3NpdGlvbmluZywgbGVhdmUgYW5pbWF0aW9ucyBtaWdodCBsb29rXG4gICAgICAvLyByZWFsbHkgZnVua3kuIExldCdzIGF1dG9tYXRpY2FsbHkgYXBwbHkgYHBvc2l0aW9uOiByZWxhdGl2ZWAgaW4gdGhpc1xuICAgICAgLy8gY2FzZSwgdG8gcHJldmVudCBhbnkgcXVpcmtpbmVzcy5cbiAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgcGFyZW50Tm9kZS5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICAgIHBhcmVudE5vZGVQb3NpdGlvblN0YXRpYygpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5wYXJlbnREYXRhLmRvbU5vZGUgPSBwYXJlbnROb2RlO1xuICAgIH0sIF90aGlzLnJ1bkFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkeW5hbWljQ2hpbGRyZW4gPSBfdGhpcy5zdGF0ZS5jaGlsZHJlbi5maWx0ZXIoX3RoaXMuZG9lc0NoaWxkTmVlZFRvQmVBbmltYXRlZCk7XG5cbiAgICAgIC8vIFNwbGl0dGluZyBET00gcmVhZHMgYW5kIHdyaXRlcyB0byBiZSBwZWZvcm1lZCBpbiBiYXRjaGVzXG4gICAgICB2YXIgY2hpbGRyZW5Jbml0aWFsU3R5bGVzID0gZHluYW1pY0NoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmNvbXB1dGVJbml0aWFsU3R5bGVzKGNoaWxkKTtcbiAgICAgIH0pO1xuICAgICAgZHluYW1pY0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuICAgICAgICBfdGhpcy5yZW1haW5pbmdBbmltYXRpb25zICs9IDE7XG4gICAgICAgIF90aGlzLmNoaWxkcmVuVG9BbmltYXRlLnB1c2goZ2V0S2V5KGNoaWxkKSk7XG4gICAgICAgIF90aGlzLmFuaW1hdGVDaGlsZChjaGlsZCwgaW5kZXgsIGNoaWxkcmVuSW5pdGlhbFN0eWxlc1tpbmRleF0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMub25TdGFydEFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBfdGhpcy5jYWxsQ2hpbGRyZW5Ib29rKF90aGlzLnByb3BzLm9uU3RhcnRBbGwpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLmRvZXNDaGlsZE5lZWRUb0JlQW5pbWF0ZWQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIC8vIElmIHRoZSBjaGlsZCBkb2Vzbid0IGhhdmUgYSBrZXksIGl0J3MgYW4gaW1tb3ZhYmxlIGNoaWxkIChvbmUgdGhhdCB3ZVxuICAgICAgLy8gZG8gbm90IHdhbnQgdG8gZG8gRkxJUCBzdHVmZiB0by4pXG4gICAgICBpZiAoIWdldEtleShjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hpbGREYXRhID0gX3RoaXMuZ2V0Q2hpbGREYXRhKGdldEtleShjaGlsZCkpO1xuICAgICAgdmFyIGNoaWxkRG9tTm9kZSA9IGNoaWxkRGF0YS5kb21Ob2RlO1xuICAgICAgdmFyIGNoaWxkQm91bmRpbmdCb3ggPSBjaGlsZERhdGEuYm91bmRpbmdCb3g7XG4gICAgICB2YXIgcGFyZW50Qm91bmRpbmdCb3ggPSBfdGhpcy5wYXJlbnREYXRhLmJvdW5kaW5nQm94O1xuXG4gICAgICBpZiAoIWNoaWxkRG9tTm9kZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFwcGVhckFuaW1hdGlvbiA9IF90aGlzJHByb3BzLmFwcGVhckFuaW1hdGlvbixcbiAgICAgICAgICBlbnRlckFuaW1hdGlvbiA9IF90aGlzJHByb3BzLmVudGVyQW5pbWF0aW9uLFxuICAgICAgICAgIGxlYXZlQW5pbWF0aW9uID0gX3RoaXMkcHJvcHMubGVhdmVBbmltYXRpb24sXG4gICAgICAgICAgZ2V0UG9zaXRpb24gPSBfdGhpcyRwcm9wcy5nZXRQb3NpdGlvbjtcblxuXG4gICAgICB2YXIgaXNBcHBlYXJpbmdXaXRoQW5pbWF0aW9uID0gY2hpbGQuYXBwZWFyaW5nICYmIGFwcGVhckFuaW1hdGlvbjtcbiAgICAgIHZhciBpc0VudGVyaW5nV2l0aEFuaW1hdGlvbiA9IGNoaWxkLmVudGVyaW5nICYmIGVudGVyQW5pbWF0aW9uO1xuICAgICAgdmFyIGlzTGVhdmluZ1dpdGhBbmltYXRpb24gPSBjaGlsZC5sZWF2aW5nICYmIGxlYXZlQW5pbWF0aW9uO1xuXG4gICAgICBpZiAoaXNBcHBlYXJpbmdXaXRoQW5pbWF0aW9uIHx8IGlzRW50ZXJpbmdXaXRoQW5pbWF0aW9uIHx8IGlzTGVhdmluZ1dpdGhBbmltYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0IGlzbid0IGVudGVyaW5nL2xlYXZpbmcsIHdlIHdhbnQgdG8gYW5pbWF0ZSBpdCBpZiBpdCdzXG4gICAgICAvLyBvbi1zY3JlZW4gcG9zaXRpb24gaGFzIGNoYW5nZWQuXG5cbiAgICAgIHZhciBfZ2V0UG9zaXRpb25EZWx0YSA9IGdldFBvc2l0aW9uRGVsdGEoe1xuICAgICAgICBjaGlsZERvbU5vZGU6IGNoaWxkRG9tTm9kZSxcbiAgICAgICAgY2hpbGRCb3VuZGluZ0JveDogY2hpbGRCb3VuZGluZ0JveCxcbiAgICAgICAgcGFyZW50Qm91bmRpbmdCb3g6IHBhcmVudEJvdW5kaW5nQm94LFxuICAgICAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb25cbiAgICAgIH0pLFxuICAgICAgICAgIGRYID0gX2dldFBvc2l0aW9uRGVsdGFbMF0sXG4gICAgICAgICAgZFkgPSBfZ2V0UG9zaXRpb25EZWx0YVsxXTtcblxuICAgICAgcmV0dXJuIGRYICE9PSAwIHx8IGRZICE9PSAwO1xuICAgIH0sIF90ZW1wKSwgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cbiAgLy8gQ29weSBwcm9wcy5jaGlsZHJlbiBpbnRvIHN0YXRlLlxuICAvLyBUbyB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGltcG9ydGFudCAoYW5kIG5vdCBhbiBhbnRpLXBhdHRlcm4pLCBjb25zaWRlclxuICAvLyBob3cgXCJsZWF2ZVwiIGFuaW1hdGlvbnMgd29yay4gQW4gaXRlbSBoYXMgXCJsZWZ0XCIgd2hlbiB0aGUgY29tcG9uZW50XG4gIC8vIHJlY2VpdmVzIGEgbmV3IHNldCBvZiBwcm9wcyB0aGF0IGRvIE5PVCBjb250YWluIHRoZSBpdGVtLlxuICAvLyBJZiB3ZSBqdXN0IHJlbmRlciB0aGUgcHJvcHMgYXMtaXMsIHRoZSBpdGVtIHdvdWxkIGluc3RhbnRseSBkaXNhcHBlYXIuXG4gIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgaXRlbSByZW5kZXJlZCBmb3IgYSBsaXR0bGUgd2hpbGUsIHVudGlsIGl0cyBhbmltYXRpb25cbiAgLy8gY2FuIGNvbXBsZXRlLiBCZWNhdXNlIHdlIGNhbm5vdCBtdXRhdGUgcHJvcHMsIHdlIG1ha2UgYHN0YXRlYCB0aGUgc291cmNlXG4gIC8vIG9mIHRydXRoLlxuXG5cbiAgLy8gRmxpcE1vdmUgbmVlZHMgdG8ga25vdyBxdWl0ZSBhIGJpdCBhYm91dCBpdHMgY2hpbGRyZW4gaW4gb3JkZXIgdG8gZG9cbiAgLy8gaXRzIGpvYi4gV2Ugc3RvcmUgdGhlc2UgYXMgYSBwcm9wZXJ0eSBvbiB0aGUgaW5zdGFuY2UuIFdlJ3JlIG5vdCB1c2luZ1xuICAvLyBzdGF0ZSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGNoYW5nZXMgdG8gdHJpZ2dlciByZS1yZW5kZXJzLCB3ZSBqdXN0XG4gIC8vIG5lZWQgYSBwbGFjZSB0byBrZWVwIHRoZSBkYXRhIGZvciByZWZlcmVuY2UsIHdoZW4gY2hhbmdlcyBoYXBwZW4uXG4gIC8vIFRoaXMgZmllbGQgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseS4gSW5zdGVhZCwgdXNlIGdldENoaWxkRGF0YSxcbiAgLy8gcHV0Q2hpbGREYXRhLCBldGMuLi5cblxuXG4gIC8vIFNpbWlsYXJseSwgdHJhY2sgdGhlIGRvbSBub2RlIGFuZCBib3ggb2Ygb3VyIHBhcmVudCBlbGVtZW50LlxuXG5cbiAgLy8gSWYgYG1haW50YWluQ29udGFpbmVySGVpZ2h0YCBwcm9wIGlzIHNldCB0byB0cnVlLCB3ZSdsbCBjcmVhdGUgYVxuICAvLyBwbGFjZWhvbGRlciBlbGVtZW50IHdoaWNoIG9jY3VwaWVzIHNwYWNlIHNvIHRoYXQgdGhlIHBhcmVudCBoZWlnaHRcbiAgLy8gZG9lc24ndCBjaGFuZ2Ugd2hlbiBpdGVtcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBmbG93ICh3aGljaFxuICAvLyBoYXBwZW5zIGR1cmluZyBsZWF2ZSBhbmltYXRpb25zKVxuXG5cbiAgLy8gS2VlcCB0cmFjayBvZiByZW1haW5pbmcgYW5pbWF0aW9ucyBzbyB3ZSBrbm93IHdoZW4gdG8gZmlyZSB0aGVcbiAgLy8gYWxsLWZpbmlzaGVkIGNhbGxiYWNrLCBhbmQgY2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLlxuICAvLyBOT1RFOiB3ZSBjYW4ndCBzaW1wbHkgdXNlIGNoaWxkcmVuVG9BbmltYXRlLmxlbmd0aCB0byB0cmFjayByZW1haW5pbmdcbiAgLy8gYW5pbWF0aW9ucywgYmVjYXVzZSB3ZSBuZWVkIHRvIG1haW50YWluIHRoZSBsaXN0IG9mIGFuaW1hdGluZyBjaGlsZHJlbixcbiAgLy8gdG8gcGFzcyB0byB0aGUgYG9uRmluaXNoQWxsYCBoYW5kbGVyLlxuXG5cbiAgRmxpcE1vdmUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gQmVjYXVzZSBSZWFjdCAxNiBubyBsb25nZXIgcmVxdWlyZXMgd3JhcHBpbmcgZWxlbWVudHMsIEZsaXAgTW92ZSBjYW4gb3B0XG4gICAgLy8gdG8gbm90IHdyYXAgdGhlIGNoaWxkcmVuIGluIGFuIGVsZW1lbnQuIEluIHRoYXQgY2FzZSwgZmluZCB0aGUgcGFyZW50XG4gICAgLy8gZWxlbWVudCB1c2luZyBgZmluZERPTU5vZGVgLlxuICAgIGlmICh0aGlzLnByb3BzLnR5cGVOYW1lID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZpbmRET01Db250YWluZXIoKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gb3VyIGBhcHBlYXJBbmltYXRpb25gIGlmIGl0IHdhcyByZXF1ZXN0ZWQsIHJpZ2h0IGFmdGVyIHRoZVxuICAgIC8vIGNvbXBvbmVudCBtb3VudHMuXG4gICAgdmFyIHNob3VsZFRyaWdnZXJGTElQID0gdGhpcy5wcm9wcy5hcHBlYXJBbmltYXRpb24gJiYgIXRoaXMuaXNBbmltYXRpb25EaXNhYmxlZCh0aGlzLnByb3BzKTtcblxuICAgIGlmIChzaG91bGRUcmlnZ2VyRkxJUCkge1xuICAgICAgdGhpcy5wcmVwRm9yQW5pbWF0aW9uKCk7XG4gICAgICB0aGlzLnJ1bkFuaW1hdGlvbigpO1xuICAgIH1cbiAgfTtcblxuICBGbGlwTW92ZS5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZpb3VzUHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy50eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5maW5kRE9NQ29udGFpbmVyKCk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBjaGlsZHJlbiBoYXZlIGJlZW4gcmUtYXJyYW5nZWQsIG1vdmVkLCBvciBhZGRlZC9yZW1vdmVkLFxuICAgIC8vIHRyaWdnZXIgdGhlIG1haW4gRkxJUCBhbmltYXRpb24uXG4gICAgLy9cbiAgICAvLyBJTVBPUlRBTlQ6IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNoaWxkcmVuIGhhdmUgYWN0dWFsbHkgY2hhbmdlZC5cbiAgICAvLyBBdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2l0aW9uLCB3ZSBjbGVhbiB1cCBub2RlcyB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZC5cbiAgICAvLyBXZSBET04nVCB3YW50IHRoaXMgY2xlYW51cCB0byB0cmlnZ2VyIGFub3RoZXIgdXBkYXRlLlxuXG4gICAgdmFyIG9sZENoaWxkcmVuS2V5cyA9IGdldEVsZW1lbnRDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLmtleTtcbiAgICB9KTtcbiAgICB2YXIgbmV4dENoaWxkcmVuS2V5cyA9IGdldEVsZW1lbnRDaGlsZHJlbihwcmV2aW91c1Byb3BzLmNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLmtleTtcbiAgICB9KTtcblxuICAgIHZhciBzaG91bGRUcmlnZ2VyRkxJUCA9ICFhcnJheXNFcXVhbChvbGRDaGlsZHJlbktleXMsIG5leHRDaGlsZHJlbktleXMpICYmICF0aGlzLmlzQW5pbWF0aW9uRGlzYWJsZWQodGhpcy5wcm9wcyk7XG5cbiAgICBpZiAoc2hvdWxkVHJpZ2dlckZMSVApIHtcbiAgICAgIHRoaXMucHJlcEZvckFuaW1hdGlvbigpO1xuICAgICAgdGhpcy5ydW5BbmltYXRpb24oKTtcbiAgICB9XG4gIH07XG5cbiAgRmxpcE1vdmUucHJvdG90eXBlLmNhbGN1bGF0ZU5leHRTZXRPZkNoaWxkcmVuID0gZnVuY3Rpb24gY2FsY3VsYXRlTmV4dFNldE9mQ2hpbGRyZW4obmV4dENoaWxkcmVuKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAvLyBXZSB3YW50IHRvOlxuICAgIC8vICAgLSBNYXJrIGFsbCBuZXcgY2hpbGRyZW4gYXMgYGVudGVyaW5nYFxuICAgIC8vICAgLSBQdWxsIGluIHByZXZpb3VzIGNoaWxkcmVuIHRoYXQgYXJlbid0IGluIG5leHRDaGlsZHJlbiwgYW5kIG1hcmsgdGhlbVxuICAgIC8vICAgICBhcyBgbGVhdmluZ2BcbiAgICAvLyAgIC0gUHJlc2VydmUgdGhlIG5leHRDaGlsZHJlbiBsaXN0IG9yZGVyLCB3aXRoIGxlYXZpbmcgY2hpbGRyZW4gaW4gdGhlaXJcbiAgICAvLyAgICAgYXBwcm9wcmlhdGUgcGxhY2VzLlxuICAgIC8vXG5cbiAgICB2YXIgdXBkYXRlZENoaWxkcmVuID0gbmV4dENoaWxkcmVuLm1hcChmdW5jdGlvbiAobmV4dENoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBfdGhpczIuZmluZENoaWxkQnlLZXkobmV4dENoaWxkLmtleSk7XG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGRpZCBleGlzdCwgYnV0IGl0IHdhcyBpbiB0aGUgbWlkc3Qgb2YgbGVhdmluZyxcbiAgICAgIC8vIHdlIHdhbnQgdG8gdHJlYXQgaXQgYXMgdGhvdWdoIGl0J3MgZW50ZXJpbmdcbiAgICAgIHZhciBpc0VudGVyaW5nID0gIWNoaWxkIHx8IGNoaWxkLmxlYXZpbmc7XG5cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgbmV4dENoaWxkLCB7IGVsZW1lbnQ6IG5leHRDaGlsZCwgZW50ZXJpbmc6IGlzRW50ZXJpbmcgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGlzIGlzIHRyaWNreS4gV2Ugd2FudCB0byBrZWVwIHRoZSBuZXh0Q2hpbGRyZW4ncyBvcmRlcmluZywgYnV0IHdpdGhcbiAgICAvLyBhbnkganVzdC1yZW1vdmVkIGl0ZW1zIG1haW50YWluaW5nIHRoZWlyIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIC8vIGVnLlxuICAgIC8vICAgdGhpcy5zdGF0ZS5jaGlsZHJlbiAgPSBbIDEsIDIsIDMsIDQgXVxuICAgIC8vICAgbmV4dENoaWxkcmVuICAgICAgICAgPSBbIDMsIDEgXVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBleGFtcGxlLCB3ZSd2ZSByZW1vdmVkIHRoZSAnMicgJiAnNCdcbiAgICAvLyBXZSB3YW50IHRvIGVuZCB1cCB3aXRoOiAgWyAyLCAzLCAxLCA0IF1cbiAgICAvL1xuICAgIC8vIFRvIGFjY29tcGxpc2ggdGhhdCwgd2UnbGwgaXRlcmF0ZSB0aHJvdWdoIHRoaXMuc3RhdGUuY2hpbGRyZW4uIHdoZW5ldmVyXG4gICAgLy8gd2UgZmluZCBhIG1hdGNoLCB3ZSdsbCBhcHBlbmQgb3VyIGBsZWF2aW5nYCBmbGFnIHRvIGl0LCBhbmQgaW5zZXJ0IGl0XG4gICAgLy8gaW50byB0aGUgbmV4dENoaWxkcmVuIGluIGl0cyBPUklHSU5BTCBwb3NpdGlvbi4gTm90ZSB0aGF0LCBhcyB3ZSBrZWVwXG4gICAgLy8gaW5zZXJ0aW5nIG9sZCBpdGVtcyBpbnRvIHRoZSBuZXcgbGlzdCwgdGhlIFwib3JpZ2luYWxcIiBwb3NpdGlvbiB3aWxsXG4gICAgLy8ga2VlcCBpbmNyZW1lbnRpbmcuXG4gICAgdmFyIG51bU9mQ2hpbGRyZW5MZWF2aW5nID0gMDtcbiAgICB0aGlzLnN0YXRlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuICAgICAgdmFyIGlzTGVhdmluZyA9ICFmaW5kKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBrZXkgPSBfcmVmLmtleTtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gZ2V0S2V5KGNoaWxkKTtcbiAgICAgIH0sIG5leHRDaGlsZHJlbik7XG5cbiAgICAgIC8vIElmIHRoZSBjaGlsZCBpc24ndCBsZWF2aW5nIChvciwgaWYgdGhlcmUgaXMgbm8gbGVhdmUgYW5pbWF0aW9uKSxcbiAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0IGludG8gdGhlIHN0YXRlIGNoaWxkcmVuLlxuICAgICAgaWYgKCFpc0xlYXZpbmcgfHwgIV90aGlzMi5wcm9wcy5sZWF2ZUFuaW1hdGlvbikgcmV0dXJuO1xuXG4gICAgICB2YXIgbmV4dENoaWxkID0gX2V4dGVuZHMoe30sIGNoaWxkLCB7IGxlYXZpbmc6IHRydWUgfSk7XG4gICAgICB2YXIgbmV4dENoaWxkSW5kZXggPSBpbmRleCArIG51bU9mQ2hpbGRyZW5MZWF2aW5nO1xuXG4gICAgICB1cGRhdGVkQ2hpbGRyZW4uc3BsaWNlKG5leHRDaGlsZEluZGV4LCAwLCBuZXh0Q2hpbGQpO1xuICAgICAgbnVtT2ZDaGlsZHJlbkxlYXZpbmcgKz0gMTtcbiAgICB9KTtcblxuICAgIHJldHVybiB1cGRhdGVkQ2hpbGRyZW47XG4gIH07XG5cbiAgRmxpcE1vdmUucHJvdG90eXBlLnByZXBGb3JBbmltYXRpb24gPSBmdW5jdGlvbiBwcmVwRm9yQW5pbWF0aW9uKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgLy8gT3VyIGFuaW1hdGlvbiBwcmVwIGNvbnNpc3RzIG9mOlxuICAgIC8vIC0gcmVtb3ZlIGNoaWxkcmVuIHRoYXQgYXJlIGxlYXZpbmcgZnJvbSB0aGUgRE9NIGZsb3csIHNvIHRoYXQgdGhlIG5ld1xuICAgIC8vICAgbGF5b3V0IGNhbiBiZSBhY2N1cmF0ZWx5IGNhbGN1bGF0ZWQsXG4gICAgLy8gLSB1cGRhdGUgdGhlIHBsYWNlaG9sZGVyIGNvbnRhaW5lciBoZWlnaHQsIGlmIG5lZWRlZCwgdG8gZW5zdXJlIHRoYXRcbiAgICAvLyAgIHRoZSBwYXJlbnQncyBoZWlnaHQgZG9lc24ndCBjb2xsYXBzZS5cblxuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBsZWF2ZUFuaW1hdGlvbiA9IF9wcm9wcy5sZWF2ZUFuaW1hdGlvbixcbiAgICAgICAgbWFpbnRhaW5Db250YWluZXJIZWlnaHQgPSBfcHJvcHMubWFpbnRhaW5Db250YWluZXJIZWlnaHQsXG4gICAgICAgIGdldFBvc2l0aW9uID0gX3Byb3BzLmdldFBvc2l0aW9uO1xuXG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIGFsbCBsZWF2aW5nIG5vZGVzIFwiaW52aXNpYmxlXCIgdG8gdGhlIGxheW91dCBjYWxjdWxhdGlvbnNcbiAgICAvLyB0aGF0IHdpbGwgdGFrZSBwbGFjZSBpbiB0aGUgbmV4dCBzdGVwICh0aGlzLnJ1bkFuaW1hdGlvbikuXG5cbiAgICBpZiAobGVhdmVBbmltYXRpb24pIHtcbiAgICAgIHZhciBsZWF2aW5nQ2hpbGRyZW4gPSB0aGlzLnN0YXRlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkLmxlYXZpbmc7XG4gICAgICB9KTtcblxuICAgICAgbGVhdmluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGxlYXZpbmdDaGlsZCkge1xuICAgICAgICB2YXIgY2hpbGREYXRhID0gX3RoaXMzLmdldENoaWxkRGF0YShnZXRLZXkobGVhdmluZ0NoaWxkKSk7XG5cbiAgICAgICAgLy8gV2FybiBpZiBjaGlsZCBpcyBkaXNhYmxlZFxuICAgICAgICBpZiAoIV90aGlzMy5pc0FuaW1hdGlvbkRpc2FibGVkKF90aGlzMy5wcm9wcykgJiYgY2hpbGREYXRhLmRvbU5vZGUgJiYgY2hpbGREYXRhLmRvbU5vZGUuZGlzYWJsZWQpIHtcbiAgICAgICAgICBjaGlsZElzRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdGFrZSB0aGUgaXRlbXMgb3V0IG9mIHRoZSBcImZsb3dcIiBvZiB0aGUgZG9jdW1lbnQsIHNvIHRoYXRcbiAgICAgICAgLy8gaXRzIHNpYmxpbmdzIGNhbiBtb3ZlIHRvIHRha2UgaXRzIHBsYWNlLlxuICAgICAgICBpZiAoY2hpbGREYXRhLmJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgcmVtb3ZlTm9kZUZyb21ET01GbG93KGNoaWxkRGF0YSwgX3RoaXMzLnByb3BzLnZlcnRpY2FsQWxpZ25tZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYWludGFpbkNvbnRhaW5lckhlaWdodCAmJiB0aGlzLmhlaWdodFBsYWNlaG9sZGVyRGF0YS5kb21Ob2RlKSB7XG4gICAgICAgIHVwZGF0ZUhlaWdodFBsYWNlaG9sZGVyKHtcbiAgICAgICAgICBkb21Ob2RlOiB0aGlzLmhlaWdodFBsYWNlaG9sZGVyRGF0YS5kb21Ob2RlLFxuICAgICAgICAgIHBhcmVudERhdGE6IHRoaXMucGFyZW50RGF0YSxcbiAgICAgICAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIGFsbCBjaGlsZHJlbiBub3QgaW4gdGhlIG1pZGRsZSBvZiBlbnRlcmluZyBvciBsZWF2aW5nLFxuICAgIC8vIHdlIG5lZWQgdG8gcmVzZXQgdGhlIHRyYW5zaXRpb24sIHNvIHRoYXQgdGhlIE5FVyBzaHVmZmxlIHN0YXJ0cyBmcm9tXG4gICAgLy8gdGhlIHJpZ2h0IHBsYWNlLlxuICAgIHRoaXMuc3RhdGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHZhciBfZ2V0Q2hpbGREYXRhID0gX3RoaXMzLmdldENoaWxkRGF0YShnZXRLZXkoY2hpbGQpKSxcbiAgICAgICAgICBkb21Ob2RlID0gX2dldENoaWxkRGF0YS5kb21Ob2RlO1xuXG4gICAgICAvLyBJZ25vcmUgY2hpbGRyZW4gdGhhdCBkb24ndCByZW5kZXIgRE9NIG5vZGVzIChlZy4gYnkgcmV0dXJuaW5nIG51bGwpXG5cblxuICAgICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGlsZC5lbnRlcmluZyAmJiAhY2hpbGQubGVhdmluZykge1xuICAgICAgICBhcHBseVN0eWxlc1RvRE9NTm9kZSh7XG4gICAgICAgICAgZG9tTm9kZTogZG9tTm9kZSxcbiAgICAgICAgICBzdHlsZXM6IHtcbiAgICAgICAgICAgIHRyYW5zaXRpb246ICcnXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5cblxuICBGbGlwTW92ZS5wcm90b3R5cGUuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAvLyBXaGVuIHRoZSBjb21wb25lbnQgaXMgaGFuZGVkIG5ldyBwcm9wcywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHRoZVxuICAgIC8vIFwicmVzdGluZ1wiIHBvc2l0aW9uIG9mIGFsbCBjdXJyZW50bHktcmVuZGVyZWQgRE9NIG5vZGVzLlxuICAgIC8vIFdlIHN0b3JlIHRoYXQgZGF0YSBpbiB0aGlzLnBhcmVudCBhbmQgdGhpcy5jaGlsZHJlbixcbiAgICAvLyBzbyBpdCBjYW4gYmUgdXNlZCBsYXRlciB0byB3b3JrIG91dCB0aGUgYW5pbWF0aW9uLlxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3hDYWNoZXMoKTtcblxuICAgIC8vIENvbnZlcnQgb3BhcXVlIGNoaWxkcmVuIG9iamVjdCB0byBhcnJheS5cbiAgICB2YXIgbmV4dENoaWxkcmVuID0gZ2V0RWxlbWVudENoaWxkcmVuKG5leHRQcm9wcy5jaGlsZHJlbik7XG5cbiAgICAvLyBOZXh0LCB3ZSBuZWVkIHRvIHVwZGF0ZSBvdXIgc3RhdGUsIHNvIHRoYXQgaXQgY29udGFpbnMgb3VyIG5ldyBzZXQgb2ZcbiAgICAvLyBjaGlsZHJlbi4gSWYgYW5pbWF0aW9uIGlzIGRpc2FibGVkIG9yIHVuc3VwcG9ydGVkLCB0aGlzIGlzIGVhc3k7XG4gICAgLy8gd2UganVzdCBjb3B5IG91ciBwcm9wcyBpbnRvIHN0YXRlLlxuICAgIC8vIEFzc3VtaW5nIHRoYXQgd2UgY2FuIGFuaW1hdGUsIHRob3VnaCwgd2UgaGF2ZSB0byBkbyBzb21lIHdvcmsuXG4gICAgLy8gRXNzZW50aWFsbHksIHdlIHdhbnQgdG8ga2VlcCBqdXN0LWRlbGV0ZWQgbm9kZXMgaW4gdGhlIERPTSBmb3IgYSBiaXRcbiAgICAvLyBsb25nZXIsIHNvIHRoYXQgd2UgY2FuIGFuaW1hdGUgdGhlbSBhd2F5LlxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2hpbGRyZW46IHRoaXMuaXNBbmltYXRpb25EaXNhYmxlZChuZXh0UHJvcHMpID8gbmV4dENoaWxkcmVuLm1hcChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGVsZW1lbnQsIHsgZWxlbWVudDogZWxlbWVudCB9KTtcbiAgICAgIH0pIDogdGhpcy5jYWxjdWxhdGVOZXh0U2V0T2ZDaGlsZHJlbihuZXh0Q2hpbGRyZW4pXG4gICAgfSk7XG4gIH07XG5cbiAgRmxpcE1vdmUucHJvdG90eXBlLmFuaW1hdGVDaGlsZCA9IGZ1bmN0aW9uIGFuaW1hdGVDaGlsZChjaGlsZCwgaW5kZXgsIGNoaWxkSW5pdGlhbFN0eWxlcykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIF9nZXRDaGlsZERhdGEyID0gdGhpcy5nZXRDaGlsZERhdGEoZ2V0S2V5KGNoaWxkKSksXG4gICAgICAgIGRvbU5vZGUgPSBfZ2V0Q2hpbGREYXRhMi5kb21Ob2RlO1xuXG4gICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhlIHJlbGV2YW50IHN0eWxlIGZvciB0aGlzIERPTSBub2RlXG4gICAgLy8gVGhpcyBpcyB0aGUgb2Zmc2V0IGZyb20gaXRzIGFjdHVhbCBET00gcG9zaXRpb24uXG4gICAgLy8gZWcuIGlmIGFuIGl0ZW0gaGFzIGJlZW4gcmUtcmVuZGVyZWQgMjBweCBsb3dlciwgd2Ugd2FudCB0byBhcHBseSBhXG4gICAgLy8gc3R5bGUgb2YgJ3RyYW5zZm9ybTogdHJhbnNsYXRlKC0yMHB4KScsIHNvIHRoYXQgaXQgYXBwZWFycyB0byBiZSB3aGVyZVxuICAgIC8vIGl0IHN0YXJ0ZWQuXG4gICAgLy8gSW4gRkxJUCB0ZXJtaW5vbG9neSwgdGhpcyBpcyB0aGUgJ0ludmVydCcgc3RhZ2UuXG4gICAgYXBwbHlTdHlsZXNUb0RPTU5vZGUoe1xuICAgICAgZG9tTm9kZTogZG9tTm9kZSxcbiAgICAgIHN0eWxlczogY2hpbGRJbml0aWFsU3R5bGVzXG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCBieSBpbnZva2luZyB0aGUgb25TdGFydCBjYWxsYmFjayBmb3IgdGhpcyBjaGlsZC5cbiAgICBpZiAodGhpcy5wcm9wcy5vblN0YXJ0KSB0aGlzLnByb3BzLm9uU3RhcnQoY2hpbGQsIGRvbU5vZGUpO1xuXG4gICAgLy8gTmV4dCwgYW5pbWF0ZSB0aGUgaXRlbSBmcm9tIGl0J3MgYXJ0aWZpY2lhbGx5LW9mZnNldCBwb3NpdGlvbiB0byBpdHNcbiAgICAvLyBuZXcsIG5hdHVyYWwgcG9zaXRpb24uXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE5PVEUsIFJFOiB0aGUgZG91YmxlLXJlcXVlc3RBbmltYXRpb25GcmFtZTpcbiAgICAgICAgLy8gU2FkbHksIHRoaXMgaXMgdGhlIG1vc3QgYnJvd3Nlci1jb21wYXRpYmxlIHdheSB0byBkbyB0aGlzIEkndmUgZm91bmQuXG4gICAgICAgIC8vIEVzc2VudGlhbGx5IHdlIG5lZWQgdG8gc2V0IHRoZSBpbml0aWFsIHN0eWxlcyBvdXRzaWRlIG9mIGFueSByZXF1ZXN0XG4gICAgICAgIC8vIGNhbGxiYWNrcyB0byBhdm9pZCBiYXRjaGluZyB0aGVtLiBUaGVuLCBhIGZyYW1lIG5lZWRzIHRvIHBhc3Mgd2l0aFxuICAgICAgICAvLyB0aGUgc3R5bGVzIGFib3ZlIHJlbmRlcmVkLiBUaGVuLCBvbiB0aGUgc2Vjb25kIGZyYW1lLCB3ZSBjYW4gYXBwbHlcbiAgICAgICAgLy8gb3VyIGZpbmFsIHN0eWxlcyB0byBwZXJmb3JtIHRoZSBhbmltYXRpb24uXG5cbiAgICAgICAgLy8gT3VyIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIFwidW5kb1wiIHRoZSBzdHlsZXMgYXBwbGllZCBpbiB0aGVcbiAgICAgICAgLy8gcHJldmlvdXMgZnJhbWVzLCB3aGlsZSBhbHNvIGFkZGluZyBhIGB0cmFuc2l0aW9uYCBwcm9wZXJ0eS5cbiAgICAgICAgLy8gVGhpcyB3YXksIHRoZSBpdGVtIHdpbGwgc21vb3RobHkgdHJhbnNpdGlvbiBmcm9tIGl0cyBvbGQgcG9zaXRpb25cbiAgICAgICAgLy8gdG8gaXRzIG5ldyBwb3NpdGlvbi5cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZmxvd3R5cGUvcmVxdWlyZS12YXJpYWJsZS10eXBlXG4gICAgICAgIHZhciBzdHlsZXMgPSB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogY3JlYXRlVHJhbnNpdGlvblN0cmluZyhpbmRleCwgX3RoaXM0LnByb3BzKSxcbiAgICAgICAgICB0cmFuc2Zvcm06ICcnLFxuICAgICAgICAgIG9wYWNpdHk6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNoaWxkLmFwcGVhcmluZyAmJiBfdGhpczQucHJvcHMuYXBwZWFyQW5pbWF0aW9uKSB7XG4gICAgICAgICAgc3R5bGVzID0gX2V4dGVuZHMoe30sIHN0eWxlcywgX3RoaXM0LnByb3BzLmFwcGVhckFuaW1hdGlvbi50byk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuZW50ZXJpbmcgJiYgX3RoaXM0LnByb3BzLmVudGVyQW5pbWF0aW9uKSB7XG4gICAgICAgICAgc3R5bGVzID0gX2V4dGVuZHMoe30sIHN0eWxlcywgX3RoaXM0LnByb3BzLmVudGVyQW5pbWF0aW9uLnRvKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5sZWF2aW5nICYmIF90aGlzNC5wcm9wcy5sZWF2ZUFuaW1hdGlvbikge1xuICAgICAgICAgIHN0eWxlcyA9IF9leHRlbmRzKHt9LCBzdHlsZXMsIF90aGlzNC5wcm9wcy5sZWF2ZUFuaW1hdGlvbi50byk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBGTElQIHRlcm1pbm9sb2d5LCB0aGlzIGlzIHRoZSAnUGxheScgc3RhZ2UuXG4gICAgICAgIGFwcGx5U3R5bGVzVG9ET01Ob2RlKHsgZG9tTm9kZTogZG9tTm9kZSwgc3R5bGVzOiBzdHlsZXMgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYmluZFRyYW5zaXRpb25FbmRIYW5kbGVyKGNoaWxkKTtcbiAgfTtcblxuICBGbGlwTW92ZS5wcm90b3R5cGUuYmluZFRyYW5zaXRpb25FbmRIYW5kbGVyID0gZnVuY3Rpb24gYmluZFRyYW5zaXRpb25FbmRIYW5kbGVyKGNoaWxkKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgX2dldENoaWxkRGF0YTMgPSB0aGlzLmdldENoaWxkRGF0YShnZXRLZXkoY2hpbGQpKSxcbiAgICAgICAgZG9tTm9kZSA9IF9nZXRDaGlsZERhdGEzLmRvbU5vZGU7XG5cbiAgICBpZiAoIWRvbU5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgb25GaW5pc2ggY2FsbGJhY2sgbmVlZHMgdG8gYmUgYm91bmQgdG8gdGhlIHRyYW5zaXRpb25FbmQgZXZlbnQuXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIHVuYmluZCBpdCB3aGVuIHRoZSB0cmFuc2l0aW9uIGNvbXBsZXRlcywgc28gdGhpcyB1Z2x5XG4gICAgLy8gaW5saW5lIGZ1bmN0aW9uIGlzIHJlcXVpcmVkICh3ZSBuZWVkIGl0IGhlcmUgc28gaXQgY2xvc2VzIG92ZXJcbiAgICAvLyBkZXBlbmRlbnQgdmFyaWFibGVzIGBjaGlsZGAgYW5kIGBkb21Ob2RlYClcbiAgICB2YXIgdHJhbnNpdGlvbkVuZEhhbmRsZXIgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kSGFuZGxlcihldikge1xuICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaGFuZGxlciBpcyBmaXJlZCBub3Qgb24gb3VyIHByaW1hcnkgdHJhbnNpdGlvbixcbiAgICAgIC8vIGJ1dCBvbiBhIG5lc3RlZCB0cmFuc2l0aW9uIChlZy4gYSBob3ZlciBlZmZlY3QpLiBJZ25vcmUgdGhlc2UgY2FzZXMuXG4gICAgICBpZiAoZXYudGFyZ2V0ICE9PSBkb21Ob2RlKSByZXR1cm47XG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgJ3RyYW5zaXRpb24nIGlubGluZSBzdHlsZSB3ZSBhZGRlZC4gVGhpcyBpcyBjbGVhbnVwLlxuICAgICAgZG9tTm9kZS5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG5cbiAgICAgIC8vIFRyaWdnZXIgYW55IGFwcGxpY2FibGUgb25GaW5pc2gvb25GaW5pc2hBbGwgaG9va3NcbiAgICAgIF90aGlzNS50cmlnZ2VyRmluaXNoSG9va3MoY2hpbGQsIGRvbU5vZGUpO1xuXG4gICAgICBkb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZCwgdHJhbnNpdGlvbkVuZEhhbmRsZXIpO1xuXG4gICAgICBpZiAoY2hpbGQubGVhdmluZykge1xuICAgICAgICBfdGhpczUucmVtb3ZlQ2hpbGREYXRhKGdldEtleShjaGlsZCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZCwgdHJhbnNpdGlvbkVuZEhhbmRsZXIpO1xuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS50cmlnZ2VyRmluaXNoSG9va3MgPSBmdW5jdGlvbiB0cmlnZ2VyRmluaXNoSG9va3MoY2hpbGQsIGRvbU5vZGUpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIGlmICh0aGlzLnByb3BzLm9uRmluaXNoKSB0aGlzLnByb3BzLm9uRmluaXNoKGNoaWxkLCBkb21Ob2RlKTtcblxuICAgIC8vIFJlZHVjZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHdlIG5lZWQgdG8gYW5pbWF0ZSBieSAxLFxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIHRlbGwgd2hlbiBhbGwgY2hpbGRyZW4gaGF2ZSBmaW5pc2hlZC5cbiAgICB0aGlzLnJlbWFpbmluZ0FuaW1hdGlvbnMgLT0gMTtcblxuICAgIGlmICh0aGlzLnJlbWFpbmluZ0FuaW1hdGlvbnMgPT09IDApIHtcbiAgICAgIC8vIFJlbW92ZSBhbnkgaXRlbXMgZnJvbSB0aGUgRE9NIHRoYXQgaGF2ZSBsZWZ0LCBhbmQgcmVzZXQgYGVudGVyaW5nYC5cbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSB0aGlzLnN0YXRlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIGxlYXZpbmcgPSBfcmVmMi5sZWF2aW5nO1xuICAgICAgICByZXR1cm4gIWxlYXZpbmc7XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBpdGVtLCB7XG4gICAgICAgICAgLy8gZml4IGZvciBGbG93XG4gICAgICAgICAgZWxlbWVudDogaXRlbS5lbGVtZW50LFxuICAgICAgICAgIGFwcGVhcmluZzogZmFsc2UsXG4gICAgICAgICAgZW50ZXJpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGlsZHJlbjogbmV4dENoaWxkcmVuIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBfdGhpczYucHJvcHMub25GaW5pc2hBbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBfdGhpczYuY2FsbENoaWxkcmVuSG9vayhfdGhpczYucHJvcHMub25GaW5pc2hBbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzZXQgb3VyIHZhcmlhYmxlcyBmb3IgdGhlIG5leHQgaXRlcmF0aW9uXG4gICAgICAgIF90aGlzNi5jaGlsZHJlblRvQW5pbWF0ZSA9IFtdO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZWhvbGRlciB3YXMgaG9sZGluZyB0aGUgY29udGFpbmVyIG9wZW4gd2hpbGUgZWxlbWVudHMgd2VyZVxuICAgICAgLy8gbGVhdmluZywgd2Ugd2UgY2FuIG5vdyBzZXQgaXRzIGhlaWdodCB0byB6ZXJvLlxuICAgICAgaWYgKHRoaXMuaGVpZ2h0UGxhY2Vob2xkZXJEYXRhLmRvbU5vZGUpIHtcbiAgICAgICAgdGhpcy5oZWlnaHRQbGFjZWhvbGRlckRhdGEuZG9tTm9kZS5zdHlsZS5oZWlnaHQgPSAnMCc7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS5jYWxsQ2hpbGRyZW5Ib29rID0gZnVuY3Rpb24gY2FsbENoaWxkcmVuSG9vayhob29rKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgZG9tTm9kZXMgPSBbXTtcblxuICAgIHRoaXMuY2hpbGRyZW5Ub0FuaW1hdGUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGRLZXkpIHtcbiAgICAgIC8vIElmIHRoaXMgd2FzIGFuIGV4aXQgYW5pbWF0aW9uLCB0aGUgY2hpbGQgbWF5IG5vIGxvbmdlciBleGlzdC5cbiAgICAgIC8vIElmIHNvLCBza2lwIGl0LlxuICAgICAgdmFyIGNoaWxkID0gX3RoaXM3LmZpbmRDaGlsZEJ5S2V5KGNoaWxkS2V5KTtcblxuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnRzLnB1c2goY2hpbGQpO1xuXG4gICAgICBpZiAoX3RoaXM3Lmhhc0NoaWxkRGF0YShjaGlsZEtleSkpIHtcbiAgICAgICAgZG9tTm9kZXMucHVzaChfdGhpczcuZ2V0Q2hpbGREYXRhKGNoaWxkS2V5KS5kb21Ob2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGhvb2soZWxlbWVudHMsIGRvbU5vZGVzKTtcbiAgfTtcblxuICBGbGlwTW92ZS5wcm90b3R5cGUudXBkYXRlQm91bmRpbmdCb3hDYWNoZXMgPSBmdW5jdGlvbiB1cGRhdGVCb3VuZGluZ0JveENhY2hlcygpIHtcbiAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgIC8vIFRoaXMgaXMgdGhlIE9OTFkgcGxhY2UgdGhhdCBwYXJlbnREYXRhIGFuZCBjaGlsZHJlbkRhdGEnc1xuICAgIC8vIGJvdW5kaW5nIGJveGVzIGFyZSB1cGRhdGVkLiBUaGV5IHdpbGwgYmUgY2FsY3VsYXRlZCBhdCBvdGhlciB0aW1lc1xuICAgIC8vIHRvIGJlIGNvbXBhcmVkIHRvIHRoaXMgdmFsdWUsIGJ1dCBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBjYWNoZSBpc1xuICAgIC8vIHVwZGF0ZWQgb25jZSBwZXIgdXBkYXRlLlxuICAgIHZhciBwYXJlbnREb21Ob2RlID0gdGhpcy5wYXJlbnREYXRhLmRvbU5vZGU7XG5cbiAgICBpZiAoIXBhcmVudERvbU5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhcmVudERhdGEuYm91bmRpbmdCb3ggPSB0aGlzLnByb3BzLmdldFBvc2l0aW9uKHBhcmVudERvbU5vZGUpO1xuXG4gICAgLy8gU3BsaXR0aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzIHRvIGJlIHBlZm9ybWVkIGluIGJhdGNoZXNcbiAgICB2YXIgY2hpbGRyZW5Cb3VuZGluZ0JveGVzID0gW107XG5cbiAgICB0aGlzLnN0YXRlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRLZXkgPSBnZXRLZXkoY2hpbGQpO1xuXG4gICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGEgY2hpbGQgZG9lcyBub3QgaGF2ZSBhIGBrZXlgIHByb3BlcnR5O1xuICAgICAgLy8gSWdub3JlIHRoZXNlIGNoaWxkcmVuLCB0aGV5IGRvbid0IG5lZWQgdG8gYmUgbW92ZWQuXG4gICAgICBpZiAoIWNoaWxkS2V5KSB7XG4gICAgICAgIGNoaWxkcmVuQm91bmRpbmdCb3hlcy5wdXNoKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEluIHZlcnkgcmFyZSBjaXJjdW1zdGFuY2VzLCBmb3IgcmVhc29ucyB1bmtub3duLCB0aGUgcmVmIGlzIG5ldmVyXG4gICAgICAvLyBwb3B1bGF0ZWQgZm9yIGNlcnRhaW4gY2hpbGRyZW4uIEluIHRoaXMgY2FzZSwgYXZvaWQgZG9pbmcgdGhpcyB1cGRhdGUuXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3Nod2NvbWVhdS9yZWFjdC1mbGlwLW1vdmUvcHVsbC85MVxuICAgICAgaWYgKCFfdGhpczguaGFzQ2hpbGREYXRhKGNoaWxkS2V5KSkge1xuICAgICAgICBjaGlsZHJlbkJvdW5kaW5nQm94ZXMucHVzaChudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2hpbGREYXRhID0gX3RoaXM4LmdldENoaWxkRGF0YShjaGlsZEtleSk7XG5cbiAgICAgIC8vIElmIHRoZSBjaGlsZCBlbGVtZW50IHJldHVybnMgbnVsbCwgd2UgbmVlZCB0byBhdm9pZCB0cnlpbmcgdG9cbiAgICAgIC8vIGFjY291bnQgZm9yIGl0XG4gICAgICBpZiAoIWNoaWxkRGF0YS5kb21Ob2RlIHx8ICFjaGlsZCkge1xuICAgICAgICBjaGlsZHJlbkJvdW5kaW5nQm94ZXMucHVzaChudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjaGlsZHJlbkJvdW5kaW5nQm94ZXMucHVzaChnZXRSZWxhdGl2ZUJvdW5kaW5nQm94KHtcbiAgICAgICAgY2hpbGREb21Ob2RlOiBjaGlsZERhdGEuZG9tTm9kZSxcbiAgICAgICAgcGFyZW50RG9tTm9kZTogcGFyZW50RG9tTm9kZSxcbiAgICAgICAgZ2V0UG9zaXRpb246IF90aGlzOC5wcm9wcy5nZXRQb3NpdGlvblxuICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICAgIHZhciBjaGlsZEtleSA9IGdldEtleShjaGlsZCk7XG5cbiAgICAgIHZhciBjaGlsZEJvdW5kaW5nQm94ID0gY2hpbGRyZW5Cb3VuZGluZ0JveGVzW2luZGV4XTtcblxuICAgICAgaWYgKCFjaGlsZEtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzOC5zZXRDaGlsZERhdGEoY2hpbGRLZXksIHtcbiAgICAgICAgYm91bmRpbmdCb3g6IGNoaWxkQm91bmRpbmdCb3hcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS5jb21wdXRlSW5pdGlhbFN0eWxlcyA9IGZ1bmN0aW9uIGNvbXB1dGVJbml0aWFsU3R5bGVzKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkLmFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuYXBwZWFyQW5pbWF0aW9uID8gdGhpcy5wcm9wcy5hcHBlYXJBbmltYXRpb24uZnJvbSA6IHt9O1xuICAgIH0gZWxzZSBpZiAoY2hpbGQuZW50ZXJpbmcpIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5lbnRlckFuaW1hdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGlzIGNoaWxkIHdhcyBpbiB0aGUgbWlkZGxlIG9mIGxlYXZpbmcsIGl0IHN0aWxsIGhhcyBpdHNcbiAgICAgIC8vIGFic29sdXRlIHBvc2l0aW9uaW5nIHN0eWxlcyBhcHBsaWVkLiBXZSBuZWVkIHRvIHVuZG8gdGhvc2UuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBwb3NpdGlvbjogJycsXG4gICAgICAgIHRvcDogJycsXG4gICAgICAgIGxlZnQ6ICcnLFxuICAgICAgICByaWdodDogJycsXG4gICAgICAgIGJvdHRvbTogJydcbiAgICAgIH0sIHRoaXMucHJvcHMuZW50ZXJBbmltYXRpb24uZnJvbSk7XG4gICAgfSBlbHNlIGlmIChjaGlsZC5sZWF2aW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5sZWF2ZUFuaW1hdGlvbiA/IHRoaXMucHJvcHMubGVhdmVBbmltYXRpb24uZnJvbSA6IHt9O1xuICAgIH1cblxuICAgIHZhciBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkRGF0YShnZXRLZXkoY2hpbGQpKTtcbiAgICB2YXIgY2hpbGREb21Ob2RlID0gY2hpbGREYXRhLmRvbU5vZGU7XG4gICAgdmFyIGNoaWxkQm91bmRpbmdCb3ggPSBjaGlsZERhdGEuYm91bmRpbmdCb3g7XG4gICAgdmFyIHBhcmVudEJvdW5kaW5nQm94ID0gdGhpcy5wYXJlbnREYXRhLmJvdW5kaW5nQm94O1xuXG4gICAgaWYgKCFjaGlsZERvbU5vZGUpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICB2YXIgX2dldFBvc2l0aW9uRGVsdGEyID0gZ2V0UG9zaXRpb25EZWx0YSh7XG4gICAgICBjaGlsZERvbU5vZGU6IGNoaWxkRG9tTm9kZSxcbiAgICAgIGNoaWxkQm91bmRpbmdCb3g6IGNoaWxkQm91bmRpbmdCb3gsXG4gICAgICBwYXJlbnRCb3VuZGluZ0JveDogcGFyZW50Qm91bmRpbmdCb3gsXG4gICAgICBnZXRQb3NpdGlvbjogdGhpcy5wcm9wcy5nZXRQb3NpdGlvblxuICAgIH0pLFxuICAgICAgICBkWCA9IF9nZXRQb3NpdGlvbkRlbHRhMlswXSxcbiAgICAgICAgZFkgPSBfZ2V0UG9zaXRpb25EZWx0YTJbMV07XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKCcgKyBkWCArICdweCwgJyArIGRZICsgJ3B4KSdcbiAgICB9O1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG5cblxuICBGbGlwTW92ZS5wcm90b3R5cGUuaXNBbmltYXRpb25EaXNhYmxlZCA9IGZ1bmN0aW9uIGlzQW5pbWF0aW9uRGlzYWJsZWQocHJvcHMpIHtcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIGV4cGxpY2l0bHkgcGFzc2VkIGEgYGRpc2FibGVBbGxBbmltYXRpb25zYCBmbGFnLFxuICAgIC8vIHdlIGNhbiBza2lwIHRoaXMgd2hvbGUgcHJvY2Vzcy4gU2ltaWxhcmx5LCBpZiBhbGwgb2YgdGhlIG51bWJlcnMgaGF2ZVxuICAgIC8vIGJlZW4gc2V0IHRvIDAsIHRoZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0byBhbmltYXRlOyBkb2luZyBzbyB3b3VsZFxuICAgIC8vIG9ubHkgY2F1c2UgYSBmbGlja2VyIChhbmQgdGhlIGludGVudCBpcyBwcm9iYWJseSB0byBkaXNhYmxlIGFuaW1hdGlvbnMpXG4gICAgLy8gV2UgY2FuIGFsc28gc2tpcCB0aGlzIHJpZ2FtYXJvbGUgaWYgdGhlcmUncyBubyBicm93c2VyIHN1cHBvcnQgZm9yIGl0LlxuICAgIHJldHVybiBub0Jyb3dzZXJTdXBwb3J0IHx8IHByb3BzLmRpc2FibGVBbGxBbmltYXRpb25zIHx8IHByb3BzLmR1cmF0aW9uID09PSAwICYmIHByb3BzLmRlbGF5ID09PSAwICYmIHByb3BzLnN0YWdnZXJEdXJhdGlvbkJ5ID09PSAwICYmIHByb3BzLnN0YWdnZXJEZWxheUJ5ID09PSAwO1xuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS5maW5kQ2hpbGRCeUtleSA9IGZ1bmN0aW9uIGZpbmRDaGlsZEJ5S2V5KGtleSkge1xuICAgIHJldHVybiBmaW5kKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGdldEtleShjaGlsZCkgPT09IGtleTtcbiAgICB9LCB0aGlzLnN0YXRlLmNoaWxkcmVuKTtcbiAgfTtcblxuICBGbGlwTW92ZS5wcm90b3R5cGUuaGFzQ2hpbGREYXRhID0gZnVuY3Rpb24gaGFzQ2hpbGREYXRhKGtleSkge1xuICAgIC8vIE9iamVjdCBoYXMgc29tZSBidWlsdC1pbiBwcm9wZXJ0aWVzIG9uIGl0cyBwcm90b3R5cGUsIHN1Y2ggYXMgdG9TdHJpbmcuICBoYXNPd25Qcm9wZXJ0eSBtYWtlc1xuICAgIC8vIHN1cmUgdGhhdCBrZXkgaXMgcHJlc2VudCBvbiBjaGlsZHJlbkRhdGEgaXRzZWxmLCBub3Qgb24gaXRzIHByb3RvdHlwZS5cbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY2hpbGRyZW5EYXRhLCBrZXkpO1xuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS5nZXRDaGlsZERhdGEgPSBmdW5jdGlvbiBnZXRDaGlsZERhdGEoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2hpbGREYXRhKGtleSkgPyB0aGlzLmNoaWxkcmVuRGF0YVtrZXldIDoge307XG4gIH07XG5cbiAgRmxpcE1vdmUucHJvdG90eXBlLnNldENoaWxkRGF0YSA9IGZ1bmN0aW9uIHNldENoaWxkRGF0YShrZXksIGRhdGEpIHtcbiAgICB0aGlzLmNoaWxkcmVuRGF0YVtrZXldID0gX2V4dGVuZHMoe30sIHRoaXMuZ2V0Q2hpbGREYXRhKGtleSksIGRhdGEpO1xuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS5yZW1vdmVDaGlsZERhdGEgPSBmdW5jdGlvbiByZW1vdmVDaGlsZERhdGEoa2V5KSB7XG4gICAgZGVsZXRlIHRoaXMuY2hpbGRyZW5EYXRhW2tleV07XG4gICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByZXZTdGF0ZSwge1xuICAgICAgICBjaGlsZHJlbjogcHJldlN0YXRlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQuZWxlbWVudC5rZXkgIT09IGtleTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIEZsaXBNb3ZlLnByb3RvdHlwZS5jcmVhdGVIZWlnaHRQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIGNyZWF0ZUhlaWdodFBsYWNlaG9sZGVyKCkge1xuICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgdmFyIHR5cGVOYW1lID0gdGhpcy5wcm9wcy50eXBlTmFtZTtcblxuICAgIC8vIElmIHJlcXVlc3RlZCwgY3JlYXRlIGFuIGludmlzaWJsZSBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgLy8gSXRzIGhlaWdodCB3aWxsIGJlIG1vZGlmaWVkIHRvIHByZXZlbnQgdGhlIGNvbnRhaW5lciBmcm9tIGNvbGxhcHNpbmdcbiAgICAvLyBwcmVtYXR1cmVseS5cblxuICAgIHZhciBpc0NvbnRhaW5lckFMaXN0ID0gdHlwZU5hbWUgPT09ICd1bCcgfHwgdHlwZU5hbWUgPT09ICdvbCc7XG4gICAgdmFyIHBsYWNlaG9sZGVyVHlwZSA9IGlzQ29udGFpbmVyQUxpc3QgPyAnbGknIDogJ2Rpdic7XG5cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChwbGFjZWhvbGRlclR5cGUsIHtcbiAgICAgIGtleTogJ2hlaWdodC1wbGFjZWhvbGRlcicsXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihkb21Ob2RlKSB7XG4gICAgICAgIF90aGlzOS5oZWlnaHRQbGFjZWhvbGRlckRhdGEuZG9tTm9kZSA9IGRvbU5vZGU7XG4gICAgICB9LFxuICAgICAgc3R5bGU6IHsgdmlzaWJpbGl0eTogJ2hpZGRlbicsIGhlaWdodDogMCB9XG4gICAgfSk7XG4gIH07XG5cbiAgRmxpcE1vdmUucHJvdG90eXBlLmNoaWxkcmVuV2l0aFJlZnMgPSBmdW5jdGlvbiBjaGlsZHJlbldpdGhSZWZzKCkge1xuICAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgdGhlIHByb3ZpZGVkIGNoaWxkcmVuLCBjYXB0dXJpbmcgYSByZWZlcmVuY2UgdG8gdGhlXG4gICAgLy8gdW5kZXJseWluZyBET00gbm9kZS4gRmxpcCBNb3ZlIG5lZWRzIHRvIHVzZSB0aGUgUmVhY3QgZXNjYXBlIGhhdGNoZXMgdG9cbiAgICAvLyBiZSBhYmxlIHRvIGRvIGl0cyBjYWxjdWxhdGlvbnMuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZC5lbGVtZW50LCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBTdGF0ZWxlc3MgRnVuY3Rpb25hbCBDb21wb25lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IEZsaXBNb3ZlLFxuICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIGluc3RhbmNlcy5cbiAgICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZG9tTm9kZSA9IGdldE5hdGl2ZU5vZGUoZWxlbWVudCk7XG4gICAgICAgICAgX3RoaXMxMC5zZXRDaGlsZERhdGEoZ2V0S2V5KGNoaWxkKSwgeyBkb21Ob2RlOiBkb21Ob2RlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBGbGlwTW92ZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczExID0gdGhpcztcblxuICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdHlwZU5hbWUgPSBfcHJvcHMyLnR5cGVOYW1lLFxuICAgICAgICBkZWxlZ2F0ZWQgPSBfcHJvcHMyLmRlbGVnYXRlZCxcbiAgICAgICAgbGVhdmVBbmltYXRpb24gPSBfcHJvcHMyLmxlYXZlQW5pbWF0aW9uLFxuICAgICAgICBtYWludGFpbkNvbnRhaW5lckhlaWdodCA9IF9wcm9wczIubWFpbnRhaW5Db250YWluZXJIZWlnaHQ7XG5cblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5XaXRoUmVmcygpO1xuICAgIGlmIChsZWF2ZUFuaW1hdGlvbiAmJiBtYWludGFpbkNvbnRhaW5lckhlaWdodCkge1xuICAgICAgY2hpbGRyZW4ucHVzaCh0aGlzLmNyZWF0ZUhlaWdodFBsYWNlaG9sZGVyKCkpO1xuICAgIH1cblxuICAgIGlmICghdHlwZU5hbWUpIHJldHVybiBjaGlsZHJlbjtcblxuICAgIHZhciBwcm9wcyA9IF9leHRlbmRzKHt9LCBkZWxlZ2F0ZWQsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgX3RoaXMxMS5wYXJlbnREYXRhLmRvbU5vZGUgPSBub2RlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodHlwZU5hbWUsIHByb3BzKTtcbiAgfTtcblxuICByZXR1cm4gRmxpcE1vdmU7XG59KENvbXBvbmVudCk7XG5cbnZhciBlbmhhbmNlZEZsaXBNb3ZlID0gLyogI19fUFVSRV9fICovcHJvcENvbnZlcnRlcihGbGlwTW92ZSQxKTtcblxuLyoqXG4gKiBSZWFjdCBGbGlwIE1vdmVcbiAqIChjKSAyMDE2LXByZXNlbnQgSm9zaHVhIENvbWVhdVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGVuaGFuY2VkRmxpcE1vdmU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQxKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NWR0ludGVybmFsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGV2cm9uRG93bjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5mdW5jdGlvbiBDaGV2cm9uRG93bihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYSwgX2V4dGVuZHMoe1xuICAgIHNjcmVlblJlYWRlclRleHQ6IE9iamVjdChfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIl9cIl0pKCdDaGV2cm9uIERvd24nKSxcbiAgICB2aWV3Qm94OiBcIjAgMCAxNTAwIDg4NVwiXG4gIH0sIHByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNTAwIDEzNC41OWwtNzUwIDc1MEwwIDEzMy41NiAxMzQuNTkgMCA3NTAgNjE1LjQxIDEzNjUuNDEgMFwiXG4gIH0pKTtcbn1cblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwiLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiBzaGltcyB0aGF0IHByb3ZpZGUgbWluaW1hbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBFUzYgY29sbGVjdGlvbnMuXHJcbiAqXHJcbiAqIFRoZXNlIGltcGxlbWVudGF0aW9ucyBhcmUgbm90IG1lYW50IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgUmVzaXplT2JzZXJ2ZXJcclxuICogbW9kdWxlcyBhcyB0aGV5IGNvdmVyIG9ubHkgYSBsaW1pdGVkIHJhbmdlIG9mIHVzZSBjYXNlcy5cclxuICovXHJcbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtanNkb2MsIHZhbGlkLWpzZG9jICovXHJcbnZhciBNYXBTaGltID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBNYXA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgaW5kZXggaW4gcHJvdmlkZWQgYXJyYXkgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk+fSBhcnJcclxuICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBnZXRJbmRleChhcnIsIGtleSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAtMTtcclxuICAgICAgICBhcnIuc29tZShmdW5jdGlvbiAoZW50cnksIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeVswXSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpbmRleDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9fZW50cmllc19fID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbGFzc18xLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fX2VudHJpZXNfXy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHJldHVybnMgeyp9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9fZW50cmllc19fW2luZGV4XTtcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5WzFdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlXHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXgodGhpcy5fX2VudHJpZXNfXywga2V5KTtcclxuICAgICAgICAgICAgaWYgKH5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fX2VudHJpZXNfX1tpbmRleF1bMV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18ucHVzaChba2V5LCB2YWx1ZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLl9fZW50cmllc19fO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleChlbnRyaWVzLCBrZXkpO1xyXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gISF+Z2V0SW5kZXgodGhpcy5fX2VudHJpZXNfXywga2V5KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9fZW50cmllc19fLnNwbGljZSgwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBbY3R4PW51bGxdXHJcbiAgICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY3R4KSB7XHJcbiAgICAgICAgICAgIGlmIChjdHggPT09IHZvaWQgMCkgeyBjdHggPSBudWxsOyB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLl9fZW50cmllc19fOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gX2FbX2ldO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGVudHJ5WzFdLCBlbnRyeVswXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgfSgpKTtcclxufSkoKTtcblxuLyoqXHJcbiAqIERldGVjdHMgd2hldGhlciB3aW5kb3cgYW5kIGRvY3VtZW50IG9iamVjdHMgYXJlIGF2YWlsYWJsZSBpbiBjdXJyZW50IGVudmlyb25tZW50LlxyXG4gKi9cclxudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ID09PSBkb2N1bWVudDtcblxuLy8gUmV0dXJucyBnbG9iYWwgb2JqZWN0IG9mIGEgY3VycmVudCBlbnZpcm9ubWVudC5cclxudmFyIGdsb2JhbCQxID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuTWF0aCA9PT0gTWF0aCkge1xyXG4gICAgICAgIHJldHVybiBnbG9iYWw7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PT0gTWF0aCkge1xyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09PSBNYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xyXG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XHJcbn0pKCk7XG5cbi8qKlxyXG4gKiBBIHNoaW0gZm9yIHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgd2hpY2ggZmFsbHMgYmFjayB0byB0aGUgc2V0VGltZW91dCBpZlxyXG4gKiBmaXJzdCBvbmUgaXMgbm90IHN1cHBvcnRlZC5cclxuICpcclxuICogQHJldHVybnMge251bWJlcn0gUmVxdWVzdHMnIGlkZW50aWZpZXIuXHJcbiAqL1xyXG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJDEgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAvLyBJdCdzIHJlcXVpcmVkIHRvIHVzZSBhIGJvdW5kZWQgZnVuY3Rpb24gYmVjYXVzZSBJRSBzb21ldGltZXMgdGhyb3dzXHJcbiAgICAgICAgLy8gYW4gXCJJbnZhbGlkIGNhbGxpbmcgb2JqZWN0XCIgZXJyb3IgaWYgckFGIGlzIGludm9rZWQgd2l0aG91dCB0aGUgZ2xvYmFsXHJcbiAgICAgICAgLy8gb2JqZWN0IG9uIHRoZSBsZWZ0IGhhbmQgc2lkZS5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQoZ2xvYmFsJDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsYmFjayhEYXRlLm5vdygpKTsgfSwgMTAwMCAvIDYwKTsgfTtcclxufSkoKTtcblxuLy8gRGVmaW5lcyBtaW5pbXVtIHRpbWVvdXQgYmVmb3JlIGFkZGluZyBhIHRyYWlsaW5nIGNhbGwuXHJcbnZhciB0cmFpbGluZ1RpbWVvdXQgPSAyO1xyXG4vKipcclxuICogQ3JlYXRlcyBhIHdyYXBwZXIgZnVuY3Rpb24gd2hpY2ggZW5zdXJlcyB0aGF0IHByb3ZpZGVkIGNhbGxiYWNrIHdpbGwgYmVcclxuICogaW52b2tlZCBvbmx5IG9uY2UgZHVyaW5nIHRoZSBzcGVjaWZpZWQgZGVsYXkgcGVyaW9kLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGRlbGF5IHBlcmlvZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IC0gRGVsYXkgYWZ0ZXIgd2hpY2ggdG8gaW52b2tlIGNhbGxiYWNrLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiB0aHJvdHRsZSAoY2FsbGJhY2ssIGRlbGF5KSB7XHJcbiAgICB2YXIgbGVhZGluZ0NhbGwgPSBmYWxzZSwgdHJhaWxpbmdDYWxsID0gZmFsc2UsIGxhc3RDYWxsVGltZSA9IDA7XHJcbiAgICAvKipcclxuICAgICAqIEludm9rZXMgdGhlIG9yaWdpbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBzY2hlZHVsZXMgbmV3IGludm9jYXRpb24gaWZcclxuICAgICAqIHRoZSBcInByb3h5XCIgd2FzIGNhbGxlZCBkdXJpbmcgY3VycmVudCByZXF1ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByZXNvbHZlUGVuZGluZygpIHtcclxuICAgICAgICBpZiAobGVhZGluZ0NhbGwpIHtcclxuICAgICAgICAgICAgbGVhZGluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRyYWlsaW5nQ2FsbCkge1xyXG4gICAgICAgICAgICBwcm94eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5LiBJdCB3aWxsIGZ1cnRoZXIgcG9zdHBvbmVcclxuICAgICAqIGludm9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlbGVnYXRpbmcgaXQgdG8gdGhlXHJcbiAgICAgKiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpIHtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMShyZXNvbHZlUGVuZGluZyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFNjaGVkdWxlcyBpbnZvY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcHJveHkoKSB7XHJcbiAgICAgICAgdmFyIHRpbWVTdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgaWYgKGxlYWRpbmdDYWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFJlamVjdCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgY2FsbHMuXHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RhbXAgLSBsYXN0Q2FsbFRpbWUgPCB0cmFpbGluZ1RpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBuZXcgY2FsbCB0byBiZSBpbiBpbnZva2VkIHdoZW4gdGhlIHBlbmRpbmcgb25lIGlzIHJlc29sdmVkLlxyXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBmb3IgXCJ0cmFuc2l0aW9uc1wiIHdoaWNoIG5ldmVyIGFjdHVhbGx5IHN0YXJ0XHJcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IHNvIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UgbWlnaHQgbWlzcyBvbmUgaWYgY2hhbmdlXHJcbiAgICAgICAgICAgIC8vIGhhcHBlbnMgYW1pZHMgdGhlIHBlbmRpbmcgaW52b2NhdGlvbi5cclxuICAgICAgICAgICAgdHJhaWxpbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxlYWRpbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgdHJhaWxpbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCBkZWxheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxhc3RDYWxsVGltZSA9IHRpbWVTdGFtcDtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm94eTtcclxufVxuXG4vLyBNaW5pbXVtIGRlbGF5IGJlZm9yZSBpbnZva2luZyB0aGUgdXBkYXRlIG9mIG9ic2VydmVycy5cclxudmFyIFJFRlJFU0hfREVMQVkgPSAyMDtcclxuLy8gQSBsaXN0IG9mIHN1YnN0cmluZ3Mgb2YgQ1NTIHByb3BlcnRpZXMgdXNlZCB0byBmaW5kIHRyYW5zaXRpb24gZXZlbnRzIHRoYXRcclxuLy8gbWlnaHQgYWZmZWN0IGRpbWVuc2lvbnMgb2Ygb2JzZXJ2ZWQgZWxlbWVudHMuXHJcbnZhciB0cmFuc2l0aW9uS2V5cyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0JywgJ3dpZHRoJywgJ2hlaWdodCcsICdzaXplJywgJ3dlaWdodCddO1xyXG4vLyBDaGVjayBpZiBNdXRhdGlvbk9ic2VydmVyIGlzIGF2YWlsYWJsZS5cclxudmFyIG11dGF0aW9uT2JzZXJ2ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XHJcbi8qKlxyXG4gKiBTaW5nbGV0b24gY29udHJvbGxlciBjbGFzcyB3aGljaCBoYW5kbGVzIHVwZGF0ZXMgb2YgUmVzaXplT2JzZXJ2ZXIgaW5zdGFuY2VzLlxyXG4gKi9cclxudmFyIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyKCkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIERPTSBsaXN0ZW5lcnMgaGF2ZSBiZWVuIGFkZGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRfID0gZmFsc2U7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGVsbHMgdGhhdCBjb250cm9sbGVyIGhhcyBzdWJzY3JpYmVkIGZvciBNdXRhdGlvbiBFdmVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm11dGF0aW9uRXZlbnRzQWRkZWRfID0gZmFsc2U7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogS2VlcHMgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBvZiBNdXRhdGlvbk9ic2VydmVyLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge011dGF0aW9uT2JzZXJ2ZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8gPSBudWxsO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbGlzdCBvZiBjb25uZWN0ZWQgb2JzZXJ2ZXJzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHByaXZhdGUge0FycmF5PFJlc2l6ZU9ic2VydmVyU1BJPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9ic2VydmVyc18gPSBbXTtcclxuICAgICAgICB0aGlzLm9uVHJhbnNpdGlvbkVuZF8gPSB0aGlzLm9uVHJhbnNpdGlvbkVuZF8uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2ggPSB0aHJvdHRsZSh0aGlzLnJlZnJlc2guYmluZCh0aGlzKSwgUkVGUkVTSF9ERUxBWSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgb2JzZXJ2ZXIgdG8gb2JzZXJ2ZXJzIGxpc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlclNQSX0gb2JzZXJ2ZXIgLSBPYnNlcnZlciB0byBiZSBhZGRlZC5cclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XHJcbiAgICAgICAgaWYgKCF+dGhpcy5vYnNlcnZlcnNfLmluZGV4T2Yob2JzZXJ2ZXIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzXy5wdXNoKG9ic2VydmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQWRkIGxpc3RlbmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBhZGRlZCB5ZXQuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RlZF8pIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0XygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgb2JzZXJ2ZXIgZnJvbSBvYnNlcnZlcnMgbGlzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIHJlbW92ZWQuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIChvYnNlcnZlcikge1xyXG4gICAgICAgIHZhciBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc187XHJcbiAgICAgICAgdmFyIGluZGV4ID0gb2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpO1xyXG4gICAgICAgIC8vIFJlbW92ZSBvYnNlcnZlciBpZiBpdCdzIHByZXNlbnQgaW4gcmVnaXN0cnkuXHJcbiAgICAgICAgaWYgKH5pbmRleCkge1xyXG4gICAgICAgICAgICBvYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVycyBpZiBjb250cm9sbGVyIGhhcyBubyBjb25uZWN0ZWQgb2JzZXJ2ZXJzLlxyXG4gICAgICAgIGlmICghb2JzZXJ2ZXJzLmxlbmd0aCAmJiB0aGlzLmNvbm5lY3RlZF8pIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0XygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEludm9rZXMgdGhlIHVwZGF0ZSBvZiBvYnNlcnZlcnMuIEl0IHdpbGwgY29udGludWUgcnVubmluZyB1cGRhdGVzIGluc29mYXJcclxuICAgICAqIGl0IGRldGVjdHMgY2hhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGFuZ2VzRGV0ZWN0ZWQgPSB0aGlzLnVwZGF0ZU9ic2VydmVyc18oKTtcclxuICAgICAgICAvLyBDb250aW51ZSBydW5uaW5nIHVwZGF0ZXMgaWYgY2hhbmdlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQgYXMgdGhlcmUgbWlnaHRcclxuICAgICAgICAvLyBiZSBmdXR1cmUgb25lcyBjYXVzZWQgYnkgQ1NTIHRyYW5zaXRpb25zLlxyXG4gICAgICAgIGlmIChjaGFuZ2VzRGV0ZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBldmVyeSBvYnNlcnZlciBmcm9tIG9ic2VydmVycyBsaXN0IGFuZCBub3RpZmllcyB0aGVtIG9mIHF1ZXVlZFxyXG4gICAgICogZW50cmllcy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgXCJ0cnVlXCIgaWYgYW55IG9ic2VydmVyIGhhcyBkZXRlY3RlZCBjaGFuZ2VzIGluXHJcbiAgICAgKiAgICAgIGRpbWVuc2lvbnMgb2YgaXQncyBlbGVtZW50cy5cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGVPYnNlcnZlcnNfID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIENvbGxlY3Qgb2JzZXJ2ZXJzIHRoYXQgaGF2ZSBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICAgIHZhciBhY3RpdmVPYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc18uZmlsdGVyKGZ1bmN0aW9uIChvYnNlcnZlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZ2F0aGVyQWN0aXZlKCksIG9ic2VydmVyLmhhc0FjdGl2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIERlbGl2ZXIgbm90aWZpY2F0aW9ucyBpbiBhIHNlcGFyYXRlIGN5Y2xlIGluIG9yZGVyIHRvIGF2b2lkIGFueVxyXG4gICAgICAgIC8vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYnNlcnZlcnMsIGUuZy4gd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2ZcclxuICAgICAgICAvLyBSZXNpemVPYnNlcnZlciBhcmUgdHJhY2tpbmcgdGhlIHNhbWUgZWxlbWVudCBhbmQgdGhlIGNhbGxiYWNrIG9mIG9uZVxyXG4gICAgICAgIC8vIG9mIHRoZW0gY2hhbmdlcyBjb250ZW50IGRpbWVuc2lvbnMgb2YgdGhlIG9ic2VydmVkIHRhcmdldC4gU29tZXRpbWVzXHJcbiAgICAgICAgLy8gdGhpcyBtYXkgcmVzdWx0IGluIG5vdGlmaWNhdGlvbnMgYmVpbmcgYmxvY2tlZCBmb3IgdGhlIHJlc3Qgb2Ygb2JzZXJ2ZXJzLlxyXG4gICAgICAgIGFjdGl2ZU9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikgeyByZXR1cm4gb2JzZXJ2ZXIuYnJvYWRjYXN0QWN0aXZlKCk7IH0pO1xyXG4gICAgICAgIHJldHVybiBhY3RpdmVPYnNlcnZlcnMubGVuZ3RoID4gMDtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIERPTSBsaXN0ZW5lcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLmNvbm5lY3RfID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgcnVubmluZyBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50IG9yIGlmIGxpc3RlbmVyc1xyXG4gICAgICAgIC8vIGhhdmUgYmVlbiBhbHJlYWR5IGFkZGVkLlxyXG4gICAgICAgIGlmICghaXNCcm93c2VyIHx8IHRoaXMuY29ubmVjdGVkXykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFN1YnNjcmlwdGlvbiB0byB0aGUgXCJUcmFuc2l0aW9uZW5kXCIgZXZlbnQgaXMgdXNlZCBhcyBhIHdvcmthcm91bmQgZm9yXHJcbiAgICAgICAgLy8gZGVsYXllZCB0cmFuc2l0aW9ucy4gVGhpcyB3YXkgaXQncyBwb3NzaWJsZSB0byBjYXB0dXJlIGF0IGxlYXN0IHRoZVxyXG4gICAgICAgIC8vIGZpbmFsIHN0YXRlIG9mIGFuIGVsZW1lbnQuXHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMub25UcmFuc2l0aW9uRW5kXyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXy5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCB0aGlzLnJlZnJlc2gpO1xyXG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uRXZlbnRzQWRkZWRfID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRfID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgRE9NIGxpc3RlbmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuZGlzY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXHJcbiAgICAgICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgcmVtb3ZlZC5cclxuICAgICAgICBpZiAoIWlzQnJvd3NlciB8fCAhdGhpcy5jb25uZWN0ZWRfKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMub25UcmFuc2l0aW9uRW5kXyk7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVmcmVzaCk7XHJcbiAgICAgICAgaWYgKHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8pIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgdGhpcy5yZWZyZXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RlZF8gPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFwiVHJhbnNpdGlvbmVuZFwiIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSB7VHJhbnNpdGlvbkV2ZW50fSBldmVudFxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUub25UcmFuc2l0aW9uRW5kXyA9IGZ1bmN0aW9uIChfYSkge1xyXG4gICAgICAgIHZhciBfYiA9IF9hLnByb3BlcnR5TmFtZSwgcHJvcGVydHlOYW1lID0gX2IgPT09IHZvaWQgMCA/ICcnIDogX2I7XHJcbiAgICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgdHJhbnNpdGlvbiBtYXkgYWZmZWN0IGRpbWVuc2lvbnMgb2YgYW4gZWxlbWVudC5cclxuICAgICAgICB2YXIgaXNSZWZsb3dQcm9wZXJ0eSA9IHRyYW5zaXRpb25LZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gISF+cHJvcGVydHlOYW1lLmluZGV4T2Yoa2V5KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaXNSZWZsb3dQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGluc3RhbmNlIG9mIHRoZSBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZV8pIHtcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZV8gPSBuZXcgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlXztcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlcidzIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlIHtSZXNpemVPYnNlcnZlckNvbnRyb2xsZXJ9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5pbnN0YW5jZV8gPSBudWxsO1xyXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlcjtcclxufSgpKTtcblxuLyoqXHJcbiAqIERlZmluZXMgbm9uLXdyaXRhYmxlL2VudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZWQgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCAtIE9iamVjdCBmb3Igd2hpY2ggdG8gZGVmaW5lIHByb3BlcnRpZXMuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgZGVmaW5lZC5cclxuICogQHJldHVybnMge09iamVjdH0gVGFyZ2V0IG9iamVjdC5cclxuICovXHJcbnZhciBkZWZpbmVDb25maWd1cmFibGUgPSAoZnVuY3Rpb24gKHRhcmdldCwgcHJvcHMpIHtcclxuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBPYmplY3Qua2V5cyhwcm9wcyk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IF9hW19pXTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzW2tleV0sXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufSk7XG5cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XHJcbiAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAqL1xyXG52YXIgZ2V0V2luZG93T2YgPSAoZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgLy8gQXNzdW1lIHRoYXQgdGhlIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgTm9kZSwgd2hpY2ggbWVhbnMgdGhhdCBpdFxyXG4gICAgLy8gaGFzIHRoZSBcIm93bmVyRG9jdW1lbnRcIiBwcm9wZXJ0eSBmcm9tIHdoaWNoIHdlIGNhbiByZXRyaWV2ZSBhXHJcbiAgICAvLyBjb3JyZXNwb25kaW5nIGdsb2JhbCBvYmplY3QuXHJcbiAgICB2YXIgb3duZXJHbG9iYWwgPSB0YXJnZXQgJiYgdGFyZ2V0Lm93bmVyRG9jdW1lbnQgJiYgdGFyZ2V0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XHJcbiAgICAvLyBSZXR1cm4gdGhlIGxvY2FsIGdsb2JhbCBvYmplY3QgaWYgaXQncyBub3QgcG9zc2libGUgZXh0cmFjdCBvbmUgZnJvbVxyXG4gICAgLy8gcHJvdmlkZWQgZWxlbWVudC5cclxuICAgIHJldHVybiBvd25lckdsb2JhbCB8fCBnbG9iYWwkMTtcclxufSk7XG5cbi8vIFBsYWNlaG9sZGVyIG9mIGFuIGVtcHR5IGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG52YXIgZW1wdHlSZWN0ID0gY3JlYXRlUmVjdEluaXQoMCwgMCwgMCwgMCk7XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBwcm92aWRlZCBzdHJpbmcgdG8gYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbmZ1bmN0aW9uIHRvRmxvYXQodmFsdWUpIHtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwO1xyXG59XHJcbi8qKlxyXG4gKiBFeHRyYWN0cyBib3JkZXJzIHNpemUgZnJvbSBwcm92aWRlZCBzdHlsZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXHJcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwb3NpdGlvbnMgLSBCb3JkZXJzIHBvc2l0aW9ucyAodG9wLCByaWdodCwgLi4uKVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzKSB7XHJcbiAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHBvc2l0aW9uc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHJldHVybiBwb3NpdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChzaXplLCBwb3NpdGlvbikge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlc1snYm9yZGVyLScgKyBwb3NpdGlvbiArICctd2lkdGgnXTtcclxuICAgICAgICByZXR1cm4gc2l6ZSArIHRvRmxvYXQodmFsdWUpO1xyXG4gICAgfSwgMCk7XHJcbn1cclxuLyoqXHJcbiAqIEV4dHJhY3RzIHBhZGRpbmdzIHNpemVzIGZyb20gcHJvdmlkZWQgc3R5bGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlc1xyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBQYWRkaW5ncyBib3guXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRQYWRkaW5ncyhzdHlsZXMpIHtcclxuICAgIHZhciBwb3NpdGlvbnMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xyXG4gICAgdmFyIHBhZGRpbmdzID0ge307XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIHBvc2l0aW9uc18xID0gcG9zaXRpb25zOyBfaSA8IHBvc2l0aW9uc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHBvc2l0aW9uc18xW19pXTtcclxuICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZXNbJ3BhZGRpbmctJyArIHBvc2l0aW9uXTtcclxuICAgICAgICBwYWRkaW5nc1twb3NpdGlvbl0gPSB0b0Zsb2F0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYWRkaW5ncztcclxufVxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBTVkcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtTVkdHcmFwaGljc0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgY29udGVudCByZWN0YW5nbGUgb2Ygd2hpY2ggbmVlZHNcclxuICogICAgICB0byBiZSBjYWxjdWxhdGVkLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTVkdDb250ZW50UmVjdCh0YXJnZXQpIHtcclxuICAgIHZhciBiYm94ID0gdGFyZ2V0LmdldEJCb3goKTtcclxuICAgIHJldHVybiBjcmVhdGVSZWN0SW5pdCgwLCAwLCBiYm94LndpZHRoLCBiYm94LmhlaWdodCk7XHJcbn1cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgY29udGVudCByZWN0YW5nbGUgb2YgcHJvdmlkZWQgSFRNTEVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY29udGVudCByZWN0YW5nbGUuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXHJcbmZ1bmN0aW9uIGdldEhUTUxFbGVtZW50Q29udGVudFJlY3QodGFyZ2V0KSB7XHJcbiAgICAvLyBDbGllbnQgd2lkdGggJiBoZWlnaHQgcHJvcGVydGllcyBjYW4ndCBiZVxyXG4gICAgLy8gdXNlZCBleGNsdXNpdmVseSBhcyB0aGV5IHByb3ZpZGUgcm91bmRlZCB2YWx1ZXMuXHJcbiAgICB2YXIgY2xpZW50V2lkdGggPSB0YXJnZXQuY2xpZW50V2lkdGgsIGNsaWVudEhlaWdodCA9IHRhcmdldC5jbGllbnRIZWlnaHQ7XHJcbiAgICAvLyBCeSB0aGlzIGNvbmRpdGlvbiB3ZSBjYW4gY2F0Y2ggYWxsIG5vbi1yZXBsYWNlZCBpbmxpbmUsIGhpZGRlbiBhbmRcclxuICAgIC8vIGRldGFjaGVkIGVsZW1lbnRzLiBUaG91Z2ggZWxlbWVudHMgd2l0aCB3aWR0aCAmIGhlaWdodCBwcm9wZXJ0aWVzIGxlc3NcclxuICAgIC8vIHRoYW4gMC41IHdpbGwgYmUgZGlzY2FyZGVkIGFzIHdlbGwuXHJcbiAgICAvL1xyXG4gICAgLy8gV2l0aG91dCBpdCB3ZSB3b3VsZCBuZWVkIHRvIGltcGxlbWVudCBzZXBhcmF0ZSBtZXRob2RzIGZvciBlYWNoIG9mXHJcbiAgICAvLyB0aG9zZSBjYXNlcyBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gcGVyZm9ybSBhIHByZWNpc2UgYW5kIHBlcmZvcm1hbmNlXHJcbiAgICAvLyBlZmZlY3RpdmUgdGVzdCBmb3IgaGlkZGVuIGVsZW1lbnRzLiBFLmcuIGV2ZW4galF1ZXJ5J3MgJzp2aXNpYmxlJyBmaWx0ZXJcclxuICAgIC8vIGdpdmVzIHdyb25nIHJlc3VsdHMgZm9yIGVsZW1lbnRzIHdpdGggd2lkdGggJiBoZWlnaHQgbGVzcyB0aGFuIDAuNS5cclxuICAgIGlmICghY2xpZW50V2lkdGggJiYgIWNsaWVudEhlaWdodCkge1xyXG4gICAgICAgIHJldHVybiBlbXB0eVJlY3Q7XHJcbiAgICB9XHJcbiAgICB2YXIgc3R5bGVzID0gZ2V0V2luZG93T2YodGFyZ2V0KS5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCk7XHJcbiAgICB2YXIgcGFkZGluZ3MgPSBnZXRQYWRkaW5ncyhzdHlsZXMpO1xyXG4gICAgdmFyIGhvcml6UGFkID0gcGFkZGluZ3MubGVmdCArIHBhZGRpbmdzLnJpZ2h0O1xyXG4gICAgdmFyIHZlcnRQYWQgPSBwYWRkaW5ncy50b3AgKyBwYWRkaW5ncy5ib3R0b207XHJcbiAgICAvLyBDb21wdXRlZCBzdHlsZXMgb2Ygd2lkdGggJiBoZWlnaHQgYXJlIGJlaW5nIHVzZWQgYmVjYXVzZSB0aGV5IGFyZSB0aGVcclxuICAgIC8vIG9ubHkgZGltZW5zaW9ucyBhdmFpbGFibGUgdG8gSlMgdGhhdCBjb250YWluIG5vbi1yb3VuZGVkIHZhbHVlcy4gSXQgY291bGRcclxuICAgIC8vIGJlIHBvc3NpYmxlIHRvIHV0aWxpemUgdGhlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpZiBvbmx5IGl0J3MgZGF0YSB3YXNuJ3RcclxuICAgIC8vIGFmZmVjdGVkIGJ5IENTUyB0cmFuc2Zvcm1hdGlvbnMgbGV0IGFsb25lIHBhZGRpbmdzLCBib3JkZXJzIGFuZCBzY3JvbGwgYmFycy5cclxuICAgIHZhciB3aWR0aCA9IHRvRmxvYXQoc3R5bGVzLndpZHRoKSwgaGVpZ2h0ID0gdG9GbG9hdChzdHlsZXMuaGVpZ2h0KTtcclxuICAgIC8vIFdpZHRoICYgaGVpZ2h0IGluY2x1ZGUgcGFkZGluZ3MgYW5kIGJvcmRlcnMgd2hlbiB0aGUgJ2JvcmRlci1ib3gnIGJveFxyXG4gICAgLy8gbW9kZWwgaXMgYXBwbGllZCAoZXhjZXB0IGZvciBJRSkuXHJcbiAgICBpZiAoc3R5bGVzLmJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XHJcbiAgICAgICAgLy8gRm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGhhbmRsZSBJbnRlcm5ldCBFeHBsb3JlciB3aGljaFxyXG4gICAgICAgIC8vIGRvZXNuJ3QgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycyB0byBjb21wdXRlZCBDU1MgZGltZW5zaW9ucy5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIFdlIGNhbiBzYXkgdGhhdCBpZiBDU1MgZGltZW5zaW9ucyArIHBhZGRpbmdzIGFyZSBlcXVhbCB0byB0aGUgXCJjbGllbnRcIlxyXG4gICAgICAgIC8vIHByb3BlcnRpZXMgdGhlbiBpdCdzIGVpdGhlciBJRSwgYW5kIHRodXMgd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdFxyXG4gICAgICAgIC8vIGFueXRoaW5nLCBvciBhbiBlbGVtZW50IG1lcmVseSBkb2Vzbid0IGhhdmUgcGFkZGluZ3MvYm9yZGVycyBzdHlsZXMuXHJcbiAgICAgICAgaWYgKE1hdGgucm91bmQod2lkdGggKyBob3JpelBhZCkgIT09IGNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHdpZHRoIC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ2xlZnQnLCAncmlnaHQnKSArIGhvcml6UGFkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTWF0aC5yb3VuZChoZWlnaHQgKyB2ZXJ0UGFkKSAhPT0gY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGhlaWdodCAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd0b3AnLCAnYm90dG9tJykgKyB2ZXJ0UGFkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEZvbGxvd2luZyBzdGVwcyBjYW4ndCBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudCdzIHJvb3QgZWxlbWVudCBhcyBpdHNcclxuICAgIC8vIGNsaWVudFtXaWR0aC9IZWlnaHRdIHByb3BlcnRpZXMgcmVwcmVzZW50IHZpZXdwb3J0IGFyZWEgb2YgdGhlIHdpbmRvdy5cclxuICAgIC8vIEJlc2lkZXMsIGl0J3MgYXMgd2VsbCBub3QgbmVjZXNzYXJ5IGFzIHRoZSA8aHRtbD4gaXRzZWxmIG5laXRoZXIgaGFzXHJcbiAgICAvLyByZW5kZXJlZCBzY3JvbGwgYmFycyBub3IgaXQgY2FuIGJlIGNsaXBwZWQuXHJcbiAgICBpZiAoIWlzRG9jdW1lbnRFbGVtZW50KHRhcmdldCkpIHtcclxuICAgICAgICAvLyBJbiBzb21lIGJyb3dzZXJzIChvbmx5IGluIEZpcmVmb3gsIGFjdHVhbGx5KSBDU1Mgd2lkdGggJiBoZWlnaHRcclxuICAgICAgICAvLyBpbmNsdWRlIHNjcm9sbCBiYXJzIHNpemUgd2hpY2ggY2FuIGJlIHJlbW92ZWQgYXQgdGhpcyBzdGVwIGFzIHNjcm9sbFxyXG4gICAgICAgIC8vIGJhcnMgYXJlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiByb3VuZGVkIGRpbWVuc2lvbnMgKyBwYWRkaW5nc1xyXG4gICAgICAgIC8vIGFuZCBcImNsaWVudFwiIHByb3BlcnRpZXMsIHRob3VnaCB0aGF0IGlzIG5vdCBhbHdheXMgdHJ1ZSBpbiBDaHJvbWUuXHJcbiAgICAgICAgdmFyIHZlcnRTY3JvbGxiYXIgPSBNYXRoLnJvdW5kKHdpZHRoICsgaG9yaXpQYWQpIC0gY2xpZW50V2lkdGg7XHJcbiAgICAgICAgdmFyIGhvcml6U2Nyb2xsYmFyID0gTWF0aC5yb3VuZChoZWlnaHQgKyB2ZXJ0UGFkKSAtIGNsaWVudEhlaWdodDtcclxuICAgICAgICAvLyBDaHJvbWUgaGFzIGEgcmF0aGVyIHdlaXJkIHJvdW5kaW5nIG9mIFwiY2xpZW50XCIgcHJvcGVydGllcy5cclxuICAgICAgICAvLyBFLmcuIGZvciBhbiBlbGVtZW50IHdpdGggY29udGVudCB3aWR0aCBvZiAzMTQuMnB4IGl0IHNvbWV0aW1lcyBnaXZlc1xyXG4gICAgICAgIC8vIHRoZSBjbGllbnQgd2lkdGggb2YgMzE1cHggYW5kIGZvciB0aGUgd2lkdGggb2YgMzE0LjdweCBpdCBtYXkgZ2l2ZVxyXG4gICAgICAgIC8vIDMxNHB4LiBBbmQgaXQgZG9lc24ndCBoYXBwZW4gYWxsIHRoZSB0aW1lLiBTbyBqdXN0IGlnbm9yZSB0aGlzIGRlbHRhXHJcbiAgICAgICAgLy8gYXMgYSBub24tcmVsZXZhbnQuXHJcbiAgICAgICAgaWYgKE1hdGguYWJzKHZlcnRTY3JvbGxiYXIpICE9PSAxKSB7XHJcbiAgICAgICAgICAgIHdpZHRoIC09IHZlcnRTY3JvbGxiYXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChNYXRoLmFicyhob3JpelNjcm9sbGJhcikgIT09IDEpIHtcclxuICAgICAgICAgICAgaGVpZ2h0IC09IGhvcml6U2Nyb2xsYmFyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVSZWN0SW5pdChwYWRkaW5ncy5sZWZ0LCBwYWRkaW5ncy50b3AsIHdpZHRoLCBoZWlnaHQpO1xyXG59XHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBTVkdHcmFwaGljc0VsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBjaGVja2VkLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbnZhciBpc1NWR0dyYXBoaWNzRWxlbWVudCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBTb21lIGJyb3dzZXJzLCBuYW1lbHkgSUUgYW5kIEVkZ2UsIGRvbid0IGhhdmUgdGhlIFNWR0dyYXBoaWNzRWxlbWVudFxyXG4gICAgLy8gaW50ZXJmYWNlLlxyXG4gICAgaWYgKHR5cGVvZiBTVkdHcmFwaGljc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHsgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuU1ZHR3JhcGhpY3NFbGVtZW50OyB9O1xyXG4gICAgfVxyXG4gICAgLy8gSWYgaXQncyBzbywgdGhlbiBjaGVjayB0aGF0IGVsZW1lbnQgaXMgYXQgbGVhc3QgYW4gaW5zdGFuY2Ugb2YgdGhlXHJcbiAgICAvLyBTVkdFbGVtZW50IGFuZCB0aGF0IGl0IGhhcyB0aGUgXCJnZXRCQm94XCIgbWV0aG9kLlxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXBhcmVuc1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHsgcmV0dXJuICh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLlNWR0VsZW1lbnQgJiZcclxuICAgICAgICB0eXBlb2YgdGFyZ2V0LmdldEJCb3ggPT09ICdmdW5jdGlvbicpOyB9O1xyXG59KSgpO1xyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgcHJvdmlkZWQgZWxlbWVudCBpcyBhIGRvY3VtZW50IGVsZW1lbnQgKDxodG1sPikuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBjaGVja2VkLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIGlzRG9jdW1lbnRFbGVtZW50KHRhcmdldCkge1xyXG4gICAgcmV0dXJuIHRhcmdldCA9PT0gZ2V0V2luZG93T2YodGFyZ2V0KS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYW4gYXBwcm9wcmlhdGUgY29udGVudCByZWN0YW5nbGUgZm9yIHByb3ZpZGVkIGh0bWwgb3Igc3ZnIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBjb250ZW50IHJlY3RhbmdsZSBvZiB3aGljaCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb250ZW50UmVjdCh0YXJnZXQpIHtcclxuICAgIGlmICghaXNCcm93c2VyKSB7XHJcbiAgICAgICAgcmV0dXJuIGVtcHR5UmVjdDtcclxuICAgIH1cclxuICAgIGlmIChpc1NWR0dyYXBoaWNzRWxlbWVudCh0YXJnZXQpKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldFNWR0NvbnRlbnRSZWN0KHRhcmdldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCh0YXJnZXQpO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGVzIHJlY3RhbmdsZSB3aXRoIGFuIGludGVyZmFjZSBvZiB0aGUgRE9NUmVjdFJlYWRPbmx5LlxyXG4gKiBTcGVjOiBodHRwczovL2RyYWZ0cy5meHRmLm9yZy9nZW9tZXRyeS8jZG9tcmVjdHJlYWRvbmx5XHJcbiAqXHJcbiAqIEBwYXJhbSB7RE9NUmVjdEluaXR9IHJlY3RJbml0IC0gT2JqZWN0IHdpdGggcmVjdGFuZ2xlJ3MgeC95IGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdFJlYWRPbmx5fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlUmVhZE9ubHlSZWN0KF9hKSB7XHJcbiAgICB2YXIgeCA9IF9hLngsIHkgPSBfYS55LCB3aWR0aCA9IF9hLndpZHRoLCBoZWlnaHQgPSBfYS5oZWlnaHQ7XHJcbiAgICAvLyBJZiBET01SZWN0UmVhZE9ubHkgaXMgYXZhaWxhYmxlIHVzZSBpdCBhcyBhIHByb3RvdHlwZSBmb3IgdGhlIHJlY3RhbmdsZS5cclxuICAgIHZhciBDb25zdHIgPSB0eXBlb2YgRE9NUmVjdFJlYWRPbmx5ICE9PSAndW5kZWZpbmVkJyA/IERPTVJlY3RSZWFkT25seSA6IE9iamVjdDtcclxuICAgIHZhciByZWN0ID0gT2JqZWN0LmNyZWF0ZShDb25zdHIucHJvdG90eXBlKTtcclxuICAgIC8vIFJlY3RhbmdsZSdzIHByb3BlcnRpZXMgYXJlIG5vdCB3cml0YWJsZSBhbmQgbm9uLWVudW1lcmFibGUuXHJcbiAgICBkZWZpbmVDb25maWd1cmFibGUocmVjdCwge1xyXG4gICAgICAgIHg6IHgsIHk6IHksIHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgIHJpZ2h0OiB4ICsgd2lkdGgsXHJcbiAgICAgICAgYm90dG9tOiBoZWlnaHQgKyB5LFxyXG4gICAgICAgIGxlZnQ6IHhcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZXMgRE9NUmVjdEluaXQgb2JqZWN0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaW1lbnNpb25zIGFuZCB0aGUgeC95IGNvb3JkaW5hdGVzLlxyXG4gKiBTcGVjOiBodHRwczovL2RyYWZ0cy5meHRmLm9yZy9nZW9tZXRyeS8jZGljdGRlZi1kb21yZWN0aW5pdFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFggY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBZIGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFJlY3RhbmdsZSdzIHdpZHRoLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gUmVjdGFuZ2xlJ3MgaGVpZ2h0LlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZWN0SW5pdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICByZXR1cm4geyB4OiB4LCB5OiB5LCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07XHJcbn1cblxuLyoqXHJcbiAqIENsYXNzIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGNvbXB1dGF0aW9ucyBvZiB0aGUgY29udGVudCByZWN0YW5nbGUgb2ZcclxuICogcHJvdmlkZWQgRE9NIGVsZW1lbnQgYW5kIGZvciBrZWVwaW5nIHRyYWNrIG9mIGl0J3MgY2hhbmdlcy5cclxuICovXHJcbnZhciBSZXNpemVPYnNlcnZhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgb2JzZXJ2ZWQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJyb2FkY2FzdGVkIHdpZHRoIG9mIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFdpZHRoID0gMDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBCcm9hZGNhc3RlZCBoZWlnaHQgb2YgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0SGVpZ2h0ID0gMDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGxhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7RE9NUmVjdEluaXR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5jb250ZW50UmVjdF8gPSBjcmVhdGVSZWN0SW5pdCgwLCAwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBjb250ZW50IHJlY3RhbmdsZSBhbmQgdGVsbHMgd2hldGhlciBpdCdzIHdpZHRoIG9yIGhlaWdodCBwcm9wZXJ0aWVzXHJcbiAgICAgKiBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgYnJvYWRjYXN0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZhdGlvbi5wcm90b3R5cGUuaXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHJlY3QgPSBnZXRDb250ZW50UmVjdCh0aGlzLnRhcmdldCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50UmVjdF8gPSByZWN0O1xyXG4gICAgICAgIHJldHVybiAocmVjdC53aWR0aCAhPT0gdGhpcy5icm9hZGNhc3RXaWR0aCB8fFxyXG4gICAgICAgICAgICByZWN0LmhlaWdodCAhPT0gdGhpcy5icm9hZGNhc3RIZWlnaHQpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyAnYnJvYWRjYXN0V2lkdGgnIGFuZCAnYnJvYWRjYXN0SGVpZ2h0JyBwcm9wZXJ0aWVzIHdpdGggYSBkYXRhXHJcbiAgICAgKiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgb2YgdGhlIGxhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge0RPTVJlY3RJbml0fSBMYXN0IG9ic2VydmVkIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZhdGlvbi5wcm90b3R5cGUuYnJvYWRjYXN0UmVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmVjdCA9IHRoaXMuY29udGVudFJlY3RfO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSByZWN0LndpZHRoO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XHJcbiAgICAgICAgcmV0dXJuIHJlY3Q7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmF0aW9uO1xyXG59KCkpO1xuXG52YXIgUmVzaXplT2JzZXJ2ZXJFbnRyeSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlckVudHJ5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0aGF0IGlzIGJlaW5nIG9ic2VydmVkLlxyXG4gICAgICogQHBhcmFtIHtET01SZWN0SW5pdH0gcmVjdEluaXQgLSBEYXRhIG9mIHRoZSBlbGVtZW50J3MgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyRW50cnkodGFyZ2V0LCByZWN0SW5pdCkge1xyXG4gICAgICAgIHZhciBjb250ZW50UmVjdCA9IGNyZWF0ZVJlYWRPbmx5UmVjdChyZWN0SW5pdCk7XHJcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBub3Qgd3JpdGFibGVcclxuICAgICAgICAvLyBhbmQgYXJlIGFsc28gbm90IGVudW1lcmFibGUgaW4gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIFByb3BlcnR5IGFjY2Vzc29ycyBhcmUgbm90IGJlaW5nIHVzZWQgYXMgdGhleSdkIHJlcXVpcmUgdG8gZGVmaW5lIGFcclxuICAgICAgICAvLyBwcml2YXRlIFdlYWtNYXAgc3RvcmFnZSB3aGljaCBtYXkgY2F1c2UgbWVtb3J5IGxlYWtzIGluIGJyb3dzZXJzIHRoYXRcclxuICAgICAgICAvLyBkb24ndCBzdXBwb3J0IHRoaXMgdHlwZSBvZiBjb2xsZWN0aW9ucy5cclxuICAgICAgICBkZWZpbmVDb25maWd1cmFibGUodGhpcywgeyB0YXJnZXQ6IHRhcmdldCwgY29udGVudFJlY3Q6IGNvbnRlbnRSZWN0IH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyRW50cnk7XHJcbn0oKSk7XG5cbnZhciBSZXNpemVPYnNlcnZlclNQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkXHJcbiAgICAgKiAgICAgIHdoZW4gb25lIG9mIHRoZSBvYnNlcnZlZCBlbGVtZW50cyBjaGFuZ2VzIGl0J3MgY29udGVudCBkaW1lbnNpb25zLlxyXG4gICAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlckNvbnRyb2xsZXJ9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIGluc3RhbmNlIHdoaWNoXHJcbiAgICAgKiAgICAgIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgdXBkYXRlcyBvZiBvYnNlcnZlci5cclxuICAgICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJ9IGNhbGxiYWNrQ3R4IC0gUmVmZXJlbmNlIHRvIHRoZSBwdWJsaWNcclxuICAgICAqICAgICAgUmVzaXplT2JzZXJ2ZXIgaW5zdGFuY2Ugd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyU1BJKGNhbGxiYWNrLCBjb250cm9sbGVyLCBjYWxsYmFja0N0eCkge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbGxlY3Rpb24gb2YgcmVzaXplIG9ic2VydmF0aW9ucyB0aGF0IGhhdmUgZGV0ZWN0ZWQgY2hhbmdlcyBpbiBkaW1lbnNpb25zXHJcbiAgICAgICAgICogb2YgZWxlbWVudHMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7QXJyYXk8UmVzaXplT2JzZXJ2YXRpb24+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXyA9IFtdO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlZ2lzdHJ5IG9mIHRoZSBSZXNpemVPYnNlcnZhdGlvbiBpbnN0YW5jZXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcHJpdmF0ZSB7TWFwPEVsZW1lbnQsIFJlc2l6ZU9ic2VydmF0aW9uPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm9ic2VydmF0aW9uc18gPSBuZXcgTWFwU2hpbSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNhbGxiYWNrIHByb3ZpZGVkIGFzIHBhcmFtZXRlciAxIGlzIG5vdCBhIGZ1bmN0aW9uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxiYWNrXyA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8gPSBjb250cm9sbGVyO1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2tDdHhfID0gY2FsbGJhY2tDdHg7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyBvYnNlcnZpbmcgcHJvdmlkZWQgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgb2JzZXJ2ZWQuXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSB0aGUgRWxlbWVudCBpbnRlcmZhY2UuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhKEVsZW1lbnQgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5FbGVtZW50KSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSBcIkVsZW1lbnRcIi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9ic2VydmF0aW9ucyA9IHRoaXMub2JzZXJ2YXRpb25zXztcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGVsZW1lbnQgaXMgYWxyZWFkeSBiZWluZyBvYnNlcnZlZC5cclxuICAgICAgICBpZiAob2JzZXJ2YXRpb25zLmhhcyh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JzZXJ2YXRpb25zLnNldCh0YXJnZXQsIG5ldyBSZXNpemVPYnNlcnZhdGlvbih0YXJnZXQpKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmFkZE9ic2VydmVyKHRoaXMpO1xyXG4gICAgICAgIC8vIEZvcmNlIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2YXRpb25zLlxyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVmcmVzaCgpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogU3RvcHMgb2JzZXJ2aW5nIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIHN0b3Agb2JzZXJ2aW5nLlxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKi9cclxuICAgIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS51bm9ic2VydmUgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSB0aGUgRWxlbWVudCBpbnRlcmZhY2UuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhKEVsZW1lbnQgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5FbGVtZW50KSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSBcIkVsZW1lbnRcIi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9ic2VydmF0aW9ucyA9IHRoaXMub2JzZXJ2YXRpb25zXztcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGVsZW1lbnQgaXMgbm90IGJlaW5nIG9ic2VydmVkLlxyXG4gICAgICAgIGlmICghb2JzZXJ2YXRpb25zLmhhcyh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JzZXJ2YXRpb25zLmRlbGV0ZSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghb2JzZXJ2YXRpb25zLnNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wcyBvYnNlcnZpbmcgYWxsIGVsZW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZhdGlvbnNfLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIENvbGxlY3RzIG9ic2VydmF0aW9uIGluc3RhbmNlcyB0aGUgYXNzb2NpYXRlZCBlbGVtZW50IG9mIHdoaWNoIGhhcyBjaGFuZ2VkXHJcbiAgICAgKiBpdCdzIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuZ2F0aGVyQWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25zXy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZhdGlvbikge1xyXG4gICAgICAgICAgICBpZiAob2JzZXJ2YXRpb24uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5wdXNoKG9ic2VydmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogSW52b2tlcyBpbml0aWFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggYSBsaXN0IG9mIFJlc2l6ZU9ic2VydmVyRW50cnlcclxuICAgICAqIGluc3RhbmNlcyBjb2xsZWN0ZWQgZnJvbSBhY3RpdmUgcmVzaXplIG9ic2VydmF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmJyb2FkY2FzdEFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIG9ic2VydmVyIGRvZXNuJ3QgaGF2ZSBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICAgIGlmICghdGhpcy5oYXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdHggPSB0aGlzLmNhbGxiYWNrQ3R4XztcclxuICAgICAgICAvLyBDcmVhdGUgUmVzaXplT2JzZXJ2ZXJFbnRyeSBpbnN0YW5jZSBmb3IgZXZlcnkgYWN0aXZlIG9ic2VydmF0aW9uLlxyXG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLm1hcChmdW5jdGlvbiAob2JzZXJ2YXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNpemVPYnNlcnZlckVudHJ5KG9ic2VydmF0aW9uLnRhcmdldCwgb2JzZXJ2YXRpb24uYnJvYWRjYXN0UmVjdCgpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrXy5jYWxsKGN0eCwgZW50cmllcywgY3R4KTtcclxuICAgICAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlIG9ic2VydmF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqL1xyXG4gICAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmNsZWFyQWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5zcGxpY2UoMCk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyB3aGV0aGVyIG9ic2VydmVyIGhhcyBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuaGFzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18ubGVuZ3RoID4gMDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJTUEk7XHJcbn0oKSk7XG5cbi8vIFJlZ2lzdHJ5IG9mIGludGVybmFsIG9ic2VydmVycy4gSWYgV2Vha01hcCBpcyBub3QgYXZhaWxhYmxlIHVzZSBjdXJyZW50IHNoaW1cclxuLy8gZm9yIHRoZSBNYXAgY29sbGVjdGlvbiBhcyBpdCBoYXMgYWxsIHJlcXVpcmVkIG1ldGhvZHMgYW5kIGJlY2F1c2UgV2Vha01hcFxyXG4vLyBjYW4ndCBiZSBmdWxseSBwb2x5ZmlsbGVkIGFueXdheS5cclxudmFyIG9ic2VydmVycyA9IHR5cGVvZiBXZWFrTWFwICE9PSAndW5kZWZpbmVkJyA/IG5ldyBXZWFrTWFwKCkgOiBuZXcgTWFwU2hpbSgpO1xyXG4vKipcclxuICogUmVzaXplT2JzZXJ2ZXIgQVBJLiBFbmNhcHN1bGF0ZXMgdGhlIFJlc2l6ZU9ic2VydmVyIFNQSSBpbXBsZW1lbnRhdGlvblxyXG4gKiBleHBvc2luZyBvbmx5IHRob3NlIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3BlYy5cclxuICovXHJcbnZhciBSZXNpemVPYnNlcnZlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW5cclxuICAgICAqICAgICAgZGltZW5zaW9ucyBvZiB0aGUgb2JzZXJ2ZWQgZWxlbWVudHMgY2hhbmdlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlcihjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29udHJvbGxlciA9IFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlclNQSShjYWxsYmFjaywgY29udHJvbGxlciwgdGhpcyk7XHJcbiAgICAgICAgb2JzZXJ2ZXJzLnNldCh0aGlzLCBvYnNlcnZlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXI7XHJcbn0oKSk7XHJcbi8vIEV4cG9zZSBwdWJsaWMgbWV0aG9kcyBvZiBSZXNpemVPYnNlcnZlci5cclxuW1xyXG4gICAgJ29ic2VydmUnLFxyXG4gICAgJ3Vub2JzZXJ2ZScsXHJcbiAgICAnZGlzY29ubmVjdCdcclxuXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcclxuICAgIFJlc2l6ZU9ic2VydmVyLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfYTtcclxuICAgICAgICByZXR1cm4gKF9hID0gb2JzZXJ2ZXJzLmdldCh0aGlzKSlbbWV0aG9kXS5hcHBseShfYSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn0pO1xuXG52YXIgaW5kZXggPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gRXhwb3J0IGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIGlmIGF2YWlsYWJsZS5cclxuICAgIGlmICh0eXBlb2YgZ2xvYmFsJDEuUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbCQxLlJlc2l6ZU9ic2VydmVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyO1xyXG59KSgpO1xuXG5leHBvcnQgZGVmYXVsdCBpbmRleDtcbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuZXhwb3J0IGRlZmF1bHQgZnJlZUdsb2JhbDtcblxuIiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE0Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNvcnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5mdW5jdGlvbiBTb3J0KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ1NvcnQnKSxcbiAgICB2aWV3Qm94OiBcIjAgMCA5MDAgMTUwMFwiXG4gIH0sIHByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDkwMGg5MDBsLTQ1MCA0NTBMMCA5MDB6bTAtMzAwbDQ1MC00NTAgNDUwIDQ1MEgwelwiXG4gIH0pKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHSW50ZXJuYWxcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTQ3KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTb3J0ZWREb3duOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuZnVuY3Rpb24gU29ydGVkRG93bihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYSwgX2V4dGVuZHMoe1xuICAgIHNjcmVlblJlYWRlclRleHQ6IE9iamVjdChfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIl9cIl0pKCdTb3J0ZWQgRG93bicpLFxuICAgIHZpZXdCb3g6IFwiMCAwIDkwMCAxNTAwXCJcbiAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCIjOTc5Nzk3XCIsXG4gICAgZDogXCJNMS4yMDcgOTAwLjVMNDUwIDEzNDkuMjkzIDg5OC43OTMgOTAwLjVIMS4yMDd6XCJcbiAgfSkpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9TVkdJbnRlcm5hbFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDgpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE0ODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNvcnRlZFVwOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fKTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuZnVuY3Rpb24gU29ydGVkVXAocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEsIF9leHRlbmRzKHtcbiAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJfXCJdKSgnU29ydGVkIFVwJyksXG4gICAgdmlld0JveDogXCIwIDAgOTAwIDE1MDBcIlxuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgc3Ryb2tlOiBcIiM5Nzk3OTdcIixcbiAgICBkOiBcIk0xLjIwNyA1OTkuNWg4OTcuNTg2TDQ1MCAxNTAuNzA3IDEuMjA3IDU5OS41elwiXG4gIH0pKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHSW50ZXJuYWxcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gODYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHSW50ZXJuYWxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Njpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEluZm87IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5mdW5jdGlvbiBJbmZvKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ0luZm8nKSxcbiAgICB2aWV3Qm94OiBcIjAgMCA3NTAgMTUwMFwiXG4gIH0sIHByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xODcuNSA1NjIuNWgzNzV2NzUwSDc1MFYxNTAwSDB2LTE4Ny41aDE4Ny41Vjc1MEgwVjU2Mi41aDE4Ny41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMzc1XCIsXG4gICAgY3k6IFwiMTg3LjVcIixcbiAgICByOiBcIjE4Ny41XCJcbiAgfSkpO1xufVxuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDExMik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDExMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIERlZmluaXRpb25MaXN0X0RlZmluaXRpb25MaXN0OyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkRlc2NyaXB0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gRGVmaW5pdGlvbkxpc3RfRGVzY3JpcHRpb247IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGVybVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIERlZmluaXRpb25MaXN0X1Rlcm07IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0RlZmluaXRpb25MaXN0L0Rlc2NyaXB0aW9uU3R5bGVzLnRzXG5cblxudmFyIFN0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kZC53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiRGVzY3JpcHRpb25TdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xamdsaXhiLTBcIlxufSkoW1wiXCIsIFwiO21pbi1oZWlnaHQ6XCIsIFwiO3BhZGRpbmctbGVmdDo1cHg7XCIsIFwiXCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdibG9jaycpLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmxpbmVIZWlnaHQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlKVxufSkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9EZWZpbml0aW9uTGlzdC9EZXNjcmlwdGlvbi50c3hcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pXG59O1xuXG4vKipcbiAqIENvbnRhaW5lciBjb21wb25lbnQgZm9yIGEgYERlZmluaXRpb25MaXN0YCBkZXNjcmlwdGlvbi5cbiAqL1xuZnVuY3Rpb24gRGVzY3JpcHRpb24oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgZWxlbWVudFJlZiA9IF9yZWYuZWxlbWVudFJlZixcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIiwgXCJlbGVtZW50UmVmXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIERlc2NyaXB0aW9uUHJvcHNCYXNlXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkLCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJkZXNjcmlwdGlvblwiLFxuICAgIHJlZjogZWxlbWVudFJlZlxuICB9LCBvdGhlclByb3BzKSwgY2hpbGRyZW4pO1xufVxuXG5EZXNjcmlwdGlvbi5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBEZWZpbml0aW9uTGlzdF9EZXNjcmlwdGlvbiA9IChEZXNjcmlwdGlvbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9EZWZpbml0aW9uTGlzdC9EZWZpbml0aW9uTGlzdFN0eWxlcy50c1xuXG5cbnZhciBEZWZpbml0aW9uTGlzdFN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGwud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkRlZmluaXRpb25MaXN0U3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXBxZnJnbS0wXCJcbn0pKFtcIlwiLCBcIjtcIiwgXCJcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQpXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0RlZmluaXRpb25MaXN0L1Rlcm1TdHlsZXMudHNcblxuXG52YXIgVGVybVN0eWxlc19TdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZHQud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlRlcm1TdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xYW85N2o5LTBcIlxufSkoW1wiXCIsIFwiO2Zsb2F0OmxlZnQ7d2lkdGg6MTIwcHg7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXg6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXdlaWdodDo0MDA7d29yZC13cmFwOm5vcm1hbDtcIiwgXCJcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJyksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOjphZnRlcntjb250ZW50OidcIiwgXCInO31cIl0sIFwiIFwiLmNvbmNhdCgnLicucmVwZWF0KDEwMCkpKVxufSkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9EZWZpbml0aW9uTGlzdC9UZXJtLnRzeFxuZnVuY3Rpb24gVGVybV9leHRlbmRzKCkgeyBUZXJtX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gVGVybV9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gVGVybV9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gVGVybV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gVGVybV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIFRlcm1fcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKVxufTtcblxuLyoqXG4gKiBDb250YWluZXIgY29tcG9uZW50IGZvciBhIGBEZWZpbml0aW9uTGlzdGAgdGVybS5cbiAqL1xuZnVuY3Rpb24gVGVybShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBlbGVtZW50UmVmID0gX3JlZi5lbGVtZW50UmVmLFxuICAgICAgb3RoZXJQcm9wcyA9IFRlcm1fb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIiwgXCJlbGVtZW50UmVmXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIFRlcm1Qcm9wc0Jhc2VcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUZXJtU3R5bGVzX1N0eWxlZCwgVGVybV9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdFwiOiBcInRlcm1cIixcbiAgICByZWY6IGVsZW1lbnRSZWZcbiAgfSwgb3RoZXJQcm9wcyksIGNoaWxkcmVuKTtcbn1cblxuVGVybS5wcm9wVHlwZXMgPSBUZXJtX3Byb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIERlZmluaXRpb25MaXN0X1Rlcm0gPSAoVGVybSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9EZWZpbml0aW9uTGlzdC9EZWZpbml0aW9uTGlzdC50c3hcbmZ1bmN0aW9uIERlZmluaXRpb25MaXN0X2V4dGVuZHMoKSB7IERlZmluaXRpb25MaXN0X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gRGVmaW5pdGlvbkxpc3RfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIERlZmluaXRpb25MaXN0X29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBEZWZpbml0aW9uTGlzdF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gRGVmaW5pdGlvbkxpc3Rfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cblxuXG52YXIgRGVmaW5pdGlvbkxpc3RfcHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgdGVybVdpZHRoOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlciwgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nXSlcbn07XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB0ZXJtV2lkdGggPSBfcmVmLnRlcm1XaWR0aDtcbiAgdmFyIGZpbHRlcmVkQ2hpbGRyZW4gPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKS5maWx0ZXIoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pO1xuICByZXR1cm4gZmlsdGVyZWRDaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkLnR5cGUgPT09IERlZmluaXRpb25MaXN0X1Rlcm0pIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoY2hpbGQsIHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICB3aWR0aDogdGVybVdpZHRoXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZC50eXBlID09PSBEZWZpbml0aW9uTGlzdF9EZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShjaGlsZCwge1xuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG1hcmdpbkxlZnQ6IHRlcm1XaWR0aFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBEZWZpbml0aW9uTGlzdChfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGVsZW1lbnRSZWYgPSBfcmVmMi5lbGVtZW50UmVmLFxuICAgICAgX3JlZjIkdGVybVdpZHRoID0gX3JlZjIudGVybVdpZHRoLFxuICAgICAgdGVybVdpZHRoID0gX3JlZjIkdGVybVdpZHRoID09PSB2b2lkIDAgPyAxMjAgOiBfcmVmMiR0ZXJtV2lkdGgsXG4gICAgICBvdGhlclByb3BzID0gRGVmaW5pdGlvbkxpc3Rfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcImNoaWxkcmVuXCIsIFwiZWxlbWVudFJlZlwiLCBcInRlcm1XaWR0aFwiXSk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBEZWZpbml0aW9uTGlzdFByb3BzQmFzZVxuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KERlZmluaXRpb25MaXN0U3R5bGVzX1N0eWxlZCwgRGVmaW5pdGlvbkxpc3RfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJkZWZpbml0aW9uLWxpc3RcIixcbiAgICByZWY6IGVsZW1lbnRSZWZcbiAgfSwgb3RoZXJQcm9wcyksIHByb2Nlc3NDaGlsZHJlbih7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIHRlcm1XaWR0aDogdGVybVdpZHRoXG4gIH0pKTtcbn1cblxuRGVmaW5pdGlvbkxpc3QucHJvcFR5cGVzID0gRGVmaW5pdGlvbkxpc3RfcHJvcFR5cGVzO1xuRGVmaW5pdGlvbkxpc3QuRGVzY3JpcHRpb24gPSBEZWZpbml0aW9uTGlzdF9EZXNjcmlwdGlvbjtcbkRlZmluaXRpb25MaXN0LlRlcm0gPSBEZWZpbml0aW9uTGlzdF9UZXJtO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgRGVmaW5pdGlvbkxpc3RfRGVmaW5pdGlvbkxpc3QgPSAoRGVmaW5pdGlvbkxpc3QpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9EZWZpbml0aW9uTGlzdC9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTE4KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBQZW5jaWw7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5mdW5jdGlvbiBQZW5jaWwocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEsIF9leHRlbmRzKHtcbiAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJfXCJdKSgnUGVuY2lsJylcbiAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0MDMuNDI1IDEwNS44MjJDMTQ3OC40MjUgMTc5Ljc5NSAxNTAwIDMwMCAxNTAwIDM3NUw0NTAgMTQyNSAwIDE1MDBsNzUtNDUwTDExMjUgMGM3NSAwIDE4NC45MzIgOS4yNDcgMjc4LjQyNSAxMDUuODIyek0yMjUgMTM3NC42NThoMTg4LjAxNGMtNi4xNjUtNzkuMTEtMzIuODc3LTEyOC40MjUtOTQuNTItMTkzLjE1LTYxLjY0NS01Ni41MDgtMTExLjk4Ny04NC4yNDgtMTkzLjE1Mi05NC41MjJMMTI0LjMxNSAxMjc1YzQyLjEyMyAyMy42MyA3NSA1OC41NjIgMTAwLjY4NSA5OS42NTh6XCJcbiAgfSkpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9TVkdJbnRlcm5hbFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1Myk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9TVkdJbnRlcm5hbFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDUzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2xvbmU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5mdW5jdGlvbiBDbG9uZShwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYSwgX2V4dGVuZHMoe1xuICAgIHNjcmVlblJlYWRlclRleHQ6IE9iamVjdChfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIl9cIl0pKCdDbG9uZScpXG4gIH0sIHByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xODkuMDQgMTMxMC45NkgxMTI1VjE1MDBIMFYzNzVoMTg5LjA0djkzNS45NnpNMzc1IDBoMTEyNXYxMTI1SDM3NVYwem05MzUuOTYgOTM1Ljk2VjE4OS4wNEg1NjQuMDR2NzQ2LjkyaDc0Ni45MnpcIlxuICB9KSk7XG59XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTYwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNjA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUcmFzaDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbmZ1bmN0aW9uIFRyYXNoKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1wiX1wiXSkoJ1RyYXNoJyksXG4gICAgdmlld0JveDogXCIwIDAgMTM1MCAxNTAwXCJcbiAgfSwgcHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyNzMuOTczIDE1MEg5MDBWNzYuMDI3QzkwMCAzMS44NSA4NjguMTUgMCA4MjMuOTczIDBINTI2LjAyN0M0ODEuODUgMCA0NTAgMzEuODUgNDUwIDc2LjAyN1YxNTBINzYuMDI3QzMxLjg1IDE1MCAwIDE4MS44NSAwIDIyNXYxNTBoMTM1MFYyMjYuMDI3YzAtNDQuMTc4LTMxLjg1LTc2LjAyNy03Ni4wMjctNzYuMDI3ek0xNTAgNTIzLjk3M3Y5MDBjMCA0NC4xNzggMzEuODUgNzYuMDI3IDc2LjAyNyA3Ni4wMjdoODk3Ljk0NmM0NC4xNzggMCA3Ni4wMjctMzEuODUgNzYuMDI3LTc2LjAyN3YtOTAwSDE1MHpcIlxuICB9KSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LWljb25zL1NWR0ludGVybmFsXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG5cbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5O1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gSUUgOCBoYXMgYSBicm9rZW4gT2JqZWN0LmRlZmluZVByb3BlcnR5IHRoYXQgb25seSB3b3JrcyBvbiBET00gb2JqZWN0cy5cbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbihvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShcbiAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCxcbiAgICBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgKTtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKTtcbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBkZWZpbmUoR3AsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvclwiKTtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTU1KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaWRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNTU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfQ29sbGFwc2libGVQYW5lbF9Db2xsYXBzaWJsZVBhbmVsOyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2lkXCJcbnZhciBpZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvVHJhbnNpdGlvbk9wZW5cIlxudmFyIFRyYW5zaXRpb25PcGVuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyIFRyYW5zaXRpb25PcGVuX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFRyYW5zaXRpb25PcGVuXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvQ2hldnJvblJpZ2h0LnRzeFxudmFyIENoZXZyb25SaWdodCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCJcbnZhciBCb3hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBCb3hfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQm94Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0NsaWNrYWJsZVwiXG52YXIgQ2xpY2thYmxlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIENsaWNrYWJsZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihDbGlja2FibGVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzXCJcbnZhciB0aGVtZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29sbGFwc2libGVQYW5lbC9Db2xsYXBzaWJsZVBhbmVsU3R5bGVzLnRzXG5cblxuXG5cbnZhciBTdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNvbGxhcHNpYmxlUGFuZWxTdHlsZXNfX1N0eWxlZEJveFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xcGhpa2JwLTBcIlxufSkoW1wiZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4taGVpZ2h0OlwiLCBcIjtcIiwgXCI7JiArICZ7bWFyZ2luLXRvcDpcIiwgXCI7fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNhbGMoXCIsIFwiICsgMTJweClcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGluZUhlaWdodCksXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiAnNTZweCcsXG4gICAgY29tcGFjdDogJzQ4cHgnXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yU2VjdGlvbilcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzJweCcsXG4gIHByaXNtYTogJzFweCdcbn0pKTtcbnZhciBTdHlsZWRJY29uID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLnNwYW4ud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNvbGxhcHNpYmxlUGFuZWxTdHlsZXNfX1N0eWxlZEljb25cIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXBoaWticC0xXCJcbn0pKFtcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6XCIsIFwiO3RyYW5zaXRpb246dHJhbnNmb3JtIFwiLCBcIjtcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzEycHgnLFxuICBwcmlzbWE6ICcyMHB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMzAwbXMnLFxuICBwcmlzbWE6ICcyMDBtcydcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7ZGlzcGxheTpmbGV4O3RvcDpcIiwgXCI7W2Rpc2FibGVkXSA+ICZ7Y29sb3I6aW5oZXJpdDt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRlZmF1bHQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGNvbWZvcnRhYmxlOiAnMjBweCcsXG4gICAgY29tcGFjdDogJzE2cHgnXG4gIH0pKVxufSkpO1xudmFyIFN0eWxlZFRpdGxlV2l0aEFjdGlvbnMgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb2xsYXBzaWJsZVBhbmVsU3R5bGVzX19TdHlsZWRUaXRsZVdpdGhBY3Rpb25zXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFwaGlrYnAtMlwiXG59KShbXCJmbGV4LXNocmluazowO2JvcmRlci1ib3R0b206MDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOlwiLCBcIjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4ycyxib3JkZXIgMC4ycyxib3gtc2hhZG93IDAuMnM7Y29sb3I6XCIsIFwiO1wiLCBcIiBcIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMHB4IDEwcHggMHB4IDMwcHgnLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzhweCAxMHB4IDhweCA1MnB4JyxcbiAgICBjb21wYWN0OiAnOHB4IDEwcHggOHB4IDUycHgnXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0Q29sb3IsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmVcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmQpLFxuICBlbnRlcnByaXNlOiB7XG4gICAgZGFyazogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk0NSksXG4gICAgbGlnaHQ6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTYpXG4gIH1cbn0pLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJGRpc2FibGVkID0gX3JlZi4kZGlzYWJsZWQ7XG4gIHJldHVybiAkZGlzYWJsZWQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY3Vyc29yOmRlZmF1bHQ7Y29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0LFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZFxuICB9KSk7XG59KTtcbnZhciBTdHlsZWRDbGlja2FibGVJY29uID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKENsaWNrYWJsZV9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb2xsYXBzaWJsZVBhbmVsU3R5bGVzX19TdHlsZWRDbGlja2FibGVJY29uXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFwaGlrYnAtM1wiXG59KShbXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OlwiLCBcIjtwYWRkaW5nOlwiLCBcIjt0b3A6XCIsIFwiOyYgPiBzdmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gXCIsIFwiO31cIiwgXCI7XCIsIFwiICY6Zm9jdXM6bm90KFtkaXNhYmxlZF0pLCY6YWN0aXZlOm5vdChbZGlzYWJsZWRdKXtjb2xvcjpcIiwgXCI7Ym94LXNoYWRvdzpcIiwgXCI7fSY6aG92ZXI6bm90KFtkaXNhYmxlZF0pe2NvbG9yOlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzRweCcsXG4gIHByaXNtYTogJzhweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGNvbWZvcnRhYmxlOiAnMnB4IDhweCcsXG4gICAgY29tcGFjdDogJzBweCA4cHgnXG4gIH0sXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiAnMTJweCcsXG4gICAgY29tcGFjdDogJzhweCdcbiAgfVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnNHB4JyxcbiAgcHJpc21hOiAnOHB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMzAwbXMnLFxuICBwcmlzbWE6ICcyMDBtcydcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7ZGlzcGxheTpmbGV4O1tkaXNhYmxlZF0gPiAme2NvbG9yOmluaGVyaXQ7fVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0KVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckb3BlbicsIHtcbiAgXCJ0cnVlXCI6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiYgPiBzdmd7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7fVwiXSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0Q29sb3IsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmVcbn0pLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93SW5zZXQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckFjdGl2ZVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTkyLFxuICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTMwXG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcIm1peGluc1wiXS5vdmVybGF5Q29sb3JzKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlIb3Zlcilcbn0pKTtcbnZhciBTdHlsZWRUaXRsZUNsaWNrYWJsZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShDbGlja2FibGVfZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ29sbGFwc2libGVQYW5lbFN0eWxlc19fU3R5bGVkVGl0bGVDbGlja2FibGVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXBoaWticC00XCJcbn0pKFtcIndpZHRoOjEwMCU7ZmxleC1zaHJpbms6MDtib3JkZXItYm90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4ycyxib3JkZXIgMC4ycyxib3gtc2hhZG93IDAuMnM7cGFkZGluZzpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiLCBcIiBcIiwgXCIgJltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6XCIsIFwiO30mOmZvY3VzOm5vdChbZGlzYWJsZWRdKSwmOmFjdGl2ZTpub3QoW2Rpc2FibGVkXSl7Y29sb3I6XCIsIFwiO2JveC1zaGFkb3c6XCIsIFwiO30mOmhvdmVyOm5vdChbZGlzYWJsZWRdKXtjb2xvcjpcIiwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICc2cHggMzBweCcsXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiAnMThweCAyMHB4IDE4cHggNTJweCcsXG4gICAgY29tcGFjdDogJzE0cHggMjBweCAxNHB4IDUycHgnXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0Q29sb3IsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmVcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmQpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRvcGVuJywge1xuICBcInRydWVcIjogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiXCIsIFwie3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO31cIl0sXG4gIC8qIHNjLXNlbCAqL1xuICBTdHlsZWRJY29uKSxcbiAgXCJmYWxzZVwiOiB7XG4gICAgZW50ZXJwcmlzZToge1xuICAgICAgZGFyazogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk0NSksXG4gICAgICBsaWdodDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5NilcbiAgICB9XG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0LFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWRcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0Q29sb3IsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmVcbn0pLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93SW5zZXQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckFjdGl2ZVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTkyLFxuICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTMwXG4gIH0sXG4gIHByaXNtYTogdGhlbWVzX1tcIm1peGluc1wiXS5vdmVybGF5Q29sb3JzKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlIb3Zlcilcbn0pKTtcbnZhciBTdHlsZWRIZWFkaW5nQ29udGVudCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb2xsYXBzaWJsZVBhbmVsU3R5bGVzX19TdHlsZWRIZWFkaW5nQ29udGVudFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xcGhpa2JwLTVcIlxufSkoW1wiZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO1wiLCBcIiBcIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImZvbnQtd2VpZ2h0OlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFdlaWdodFNlbWlCb2xkKVxufSksIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJHRpdGxlV2l0aEFjdGlvbnMgPSBfcmVmMi4kdGl0bGVXaXRoQWN0aW9ucztcbiAgcmV0dXJuICR0aXRsZVdpdGhBY3Rpb25zICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm1pbi1oZWlnaHQ6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgcHJpc21hOiB7XG4gICAgICBjb21mb3J0YWJsZTogJzQwcHgnLFxuICAgICAgY29tcGFjdDogJzMycHgnXG4gICAgfVxuICB9KSk7XG59KTtcbnZhciBTdHlsZWREZXNjcmlwdGlvbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb2xsYXBzaWJsZVBhbmVsU3R5bGVzX19TdHlsZWREZXNjcmlwdGlvblwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xcGhpa2JwLTZcIlxufSkoW1wiZm9udC1zaXplOlwiLCBcIjttYXJnaW4tbGVmdDpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvbnRTaXplU21hbGwsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdIYWxmLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ0xhcmdlXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NvbGxhcHNpYmxlUGFuZWwvQ29sbGFwc2libGVQYW5lbC50c3hcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICBpbm5lckJvZHlTdHlsZXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGRlZmF1bHRPcGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBkZXNjcmlwdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgaGVhZGluZ0xldmVsOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG4gIG9uUmVxdWVzdENsb3NlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblJlcXVlc3RPcGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvcGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBvdmVyZmxvdzogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBwYW5lbElkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hbnksXG4gIHRpdGxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLmlzUmVxdWlyZWQsXG4gIHRpdGxlV2l0aEFjdGlvbnM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBkaXNhYmxlZDogZmFsc2UsXG4gIG92ZXJmbG93OiAnYXV0bycsXG4gIHRpdGxlV2l0aEFjdGlvbnM6IGZhbHNlXG59O1xuXG52YXIgQ29sbGFwc2libGVQYW5lbF9Db2xsYXBzaWJsZVBhbmVsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDb2xsYXBzaWJsZVBhbmVsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENvbGxhcHNpYmxlUGFuZWwpO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgQ29sbGFwc2libGVQYW5lbFByb3BzQmFzZVxuICBmdW5jdGlvbiBDb2xsYXBzaWJsZVBhbmVsKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbGxhcHNpYmxlUGFuZWwpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udHJvbGxlZEV4dGVybmFsbHlcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250YWluZXJJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRvZ2dsZUlkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlUmVxdWVzdENsb3NlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgcGFuZWxJZCA9IF90aGlzJHByb3BzLnBhbmVsSWQsXG4gICAgICAgICAgb25SZXF1ZXN0Q2xvc2UgPSBfdGhpcyRwcm9wcy5vblJlcXVlc3RDbG9zZTtcbiAgICAgIG9uUmVxdWVzdENsb3NlID09PSBudWxsIHx8IG9uUmVxdWVzdENsb3NlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlcXVlc3RDbG9zZSh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgcGFuZWxJZDogcGFuZWxJZCxcbiAgICAgICAgcmVhc29uOiAndG9nZ2xlQ2xpY2snXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGFuaW1hdGluZzogdHJ1ZVxuICAgICAgfSwgIV90aGlzLmlzQ29udHJvbGxlZCgpID8ge1xuICAgICAgICBvcGVuOiBmYWxzZVxuICAgICAgfSA6IHt9KSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlUmVxdWVzdE9wZW5cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgcGFuZWxJZCA9IF90aGlzJHByb3BzMi5wYW5lbElkLFxuICAgICAgICAgIG9uUmVxdWVzdE9wZW4gPSBfdGhpcyRwcm9wczIub25SZXF1ZXN0T3BlbjtcbiAgICAgIG9uUmVxdWVzdE9wZW4gPT09IG51bGwgfHwgb25SZXF1ZXN0T3BlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXF1ZXN0T3Blbih7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgcGFuZWxJZDogcGFuZWxJZCxcbiAgICAgICAgcmVhc29uOiAndG9nZ2xlQ2xpY2snXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGFuaW1hdGluZzogdHJ1ZVxuICAgICAgfSwgIV90aGlzLmlzQ29udHJvbGxlZCgpID8ge1xuICAgICAgICBvcGVuOiB0cnVlXG4gICAgICB9IDoge30pKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVBbmltYXRpb25FbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhbmltYXRpbmc6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF90aGlzLmNvbnRyb2xsZWRFeHRlcm5hbGx5ID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKHByb3BzLCAnb3BlbicpO1xuICAgIF90aGlzLnN0YXRlID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBhbmltYXRpbmc6IGZhbHNlXG4gICAgfSwgIV90aGlzLmlzQ29udHJvbGxlZCgpID8ge1xuICAgICAgb3BlbjogcHJvcHMuZGVmYXVsdE9wZW4gfHwgZmFsc2VcbiAgICB9IDogdW5kZWZpbmVkKTtcblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIF90aGlzLmNvbnRhaW5lcklkID0gXCJjb250YWluZXItXCIuY29uY2F0KE9iamVjdChpZF9bXCJjcmVhdGVHVUlEXCJdKSgpKTtcbiAgICBfdGhpcy50b2dnbGVJZCA9IFwidG9nZ2xlLVwiLmNvbmNhdChPYmplY3QoaWRfW1wiY3JlYXRlR1VJRFwiXSkoKSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbGxhcHNpYmxlUGFuZWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vcGVuICE9PSBwcmV2UHJvcHMub3Blbikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhbmltYXRpbmc6IHRydWVcbiAgICAgICAgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgIH1cblxuICAgICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgICBpZiAoZmFsc2UpIHt9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzQ29udHJvbGxlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0NvbnRyb2xsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVkRXh0ZXJuYWxseTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlubmVyQm9keVN0eWxlcyA9IF90aGlzJHByb3BzMy5pbm5lckJvZHlTdHlsZXMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgZGVzY3JpcHRpb24gPSBfdGhpcyRwcm9wczMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgICAgZWxlbWVudFJlZiA9IF90aGlzJHByb3BzMy5lbGVtZW50UmVmLFxuICAgICAgICAgIGhlYWRpbmdMZXZlbCA9IF90aGlzJHByb3BzMy5oZWFkaW5nTGV2ZWwsXG4gICAgICAgICAgb3ZlcmZsb3cgPSBfdGhpcyRwcm9wczMub3ZlcmZsb3csXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczMudGl0bGUsXG4gICAgICAgICAgdGl0bGVXaXRoQWN0aW9ucyA9IF90aGlzJHByb3BzMy50aXRsZVdpdGhBY3Rpb25zO1xuICAgICAgdmFyIGFuaW1hdGluZyA9IHRoaXMuc3RhdGUuYW5pbWF0aW5nO1xuICAgICAgdmFyIG9wZW4gPSB0aGlzLmlzQ29udHJvbGxlZCgpID8gdGhpcy5wcm9wcy5vcGVuIDogdGhpcy5zdGF0ZS5vcGVuO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRCb3gsIF9leHRlbmRzKHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJjb2xsYXBzaWJsZS1wYW5lbFwiLFxuICAgICAgICBlbGVtZW50UmVmOiBlbGVtZW50UmVmXG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKHRoaXMucHJvcHMsIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wia2V5c1wiXSkoQ29sbGFwc2libGVQYW5lbC5wcm9wVHlwZXMpKSksIHRpdGxlV2l0aEFjdGlvbnMgPyAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVGl0bGVXaXRoQWN0aW9ucywge1xuICAgICAgICAkZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2xpY2thYmxlSWNvbiwge1xuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIG9uQ2xpY2s6IG9wZW4gPyB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSA6IHRoaXMuaGFuZGxlUmVxdWVzdE9wZW4sXG4gICAgICAgIGlkOiB0aGlzLnRvZ2dsZUlkLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogdGhpcy5jb250YWluZXJJZCxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4sXG4gICAgICAgICRvcGVuOiAhIW9wZW4sXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwidG9nZ2xlXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDaGV2cm9uUmlnaHRbXCJhXCIgLyogZGVmYXVsdCAqL10sIHtcbiAgICAgICAgc2NyZWVuUmVhZGVyVGV4dDogb3BlbiA/IE9iamVjdChpMThuX1tcIl9cIl0pKCdQYW5lbCBpcyBvcGVuJykgOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnUGFuZWwgaXMgY2xvc2VkJyksXG4gICAgICAgIHByaXNtYVNpemU6IFwic21hbGxcIlxuICAgICAgfSkpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSGVhZGluZ0NvbnRlbnQsIHtcbiAgICAgICAgJHRpdGxlV2l0aEFjdGlvbnM6IHRpdGxlV2l0aEFjdGlvbnMsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwidGl0bGVcIlxuICAgICAgfSwgdGl0bGUpKSA6XG4gICAgICAvKiNfX1BVUkVfXyovXG5cbiAgICAgIC8qIENsaWNrYWJsZSBjb21wb25lbnQgaXMgbm90IGFsbG93ZWQgdG8gaGF2ZSByb2xlPVwiaGVhZGluZ1wiIHNvIGl0IGlzIHdyYXBwZWQgd2l0aCBhIHNwYW4gKi9cbiAgICAgIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiaGVhZGluZ1wiLFxuICAgICAgICByb2xlOiBoZWFkaW5nTGV2ZWwgPyAnaGVhZGluZycgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiYXJpYS1sZXZlbFwiOiBoZWFkaW5nTGV2ZWxcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRUaXRsZUNsaWNrYWJsZSwge1xuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIG9uQ2xpY2s6IG9wZW4gPyB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSA6IHRoaXMuaGFuZGxlUmVxdWVzdE9wZW4sXG4gICAgICAgIGlkOiB0aGlzLnRvZ2dsZUlkLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogdGhpcy5jb250YWluZXJJZCxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4sXG4gICAgICAgICRvcGVuOiAhIW9wZW4sXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwidG9nZ2xlXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJY29uLCBudWxsLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0W1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB7XG4gICAgICAgIHNjcmVlblJlYWRlclRleHQ6IG9wZW4gPyBPYmplY3QoaTE4bl9bXCJfXCJdKSgnUGFuZWwgaXMgb3BlbicpIDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1BhbmVsIGlzIGNsb3NlZCcpLFxuICAgICAgICBwcmlzbWFTaXplOiBcInNtYWxsXCJcbiAgICAgIH0pKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEhlYWRpbmdDb250ZW50LCBudWxsLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJ0aXRsZVwiXG4gICAgICB9LCB0aXRsZSksIGRlc2NyaXB0aW9uICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWREZXNjcmlwdGlvbiwge1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImRlc2NyaXB0aW9uXCJcbiAgICAgIH0sIGRlc2NyaXB0aW9uKSkpKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25PcGVuX2RlZmF1bHQuYSwge1xuICAgICAgICBvdXRlcklkOiB0aGlzLmNvbnRhaW5lcklkLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aGlzLnRvZ2dsZUlkLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImJvZHlcIixcbiAgICAgICAgb3V0ZXJTdHlsZToge1xuICAgICAgICAgIG92ZXJmbG93OiBhbmltYXRpbmcgPyAnaGlkZGVuJyA6IG92ZXJmbG93XG4gICAgICAgIH0sXG4gICAgICAgIGlubmVyU3R5bGU6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIHRhYmxlTGF5b3V0OiAnZml4ZWQnXG4gICAgICAgIH0sIGlubmVyQm9keVN0eWxlcyksXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIG9uQW5pbWF0aW9uRW5kOiB0aGlzLmhhbmRsZUFuaW1hdGlvbkVuZFxuICAgICAgfSwgY2hpbGRyZW4pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGFwc2libGVQYW5lbDtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuX2RlZmluZVByb3BlcnR5KENvbGxhcHNpYmxlUGFuZWxfQ29sbGFwc2libGVQYW5lbCwgXCJwcm9wVHlwZXNcIiwgcHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KENvbGxhcHNpYmxlUGFuZWxfQ29sbGFwc2libGVQYW5lbCwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX0NvbGxhcHNpYmxlUGFuZWxfQ29sbGFwc2libGVQYW5lbCA9IChDb2xsYXBzaWJsZVBhbmVsX0NvbGxhcHNpYmxlUGFuZWwpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29sbGFwc2libGVQYW5lbC9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGV2cm9uUmlnaHQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvblJpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljc4NjEgMTEuOTk5OUw4LjQ4NTg3IDUuNjk5NzJDOC4wOTUzNCA1LjMwOTIgOC4wOTUzNCA0LjY3NjAzIDguNDg1ODcgNC4yODU1MUM4Ljg3NjM5IDMuODk0OTkgOS41MDk1NiAzLjg5NDk5IDkuOTAwMDggNC4yODU1MUwxNi41NTM4IDEwLjkzOTNDMTcuMTM5NiAxMS41MjUgMTcuMTM5NiAxMi40NzQ4IDE2LjU1MzggMTMuMDYwNkw5LjkwMTQyIDE5LjcxM0M5LjUxMDkgMjAuMTAzNSA4Ljg3NzczIDIwLjEwMzUgOC40ODcyMSAxOS43MTNDOC4wOTY2OSAxOS4zMjI0IDguMDk2NjkgMTguNjg5MyA4LjQ4NzIxIDE4LjI5ODhMMTQuNzg2MSAxMS45OTk5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBQcmlzbWExNihfcmVmMikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmMik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNzEwOSA3Ljk5NzZMNS43MTAxNyAxMy45OTgzTDQuMjk1OTcgMTIuNTg0MUw4Ljg4OTE0IDcuOTkwOTVMNC4zNDQ4MiAzLjQwMzYzTDUuNzY1NjcgMS45OTYwOUwxMS43MTA5IDcuOTk3NlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ2hldnJvblJpZ2h0KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEsXG4gICAgUHJpc21hMTY6IFByaXNtYTE2LFxuICAgIFByaXNtYTI0OiBQcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvQ2hldnJvblJpZ2h0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9UcmFuc2l0aW9uT3BlblwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVkc7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzdHlsZWRfY29tcG9uZW50c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG52YXIgU3R5bGVkID0gc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3ZnLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJTVkdfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xYnowcnloLTBcIlxufSkoW1wiZmxleDowIDAgYXV0bztcIl0pO1xuZnVuY3Rpb24gU1ZHKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWQsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSWNvbjsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIGlubGluZVN0eWxlcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gIGZsZXg6ICcwIDAgYXV0bycsXG4gIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnXG59O1xudmFyIGJsb2NrU3R5bGVzID0ge1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBtYXJnaW46ICcwIGF1dG8nLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnXG59O1xudmFyIHByb3BUeXBlcyA9IHtcbiAgRW50ZXJwcmlzZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBlbnRlcnByaXNlU2l6ZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBlbnRlcnByaXNlV2lkdGg6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgZW50ZXJwcmlzZUhlaWdodDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5vbmVPZlR5cGUoW3Byb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEubnVtYmVyLCBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ10pLFxuICBQcmlzbWEyNDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXG4gIFByaXNtYTIwOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIFByaXNtYTE2OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLmZ1bmMsXG4gIHByaXNtYVNpemU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksXG4gIGlubGluZTogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5ib29sLFxuICBzY3JlZW5SZWFkZXJUZXh0OiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN0cmluZ1xufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGlubGluZTogdHJ1ZSxcbiAgcHJpc21hU2l6ZTogJ21lZGl1bSdcbn07XG5mdW5jdGlvbiBJY29uKF9yZWYpIHtcbiAgdmFyIEVudGVycHJpc2UgPSBfcmVmLkVudGVycHJpc2UsXG4gICAgICBQcmlzbWEyNCA9IF9yZWYuUHJpc21hMjQsXG4gICAgICBQcmlzbWEyMCA9IF9yZWYuUHJpc21hMjAsXG4gICAgICBQcmlzbWExNiA9IF9yZWYuUHJpc21hMTYsXG4gICAgICBwcmlzbWFTaXplID0gX3JlZi5wcmlzbWFTaXplLFxuICAgICAgaW5saW5lID0gX3JlZi5pbmxpbmUsXG4gICAgICBlbnRlcnByaXNlU2l6ZSA9IF9yZWYuZW50ZXJwcmlzZVNpemUsXG4gICAgICBlbnRlcnByaXNlV2lkdGggPSBfcmVmLmVudGVycHJpc2VXaWR0aCxcbiAgICAgIGVudGVycHJpc2VIZWlnaHQgPSBfcmVmLmVudGVycHJpc2VIZWlnaHQsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0ID0gX3JlZi5zY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJFbnRlcnByaXNlXCIsIFwiUHJpc21hMjRcIiwgXCJQcmlzbWEyMFwiLCBcIlByaXNtYTE2XCIsIFwicHJpc21hU2l6ZVwiLCBcImlubGluZVwiLCBcImVudGVycHJpc2VTaXplXCIsIFwiZW50ZXJwcmlzZVdpZHRoXCIsIFwiZW50ZXJwcmlzZUhlaWdodFwiLCBcInNjcmVlblJlYWRlclRleHRcIl0pO1xuXG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSBPYmplY3QoX3NwbHVua190aGVtZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcInVzZVNwbHVua1RoZW1lXCJdKSgpLFxuICAgICAgZmFtaWx5ID0gX3VzZVNwbHVua1RoZW1lLmZhbWlseSxcbiAgICAgIGRlbnNpdHkgPSBfdXNlU3BsdW5rVGhlbWUuZGVuc2l0eTsgLy8gRW50ZXJwcmlzZSAtIGFsbCB2YXJpYW50c1xuXG5cbiAgaWYgKGZhbWlseSA9PT0gJ2VudGVycHJpc2UnKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEVudGVycHJpc2UsIF9leHRlbmRzKHtcbiAgICAgIHNpemU6IGVudGVycHJpc2VTaXplLFxuICAgICAgd2lkdGg6IGVudGVycHJpc2VXaWR0aCxcbiAgICAgIGhlaWdodDogZW50ZXJwcmlzZUhlaWdodCxcbiAgICAgIHNjcmVlblJlYWRlclRleHQ6IHNjcmVlblJlYWRlclRleHQgfHwgbnVsbCxcbiAgICAgIGhpZGVEZWZhdWx0VG9vbHRpcDogdHJ1ZSxcbiAgICAgIGlubGluZTogaW5saW5lXG4gICAgfSwgb3RoZXJQcm9wcykpO1xuICB9XG5cbiAgdmFyIHByaXNtYVByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgJ2FyaWEtbGFiZWwnOiBzY3JlZW5SZWFkZXJUZXh0LFxuICAgIHN0eWxlOiBpbmxpbmUgPyBpbmxpbmVTdHlsZXMgOiBibG9ja1N0eWxlc1xuICB9LCBvdGhlclByb3BzKTsgLy8gUHJpc21hIC0gc21hbGwrY29tcGFjdCwgc21hbGwrY29tZm9ydGFibGVcblxuXG4gIGlmIChwcmlzbWFTaXplID09PSAnc21hbGwnKSB7XG4gICAgdmFyIFNWRyA9IFByaXNtYTE2IHx8IFByaXNtYTI0O1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTVkcsIF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgICBoZWlnaHQ6IFwiMTZcIlxuICAgIH0sIHByaXNtYVByb3BzKSk7XG4gIH0gLy8gUHJpc21hIC0gbWVkaXVtK2NvbXBhY3RcblxuXG4gIGlmIChkZW5zaXR5ID09PSAnY29tcGFjdCcpIHtcbiAgICB2YXIgX1NWRyA9IFByaXNtYTIwIHx8IFByaXNtYTI0O1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkcsIF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgICBoZWlnaHQ6IFwiMjBcIlxuICAgIH0sIHByaXNtYVByb3BzKSk7XG4gIH0gLy8gUHJpc21hIC0gbWVkaXVtK2NvbWZvcnRhYmxlXG5cblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoUHJpc21hMjQsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogXCIyNFwiLFxuICAgIGhlaWdodDogXCIyNFwiXG4gIH0sIHByaXNtYVByb3BzKSk7XG59XG5JY29uLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbkljb24uZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9Cb3hcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTQ1KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTQ1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8vIEVTTSBDT01QQVQgRkxBR1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gc3JjX1RyYW5zaXRpb25PcGVuX1RyYW5zaXRpb25PcGVuOyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9BbmltYXRpb25cIlxudmFyIEFuaW1hdGlvbl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvZm9jdXNcIlxudmFyIGZvY3VzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9zdHlsZVwiXG52YXIgc3R5bGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdC1zcHJpbmcvcmVuZGVycHJvcHMuY2pzXCJcbnZhciByZW5kZXJwcm9wc19janNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UcmFuc2l0aW9uT3Blbi9UcmFuc2l0aW9uT3BlblN0eWxlcy50c1xuXG5cblxudmFyIFN0eWxlZCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShyZW5kZXJwcm9wc19janNfW1wiYW5pbWF0ZWRcIl0uZGl2KS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVHJhbnNpdGlvbk9wZW5TdHlsZXNfX1N0eWxlZFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xeDU4czBnLTBcIlxufSkoW1wiXCIsIFwiO1wiLCBcIjtcIl0sIHRoZW1lc19bXCJtaXhpbnNcIl0ucmVzZXQoJ2Jsb2NrJyksIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciAkaGlkZU92ZXJmbG93ID0gX3JlZi4kaGlkZU92ZXJmbG93O1xuICByZXR1cm4gJGhpZGVPdmVyZmxvdyAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJvdmVyZmxvdzpoaWRkZW47XCJdKTtcbn0pO1xudmFyIFN0eWxlZElubmVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVHJhbnNpdGlvbk9wZW5TdHlsZXNfX1N0eWxlZElubmVyXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTF4NThzMGctMVwiXG59KShbXCJcIiwgXCI7XCIsIFwiO3dpZHRoOjEwMCU7XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCd0YWJsZScpLCB0aGVtZXNfW1wibWl4aW5zXCJdLmNsZWFyZml4KCkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UcmFuc2l0aW9uT3Blbi9UcmFuc2l0aW9uT3Blbi50c3hcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgYW5pbWF0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ3NsaWRlRnJvbVRvcCcsICdzbGlkZUZyb21SaWdodCcsICdzbGlkZUZyb21Cb3R0b20nLCAnc2xpZGVGcm9tTGVmdCcsICdleHBhbmRIZWlnaHQnLCAnZXhwYW5kV2lkdGgnLCAnbm9uZSddKSxcbiAgYW5pbWF0ZU9uTW91bnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBjbGFzc05hbWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgaWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgaW5uZXJDbGFzc05hbWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgaW5uZXJTdHlsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICBvbkFuaW1hdGlvbkVuZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb3BlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgb3V0ZXJDbGFzc05hbWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgb3V0ZXJJZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBvdXRlclN0eWxlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3QsXG4gIHJldGFpbkZvY3VzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICB0YWtlRm9jdXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBhbmltYXRpb246ICdleHBhbmRIZWlnaHQnLFxuICBhbmltYXRlT25Nb3VudDogZmFsc2UsXG4gIGlubmVyU3R5bGU6IHt9LFxuICBvcGVuOiBmYWxzZSxcbiAgb3V0ZXJTdHlsZToge30sXG4gIHJldGFpbkZvY3VzOiBmYWxzZSxcbiAgdGFrZUZvY3VzOiBmYWxzZVxufTtcblxudmFyIFRyYW5zaXRpb25PcGVuX1RyYW5zaXRpb25PcGVuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUcmFuc2l0aW9uT3BlbiwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUcmFuc2l0aW9uT3Blbik7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBUcmFuc2l0aW9uT3BlblByb3BzQmFzZVxuICBmdW5jdGlvbiBUcmFuc2l0aW9uT3Blbihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2l0aW9uT3Blbik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJnZXRWYWx1ZVwiLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIHZhciBhbmltYXRpb24gPSBfdGhpcy5wcm9wcy5hbmltYXRpb247XG4gICAgICB2YXIgdmFsdWUgPSAwO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLnRha2VGb2N1cykge1xuICAgICAgICAgIE9iamVjdChmb2N1c19bXCJ0YWtlRm9jdXNcIl0pKGVsLCAnY29udGFpbmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFuaW1hdGlvbikge1xuICAgICAgICAgIGNhc2UgJ3NsaWRlRnJvbVRvcCc6XG4gICAgICAgICAgY2FzZSAnc2xpZGVGcm9tQm90dG9tJzpcbiAgICAgICAgICBjYXNlICdleHBhbmRIZWlnaHQnOlxuICAgICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgICAgdmFsdWUgPSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3NsaWRlRnJvbUxlZnQnOlxuICAgICAgICAgIGNhc2UgJ3NsaWRlRnJvbVJpZ2h0JzpcbiAgICAgICAgICBjYXNlICdleHBhbmRXaWR0aCc6XG4gICAgICAgICAgICB2YWx1ZSA9IGVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OiAvLyBJbnRlbnRpb25hbGx5IGxlZnQgZW1wdHkuXG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBfdGhpcy5nZXRWYWx1ZShlbCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbm5lckVsOiBlbFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlUmVzdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25BbmltYXRpLCBfdGhpcyRwcm9wcztcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhbmltYXRpbmc6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgKF90aGlzJHByb3BzJG9uQW5pbWF0aSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkFuaW1hdGlvbkVuZCkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25BbmltYXRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkFuaW1hdGkuY2FsbChfdGhpcyRwcm9wcyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVGFiXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoX3RoaXMuc3RhdGUuaW5uZXJFbCkge1xuICAgICAgICBPYmplY3QoZm9jdXNfW1wiaGFuZGxlVGFiXCJdKShfdGhpcy5zdGF0ZS5pbm5lckVsLCBlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnRlcm5hbFJlbmRlclwiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbmltYXRpb24gPSBfdGhpcyRwcm9wczIuYW5pbWF0aW9uLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIuaWQsXG4gICAgICAgICAgaW5uZXJDbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuaW5uZXJDbGFzc05hbWUsXG4gICAgICAgICAgaW5uZXJTdHlsZSA9IF90aGlzJHByb3BzMi5pbm5lclN0eWxlLFxuICAgICAgICAgIG9wZW4gPSBfdGhpcyRwcm9wczIub3BlbixcbiAgICAgICAgICBvdXRlckNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5vdXRlckNsYXNzTmFtZSxcbiAgICAgICAgICBvdXRlcklkID0gX3RoaXMkcHJvcHMyLm91dGVySWQsXG4gICAgICAgICAgb3V0ZXJTdHlsZSA9IF90aGlzJHByb3BzMi5vdXRlclN0eWxlO1xuICAgICAgdmFyIGFuaW1hdGluZyA9IF90aGlzLnN0YXRlLmFuaW1hdGluZztcbiAgICAgIHZhciBvZmZzZXQgPSAoX3RoaXMuc3RhdGUudmFsdWUgfHwgMCkgLSB2YWx1ZTtcbiAgICAgIHZhciB0cmFuc2Zvcm07XG4gICAgICB2YXIgZGltZW5zaW9uO1xuXG4gICAgICBpZiAoYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXRjaCAoYW5pbWF0aW9uKSB7XG4gICAgICAgICAgY2FzZSAnc2xpZGVGcm9tVG9wJzpcbiAgICAgICAgICAgIHRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWSgtXCIuY29uY2F0KG9mZnNldCwgXCJweClcIik7XG4gICAgICAgICAgICBkaW1lbnNpb24gPSAnaGVpZ2h0JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnc2xpZGVGcm9tQm90dG9tJzpcbiAgICAgICAgICBjYXNlICdub25lJzpcbiAgICAgICAgICAgIGRpbWVuc2lvbiA9ICdoZWlnaHQnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzbGlkZUZyb21MZWZ0JzpcbiAgICAgICAgICAgIHRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWChcIi5jb25jYXQoLW9mZnNldCwgXCJweClcIik7XG4gICAgICAgICAgICBkaW1lbnNpb24gPSAnd2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzbGlkZUZyb21SaWdodCc6XG4gICAgICAgICAgICBkaW1lbnNpb24gPSAnd2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdleHBhbmRIZWlnaHQnOlxuICAgICAgICAgICAgZGltZW5zaW9uID0gJ2hlaWdodCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2V4cGFuZFdpZHRoJzpcbiAgICAgICAgICAgIGRpbWVuc2lvbiA9ICd3aWR0aCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6IC8vIEludGVudGlvbmFsbHkgbGVmdCBlbXB0eS5cblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cblxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwge1xuICAgICAgICAkaGlkZU92ZXJmbG93OiAhb3BlbiB8fCBhbmltYXRpbmcsXG4gICAgICAgIGNsYXNzTmFtZTogT2JqZWN0KHN0eWxlX1tcInRvQ2xhc3NOYW1lXCJdKShjbGFzc05hbWUsIG91dGVyQ2xhc3NOYW1lKSxcbiAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3V0ZXJTdHlsZSksIGRpbWVuc2lvbiAmJiBfZGVmaW5lUHJvcGVydHkoe30sIGRpbWVuc2lvbiwgdmFsdWUpKSxcbiAgICAgICAgaWQ6IG91dGVySWRcbiAgICAgIH0sIChvcGVuIHx8IGFuaW1hdGluZykgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZElubmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwidHJhbnNpdGlvbi1vcGVuXCJcbiAgICAgIH0sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wib21pdFwiXSkoX3RoaXMucHJvcHMsIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wia2V5c1wiXSkoVHJhbnNpdGlvbk9wZW4ucHJvcFR5cGVzKSksIHtcbiAgICAgICAgcmVmOiBfdGhpcy5oYW5kbGVNb3VudCxcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBjbGFzc05hbWU6IGlubmVyQ2xhc3NOYW1lLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIG9uS2V5RG93bjogX3RoaXMucHJvcHMucmV0YWluRm9jdXMgPyBfdGhpcy5oYW5kbGVUYWIgOiB1bmRlZmluZWQsXG4gICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGlubmVyU3R5bGUpLCB7fSwge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtXG4gICAgICAgIH0pXG4gICAgICB9KSwgY2hpbGRyZW4pKTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYW5pbWF0aW5nOiBwcm9wcy5hbmltYXRlT25Nb3VudCA/IHByb3BzLm9wZW4gOiBmYWxzZSxcbiAgICAgIGlubmVyRWw6IG51bGwsXG4gICAgICBwcmV2T3BlbjogcHJvcHMub3BlbiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0L25vLXVudXNlZC1zdGF0ZVxuXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVHJhbnNpdGlvbk9wZW4sIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHRoaXMuc3RhdGUuaW5uZXJFbCk7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9wZW4gPSBfdGhpcyRwcm9wczMub3BlbixcbiAgICAgICAgICBhbmltYXRpb24gPSBfdGhpcyRwcm9wczMuYW5pbWF0aW9uO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICAgIHZhciBhbmltYXRlVG8gPSBvcGVuID8gdmFsdWUgOiAwO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChBbmltYXRpb25fW1wiU3ByaW5nXCJdLCB7XG4gICAgICAgIFwibmF0aXZlXCI6IHRydWUsXG4gICAgICAgIHRvOiB7XG4gICAgICAgICAgdmFsdWU6IGFuaW1hdGVUbyB8fCAwXG4gICAgICAgIH0sXG4gICAgICAgIGltbWVkaWF0ZTogYW5pbWF0aW9uID09PSAnbm9uZScsXG4gICAgICAgIG9uUmVzdDogdGhpcy5oYW5kbGVSZXN0LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBwcmVjaXNpb246IDFcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcy5pbnRlcm5hbFJlbmRlcik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25PcGVuO1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoVHJhbnNpdGlvbk9wZW5fVHJhbnNpdGlvbk9wZW4sIFwicHJvcFR5cGVzXCIsIHByb3BUeXBlcyk7XG5cbl9kZWZpbmVQcm9wZXJ0eShUcmFuc2l0aW9uT3Blbl9UcmFuc2l0aW9uT3BlbiwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuX2RlZmluZVByb3BlcnR5KFRyYW5zaXRpb25PcGVuX1RyYW5zaXRpb25PcGVuLCBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLCBmdW5jdGlvbiAocHJvcHMsIHN0YXRlKSB7XG4gIGlmIChwcm9wcy5vcGVuICE9PSBzdGF0ZS5wcmV2T3Blbikge1xuICAgIHJldHVybiB7XG4gICAgICBhbmltYXRpbmc6IHRydWUsXG4gICAgICBwcmV2T3BlbjogcHJvcHMub3BlblxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfVHJhbnNpdGlvbk9wZW5fVHJhbnNpdGlvbk9wZW4gPSAoVHJhbnNpdGlvbk9wZW5fVHJhbnNpdGlvbk9wZW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVHJhbnNpdGlvbk9wZW4vaW5kZXgudHNcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9mb2N1c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0FuaW1hdGlvblwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvc3R5bGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc3ByaW5nL3JlbmRlcnByb3BzLmNqc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pZFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1NjcmVlblJlYWRlckNvbnRlbnRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfQ29udHJvbEdyb3VwX0NvbnRyb2xHcm91cDsgfSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdFwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBleHRlcm5hbF9yZWFjdF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicHJvcC10eXBlc1wiXG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcHJvcF90eXBlc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwibG9kYXNoXCJcbnZhciBleHRlcm5hbF9sb2Rhc2hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzXCJcbnZhciB0aGVtZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvaWRcIlxudmFyIGlkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Cb3hcIlxudmFyIEJveF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIEJveF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihCb3hfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvU2NyZWVuUmVhZGVyQ29udGVudFwiXG52YXIgU2NyZWVuUmVhZGVyQ29udGVudF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbnZhciBTY3JlZW5SZWFkZXJDb250ZW50X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFNjcmVlblJlYWRlckNvbnRlbnRfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvVG9vbHRpcFwiXG52YXIgVG9vbHRpcF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciBUb29sdGlwX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFRvb2x0aXBfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NvbnRyb2xHcm91cC9Db250cm9sR3JvdXBTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNvbnRyb2xHcm91cFN0eWxlc19fU3R5bGVkQm94XCIsXG4gIGNvbXBvbmVudElkOiBcIndqbnlpZi0wXCJcbn0pKFtcIlwiLCBcIiBcIiwgXCIgbWF4LXdpZHRoOjYwMHB4O21hcmdpbi1ib3R0b206XCIsIFwiO1wiLCBcIiBjb2xvcjpcIiwgXCI7XCIsIFwiXCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdibG9jaycpLCB0aGVtZXNfW1wibWl4aW5zXCJdLmNsZWFyZml4KCksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjYWxjKFwiLCBcIiAqIDAuNzUpXCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmcpLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzE2cHgnLFxuICAgIGNvbXBhY3Q6ICcxMnB4J1xuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MTJweDt9JjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MTJweDt9XCJdKSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOmZpcnN0LWNoaWxke21hcmdpbi10b3A6OHB4O30mOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTo4cHg7fVwiXSlcbiAgfVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRDb2xvcixcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkXG59KSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyICRlcnJvciA9IF9yZWYuJGVycm9yO1xuICByZXR1cm4gJGVycm9yICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZXJyb3JDb2xvcixcbiAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3JOZWdhdGl2ZVxuICB9KSk7XG59KTtcbnZhciBTdHlsZWRDb250cm9sc1N0YWNrQm94ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKEJveF9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb250cm9sR3JvdXBTdHlsZXNfX1N0eWxlZENvbnRyb2xzU3RhY2tCb3hcIixcbiAgY29tcG9uZW50SWQ6IFwid2pueWlmLTFcIlxufSkoW1wiZmxleC1kaXJlY3Rpb246Y29sdW1uO1wiXSk7XG52YXIgU3R5bGVkTGFiZWxXcmFwcGVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ29udHJvbEdyb3VwU3R5bGVzX19TdHlsZWRMYWJlbFdyYXBwZXJcIixcbiAgY29tcG9uZW50SWQ6IFwid2pueWlmLTJcIlxufSkoW1wiZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7XCIsIFwiXCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wianVzdGlmeS1jb250ZW50OmZsZXgtZW5kO1wiXSlcbn0pKTtcbnZhciBTdHlsZWRMYWJlbFdyYXBwZXJMZWZ0ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKFN0eWxlZExhYmVsV3JhcHBlcikud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNvbnRyb2xHcm91cFN0eWxlc19fU3R5bGVkTGFiZWxXcmFwcGVyTGVmdFwiLFxuICBjb21wb25lbnRJZDogXCJ3am55aWYtM1wiXG59KShbXCJmbG9hdDpsZWZ0O1wiXSk7XG52YXIgU3R5bGVkTGFiZWwgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEubGFiZWwud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNvbnRyb2xHcm91cFN0eWxlc19fU3R5bGVkTGFiZWxcIixcbiAgY29tcG9uZW50SWQ6IFwid2pueWlmLTRcIlxufSkoW1wicGFkZGluZzpcIiwgXCI7d29yZC13cmFwOmJyZWFrLXdvcmQ7Y29sb3I6aW5oZXJpdDt0ZXh0LWFsaWduOlwiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB7XG4gICAgY29tZm9ydGFibGU6ICc2cHggMCcsXG4gICAgY29tcGFjdDogJzRweCAwJ1xuICB9LFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzEwcHggMCcsXG4gICAgY29tcGFjdDogJzZweCAwJ1xuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICdyaWdodCcsXG4gIHByaXNtYTogJ2xlZnQnXG59KSk7XG52YXIgU3R5bGVkSGVscCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkNvbnRyb2xHcm91cFN0eWxlc19fU3R5bGVkSGVscFwiLFxuICBjb21wb25lbnRJZDogXCJ3am55aWYtNVwiXG59KShbXCJcIiwgXCI7Zm9udC1zaXplOlwiLCBcIjtjb2xvcjpcIiwgXCI7bWFyZ2luLXRvcDpcIiwgXCI7W2FyaWEtaW52YWxpZF0gPiAme2NvbG9yOmluaGVyaXQ7fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnYmxvY2snKSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzJweCcsXG4gIHByaXNtYTogJzRweCdcbn0pKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29udHJvbEdyb3VwL0NvbnRyb2xHcm91cC50c3hcbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGNvbnRyb2xzTGF5b3V0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2ZpbGwnLCAnZmlsbEpvaW4nLCAnbm9uZScsICdzdGFjayddKSxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZXJyb3I6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGhlbHA6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGhpZGVMYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgbGFiZWw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsYWJlbEZvcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBsYWJlbFBvc2l0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2xlZnQnLCAndG9wJ10pLFxuICBsYWJlbFdpZHRoOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlciwgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIHNpemU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnc21hbGwnLCAnbWVkaXVtJ10pLFxuICB0b29sdGlwOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29udHJvbHNMYXlvdXQ6ICdmaWxsJyxcbiAgZXJyb3I6IGZhbHNlLFxuICBoaWRlTGFiZWw6IGZhbHNlLFxuICBsYWJlbFBvc2l0aW9uOiAnbGVmdCcsXG4gIGxhYmVsV2lkdGg6IDEyMCxcbiAgc2l6ZTogJ21lZGl1bSdcbn07XG5cbi8qKlxuICogYENvbnRyb2xHcm91cGAgcGxhY2VzIGEgbGFiZWwgYW5kIG9wdGlvbmFsIGhlbHAgdGV4dCBhcm91bmQgb25lIG9yIG1vcmUgY29udHJvbHMuIFRoZSBgQ29udHJvbEdyb3VwYFxuICogd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhcmlhIGF0dHJpYnV0ZXMgdG8gYXNzb2NpYXRlIHRoZSBjb250cm9scyB3aXRoIHRoZSBsYWJlbHMgYW5kIGhlbHAgdGV4dCB0b1xuICogYWRkcmVzcyBhY2Nlc3NpYmlsaXR5IHJlcXVpcmVtZW50cy5cbiAqXG4gKiBgQ29udHJvbEdyb3VwYCBwcm92aWRlcyBsYXlvdXRzIHRvIGFzc2lzdCBpbiBhbGlnbmluZyBhbmQgbGF5aW5nIG91dCBjb250cm9scywgYnV0IHRoZSBkZWZhdWx0cyBhcmVcbiAqIG5vdCBoZWxwZnVsIGluIGFsbCBjYXNlcywgbm9yIHdpbGwgdGhlIGxheW91dCBvcHRpb25zIGFkZHJlc3MgYWxsIGNhc2VzLiBDb25zaWRlciBzZXR0aW5nXG4gKiBgY29udHJvbHNMYXlvdXRgIHRvIG5vbmUgYW5kIG1hbnVhbGx5IHBvc2l0aW9uaW5nIHRoZSBjb250cm9scyBhcyByZXF1aXJlZC5cbiAqXG4gKiBgQ29udHJvbEdyb3VwYCB1c2VzIHRoZSBIVE1MIGBsYWJlbGAgdGFnLiBUaGUgcnVsZXMgZm9yIGRldGVybWluaW5nIHdoaWNoIGNoaWxkIGNvbXBvbmVudCBpcyBsaW5rZWRcbiAqIHRvIHRoZSBsYWJlbCdzIGBmb3JgIGF0dHJpYnV0ZSBhcmU6XG4gKiAxLiBJZiBvbmUgb3IgbW9yZSBgY2hpbGRyZW5gIGFyZSBgVGV4dGAgY29tcG9uZW50cywgdGhlIGZpcnN0IG9uZSBpcyB1c2VkLlxuICogMi4gSWYgdGhlcmUgYXJlbid0IGFueSBgVGV4dGAgY29tcG9uZW50cywgdGhlIGZpcnN0IGNoaWxkIGlzIHVzZWQuXG4gKlxuICogSWYgdGhlIGxpbmtlZCBjaGlsZCBzdXBwb3J0cyBhbiBgaW5wdXRJZGAgcHJvcCBhbmQgaXQncyBzZXQsIGl0cyB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgbGFiZWwncyBgZm9yYFxuICogYXR0cmlidXRlLiBJZiBgaW5wdXRJZGAgaXMgc3VwcG9ydGVkIGJ1dCBub3Qgc2V0IGEgZ2VuZXJhdGVkIGlkIGlzIHVzZWQgaW5zdGVhZC4gSWYgYGlucHV0SWRgIGlzbid0XG4gKiBzdXBwb3J0ZWQgYGlkYCBpcyB1c2VkLiBUaGUgYGxhYmVsRm9yYCBwcm9wIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBgZm9yYCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBDb250cm9sR3JvdXBfQ29udHJvbEdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDb250cm9sR3JvdXAsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29udHJvbEdyb3VwKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIENvbnRyb2xHcm91cFByb3BzQmFzZVxuICBmdW5jdGlvbiBDb250cm9sR3JvdXAocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29udHJvbEdyb3VwKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhlbHBJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxhYmVsSWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNJbnB1dElkXCIsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS50eXBlICYmIGl0ZW0udHlwZS5wcm9wVHlwZXMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0ZW0udHlwZS5wcm9wVHlwZXMsICdpbnB1dElkJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZ2V0TGlua2VkSWRcIiwgZnVuY3Rpb24gKGNvbXBvbmVudHMpIHtcbiAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2NvbXBvbmVudHMgPSBfc2xpY2VkVG9BcnJheShjb21wb25lbnRzLCAxKSxcbiAgICAgICAgICBmaXJzdENoaWxkID0gX2NvbXBvbmVudHNbMF07XG5cbiAgICAgIHZhciBmaXJzdFRleHQgPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImZpbmRcIl0pKGNvbXBvbmVudHMsIGZ1bmN0aW9uIChjb21wKSB7XG4gICAgICAgIHJldHVybiBjb21wLnR5cGUgJiYgY29tcC50eXBlLmNvbXBvbmVudFR5cGUgPT09ICdUZXh0JztcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgaW5wdXRJZCA9IF90aGlzLmhhc0lucHV0SWQoZmlyc3RDaGlsZCk7IC8vIHNlZSBjbGFzcyBkb2MgYmxvY2sgZm9yIGRldGFpbHNcblxuXG4gICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEgJiYgZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkLnByb3BzKSB7XG4gICAgICAgIHJldHVybiBpbnB1dElkID8gZmlyc3RDaGlsZC5wcm9wcy5pbnB1dElkIDogZmlyc3RDaGlsZC5wcm9wcy5pZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0VGV4dCAmJiBmaXJzdFRleHQucHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0VGV4dC5wcm9wcy5pbnB1dElkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RDaGlsZC5wcm9wcykge1xuICAgICAgICByZXR1cm4gaW5wdXRJZCA/IGZpcnN0Q2hpbGQucHJvcHMuaW5wdXRJZCA6IGZpcnN0Q2hpbGQucHJvcHMuaWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5sYWJlbElkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgnbGFiZWwnKTtcbiAgICBfdGhpcy5oZWxwSWQgPSBPYmplY3QoaWRfW1wiY3JlYXRlRE9NSURcIl0pKCdoZWxwJyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbnRyb2xHcm91cCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY29udHJvbHNMYXlvdXQgPSBfdGhpcyRwcm9wcy5jb250cm9sc0xheW91dCxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzLmVycm9yLFxuICAgICAgICAgIGhlbHAgPSBfdGhpcyRwcm9wcy5oZWxwLFxuICAgICAgICAgIGhpZGVMYWJlbCA9IF90aGlzJHByb3BzLmhpZGVMYWJlbCxcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzLmxhYmVsLFxuICAgICAgICAgIGxhYmVsRm9yID0gX3RoaXMkcHJvcHMubGFiZWxGb3IsXG4gICAgICAgICAgbGFiZWxQb3NpdGlvbiA9IF90aGlzJHByb3BzLmxhYmVsUG9zaXRpb24sXG4gICAgICAgICAgbGFiZWxXaWR0aCA9IF90aGlzJHByb3BzLmxhYmVsV2lkdGgsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgc3BsdW5rVGhlbWUgPSBfdGhpcyRwcm9wcy5zcGx1bmtUaGVtZSxcbiAgICAgICAgICB0b29sdGlwID0gX3RoaXMkcHJvcHMudG9vbHRpcCxcbiAgICAgICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNvbnRyb2xzTGF5b3V0XCIsIFwiZXJyb3JcIiwgXCJoZWxwXCIsIFwiaGlkZUxhYmVsXCIsIFwibGFiZWxcIiwgXCJsYWJlbEZvclwiLCBcImxhYmVsUG9zaXRpb25cIiwgXCJsYWJlbFdpZHRoXCIsIFwic2l6ZVwiLCBcInNwbHVua1RoZW1lXCIsIFwidG9vbHRpcFwiXSk7XG5cbiAgICAgIHZhciBpc1ByaXNtYSA9IHNwbHVua1RoZW1lLmZhbWlseSA9PT0gJ3ByaXNtYSc7XG4gICAgICB2YXIgaXNDb21wYWN0ID0gc3BsdW5rVGhlbWUuZGVuc2l0eSA9PT0gJ2NvbXBhY3QnO1xuICAgICAgdmFyIHZhbGlkQ2hpbGRyZW4gPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKS5maWx0ZXIoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pO1xuICAgICAgdmFyIGNvdW50ID0gdmFsaWRDaGlsZHJlbi5sZW5ndGg7XG4gICAgICB2YXIgd3JpdGFibGVPdGhlclByb3BzID0gb3RoZXJQcm9wcztcbiAgICAgIHZhciBzdGFja01hcmdpbkJvdHRvbSA9ICcwcHgnO1xuXG4gICAgICBpZiAoaXNQcmlzbWEgJiYgaXNDb21wYWN0KSB7XG4gICAgICAgIHN0YWNrTWFyZ2luQm90dG9tID0gJzEycHgnO1xuICAgICAgfSBlbHNlIGlmIChpc1ByaXNtYSkge1xuICAgICAgICBzdGFja01hcmdpbkJvdHRvbSA9ICcxNnB4JztcbiAgICAgIH0gLy8gQ2xlYW4gdGhlIENoaWxkcmVuXG5cblxuICAgICAgdmFyIGNsb25lV2l0aFByb3BzID0gZnVuY3Rpb24gY2xvbmVXaXRoUHJvcHMoaXRlbSwgaSkge1xuICAgICAgICB2YXIgY2xvbmVQcm9wcyA9IHtcbiAgICAgICAgICBrZXk6IGl0ZW0ua2V5IHx8IGlcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc2hvdWxkQXBwbHlQcm9wID0gZnVuY3Rpb24gc2hvdWxkQXBwbHlQcm9wKHByb3BOYW1lKSB7XG4gICAgICAgICAgLy8gTXVzdCBzdXBwb3J0IHByb3BcbiAgICAgICAgICBpZiAoIWl0ZW0udHlwZSB8fCAhaXRlbS50eXBlLnByb3BUeXBlcyB8fCAhaXRlbS50eXBlLnByb3BUeXBlc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9IC8vICBNdXN0IG5vdCBoYXZlIGJlZW4gY2hhbmdlIGZyb20gdGhlIGRlZmF1bHQuXG5cblxuICAgICAgICAgIGlmICghaXRlbS50eXBlLmRlZmF1bHRQcm9wcyB8fCAhaXRlbS5wcm9wcyB8fCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImlzVW5kZWZpbmVkXCJdKShpdGVtLnByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BzW3Byb3BOYW1lXSA9PT0gaXRlbS50eXBlLmRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNvbnRyb2xzTGF5b3V0ID09PSAnZmlsbEpvaW4nKSB7XG4gICAgICAgICAgaWYgKHNob3VsZEFwcGx5UHJvcCgncHJlcGVuZCcpICYmIGkgPiAwKSB7XG4gICAgICAgICAgICBjbG9uZVByb3BzLnByZXBlbmQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRBcHBseVByb3AoJ2FwcGVuZCcpICYmIGkgPCBjb3VudCAtIDEpIHtcbiAgICAgICAgICAgIGNsb25lUHJvcHMuYXBwZW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2xvbmVQcm9wcy5wcmVwZW5kIHx8IGNsb25lUHJvcHMuYXBwZW5kKSB7XG4gICAgICAgICAgICBjbG9uZVByb3BzLmlubGluZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250cm9sc0xheW91dCA9PT0gJ2ZpbGwnICYmIHNob3VsZEFwcGx5UHJvcCgnaW5saW5lJykgJiYgY291bnQgPiAxKSB7XG4gICAgICAgICAgY2xvbmVQcm9wcy5pbmxpbmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRyb2xzTGF5b3V0ID09PSAnc3RhY2snICYmIHNob3VsZEFwcGx5UHJvcCgnaW5saW5lJykpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLmlubGluZSA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGkgPCBjb3VudCAtIDEpIHtcbiAgICAgICAgICAgIGNsb25lUHJvcHMuc3R5bGUgPSBpdGVtLnByb3BzLnN0eWxlID8gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJjbG9uZVwiXSkoaXRlbS5wcm9wcy5zdHlsZSkgOiB7fTtcbiAgICAgICAgICAgIGNsb25lUHJvcHMuc3R5bGUubWFyZ2luQm90dG9tID0gc3RhY2tNYXJnaW5Cb3R0b207XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZEFwcGx5UHJvcCgnbGFiZWxsZWRCeScpKSB7XG4gICAgICAgICAgY2xvbmVQcm9wcy5sYWJlbGxlZEJ5ID0gX3RoaXMyLmxhYmVsSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkQXBwbHlQcm9wKCdkZXNjcmliZWRCeScpICYmIF90aGlzMi5wcm9wcy5oZWxwKSB7XG4gICAgICAgICAgY2xvbmVQcm9wcy5kZXNjcmliZWRCeSA9IF90aGlzMi5oZWxwSWQ7XG4gICAgICAgIH0gLy8gKFNVSS0xMzY1KSBHaXZlIHRoZSBsYWJlbCdzIHRleHQgdG8gc2VsZWN0IGVsZW1lbnRzXG5cblxuICAgICAgICBpZiAoc2hvdWxkQXBwbHlQcm9wKCdsYWJlbFRleHQnKSkge1xuICAgICAgICAgIGNsb25lUHJvcHMubGFiZWxUZXh0ID0gbGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY291bnQgPT09IDEgJiYgKGNvbnRyb2xzTGF5b3V0ID09PSAnZmlsbEpvaW4nIHx8IGNvbnRyb2xzTGF5b3V0ID09PSAnZmlsbCcpKSB7XG4gICAgICAgICAgY2xvbmVQcm9wcy5zdHlsZSA9IGl0ZW0ucHJvcHMuc3R5bGUgPyBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImNsb25lXCJdKShpdGVtLnByb3BzLnN0eWxlKSA6IHt9O1xuICAgICAgICAgIGNsb25lUHJvcHMuc3R5bGUuZmxleEdyb3cgPSAxOyAvLyBzb21lIGNvbnRyb2xzIGxpa2UgU2VsZWN0IGRvIG5vdCBncm93IGJ5IGRlZmF1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbGFiZWxGb3IgJiYgaXRlbSkge1xuICAgICAgICAgIGlmIChfdGhpczIuaGFzSW5wdXRJZChpdGVtKSkge1xuICAgICAgICAgICAgY2xvbmVQcm9wcy5pbnB1dElkID0gaXRlbS5wcm9wcy5pbnB1dElkIHx8IE9iamVjdChpZF9bXCJjcmVhdGVET01JRFwiXSkoJ2lkJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb25lUHJvcHMuaWQgPSBpdGVtLnByb3BzLmlkIHx8IE9iamVjdChpZF9bXCJjcmVhdGVET01JRFwiXSkoJ2lkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShpdGVtLCBjbG9uZVByb3BzKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBjaGlsZHJlbkZvcm1hdHRlZCA9IHZhbGlkQ2hpbGRyZW4ubWFwKGNsb25lV2l0aFByb3BzKTtcbiAgICAgIHZhciBkZWZhdWx0TGlua2VkSWQgPSB0aGlzLmdldExpbmtlZElkKGNoaWxkcmVuRm9ybWF0dGVkKTtcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHdyaXRhYmxlT3RoZXJQcm9wc1snYXJpYS1pbnZhbGlkJ10gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFiZWxXaWR0aFN0eWxlID0gbGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnID8ge1xuICAgICAgICB3aWR0aDogbGFiZWxXaWR0aFxuICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYWJlbFdpZHRoU3RyaW5nID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc0Zpbml0ZVwiXSkobGFiZWxXaWR0aCkgPyBcIlwiLmNvbmNhdChsYWJlbFdpZHRoLCBcInB4XCIpIDogbGFiZWxXaWR0aDtcbiAgICAgIHZhciBsYWJlbE1hcmdpbiA9IGlzUHJpc21hID8gJzE2cHgnIDogJzIwcHgnO1xuICAgICAgdmFyIGNvbnRlbnRNYXJnaW5TdHlsZSA9IGxhYmVsUG9zaXRpb24gPT09ICdsZWZ0JyA/IHtcbiAgICAgICAgbWFyZ2luTGVmdDogXCJjYWxjKFwiLmNvbmNhdChsYWJlbFdpZHRoU3RyaW5nLCBcIiArIFwiKS5jb25jYXQobGFiZWxNYXJnaW4sIFwiKVwiKVxuICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBTdHlsZWRDb250cm9sc0NvbXBvbmVudCA9IGNvbnRyb2xzTGF5b3V0ID09PSAnc3RhY2snID8gU3R5bGVkQ29udHJvbHNTdGFja0JveCA6IEJveF9kZWZhdWx0LmE7XG4gICAgICB2YXIgU3R5bGVkTGFiZWxXcmFwcGVyQ29tcG9uZW50ID0gbGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnID8gU3R5bGVkTGFiZWxXcmFwcGVyTGVmdCA6IFN0eWxlZExhYmVsV3JhcHBlcjtcbiAgICAgIHZhciBzdHlsZWRMYWJlbCA9IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXJDb21wb25lbnQsIHtcbiAgICAgICAgc3R5bGU6IGxhYmVsV2lkdGhTdHlsZVxuICAgICAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsLCB7XG4gICAgICAgIFwiZGF0YS1zaXplXCI6IHNpemUsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwibGFiZWxcIixcbiAgICAgICAgaWQ6IHRoaXMubGFiZWxJZCxcbiAgICAgICAgaHRtbEZvcjogbGFiZWxGb3IgfHwgZGVmYXVsdExpbmtlZElkLFxuICAgICAgICAkdG9vbHRpcDogISF0b29sdGlwXG4gICAgICB9LCBsYWJlbCwgIWlzUHJpc21hICYmICFoaWRlTGFiZWwgJiYgdG9vbHRpcCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiXFx4QTBcIiksICFoaWRlTGFiZWwgJiYgdG9vbHRpcCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0LmEsIG51bGwsIHRvb2x0aXApKSwgIWhpZGVMYWJlbCAmJiB0b29sdGlwICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChUb29sdGlwX2RlZmF1bHQuYSwge1xuICAgICAgICBjb250ZW50OiB0b29sdGlwLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEJveCwgX2V4dGVuZHMoe1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImNvbnRyb2wtZ3JvdXBcIixcbiAgICAgICAgJGVycm9yOiBlcnJvclxuICAgICAgfSwgd3JpdGFibGVPdGhlclByb3BzKSwgaGlkZUxhYmVsID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFNjcmVlblJlYWRlckNvbnRlbnRfZGVmYXVsdC5hLCBudWxsLCBzdHlsZWRMYWJlbCkgOiBzdHlsZWRMYWJlbCwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENvbnRyb2xzQ29tcG9uZW50LCB7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiY29udHJvbHNcIixcbiAgICAgICAgZmxleDogY29udHJvbHNMYXlvdXQgIT09ICdub25lJyxcbiAgICAgICAgc3R5bGU6IGNvbnRlbnRNYXJnaW5TdHlsZVxuICAgICAgfSwgY2hpbGRyZW5Gb3JtYXR0ZWQpLCBoZWxwICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRIZWxwLCB7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiaGVscFwiLFxuICAgICAgICBpZDogdGhpcy5oZWxwSWQsXG4gICAgICAgIHN0eWxlOiBjb250ZW50TWFyZ2luU3R5bGVcbiAgICAgIH0sIGhlbHApKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29udHJvbEdyb3VwO1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoQ29udHJvbEdyb3VwX0NvbnRyb2xHcm91cCwgXCJwcm9wVHlwZXNcIiwgcHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KENvbnRyb2xHcm91cF9Db250cm9sR3JvdXAsIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyk7XG5cbnZhciBDb250cm9sR3JvdXBXaXRoVGhlbWUgPSBPYmplY3QodGhlbWVzX1tcIndpdGhTcGx1bmtUaGVtZVwiXSkoQ29udHJvbEdyb3VwX0NvbnRyb2xHcm91cCk7XG5Db250cm9sR3JvdXBXaXRoVGhlbWUucHJvcFR5cGVzID0gQ29udHJvbEdyb3VwX0NvbnRyb2xHcm91cC5wcm9wVHlwZXM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfQ29udHJvbEdyb3VwX0NvbnRyb2xHcm91cCA9IChDb250cm9sR3JvdXBXaXRoVGhlbWUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29udHJvbEdyb3VwL2luZGV4LnRzXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1Rvb2x0aXBcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0JveFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE0MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNlYXJjaDsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbmZ1bmN0aW9uIFNlYXJjaChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYSwgX2V4dGVuZHMoe1xuICAgIHNjcmVlblJlYWRlclRleHQ6IE9iamVjdChfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIl9cIl0pKCdTZWFyY2gnKVxuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQ3Ni42OSAxMjY4LjQxMmwtMzQwLjc5NS0zNDAuNzk1YzU2LjA0OC05Mi4yODUgODguNDMtMjAwLjE3NyA4OC40My0zMTQuOTQ4QzEyMjQuMzI0IDI3Ny4xOTUgOTQ3LjYzNC41MDYgNjEyLjE2LjUwNlMwIDI3Ny4xOTcgMCA2MTIuNjdjMCAzMzUuNDcyIDI3Ni42OSA2MTIuMTYgNjEyLjE2MiA2MTIuMTYgMTE0Ljc3IDAgMjIyLjY2My0zMi4zODUgMzE0Ljk0OC04OC40M2wzNDAuNzk1IDM0MC43OTZjMzAuNDA2IDMwLjQwNSA3NSAzMC40MDUgMTA1LjQwNiAwbDEwMy4zOC0xMDMuMzc4YzMwLjQwNS0zMC40MDYgMzAuNDA1LTc1IDAtMTA1LjQwNnpNMTU2LjA4IDYxMi42N2MwLTI0OC4zMTIgMjA3Ljc3LTQ1Ni4wODIgNDU2LjA4Mi00NTYuMDgyIDI0OC4zMSAwIDQ1Ni4wOCAyMDcuNzcgNDU2LjA4IDQ1Ni4wOCAwIDI0OC4zMTItMjA3Ljc3IDQ1Ni4wODItNDU2LjA4IDQ1Ni4wODItMjQ4LjMxIDAtNDU2LjA4LTIwNy43Ny00NTYuMDgtNDU2LjA4elwiXG4gIH0pKTtcbn1cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvU1ZHSW50ZXJuYWxcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGNyZWF0ZUNvbXBvdW5kZXIgPSByZXF1aXJlKCcuL19jcmVhdGVDb21wb3VuZGVyJyksXG4gICAgdXBwZXJGaXJzdCA9IHJlcXVpcmUoJy4vdXBwZXJGaXJzdCcpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gKiBbc3RhcnQgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3R5bGlzdGljX29yX3NwZWNpYWxpc2VkX3VzYWdlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RhcnQgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnN0YXJ0Q2FzZSgnLS1mb28tYmFyLS0nKTtcbiAqIC8vID0+ICdGb28gQmFyJ1xuICpcbiAqIF8uc3RhcnRDYXNlKCdmb29CYXInKTtcbiAqIC8vID0+ICdGb28gQmFyJ1xuICpcbiAqIF8uc3RhcnRDYXNlKCdfX0ZPT19CQVJfXycpO1xuICogLy8gPT4gJ0ZPTyBCQVInXG4gKi9cbnZhciBzdGFydENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHVwcGVyRmlyc3Qod29yZCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdGFydENhc2U7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGFycmF5UmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXlSZWR1Y2UnKSxcbiAgICBkZWJ1cnIgPSByZXF1aXJlKCcuL2RlYnVycicpLFxuICAgIHdvcmRzID0gcmVxdWlyZSgnLi93b3JkcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCI7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL1xudmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uY2FtZWxDYXNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbXBvdW5kZXI7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbKytpbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UmVkdWNlO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBkZWJ1cnJMZXR0ZXIgPSByZXF1aXJlKCcuL19kZWJ1cnJMZXR0ZXInKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggTGF0aW4gVW5pY29kZSBsZXR0ZXJzIChleGNsdWRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdG9ycykuICovXG52YXIgcmVMYXRpbiA9IC9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxceGZmXFx1MDEwMC1cXHUwMTdmXS9nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykgYW5kXG4gKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfZm9yX1N5bWJvbHMpLlxuICovXG52YXIgcmVDb21ib01hcmsgPSBSZWdFeHAocnNDb21ibywgJ2cnKTtcblxuLyoqXG4gKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmdcbiAqIFtMYXRpbi0xIFN1cHBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluLTFfU3VwcGxlbWVudF8oVW5pY29kZV9ibG9jaykjQ2hhcmFjdGVyX3RhYmxlKVxuICogYW5kIFtMYXRpbiBFeHRlbmRlZC1BXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbl9FeHRlbmRlZC1BKVxuICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZ1xuICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVidXJyKCdkw6lqw6AgdnUnKTtcbiAqIC8vID0+ICdkZWphIHZ1J1xuICovXG5mdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnJlcGxhY2UocmVMYXRpbiwgZGVidXJyTGV0dGVyKS5yZXBsYWNlKHJlQ29tYm9NYXJrLCAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidXJyO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBiYXNlUHJvcGVydHlPZiA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eU9mJyk7XG5cbi8qKiBVc2VkIHRvIG1hcCBMYXRpbiBVbmljb2RlIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy4gKi9cbnZhciBkZWJ1cnJlZExldHRlcnMgPSB7XG4gIC8vIExhdGluLTEgU3VwcGxlbWVudCBibG9jay5cbiAgJ1xceGMwJzogJ0EnLCAgJ1xceGMxJzogJ0EnLCAnXFx4YzInOiAnQScsICdcXHhjMyc6ICdBJywgJ1xceGM0JzogJ0EnLCAnXFx4YzUnOiAnQScsXG4gICdcXHhlMCc6ICdhJywgICdcXHhlMSc6ICdhJywgJ1xceGUyJzogJ2EnLCAnXFx4ZTMnOiAnYScsICdcXHhlNCc6ICdhJywgJ1xceGU1JzogJ2EnLFxuICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICdcXHhkMCc6ICdEJywgICdcXHhmMCc6ICdkJyxcbiAgJ1xceGM4JzogJ0UnLCAgJ1xceGM5JzogJ0UnLCAnXFx4Y2EnOiAnRScsICdcXHhjYic6ICdFJyxcbiAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgJ1xceGNjJzogJ0knLCAgJ1xceGNkJzogJ0knLCAnXFx4Y2UnOiAnSScsICdcXHhjZic6ICdJJyxcbiAgJ1xceGVjJzogJ2knLCAgJ1xceGVkJzogJ2knLCAnXFx4ZWUnOiAnaScsICdcXHhlZic6ICdpJyxcbiAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAnXFx4ZDInOiAnTycsICAnXFx4ZDMnOiAnTycsICdcXHhkNCc6ICdPJywgJ1xceGQ1JzogJ08nLCAnXFx4ZDYnOiAnTycsICdcXHhkOCc6ICdPJyxcbiAgJ1xceGYyJzogJ28nLCAgJ1xceGYzJzogJ28nLCAnXFx4ZjQnOiAnbycsICdcXHhmNSc6ICdvJywgJ1xceGY2JzogJ28nLCAnXFx4ZjgnOiAnbycsXG4gICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICdcXHhmOSc6ICd1JywgICdcXHhmYSc6ICd1JywgJ1xceGZiJzogJ3UnLCAnXFx4ZmMnOiAndScsXG4gICdcXHhkZCc6ICdZJywgICdcXHhmZCc6ICd5JywgJ1xceGZmJzogJ3knLFxuICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAnXFx4ZGUnOiAnVGgnLCAnXFx4ZmUnOiAndGgnLFxuICAnXFx4ZGYnOiAnc3MnLFxuICAvLyBMYXRpbiBFeHRlbmRlZC1BIGJsb2NrLlxuICAnXFx1MDEwMCc6ICdBJywgICdcXHUwMTAyJzogJ0EnLCAnXFx1MDEwNCc6ICdBJyxcbiAgJ1xcdTAxMDEnOiAnYScsICAnXFx1MDEwMyc6ICdhJywgJ1xcdTAxMDUnOiAnYScsXG4gICdcXHUwMTA2JzogJ0MnLCAgJ1xcdTAxMDgnOiAnQycsICdcXHUwMTBhJzogJ0MnLCAnXFx1MDEwYyc6ICdDJyxcbiAgJ1xcdTAxMDcnOiAnYycsICAnXFx1MDEwOSc6ICdjJywgJ1xcdTAxMGInOiAnYycsICdcXHUwMTBkJzogJ2MnLFxuICAnXFx1MDEwZSc6ICdEJywgICdcXHUwMTEwJzogJ0QnLCAnXFx1MDEwZic6ICdkJywgJ1xcdTAxMTEnOiAnZCcsXG4gICdcXHUwMTEyJzogJ0UnLCAgJ1xcdTAxMTQnOiAnRScsICdcXHUwMTE2JzogJ0UnLCAnXFx1MDExOCc6ICdFJywgJ1xcdTAxMWEnOiAnRScsXG4gICdcXHUwMTEzJzogJ2UnLCAgJ1xcdTAxMTUnOiAnZScsICdcXHUwMTE3JzogJ2UnLCAnXFx1MDExOSc6ICdlJywgJ1xcdTAxMWInOiAnZScsXG4gICdcXHUwMTFjJzogJ0cnLCAgJ1xcdTAxMWUnOiAnRycsICdcXHUwMTIwJzogJ0cnLCAnXFx1MDEyMic6ICdHJyxcbiAgJ1xcdTAxMWQnOiAnZycsICAnXFx1MDExZic6ICdnJywgJ1xcdTAxMjEnOiAnZycsICdcXHUwMTIzJzogJ2cnLFxuICAnXFx1MDEyNCc6ICdIJywgICdcXHUwMTI2JzogJ0gnLCAnXFx1MDEyNSc6ICdoJywgJ1xcdTAxMjcnOiAnaCcsXG4gICdcXHUwMTI4JzogJ0knLCAgJ1xcdTAxMmEnOiAnSScsICdcXHUwMTJjJzogJ0knLCAnXFx1MDEyZSc6ICdJJywgJ1xcdTAxMzAnOiAnSScsXG4gICdcXHUwMTI5JzogJ2knLCAgJ1xcdTAxMmInOiAnaScsICdcXHUwMTJkJzogJ2knLCAnXFx1MDEyZic6ICdpJywgJ1xcdTAxMzEnOiAnaScsXG4gICdcXHUwMTM0JzogJ0onLCAgJ1xcdTAxMzUnOiAnaicsXG4gICdcXHUwMTM2JzogJ0snLCAgJ1xcdTAxMzcnOiAnaycsICdcXHUwMTM4JzogJ2snLFxuICAnXFx1MDEzOSc6ICdMJywgICdcXHUwMTNiJzogJ0wnLCAnXFx1MDEzZCc6ICdMJywgJ1xcdTAxM2YnOiAnTCcsICdcXHUwMTQxJzogJ0wnLFxuICAnXFx1MDEzYSc6ICdsJywgICdcXHUwMTNjJzogJ2wnLCAnXFx1MDEzZSc6ICdsJywgJ1xcdTAxNDAnOiAnbCcsICdcXHUwMTQyJzogJ2wnLFxuICAnXFx1MDE0Myc6ICdOJywgICdcXHUwMTQ1JzogJ04nLCAnXFx1MDE0Nyc6ICdOJywgJ1xcdTAxNGEnOiAnTicsXG4gICdcXHUwMTQ0JzogJ24nLCAgJ1xcdTAxNDYnOiAnbicsICdcXHUwMTQ4JzogJ24nLCAnXFx1MDE0Yic6ICduJyxcbiAgJ1xcdTAxNGMnOiAnTycsICAnXFx1MDE0ZSc6ICdPJywgJ1xcdTAxNTAnOiAnTycsXG4gICdcXHUwMTRkJzogJ28nLCAgJ1xcdTAxNGYnOiAnbycsICdcXHUwMTUxJzogJ28nLFxuICAnXFx1MDE1NCc6ICdSJywgICdcXHUwMTU2JzogJ1InLCAnXFx1MDE1OCc6ICdSJyxcbiAgJ1xcdTAxNTUnOiAncicsICAnXFx1MDE1Nyc6ICdyJywgJ1xcdTAxNTknOiAncicsXG4gICdcXHUwMTVhJzogJ1MnLCAgJ1xcdTAxNWMnOiAnUycsICdcXHUwMTVlJzogJ1MnLCAnXFx1MDE2MCc6ICdTJyxcbiAgJ1xcdTAxNWInOiAncycsICAnXFx1MDE1ZCc6ICdzJywgJ1xcdTAxNWYnOiAncycsICdcXHUwMTYxJzogJ3MnLFxuICAnXFx1MDE2Mic6ICdUJywgICdcXHUwMTY0JzogJ1QnLCAnXFx1MDE2Nic6ICdUJyxcbiAgJ1xcdTAxNjMnOiAndCcsICAnXFx1MDE2NSc6ICd0JywgJ1xcdTAxNjcnOiAndCcsXG4gICdcXHUwMTY4JzogJ1UnLCAgJ1xcdTAxNmEnOiAnVScsICdcXHUwMTZjJzogJ1UnLCAnXFx1MDE2ZSc6ICdVJywgJ1xcdTAxNzAnOiAnVScsICdcXHUwMTcyJzogJ1UnLFxuICAnXFx1MDE2OSc6ICd1JywgICdcXHUwMTZiJzogJ3UnLCAnXFx1MDE2ZCc6ICd1JywgJ1xcdTAxNmYnOiAndScsICdcXHUwMTcxJzogJ3UnLCAnXFx1MDE3Myc6ICd1JyxcbiAgJ1xcdTAxNzQnOiAnVycsICAnXFx1MDE3NSc6ICd3JyxcbiAgJ1xcdTAxNzYnOiAnWScsICAnXFx1MDE3Nyc6ICd5JywgJ1xcdTAxNzgnOiAnWScsXG4gICdcXHUwMTc5JzogJ1onLCAgJ1xcdTAxN2InOiAnWicsICdcXHUwMTdkJzogJ1onLFxuICAnXFx1MDE3YSc6ICd6JywgICdcXHUwMTdjJzogJ3onLCAnXFx1MDE3ZSc6ICd6JyxcbiAgJ1xcdTAxMzInOiAnSUonLCAnXFx1MDEzMyc6ICdpaicsXG4gICdcXHUwMTUyJzogJ09lJywgJ1xcdTAxNTMnOiAnb2UnLFxuICAnXFx1MDE0OSc6IFwiJ25cIiwgJ1xcdTAxN2YnOiAncydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBsZXR0ZXIgVGhlIG1hdGNoZWQgbGV0dGVyIHRvIGRlYnVyci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIGxldHRlci5cbiAqL1xudmFyIGRlYnVyckxldHRlciA9IGJhc2VQcm9wZXJ0eU9mKGRlYnVycmVkTGV0dGVycyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidXJyTGV0dGVyO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHJvcGVydHlPZmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5T2Yob2JqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlPZjtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYXNjaWlXb3JkcyA9IHJlcXVpcmUoJy4vX2FzY2lpV29yZHMnKSxcbiAgICBoYXNVbmljb2RlV29yZCA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGVXb3JkJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyksXG4gICAgdW5pY29kZVdvcmRzID0gcmVxdWlyZSgnLi9fdW5pY29kZVdvcmRzJyk7XG5cbi8qKlxuICogU3BsaXRzIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtwYXR0ZXJuXSBUaGUgcGF0dGVybiB0byBtYXRjaCB3b3Jkcy5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJ11cbiAqXG4gKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycsIC9bXiwgXSsvZyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJyYnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIHdvcmRzKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICBpZiAocGF0dGVybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGVXb3JkKHN0cmluZykgPyB1bmljb2RlV29yZHMoc3RyaW5nKSA6IGFzY2lpV29yZHMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gc3RyaW5nLm1hdGNoKHBhdHRlcm4pIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdvcmRzO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHdvcmRzIGNvbXBvc2VkIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlQXNjaWlXb3JkID0gL1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nO1xuXG4vKipcbiAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKi9cbmZ1bmN0aW9uIGFzY2lpV29yZHMoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVBc2NpaVdvcmQpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzY2lpV29yZHM7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3MgdGhhdCBuZWVkIGEgbW9yZSByb2J1c3QgcmVnZXhwIHRvIG1hdGNoIHdvcmRzLiAqL1xudmFyIHJlSGFzVW5pY29kZVdvcmQgPSAvW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgYSB3b3JkIGNvbXBvc2VkIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSB3b3JkIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGVXb3JkKHN0cmluZykge1xuICByZXR1cm4gcmVIYXNVbmljb2RlV29yZC50ZXN0KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVW5pY29kZVdvcmQ7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzRGluZ2JhdFJhbmdlID0gJ1xcXFx1MjcwMC1cXFxcdTI3YmYnLFxuICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLFxuICAgIHJzTWF0aE9wUmFuZ2UgPSAnXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmNycsXG4gICAgcnNOb25DaGFyUmFuZ2UgPSAnXFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmJyxcbiAgICByc1B1bmN0dWF0aW9uUmFuZ2UgPSAnXFxcXHUyMDAwLVxcXFx1MjA2ZicsXG4gICAgcnNTcGFjZVJhbmdlID0gJyBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwJyxcbiAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgcnNCcmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNQdW5jdHVhdGlvblJhbmdlICsgcnNTcGFjZVJhbmdlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCIsXG4gICAgcnNCcmVhayA9ICdbJyArIHJzQnJlYWtSYW5nZSArICddJyxcbiAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgIHJzRGlnaXRzID0gJ1xcXFxkKycsXG4gICAgcnNEaW5nYmF0ID0gJ1snICsgcnNEaW5nYmF0UmFuZ2UgKyAnXScsXG4gICAgcnNMb3dlciA9ICdbJyArIHJzTG93ZXJSYW5nZSArICddJyxcbiAgICByc01pc2MgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArIHJzQnJlYWtSYW5nZSArIHJzRGlnaXRzICsgcnNEaW5nYmF0UmFuZ2UgKyByc0xvd2VyUmFuZ2UgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzVXBwZXIgPSAnWycgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcnNNaXNjTG93ZXIgPSAnKD86JyArIHJzTG93ZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgcnNNaXNjVXBwZXIgPSAnKD86JyArIHJzVXBwZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgcnNPcHRDb250ckxvd2VyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPycsXG4gICAgcnNPcHRDb250clVwcGVyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86RHxMTHxNfFJFfFN8VHxWRSkpPycsXG4gICAgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc09yZExvd2VyID0gJ1xcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKScsXG4gICAgcnNPcmRVcHBlciA9ICdcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSknLFxuICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICByc0Vtb2ppID0gJyg/OicgKyBbcnNEaW5nYmF0LCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc1NlcTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi9cbnZhciByZVVuaWNvZGVXb3JkID0gUmVnRXhwKFtcbiAgcnNVcHBlciArICc/JyArIHJzTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgcnNNaXNjVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyICsgcnNNaXNjTG93ZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICByc1VwcGVyICsgJz8nICsgcnNNaXNjTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIsXG4gIHJzVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIsXG4gIHJzT3JkVXBwZXIsXG4gIHJzT3JkTG93ZXIsXG4gIHJzRGlnaXRzLFxuICByc0Vtb2ppXG5dLmpvaW4oJ3wnKSwgJ2cnKTtcblxuLyoqXG4gKiBTcGxpdHMgYSBVbmljb2RlIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVdvcmRzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZVdvcmQpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVXb3JkcztcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgY3JlYXRlQ2FzZUZpcnN0ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ2FzZUZpcnN0Jyk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVwcGVyRmlyc3Q7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxudmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG52YXIgYmFzZVNsaWNlID0gcmVxdWlyZSgnLi9fYmFzZVNsaWNlJyk7XG5cbi8qKlxuICogQ2FzdHMgYGFycmF5YCB0byBhIHNsaWNlIGlmIGl0J3MgbmVlZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3Qgc2xpY2UuXG4gKi9cbmZ1bmN0aW9uIGNhc3RTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZDtcbiAgcmV0dXJuICghc3RhcnQgJiYgZW5kID49IGxlbmd0aCkgPyBhcnJheSA6IGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFNsaWNlO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbnZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzY2lpVG9BcnJheTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcblxuIiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSUUxMSA9IGlzSUUxMTtcblxuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydCAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBJbnRlcm5ldCBFeHBsb3JlciAxMS5cbiAqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gaXNJRTExKCkge1xuICByZXR1cm4gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50XFwvN1xcLi8pO1xufSIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTQwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2lkXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVSZWFjdFJlZjsgfSk7XG4vKipcbiAqIFVwZGF0ZXMgYSBSZWFjdCByZWYuIENhbGxiYWNrIHJlZnMgYW5kIG9iamVjdCByZWZzIChmcm9tIGBjcmVhdGVSZWZgIGFuZCBgdXNlUmVmYCkgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gcmVmIC0gVGhlIFJlYWN0IGNhbGxiYWNrIG9yIG9iamVjdCByZWYuIENhbiBiZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0gY3VycmVudCAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHJlZi5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlUmVhY3RSZWYocmVmLCBjdXJyZW50KSB7XG4gIGlmIChyZWYpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGN1cnJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgcHVibGljIHNpZ25hdHVyZSBvZiB0aGlzIHV0aWwgdXNlcyBSZWFjdC5SZWY8VD4gdG8gbWlycm9yIHRoZSB3YXkgUmVhY3QgdHlwZXMgcmVmcy5cbiAgICAgIC8vIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBzaWduYWwgXCJ3ZSB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nICdjdXJyZW50Jywgbm90IHlvdVwiLlxuICAgICAgcmVmLmN1cnJlbnQgPSBjdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgfVxuICB9XG59XG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvTWVudVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE0MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIHNyY19Db21ib0JveF9Db21ib0JveDsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJPcHRpb25cIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBDb21ib0JveF9PcHRpb247IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRGl2aWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIE1lbnVfW1wiRGl2aWRlclwiXTsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIZWFkaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gTWVudV9bXCJIZWFkaW5nXCJdOyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9maWx0ZXJcIlxudmFyIGZpbHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvaWRcIlxudmFyIGlkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2tleWJvYXJkXCJcbnZhciBrZXlib2FyZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9NZW51XCJcbnZhciBNZW51XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Qb3BvdmVyXCJcbnZhciBQb3BvdmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIFBvcG92ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oUG9wb3Zlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9SZXN1bHRzTWVudVwiXG52YXIgUmVzdWx0c01lbnVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG52YXIgUmVzdWx0c01lbnVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oUmVzdWx0c01lbnVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvVGV4dFwiXG52YXIgVGV4dF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbnZhciBUZXh0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKFRleHRfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ29tYm9Cb3gvT3B0aW9uLnRzeFxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICAvKiogQHByaXZhdGUgKi9cbiAgYWN0aXZlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBkZXNjcmlwdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkZXNjcmlwdGlvblBvc2l0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ3JpZ2h0JywgJ2JvdHRvbSddKSxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGljb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGxhYmVsOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIG1hdGNoUmFuZ2VzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheU9mKGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnNoYXBlKHtcbiAgICBzdGFydDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgZW5kOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSksXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIG9uQ2xpY2s6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHRydW5jYXRlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICB2YWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBhY3RpdmU6IGZhbHNlLFxuICBkZXNjcmlwdGlvblBvc2l0aW9uOiAnYm90dG9tJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICB0cnVuY2F0ZTogZmFsc2Vcbn07XG5cbi8qKlxuICogQW4gb3B0aW9uIHdpdGhpbiBhIGBDb21ib0JveGAuIFRoaXMgaW5oZXJpdHMgZnJvbVxuICogW1B1cmVDb21wb25lbnRdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdHB1cmVjb21wb25lbnQpXG4gKiBzbyBhbnkgZWxlbWVudHMgcGFzc2VkIHRvIGl0IG11c3QgYWxzbyBiZSBwdXJlLlxuICovXG52YXIgT3B0aW9uX09wdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE9wdGlvbiwgX1B1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoT3B0aW9uKTtcblxuICBmdW5jdGlvbiBPcHRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE9wdGlvbik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIml0ZW1cIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzLm9uQ2xpY2ssXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwcm9wcy52YWx1ZTtcblxuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2xpY2soZSwge1xuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhPcHRpb24sIFt7XG4gICAga2V5OiBcInNjcm9sbEludG9WaWV3SWZOZWVkZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpIHtcbiAgICAgIHZhciBfdGhpcyRpdGVtO1xuXG4gICAgICAoX3RoaXMkaXRlbSA9IHRoaXMuaXRlbSkgPT09IG51bGwgfHwgX3RoaXMkaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaXRlbS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzMi52YWx1ZSxcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzMi5sYWJlbCxcbiAgICAgICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgW1widmFsdWVcIiwgXCJsYWJlbFwiXSk7XG5cbiAgICAgIHZhciBkaXNwbGF5TGFiZWwgPSBsYWJlbCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBsYWJlbDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoTWVudV9bXCJJdGVtXCJdLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGMpIHtcbiAgICAgICAgICBfdGhpczIuaXRlbSA9IGM7XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwib3B0aW9uXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXZhbHVlXCI6IHZhbHVlXG4gICAgICB9LCBvdGhlclByb3BzLCB7XG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiBmYWxzZVxuICAgICAgfSksIGRpc3BsYXlMYWJlbCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE9wdGlvbjtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiUHVyZUNvbXBvbmVudFwiXSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShPcHRpb25fT3B0aW9uLCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoT3B0aW9uX09wdGlvbiwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQ29tYm9Cb3hfT3B0aW9uID0gKE9wdGlvbl9PcHRpb24pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy91cGRhdGVSZWFjdFJlZi50c1xudmFyIHVwZGF0ZVJlYWN0UmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NvbWJvQm94L0NvbWJvQm94LnRzeFxuZnVuY3Rpb24gQ29tYm9Cb3hfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBDb21ib0JveF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgQ29tYm9Cb3hfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIENvbWJvQm94X3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIENvbWJvQm94X2V4dGVuZHMoKSB7IENvbWJvQm94X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gQ29tYm9Cb3hfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IENvbWJvQm94X2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIENvbWJvQm94X2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gQ29tYm9Cb3hfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIENvbWJvQm94X2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIENvbWJvQm94X2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIENvbWJvQm94X2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIENvbWJvQm94X3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBDb21ib0JveF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IENvbWJvQm94X3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBDb21ib0JveF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBDb21ib0JveF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gQ29tYm9Cb3hfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gQ29tYm9Cb3hfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IENvbWJvQm94X2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBDb21ib0JveF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gQ29tYm9Cb3hfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChDb21ib0JveF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIENvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBDb21ib0JveF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBDb21ib0JveF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gQ29tYm9Cb3hfZ2V0UHJvdG90eXBlT2YobykgeyBDb21ib0JveF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBDb21ib0JveF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBDb21ib0JveF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIENvbWJvQm94X3Byb3BUeXBlcyA9IHtcbiAgYW5pbWF0ZUxvYWRpbmc6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGFwcGVuZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGNvbnRyb2xsZWRGaWx0ZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGRlZmF1bHRQbGFjZW1lbnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnYWJvdmUnLCAnYmVsb3cnLCAndmVydGljYWwnXSksXG4gIGRlZmF1bHRWYWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkZXNjcmliZWRCeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZXJyb3I6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGZvb3Rlck1lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGlubGluZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaW5wdXRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGlzTG9hZGluZ09wdGlvbnM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGxhYmVsbGVkQnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgbG9hZGluZ01lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIG1lbnVTdHlsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICBuYW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIG9uQ2hhbmdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbkNsb3NlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbkZvY3VzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbktleURvd246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uT3BlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25TY3JvbGxCb3R0b206IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIHByZXBlbmQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHNpemU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10pLFxuICB2YWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nXG59O1xudmFyIENvbWJvQm94X2RlZmF1bHRQcm9wcyA9IHtcbiAgYW5pbWF0ZUxvYWRpbmc6IGZhbHNlLFxuICBjb250cm9sbGVkRmlsdGVyOiBmYWxzZSxcbiAgZGVmYXVsdFBsYWNlbWVudDogJ3ZlcnRpY2FsJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBlcnJvcjogZmFsc2UsXG4gIGlubGluZTogZmFsc2UsXG4gIGlzTG9hZGluZ09wdGlvbnM6IGZhbHNlLFxuICBtZW51U3R5bGU6IHt9LFxuICBwbGFjZWhvbGRlcjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1NlbGVjdC4uLicpLFxuICBzaXplOiAnbWVkaXVtJ1xufTtcblxuZnVuY3Rpb24gY29udGFpbnNFdmVudChlbCwgX3JlZikge1xuICB2YXIgY2xpZW50WCA9IF9yZWYuY2xpZW50WCxcbiAgICAgIGNsaWVudFkgPSBfcmVmLmNsaWVudFk7XG5cbiAgdmFyIF9lbCRnZXRCb3VuZGluZ0NsaWVudCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgdG9wID0gX2VsJGdldEJvdW5kaW5nQ2xpZW50LnRvcCxcbiAgICAgIGxlZnQgPSBfZWwkZ2V0Qm91bmRpbmdDbGllbnQubGVmdCxcbiAgICAgIGJvdHRvbSA9IF9lbCRnZXRCb3VuZGluZ0NsaWVudC5ib3R0b20sXG4gICAgICByaWdodCA9IF9lbCRnZXRCb3VuZGluZ0NsaWVudC5yaWdodDtcblxuICByZXR1cm4gY2xpZW50WCA+IGxlZnQgJiYgY2xpZW50WCA8IHJpZ2h0ICYmIGNsaWVudFkgPiB0b3AgJiYgY2xpZW50WSA8IGJvdHRvbTtcbn1cblxuLyoqXG4gKiBgQ29tYm9Cb3hgIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgYSBwcmVkZWZpbmVkIHN0cmluZyBvciBlbnRlciBhIG5ldyB2YWx1ZS4gVW5saWtlIGBTZWxlY3RgXG4gKiBhbmQgYE11bHRpc2VsZWN0YCwgYE9wdGlvbmAgdmFsdWUgbXVzdCBhbHdheXMgYmUgYSBzdHJpbmcgYW5kIGBPcHRpb25gIGRvZXMgbm90IGhhdmUgYSBsYWJlbFxuICogcHJvcGVydHkuXG4gKi9cbnZhciBDb21ib0JveF9Db21ib0JveCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBDb21ib0JveF9pbmhlcml0cyhDb21ib0JveCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IENvbWJvQm94X2NyZWF0ZVN1cGVyKENvbWJvQm94KTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIENvbWJvQm94UHJvcHNCYXNlXG4gIGZ1bmN0aW9uIENvbWJvQm94KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgQ29tYm9Cb3hfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29tYm9Cb3gpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBDb21ib0JveF9kZWZpbmVQcm9wZXJ0eShDb21ib0JveF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFjdGl2ZUl0ZW1JZFwiLCB2b2lkIDApO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhY3RpdmVWYWx1ZVwiLCB2b2lkIDApO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhdmFpbGFibGVPcHRpb25Db3VudFwiLCAwKTtcblxuICAgIENvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udHJvbGxlZEV4dGVybmFsbHlcIiwgdm9pZCAwKTtcblxuICAgIENvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZm9jdXNDYWxsZWRJbnRlcm5hbGx5XCIsIGZhbHNlKTtcblxuICAgIENvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc1wiLCB2b2lkIDApO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVySWRcIiwgdm9pZCAwKTtcblxuICAgIENvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGV4dElucHV0XCIsIG51bGwpO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dE1vdW50XCIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgX3RoaXMudGV4dElucHV0ID0gZWw7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYW5jaG9yOiBlbFxuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdCh1cGRhdGVSZWFjdFJlZltcImFcIiAvKiB1cGRhdGVSZWFjdFJlZiAqL10pKF90aGlzLnByb3BzLmlucHV0UmVmLCBlbCk7XG4gICAgfSk7XG5cbiAgICBDb21ib0JveF9kZWZpbmVQcm9wZXJ0eShDb21ib0JveF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUFjdGl2ZU9wdGlvbk1vdW50XCIsIGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBjLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIENvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSW5wdXRGb2N1c1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRm9jdXMsIF90aGlzJHByb3BzO1xuXG4gICAgICAvKiBTVUktOTMwIE9uIElFIDExIHRoaXMgaGFuZGxlciBpcyBlc3NlbnRpYWxseSBkZWZlcnJlZCBhZnRlciBjYWxsaW5nXG4gICAgICAgKiB0aGlzLnRleHRJbnB1dC5mb2N1cygpLiB0aGlzLmZvY3VzQ2FsbGVkSW50ZXJuYWxseSBlbmFibGVzIHRoZSBmb2N1cyBldmVudCB0byBiZSBpZ25vcmVkXG4gICAgICAgKiB3aGVuIHRoZSBtZW51IGNsb3Nlcy4gKi9cbiAgICAgIGlmIChfdGhpcy5mb2N1c0NhbGxlZEludGVybmFsbHkpIHtcbiAgICAgICAgX3RoaXMuZm9jdXNDYWxsZWRJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICB9XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkZvY3VzID0gKF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMpLm9uRm9jdXMpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRm9jdXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uRm9jdXMuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgfSk7XG5cbiAgICBDb21ib0JveF9kZWZpbmVQcm9wZXJ0eShDb21ib0JveF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNoYW5nZVwiLCBmdW5jdGlvbiAoZSwgX3JlZjIpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNoYW5nZSwgX3RoaXMkcHJvcHMyO1xuXG4gICAgICB2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9IF9yZWYyLnNlbGVjdGVkT3B0aW9uO1xuICAgICAgdmFyIG5hbWUgPSBfdGhpcy5wcm9wcy5uYW1lO1xuICAgICAgdmFyIHR5cGVkVmFsdWUgPSBzZWxlY3RlZE9wdGlvbiA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuaXNDb250cm9sbGVkKCkpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICAgIHR5cGVkVmFsdWU6IHR5cGVkVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICAgIHR5cGVkVmFsdWU6IHR5cGVkVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZSA9IChfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcykub25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNoYW5nZS5jYWxsKF90aGlzJHByb3BzMiwgZSwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTZWxlY3RPcHRpb25cIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZShlLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRhdGEpLCB7fSwge1xuICAgICAgICBzZWxlY3RlZE9wdGlvbjogdHJ1ZVxuICAgICAgfSkpO1xuXG4gICAgICBfdGhpcy5mb2N1c0NhbGxlZEludGVybmFsbHkgPSB0cnVlO1xuXG4gICAgICBfdGhpcy5mb2N1cygpO1xuXG4gICAgICBfdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dEtleURvd25cIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICBvbktleURvd24gPSBfdGhpcyRwcm9wczMub25LZXlEb3duLFxuICAgICAgICAgIG9uU2Nyb2xsQm90dG9tID0gX3RoaXMkcHJvcHMzLm9uU2Nyb2xsQm90dG9tO1xuICAgICAgdmFyIG51bU9wdGlvbnMgPSBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudDtcbiAgICAgIHZhciBhY3RpdmVPcHRpb24gPSBfdGhpcy5hY3RpdmVWYWx1ZTtcbiAgICAgIHZhciBldmVudEtleUNvZGUgPSBPYmplY3Qoa2V5Ym9hcmRfW1wia2V5Y29kZVwiXSkoZS5uYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5vcGVuKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnRLZXlDb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlU2VsZWN0T3B0aW9uKGUsIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBhY3RpdmVPcHRpb25cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVJbmRleDogTWF0aC5taW4oc3RhdGUuYWN0aXZlSW5kZXggKyAxLCBudW1PcHRpb25zIC0gMSlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgb25TY3JvbGxCb3R0b20pIHtcbiAgICAgICAgICAgICAgdmFyIGJlZm9yZUxhc3RDaGlsZCA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLmNvdW50KGNoaWxkcmVuKSAtIDI7XG5cbiAgICAgICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmFjdGl2ZUluZGV4ID09PSBiZWZvcmVMYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBvblNjcm9sbEJvdHRvbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXg6IE1hdGgubWF4KHN0YXRlLmFjdGl2ZUluZGV4IC0gMSwgMClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6IC8vIGRvIG5vdGhpbmdcblxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdChrZXlib2FyZF9bXCJhZGRzQ2hhcmFjdGVyXCJdKShlLm5hdGl2ZUV2ZW50KSAhPT0gZmFsc2UgfHwgLy8gU2FmYXJpIDkuMCByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgZXZlbnRLZXlDb2RlID09PSAnZW50ZXInIHx8IGV2ZW50S2V5Q29kZSA9PT0gJ2JhY2tzcGFjZScgfHwgZXZlbnRLZXlDb2RlID09PSAnZG93bicgfHwgZXZlbnRLZXlDb2RlID09PSAndXAnKSB7XG4gICAgICAgIF90aGlzLm9wZW4oKTtcbiAgICAgIH1cblxuICAgICAgb25LZXlEb3duID09PSBudWxsIHx8IG9uS2V5RG93biA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25LZXlEb3duKGUpO1xuICAgIH0pO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUub3BlbiAmJiAhX3RoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgICAgX3RoaXMub3BlbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVSZXF1ZXN0Q2xvc2VcIiwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgZXZlbnQgPSBfcmVmMy5ldmVudCxcbiAgICAgICAgICByZWFzb24gPSBfcmVmMy5yZWFzb247XG4gICAgICB2YXIgc2hvdWxkQ2xvc2UgPSByZWFzb24gPT09ICdvZmZTY3JlZW4nIHx8IHJlYXNvbiA9PT0gJ2VzY2FwZUtleScgfHwgcmVhc29uID09PSAnY2xpY2tBd2F5JyAmJiBfdGhpcy50ZXh0SW5wdXQgJiYgIWNvbnRhaW5zRXZlbnQoX3RoaXMudGV4dElucHV0LCBldmVudCk7XG5cbiAgICAgIGlmIChzaG91bGRDbG9zZSkge1xuICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTY3JvbGxCb3R0b21cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnN0YXRlLm9wZW4gJiYgIV90aGlzLnByb3BzLmlzTG9hZGluZ09wdGlvbnMpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uU2Nyb2xsQiwgX3RoaXMkcHJvcHM0O1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblNjcm9sbEIgPSAoX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMpLm9uU2Nyb2xsQm90dG9tKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblNjcm9sbEIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uU2Nyb2xsQi5jYWxsKF90aGlzJHByb3BzNCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBDb21ib0JveF9kZWZpbmVQcm9wZXJ0eShDb21ib0JveF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlck1lbnVcIiwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgYW5jaG9yV2lkdGggPSBfcmVmNC5hbmNob3JXaWR0aCxcbiAgICAgICAgICBtYXhIZWlnaHQgPSBfcmVmNC5tYXhIZWlnaHQ7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczUuY2hpbGRyZW4sXG4gICAgICAgICAgY29udHJvbGxlZEZpbHRlciA9IF90aGlzJHByb3BzNS5jb250cm9sbGVkRmlsdGVyLFxuICAgICAgICAgIGlzTG9hZGluZ09wdGlvbnMgPSBfdGhpcyRwcm9wczUuaXNMb2FkaW5nT3B0aW9ucyxcbiAgICAgICAgICBtZW51U3R5bGUgPSBfdGhpcyRwcm9wczUubWVudVN0eWxlLFxuICAgICAgICAgIG9uU2Nyb2xsQm90dG9tID0gX3RoaXMkcHJvcHM1Lm9uU2Nyb2xsQm90dG9tO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVJbmRleCxcbiAgICAgICAgICB0eXBlZFZhbHVlID0gX3RoaXMkc3RhdGUudHlwZWRWYWx1ZTtcblxuICAgICAgdmFyIHZhbHVlID0gX3RoaXMuZ2V0VmFsdWUoKTtcblxuICAgICAgdmFyIGluaXRpYWxPcHRpb25zID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKGV4dGVybmFsX3JlYWN0X1tcImlzVmFsaWRFbGVtZW50XCJdKTtcbiAgICAgIHZhciBoYXNFeGFjdE1hdGNoID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJzb21lXCJdKShpbml0aWFsT3B0aW9ucywgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBpZiAob3B0aW9uLnR5cGUgPT09IE1lbnVfW1wiSGVhZGluZ1wiXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb24ucHJvcHMubGFiZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ucHJvcHMudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbi5wcm9wcy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHR5cGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ucHJvcHMubGFiZWwgPT09IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbi5wcm9wcy52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFoYXNFeGFjdE1hdGNoICYmIHZhbHVlKSB7XG4gICAgICAgIGluaXRpYWxPcHRpb25zLnVuc2hpZnQoIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDb21ib0JveF9PcHRpb24sIHtcbiAgICAgICAgICBrZXk6IFwiY3VycmVudFZhbHVlT3B0aW9uXCIsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LWN1cnJlbnQtdmFsdWUtb3B0aW9uXCI6IHZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH0gLy8gSGlnaGxpZ2h0IEFjdGl2ZVxuXG5cbiAgICAgIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50ID0gMDtcbiAgICAgIF90aGlzLmFjdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGtleXdvcmRzID0gT2JqZWN0KGZpbHRlcl9bXCJzdHJpbmdUb0tleXdvcmRzXCJdKSh0eXBlZFZhbHVlID8gdmFsdWUgOiBfdGhpcy5nZXREaXNwbGF5VmFsdWUoKSk7XG4gICAgICBfdGhpcy5vcHRpb25zID0gKGNvbnRyb2xsZWRGaWx0ZXIgPyBpbml0aWFsT3B0aW9ucyA6IGluaXRpYWxPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIGlmIChvcHRpb24ucHJvcHMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QoZmlsdGVyX1tcInRlc3RQaHJhc2VcIl0pKG9wdGlvbi5wcm9wcy5sYWJlbCwga2V5d29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbi5wcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdChmaWx0ZXJfW1widGVzdFBocmFzZVwiXSkob3B0aW9uLnByb3BzLnZhbHVlLCBrZXl3b3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCBhbGwgaGVhZGVycyBhbmQgbm9uLWludGVyYWN0aXZlIG9wdGlvbnNcbiAgICAgIH0pKS5tYXAoZnVuY3Rpb24gKG9wdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgaWYgKCFPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImhhc1wiXSkob3B0aW9uLnByb3BzLCAnYWN0aXZlJykpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgSGVhZGluZ3MgYW5kIERpdmlkZXJzXG4gICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3RpdmUgPSBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCA9PT0gYWN0aXZlSW5kZXg7XG4gICAgICAgIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50ICs9IDE7XG4gICAgICAgIHZhciBtYXRjaFJhbmdlUGhyYXNlID0gb3B0aW9uLnByb3BzLmxhYmVsICE9PSB1bmRlZmluZWQgPyBvcHRpb24ucHJvcHMubGFiZWwgOiBvcHRpb24ucHJvcHMudmFsdWU7XG4gICAgICAgIHZhciBtYXRjaFJhbmdlc1Byb3AgPSBvcHRpb24ucHJvcHMubWF0Y2hSYW5nZXM7XG4gICAgICAgIHZhciBtYXRjaFJhbmdlcyA9ICFjb250cm9sbGVkRmlsdGVyICYmIHZhbHVlICYmIChoYXNFeGFjdE1hdGNoIHx8IGluZGV4ID4gMCkgPyBPYmplY3QoZmlsdGVyX1tcImtleXdvcmRMb2NhdGlvbnNcIl0pKG1hdGNoUmFuZ2VQaHJhc2UsIGtleXdvcmRzKSB8fCB1bmRlZmluZWQgLy8ga2V5d29yZExvY2F0aW9ucyBjYW4gcmV0dXJuIGZhbHNlLCBtYXRjaFJhbmdlcyBtdXN0IGJlIGFuIGFycmF5IG9yIHVuZGVmaW5lZFxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgX3RoaXMuYWN0aXZlVmFsdWUgPSBvcHRpb24ucHJvcHMudmFsdWU7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShvcHRpb24sIHtcbiAgICAgICAgICAgIHJlZjogX3RoaXMuaGFuZGxlQWN0aXZlT3B0aW9uTW91bnQsXG4gICAgICAgICAgICBpZDogX3RoaXMuYWN0aXZlSXRlbUlkLFxuICAgICAgICAgICAgb25DbGljazogX3RoaXMuaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgICAgICAgICAgbWF0Y2hSYW5nZXM6IG1hdGNoUmFuZ2VzUHJvcCB8fCBtYXRjaFJhbmdlcyxcbiAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShvcHRpb24sIHtcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpcy5oYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgICAgICAgbWF0Y2hSYW5nZXM6IG1hdGNoUmFuZ2VzUHJvcCB8fCBtYXRjaFJhbmdlc1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChSZXN1bHRzTWVudV9kZWZhdWx0LmEsIENvbWJvQm94X2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJleHRlbmRcIl0pKHtcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIHdpZHRoOiBNYXRoLm1heChhbmNob3JXaWR0aCAhPT0gbnVsbCAmJiBhbmNob3JXaWR0aCAhPT0gdm9pZCAwID8gYW5jaG9yV2lkdGggOiAwLCAyMDApXG4gICAgICAgIH0sIG1lbnVTdHlsZSksXG4gICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0ICE9PSBudWxsICYmIG1heEhlaWdodCAhPT0gdm9pZCAwID8gbWF4SGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgICBvblNjcm9sbEJvdHRvbTogb25TY3JvbGxCb3R0b20gPyBfdGhpcy5oYW5kbGVTY3JvbGxCb3R0b20gOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nT3B0aW9uc1xuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJwaWNrXCJdKShfdGhpcy5wcm9wcywgJ2NsYXNzTmFtZScsICdub09wdGlvbnNNZXNzYWdlJywgJ2Zvb3Rlck1lc3NhZ2UnLCAnYW5pbWF0ZUxvYWRpbmcnLCAnbG9hZGluZ01lc3NhZ2UnKSksIF90aGlzLm9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgIGFuY2hvcjogbnVsbCxcbiAgICAgIHR5cGVkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgdmFsdWU6IHByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJ1xuICAgIH07XG4gICAgX3RoaXMuY29udHJvbGxlZEV4dGVybmFsbHkgPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImhhc1wiXSkocHJvcHMsICd2YWx1ZScpO1xuICAgIF90aGlzLnBvcG92ZXJJZCA9IE9iamVjdChpZF9bXCJjcmVhdGVET01JRFwiXSkoJ3BvcG92ZXInKTtcbiAgICBfdGhpcy5hY3RpdmVJdGVtSWQgPSBPYmplY3QoaWRfW1wiY3JlYXRlRE9NSURcIl0pKCdhY3RpdmUtaXRlbScpO1xuXG4gICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgQ29tYm9Cb3hfY3JlYXRlQ2xhc3MoQ29tYm9Cb3gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICBpZiAoZmFsc2UpIHt9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDb250cm9sbGVkKCkgPyB0aGlzLnByb3BzLnZhbHVlIDogdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGlzcGxheVZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERpc3BsYXlWYWx1ZSgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIHZhciB0eXBlZFZhbHVlID0gdGhpcy5zdGF0ZS50eXBlZFZhbHVlO1xuICAgICAgdmFyIGluaXRpYWxPcHRpb25zID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5maWx0ZXIoZXh0ZXJuYWxfcmVhY3RfW1wiaXNWYWxpZEVsZW1lbnRcIl0pO1xuICAgICAgdmFyIG9wdGlvbkZvclZhbHVlID0gIXR5cGVkVmFsdWUgJiYgaW5pdGlhbE9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24ucHJvcHMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiBvcHRpb24ucHJvcHMudmFsdWUgPT09IHZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcHRpb25Gb3JWYWx1ZSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uRm9yVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uRm9yVmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbkZvclZhbHVlLnByb3BzLmxhYmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9wZW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgYWN0aXZlSW5kZXg6IDBcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzMiRwcm9wcyRvbk9wZW4sIF90aGlzMiRwcm9wcztcblxuICAgICAgICAoX3RoaXMyJHByb3BzJG9uT3BlbiA9IChfdGhpczIkcHJvcHMgPSBfdGhpczIucHJvcHMpLm9uT3BlbikgPT09IG51bGwgfHwgX3RoaXMyJHByb3BzJG9uT3BlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMyJHByb3BzJG9uT3Blbi5jYWxsKF90aGlzMiRwcm9wcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xvc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wZW46IGZhbHNlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpczMkcHJvcHMkb25DbG9zZSwgX3RoaXMzJHByb3BzO1xuXG4gICAgICAgIChfdGhpczMkcHJvcHMkb25DbG9zZSA9IChfdGhpczMkcHJvcHMgPSBfdGhpczMucHJvcHMpLm9uQ2xvc2UpID09PSBudWxsIHx8IF90aGlzMyRwcm9wcyRvbkNsb3NlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpczMkcHJvcHMkb25DbG9zZS5jYWxsKF90aGlzMyRwcm9wcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXMgdGhlIGBDb21ib0JveGAuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJmb2N1c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIHZhciBfdGhpcyR0ZXh0SW5wdXQ7XG5cbiAgICAgIChfdGhpcyR0ZXh0SW5wdXQgPSB0aGlzLnRleHRJbnB1dCkgPT09IG51bGwgfHwgX3RoaXMkdGV4dElucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyR0ZXh0SW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNDb250cm9sbGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzQ29udHJvbGxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZWRFeHRlcm5hbGx5O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGRlZmF1bHRQbGFjZW1lbnQgPSB0aGlzLnByb3BzLmRlZmF1bHRQbGFjZW1lbnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhbmNob3IgPSBfdGhpcyRzdGF0ZTIuYW5jaG9yLFxuICAgICAgICAgIG9wZW4gPSBfdGhpcyRzdGF0ZTIub3BlbjtcbiAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICB2YXIgY3VycmVudERpc3BsYXlWYWx1ZSA9IHRoaXMuZ2V0RGlzcGxheVZhbHVlKCk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFRleHRfZGVmYXVsdC5hLCBDb21ib0JveF9leHRlbmRzKHtcbiAgICAgICAgYXV0b0NhcGl0YWxpemU6IFwib2ZmXCIsXG4gICAgICAgIGF1dG9Db21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgYXV0b0NvcnJlY3Q6IFwib2ZmXCIsXG4gICAgICAgIHNwZWxsQ2hlY2s6IGZhbHNlLFxuICAgICAgICBjYW5DbGVhcjogdHJ1ZSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJjb21iby1ib3hcIlxuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKSh0aGlzLnByb3BzLCAnYW5pbWF0ZUxvYWRpbmcnLCAnY2xhc3NOYW1lJywgJ2NvbnRyb2xsZWRGaWx0ZXInLCAnZGVmYXVsdFZhbHVlJywgJ2Zvb3Rlck1lc3NhZ2UnLCAnaXNMb2FkaW5nT3B0aW9ucycsICdsb2FkaW5nTWVzc2FnZScsICdtZW51U3R5bGUnLCAnbm9PcHRpb25zTWVzc2FnZScsICdvbkNsb3NlJywgJ29uT3BlbicsICdvblNjcm9sbEJvdHRvbScsICdzcGVsbENoZWNrJyksIHtcbiAgICAgICAgXCJkYXRhLXRlc3QtcG9wb3Zlci1pZFwiOiB0aGlzLnBvcG92ZXJJZCxcbiAgICAgICAgXCJkYXRhLXRlc3QtbGFiZWxcIjogY3VycmVudERpc3BsYXlWYWx1ZSxcbiAgICAgICAgXCJkYXRhLXRlc3QtdmFsdWVcIjogY3VycmVudFZhbHVlLFxuICAgICAgICBcImRhdGEtdGVzdC1vcGVuXCI6IG9wZW4gJiYgISFhbmNob3IsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMuaGFuZGxlSW5wdXRGb2N1cyxcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVJbnB1dENsaWNrLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVJbnB1dEtleURvd24sXG4gICAgICAgIGlucHV0UmVmOiB0aGlzLmhhbmRsZUlucHV0TW91bnQsXG4gICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgdmFsdWU6IGN1cnJlbnREaXNwbGF5VmFsdWUsXG4gICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IHRoaXMuYWN0aXZlSXRlbUlkLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogb3BlbixcbiAgICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnVmFsdWUgaW5wdXQnKSxcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IG9wZW4gPyB0aGlzLnBvcG92ZXJJZCA6IHVuZGVmaW5lZFxuICAgICAgfSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQb3BvdmVyX2RlZmF1bHQuYSwge1xuICAgICAgICBhbmNob3I6IGFuY2hvcixcbiAgICAgICAgYXV0b0Nsb3NlV2hlbk9mZlNjcmVlbjogdHJ1ZSxcbiAgICAgICAgY2FuQ292ZXJBbmNob3I6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0UGxhY2VtZW50OiBkZWZhdWx0UGxhY2VtZW50LFxuICAgICAgICBpZDogdGhpcy5wb3BvdmVySWQsXG4gICAgICAgIG9uUmVxdWVzdENsb3NlOiB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSxcbiAgICAgICAgb3Blbjogb3BlbiAmJiAhIWFuY2hvcixcbiAgICAgICAgcmVwb3NpdGlvbk1vZGU6IFwiZmxpcFwiXG4gICAgICB9LCB0aGlzLnJlbmRlck1lbnUpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29tYm9Cb3g7XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbkNvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X0NvbWJvQm94LCBcInByb3BUeXBlc1wiLCBDb21ib0JveF9wcm9wVHlwZXMpO1xuXG5Db21ib0JveF9kZWZpbmVQcm9wZXJ0eShDb21ib0JveF9Db21ib0JveCwgXCJkZWZhdWx0UHJvcHNcIiwgQ29tYm9Cb3hfZGVmYXVsdFByb3BzKTtcblxuQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfQ29tYm9Cb3gsIFwiT3B0aW9uXCIsIENvbWJvQm94X09wdGlvbik7XG5cbkNvbWJvQm94X2RlZmluZVByb3BlcnR5KENvbWJvQm94X0NvbWJvQm94LCBcIkRpdmlkZXJcIiwgTWVudV9bXCJEaXZpZGVyXCJdKTtcblxuQ29tYm9Cb3hfZGVmaW5lUHJvcGVydHkoQ29tYm9Cb3hfQ29tYm9Cb3gsIFwiSGVhZGluZ1wiLCBNZW51X1tcIkhlYWRpbmdcIl0pO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfQ29tYm9Cb3hfQ29tYm9Cb3ggPSAoQ29tYm9Cb3hfQ29tYm9Cb3gpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9Db21ib0JveC9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1BvcG92ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2ZpbHRlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1RleHRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9SZXN1bHRzTWVudVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMva2V5Ym9hcmRcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyIsIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEzKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay90aGVtZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaWRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfTXVsdGlzZWxlY3RfTXVsdGlzZWxlY3Q7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRGl2aWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIE1lbnVfW1wiRGl2aWRlclwiXTsgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJIZWFkaW5nXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gTWVudV9bXCJIZWFkaW5nXCJdOyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIk9wdGlvblwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIE11bHRpc2VsZWN0X09wdGlvbjsgfSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdFwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBleHRlcm5hbF9yZWFjdF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicHJvcC10eXBlc1wiXG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcHJvcF90eXBlc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwibG9kYXNoXCJcbnZhciBleHRlcm5hbF9sb2Rhc2hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiXG52YXIgaTE4bl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9NZW51XCJcbnZhciBNZW51XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9maWx0ZXJcIlxudmFyIGZpbHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvaWRcIlxudmFyIGlkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9rZXlib2FyZFwiXG52YXIga2V5Ym9hcmRfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvRHJvcGRvd25cIlxudmFyIERyb3Bkb3duXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIERyb3Bkb3duX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKERyb3Bkb3duXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0xpbmtcIlxudmFyIExpbmtfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XG52YXIgTGlua19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihMaW5rXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1Jlc3VsdHNNZW51XCJcbnZhciBSZXN1bHRzTWVudV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcbnZhciBSZXN1bHRzTWVudV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihSZXN1bHRzTWVudV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9UZXh0XCJcbnZhciBUZXh0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xudmFyIFRleHRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oVGV4dF8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NdWx0aXNlbGVjdC9PcHRpb24udHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBhY3RpdmU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZSB0aGlzIGlzIHBhc3NlZCBkb3duIGZyb20gTXVsdGlzZWxlY3QuXG4gICAqL1xuICBjb21wYWN0OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBkZXNjcmlwdGlvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkZXNjcmlwdGlvblBvc2l0aW9uOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ3JpZ2h0JywgJ2JvdHRvbSddKSxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGhpZGRlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaWNvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgbGFiZWw6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZy5pc1JlcXVpcmVkLFxuICBtYXRjaFJhbmdlczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYXJyYXlPZihleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zaGFwZSh7XG4gICAgc3RhcnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGVuZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLmlzUmVxdWlyZWRcbiAgfSkpLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBvbkNsaWNrOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBzZWxlY3RlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgc2VsZWN0ZWRBcHBlYXJhbmNlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2Vycm9yJ10pLFxuICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBzZWxlY3RlZEZvcmVncm91bmRDb2xvcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICB0cnVuY2F0ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgdmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xdKS5pc1JlcXVpcmVkXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcGFjdDogZmFsc2UsXG4gIGRlc2NyaXB0aW9uUG9zaXRpb246ICdib3R0b20nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHNlbGVjdGVkOiBmYWxzZSxcbiAgdHJ1bmNhdGU6IGZhbHNlXG59O1xuXG4vKipcbiAqIEFuIG9wdGlvbiB3aXRoaW4gYSBgTXVsdGlzZWxlY3RgLiBUaGlzIGluaGVyaXRzIGZyb21cbiAqIFtQdXJlQ29tcG9uZW50XShodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RwdXJlY29tcG9uZW50KVxuICogc28gYW55IGVsZW1lbnRzIHBhc3NlZCB0byBpdCBtdXN0IGFsc28gYmUgcHVyZS5cbiAqL1xudmFyIE9wdGlvbl9PcHRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhPcHRpb24sIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKE9wdGlvbik7XG5cbiAgZnVuY3Rpb24gT3B0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPcHRpb24pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMub25DbGljayxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzLnZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQ7XG5cbiAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNsaWNrKGUsIHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIF90aGlzLmMgPSBjO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE9wdGlvbiwgW3tcbiAgICBrZXk6IFwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKCkge1xuICAgICAgdmFyIF90aGlzJGM7XG5cbiAgICAgIChfdGhpcyRjID0gdGhpcy5jKSA9PT0gbnVsbCB8fCBfdGhpcyRjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMyLnZhbHVlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGNvbXBhY3QgPSBfdGhpcyRwcm9wczIuY29tcGFjdCxcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzMi5sYWJlbCxcbiAgICAgICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgW1widmFsdWVcIiwgXCJjaGlsZHJlblwiLCBcImNvbXBhY3RcIiwgXCJsYWJlbFwiXSk7XG5cbiAgICAgIHZhciBhcmlhUHJvcHMgPSBfZGVmaW5lUHJvcGVydHkoe30sIGNvbXBhY3QgPyAnYXJpYS1jaGVja2VkJyA6ICdhcmlhLXNlbGVjdGVkJywgdGhpcy5wcm9wcy5zZWxlY3RlZCk7XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoTWVudV9bXCJJdGVtXCJdLCBfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0LXZhbHVlXCI6IHZhbHVlLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcIm9wdGlvblwiLFxuICAgICAgICByZWY6IHRoaXMuaGFuZGxlTW91bnRcbiAgICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDbGljayxcbiAgICAgICAgc2VsZWN0YWJsZTogY29tcGFjdCxcbiAgICAgICAgc2VsZWN0YWJsZUFwcGVhcmFuY2U6IGNvbXBhY3QgPyAnY2hlY2tib3gnIDogdW5kZWZpbmVkIC8vIGFyaWFQcm9wcyBjb250YWlucyB0aGUgcmVxdWlyZWQgYXR0cmlidXRlc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvcm9sZS1oYXMtcmVxdWlyZWQtYXJpYS1wcm9wc1xuICAgICAgICAsXG4gICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICB9LCBhcmlhUHJvcHMpLCBjaGlsZHJlbiB8fCBsYWJlbCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE9wdGlvbjtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiUHVyZUNvbXBvbmVudFwiXSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShPcHRpb25fT3B0aW9uLCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoT3B0aW9uX09wdGlvbiwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgTXVsdGlzZWxlY3RfT3B0aW9uID0gKE9wdGlvbl9PcHRpb24pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0J1dHRvblwiXG52YXIgQnV0dG9uXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xudmFyIEJ1dHRvbl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihCdXR0b25fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdGhlbWVzXCJcbnZhciB0aGVtZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTXVsdGlzZWxlY3QvQ29tcGFjdFN0eWxlcy50c1xuXG5cblxudmFyIFN0eWxlZEJ1dHRvbiA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShCdXR0b25fZGVmYXVsdC5hKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ29tcGFjdFN0eWxlc19fU3R5bGVkQnV0dG9uXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFlYm05YXotMFwiXG59KShbXCImW2RhdGEtaW5saW5lXXt3aWR0aDo0MDBweDt9XCJdKTtcbnZhciBTdHlsZWRGaWx0ZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb21wYWN0U3R5bGVzX19TdHlsZWRGaWx0ZXJcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWVibTlhei0xXCJcbn0pKFtcInBhZGRpbmc6XCIsIFwiO21pbi13aWR0aDoxNjBweDtcIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnOHB4JyxcbiAgcHJpc21hOiAnMTBweCAxNnB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckcGxhY2VtZW50Jywge1xuICBhYm92ZToge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci10b3A6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXIpLFxuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLXRvcDoxcHggc29saWQgXCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5uZXV0cmFsMjAwKVxuICB9LFxuICBiZWxvdzoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1ib3R0b206XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXIpLFxuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLWJvdHRvbToxcHggc29saWQgXCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5uZXV0cmFsMjAwKVxuICB9XG59KSk7XG52YXIgU3R5bGVkQ291bnQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuc3Bhbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ29tcGFjdFN0eWxlc19fU3R5bGVkQ291bnRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWVibTlhei0yXCJcbn0pKFtcInBhZGRpbmctcmlnaHQ6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1F1YXJ0ZXIsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nWFNtYWxsXG59KSk7XG52YXIgU3R5bGVkVG9nZ2xlQWxsQ29udHJvbHMgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDb21wYWN0U3R5bGVzX19TdHlsZWRUb2dnbGVBbGxDb250cm9sc1wiLFxuICBjb21wb25lbnRJZDogXCJzYy0xZWJtOWF6LTNcIlxufSkoW1wicGFkZGluZzpcIiwgXCI7XCIsIFwiXCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogXCI1cHggOHB4XCIsXG4gIHByaXNtYTogJzEwcHggMTZweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHBsYWNlbWVudCcsIHtcbiAgYWJvdmU6IHtcbiAgICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItdG9wOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyKSxcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci10b3A6MXB4IHNvbGlkIFwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubmV1dHJhbDIwMClcbiAgfSxcbiAgYmVsb3c6IHtcbiAgICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItYm90dG9tOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyKSxcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1ib3R0b206MXB4IHNvbGlkIFwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubmV1dHJhbDIwMClcbiAgfVxufSkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NdWx0aXNlbGVjdC9Db21wYWN0LnRzeFxuZnVuY3Rpb24gQ29tcGFjdF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IENvbXBhY3RfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IENvbXBhY3RfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIENvbXBhY3RfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gQ29tcGFjdF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9leHRlbmRzKCkgeyBDb21wYWN0X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gQ29tcGFjdF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBDb21wYWN0X2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIENvbXBhY3RfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIENvbXBhY3RfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBDb21wYWN0X3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBDb21wYWN0X3NldFByb3RvdHlwZU9mKG8sIHApIHsgQ29tcGFjdF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gQ29tcGFjdF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBDb21wYWN0X2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBDb21wYWN0X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IENvbXBhY3RfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IENvbXBhY3RfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIENvbXBhY3RfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIENvbXBhY3RfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChDb21wYWN0X3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBDb21wYWN0X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBDb21wYWN0X2dldFByb3RvdHlwZU9mKG8pIHsgQ29tcGFjdF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBDb21wYWN0X2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIENvbXBhY3RfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIENvbXBhY3RfcHJvcFR5cGVzID0ge1xuICBhbGxvd05ld1ZhbHVlczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgYW5pbWF0ZUxvYWRpbmc6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBjb250cm9sbGVkRmlsdGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBkZWZhdWx0UGxhY2VtZW50OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2Fib3ZlJywgJ2JlbG93JywgJ3ZlcnRpY2FsJ10pLFxuICBkZWZhdWx0VmFsdWVzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheSxcbiAgZGVzY3JpYmVkQnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGVycm9yOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBmb290ZXJNZXNzYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBpbmxpbmU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGlucHV0UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBpc0xvYWRpbmdPcHRpb25zOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBsYWJlbGxlZEJ5OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGxvYWRpbmdNZXNzYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBtZW51U3R5bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdCxcbiAgbmFtZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBub09wdGlvbnNNZXNzYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBvbkNoYW5nZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25DbG9zZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25GaWx0ZXJDaGFuZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uT3BlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25TY3JvbGxCb3R0b206IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIHRhYkNvbmZpcm1zTmV3VmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHZhbHVlczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYXJyYXlcbn07XG52YXIgQ29tcGFjdF9kZWZhdWx0UHJvcHMgPSB7XG4gIGFsbG93TmV3VmFsdWVzOiBmYWxzZSxcbiAgYW5pbWF0ZUxvYWRpbmc6IGZhbHNlLFxuICBkZWZhdWx0UGxhY2VtZW50OiAndmVydGljYWwnLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGlubGluZTogZmFsc2UsXG4gIGlzTG9hZGluZ09wdGlvbnM6IGZhbHNlLFxuICBtZW51U3R5bGU6IHt9LFxuICBub09wdGlvbnNNZXNzYWdlOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnTm8gbWF0Y2hlcycpLFxuICBwbGFjZWhvbGRlcjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1NlbGVjdC4uLicpLFxuICB0YWJDb25maXJtc05ld1ZhbHVlOiBmYWxzZVxufTsgLy8gVFM6IG5vdCB0eXBlZCBjb250cm9sbGVkL3VuY29udHJvbGxlZCwgaGFuZGxlZCBieSBNdWx0aXNlbGVjdCB3cmFwcGVyIGNvbXBvbmVudFxuXG5mdW5jdGlvbiBpc09wdGlvbihjaGlsZCkge1xuICByZXR1cm4gY2hpbGQgJiYgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKGNoaWxkLnByb3BzLCAndmFsdWUnKTtcbn1cblxudmFyIENvbXBhY3RfQ29tcGFjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBDb21wYWN0X2luaGVyaXRzKENvbXBhY3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBDb21wYWN0X2NyZWF0ZVN1cGVyKENvbXBhY3QpO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgQ29tcGFjdFByb3BzQmFzZVxuICBmdW5jdGlvbiBDb21wYWN0KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgQ29tcGFjdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wYWN0KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udHJvbGxlZEV4dGVybmFsbHlcIiwgdm9pZCAwKTtcblxuICAgIENvbXBhY3RfZGVmaW5lUHJvcGVydHkoQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFjdGl2ZUl0ZW1JZFwiLCB2b2lkIDApO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGlzcGxheWVkVmFsdWVzXCIsIHZvaWQgMCk7XG5cbiAgICBDb21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhY3RpdmVWYWx1ZVwiLCB2b2lkIDApO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXZhaWxhYmxlT3B0aW9uQ291bnRcIiwgdm9pZCAwKTtcblxuICAgIENvbXBhY3RfZGVmaW5lUHJvcGVydHkoQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNlbGVjdGVkT3B0aW9uQ291bnRcIiwgdm9pZCAwKTtcblxuICAgIENvbXBhY3RfZGVmaW5lUHJvcGVydHkoQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVNlbGVjdEFsbFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJGdldEN1cnJlbnRWYWx1ZSwgX3RoaXMkcHJvcHMkb25DaGFuZ2UsIF90aGlzJHByb3BzMjtcblxuICAgICAgdmFyIHZhbHVlcyA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1widW5pcVwiXSkoKChfdGhpcyRnZXRDdXJyZW50VmFsdWUgPSBfdGhpcy5nZXRDdXJyZW50VmFsdWVzKCkpICE9PSBudWxsICYmIF90aGlzJGdldEN1cnJlbnRWYWx1ZSAhPT0gdm9pZCAwID8gX3RoaXMkZ2V0Q3VycmVudFZhbHVlIDogW10pLmNvbmNhdChfdGhpcy5kaXNwbGF5ZWRWYWx1ZXMpKTtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wcy5uYW1lLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW47XG5cbiAgICAgIGlmICghX3RoaXMuaXNDb250cm9sbGVkKCkpIHtcbiAgICAgICAgdmFsdWVzID0gZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICByZXR1cm4gaXNPcHRpb24oY2hpbGQpICYmIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaW5jbHVkZXNcIl0pKHZhbHVlcywgY2hpbGQucHJvcHMudmFsdWUpICYmICFjaGlsZC5wcm9wcy5kaXNhYmxlZDtcbiAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgIHJldHVybiBjaGlsZC5wcm9wcy52YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHZhbHVlczogdmFsdWVzXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAoX3RoaXMkcHJvcHMkb25DaGFuZ2UgPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DaGFuZ2UuY2FsbChfdGhpcyRwcm9wczIsIGUsIHtcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xlYXJBbGxcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNoYW5nZTIsIF90aGlzJHByb3BzMztcblxuICAgICAgLy8gQ2xlYXIgdGhlIGZpbHRlcmVkIGl0ZW1zLCBpdGVtcyB3aGVuIGZpbHRlcmluZy4gRWxzZSBjbGVhciBhbGwgdGhlIGl0ZW1zLlxuICAgICAgdmFyIHZhbHVlcyA9IF90aGlzLnN0YXRlLmZpbHRlcktleXdvcmQgPyBleHRlcm5hbF9sb2Rhc2hfW1wid2l0aG91dFwiXS5hcHBseSh2b2lkIDAsIFtfdGhpcy5nZXRDdXJyZW50VmFsdWVzKCldLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXMuZGlzcGxheWVkVmFsdWVzKSkpIDogW107XG4gICAgICB2YXIgbmFtZSA9IF90aGlzLnByb3BzLm5hbWU7XG5cbiAgICAgIGlmICghX3RoaXMuaXNDb250cm9sbGVkKCkpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHZhbHVlczogdmFsdWVzXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAoX3RoaXMkcHJvcHMkb25DaGFuZ2UyID0gKF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzKS5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNoYW5nZTIuY2FsbChfdGhpcyRwcm9wczMsIGUsIHtcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVGV4dEtleURvd25cIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNC5jaGlsZHJlbixcbiAgICAgICAgICBvblNjcm9sbEJvdHRvbSA9IF90aGlzJHByb3BzNC5vblNjcm9sbEJvdHRvbSxcbiAgICAgICAgICB0YWJDb25maXJtc05ld1ZhbHVlID0gX3RoaXMkcHJvcHM0LnRhYkNvbmZpcm1zTmV3VmFsdWU7XG4gICAgICB2YXIgZXZlbnRLZXlDb2RlID0gT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoZXZlbnRLZXlDb2RlID09PSAndGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKHRhYkNvbmZpcm1zTmV3VmFsdWUgJiYgIU9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaXNVbmRlZmluZWRcIl0pKF90aGlzLmFjdGl2ZVZhbHVlKSAmJiBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCA8PSAxKSB7XG4gICAgICAgICAgX3RoaXMudG9nZ2xlVmFsdWUoZSwgX3RoaXMuYWN0aXZlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRLZXlDb2RlID09PSAnZG93bicpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3RpdmVJbmRleDogTWF0aC5taW4oc3RhdGUuYWN0aXZlSW5kZXggKyAxLCBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCAtIDEpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuICYmIG9uU2Nyb2xsQm90dG9tKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGdldEN1cnJlbnRWYWx1ZTI7XG5cbiAgICAgICAgICB2YXIgYmVmb3JlTGFzdENoaWxkID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0udG9BcnJheShjaGlsZHJlbikubGVuZ3RoIC0gKDIgKyAoKF90aGlzJGdldEN1cnJlbnRWYWx1ZTIgPSBfdGhpcy5nZXRDdXJyZW50VmFsdWVzKCkpICE9PSBudWxsICYmIF90aGlzJGdldEN1cnJlbnRWYWx1ZTIgIT09IHZvaWQgMCA/IF90aGlzJGdldEN1cnJlbnRWYWx1ZTIgOiBbXSkubGVuZ3RoKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5hY3RpdmVJbmRleCA9PT0gYmVmb3JlTGFzdENoaWxkKSB7XG4gICAgICAgICAgICBvblNjcm9sbEJvdHRvbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRLZXlDb2RlID09PSAndXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZlSW5kZXg6IE1hdGgubWF4KHN0YXRlLmFjdGl2ZUluZGV4IC0gMSwgMClcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50S2V5Q29kZSA9PT0gJ2VudGVyJyAmJiAhT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc1VuZGVmaW5lZFwiXSkoX3RoaXMuYWN0aXZlVmFsdWUpICYmIF90aGlzLnN0YXRlLm9wZW4pIHtcbiAgICAgICAgX3RoaXMudG9nZ2xlVmFsdWUoZSwgX3RoaXMuYWN0aXZlVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTWVudU9wdGlvbkNsaWNrXCIsIGZ1bmN0aW9uIChlLCBfcmVmKSB7XG4gICAgICB2YXIgdmFsdWUgPSBfcmVmLnZhbHVlO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBfdGhpcy50b2dnbGVWYWx1ZShlLCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBDb21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVUZXh0Q2hhbmdlXCIsIGZ1bmN0aW9uIChlLCBfcmVmMikge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRmlsdGVyQywgX3RoaXMkcHJvcHM1O1xuXG4gICAgICB2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmaWx0ZXJLZXl3b3JkOiB2YWx1ZSxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgYWN0aXZlSW5kZXg6IDBcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25GaWx0ZXJDID0gKF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzKS5vbkZpbHRlckNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25GaWx0ZXJDID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkZpbHRlckMuY2FsbChfdGhpcyRwcm9wczUsIGUsIHtcbiAgICAgICAga2V5d29yZDogdmFsdWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVGV4dEZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdGV4dEhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIENvbXBhY3RfZGVmaW5lUHJvcGVydHkoQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVRleHRCbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdGV4dEhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBDb21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVSZXF1ZXN0T3BlblwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJGdldEN1cnJlbnRWYWx1ZTMsIF90aGlzJHByb3BzJG9uRmlsdGVyQzIsIF90aGlzJHByb3BzNztcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgICAgdG9wVmFsdWVzOiAoX3RoaXMkZ2V0Q3VycmVudFZhbHVlMyA9IF90aGlzLmdldEN1cnJlbnRWYWx1ZXMoKSkgIT09IG51bGwgJiYgX3RoaXMkZ2V0Q3VycmVudFZhbHVlMyAhPT0gdm9pZCAwID8gX3RoaXMkZ2V0Q3VycmVudFZhbHVlMyA6IFtdLFxuICAgICAgICBmaWx0ZXJLZXl3b3JkOiAnJ1xuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25PcGVuLCBfdGhpcyRwcm9wczY7XG5cbiAgICAgICAgKF90aGlzJHByb3BzJG9uT3BlbiA9IChfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcykub25PcGVuKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbk9wZW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uT3Blbi5jYWxsKF90aGlzJHByb3BzNik7XG4gICAgICB9KTtcblxuICAgICAgKF90aGlzJHByb3BzJG9uRmlsdGVyQzIgPSAoX3RoaXMkcHJvcHM3ID0gX3RoaXMucHJvcHMpLm9uRmlsdGVyQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkZpbHRlckMyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkZpbHRlckMyLmNhbGwoX3RoaXMkcHJvcHM3LCBlLCB7XG4gICAgICAgIGtleXdvcmQ6ICcnXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIENvbXBhY3RfZGVmaW5lUHJvcGVydHkoQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlcXVlc3RDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wZW46IGZhbHNlXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkNsb3NlLCBfdGhpcyRwcm9wczg7XG5cbiAgICAgICAgKF90aGlzJHByb3BzJG9uQ2xvc2UgPSAoX3RoaXMkcHJvcHM4ID0gX3RoaXMucHJvcHMpLm9uQ2xvc2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQ2xvc2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2xvc2UuY2FsbChfdGhpcyRwcm9wczgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBDb21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTY3JvbGxCb3R0b21cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnN0YXRlLm9wZW4gJiYgIV90aGlzLnByb3BzLmlzTG9hZGluZ09wdGlvbnMpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uU2Nyb2xsQiwgX3RoaXMkcHJvcHM5O1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvblNjcm9sbEIgPSAoX3RoaXMkcHJvcHM5ID0gX3RoaXMucHJvcHMpLm9uU2Nyb2xsQm90dG9tKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvblNjcm9sbEIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uU2Nyb2xsQi5jYWxsKF90aGlzJHByb3BzOSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBDb21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVBY3RpdmVPcHRpb25Nb3VudFwiLCBmdW5jdGlvbiAoYykge1xuICAgICAgYyA9PT0gbnVsbCB8fCBjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtcbiAgICB9KTtcblxuICAgIENvbXBhY3RfZGVmaW5lUHJvcGVydHkoQ29tcGFjdF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlck1lbnVcIiwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgYW5jaG9yV2lkdGggPSBfcmVmMy5hbmNob3JXaWR0aCxcbiAgICAgICAgICBtYXhIZWlnaHQgPSBfcmVmMy5tYXhIZWlnaHQsXG4gICAgICAgICAgcGxhY2VtZW50ID0gX3JlZjMucGxhY2VtZW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgZmlsdGVyS2V5d29yZCA9IF90aGlzJHN0YXRlLmZpbHRlcktleXdvcmQsXG4gICAgICAgICAgdGV4dEhhc0ZvY3VzID0gX3RoaXMkc3RhdGUudGV4dEhhc0ZvY3VzLFxuICAgICAgICAgIHRvcFZhbHVlcyA9IF90aGlzJHN0YXRlLnRvcFZhbHVlcztcbiAgICAgIHZhciBfdGhpcyRwcm9wczEwID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWxsb3dOZXdWYWx1ZXMgPSBfdGhpcyRwcm9wczEwLmFsbG93TmV3VmFsdWVzLFxuICAgICAgICAgIGNvbnRyb2xsZWRGaWx0ZXIgPSBfdGhpcyRwcm9wczEwLmNvbnRyb2xsZWRGaWx0ZXI7XG5cbiAgICAgIHZhciBjdXJyZW50VmFsdWVzID0gX3RoaXMuZ2V0Q3VycmVudFZhbHVlcygpO1xuXG4gICAgICBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCA9IDA7XG4gICAgICBfdGhpcy5zZWxlY3RlZE9wdGlvbkNvdW50ID0gMDtcbiAgICAgIF90aGlzLmFjdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdmFyIGZvdW5kRXhhY3RNYXRjaDtcbiAgICAgIHZhciBjaGlsZHJlblRvcENvdW50ID0gMDtcbiAgICAgIHZhciBjaGlsZHJlbiA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoX3RoaXMucHJvcHMuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBpdGVtLCBpKSB7XG4gICAgICAgIC8vIGlnbm9yZSBIZWFkaW5ncyBhbmQgRGl2aWRlcnNcbiAgICAgICAgaWYgKCFpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0gLy8gRmluZCBvdXQgaWYgdGhlIHNlYXJjaCBzdHJpbmcgZXhhY3RseSBtYXRjaGVzIGEgdmFsdWVcblxuXG4gICAgICAgIGlmIChpdGVtLnByb3BzLnZhbHVlID09PSBfdGhpcy5zdGF0ZS5maWx0ZXJLZXl3b3JkKSB7XG4gICAgICAgICAgZm91bmRFeGFjdE1hdGNoID0gdHJ1ZTtcbiAgICAgICAgfSAvLyBGb3JtYXQgdGhlIE1lbnUuSXRlbVxuXG5cbiAgICAgICAgdmFyIGNsb25lZEl0ZW0gPSAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoaXRlbSwge1xuICAgICAgICAgIGtleTogaXRlbS5rZXkgfHwgaSxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpcy5oYW5kbGVNZW51T3B0aW9uQ2xpY2ssXG4gICAgICAgICAgc2VsZWN0ZWQ6IGN1cnJlbnRWYWx1ZXMgJiYgY3VycmVudFZhbHVlcy5pbmRleE9mKGl0ZW0ucHJvcHMudmFsdWUpID49IDAsXG4gICAgICAgICAgY29tcGFjdDogdHJ1ZSxcbiAgICAgICAgICByb2xlOiAnb3B0aW9uJ1xuICAgICAgICB9KTsgLy8gTW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIGl0ZW1zIHRvIHRoZSB0b3Agc2VjdGlvblxuXG4gICAgICAgIGlmICh0b3BWYWx1ZXMgJiYgdG9wVmFsdWVzLmluZGV4T2YoaXRlbS5wcm9wcy52YWx1ZSkgPj0gMCkge1xuICAgICAgICAgIGlmIChjaGlsZHJlblRvcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBhY2Muc3BsaWNlKGNoaWxkcmVuVG9wQ291bnQsIDAsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChNZW51X1tcIkRpdmlkZXJcIl0sIHtcbiAgICAgICAgICAgICAga2V5OiBcInRvcERpdmlkZXJcIlxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjYy5zcGxpY2UoY2hpbGRyZW5Ub3BDb3VudCwgMCwgY2xvbmVkSXRlbSk7XG4gICAgICAgICAgY2hpbGRyZW5Ub3BDb3VudCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKGNsb25lZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTsgLy8gQWRkIG1pc3NpbmcgaXRlbXNcblxuICAgICAgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJmb3JFYWNoUmlnaHRcIl0pKGN1cnJlbnRWYWx1ZXMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgbWF0Y2hlZEl0ZW0gPSBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImZpbmRcIl0pKGNoaWxkcmVuLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpc09wdGlvbihpdGVtKSAmJiBpdGVtLnByb3BzICYmIGl0ZW0ucHJvcHMudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIW1hdGNoZWRJdGVtKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBfdGhpcy5zdGF0ZS5maWx0ZXJLZXl3b3JkKSB7XG4gICAgICAgICAgICBmb3VuZEV4YWN0TWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpc1RvcFZhbHVlID0gdG9wVmFsdWVzICYmIHRvcFZhbHVlcy5pbmRleE9mKHZhbHVlKSA+PSAwO1xuICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpc1RvcFZhbHVlID8gMCA6IGNoaWxkcmVuVG9wQ291bnQgKyAxLCAwLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoTXVsdGlzZWxlY3RfT3B0aW9uLCB7XG4gICAgICAgICAgICBsYWJlbDogU3RyaW5nKHZhbHVlKSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGtleTogXCJtaXNzaW5nLXZhbHVlLVwiLmNvbmNhdCh2YWx1ZSksXG4gICAgICAgICAgICBvbkNsaWNrOiBfdGhpcy5oYW5kbGVNZW51T3B0aW9uQ2xpY2ssXG4gICAgICAgICAgICBjb21wYWN0OiB0cnVlLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBpZiAoaXNUb3BWYWx1ZSkge1xuICAgICAgICAgICAgY2hpbGRyZW5Ub3BDb3VudCArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7IC8vIEZpbHRlciB0aGUgaXRlbXNcblxuICAgICAgdmFyIGtleXdvcmRzID0gT2JqZWN0KGZpbHRlcl9bXCJzdHJpbmdUb0tleXdvcmRzXCJdKShmaWx0ZXJLZXl3b3JkKTtcbiAgICAgIGNoaWxkcmVuID0gY29udHJvbGxlZEZpbHRlciA/IGNoaWxkcmVuIDogY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KGZpbHRlcl9bXCJ0ZXN0UGhyYXNlXCJdKShvcHRpb24ucHJvcHMubGFiZWwsIGtleXdvcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIGFsbCBoZWFkZXJzIGFuZCBub24taW50ZXJhY3RpdmUgb3B0aW9uc1xuICAgICAgfSkgLy8gaGlnaGxpZ2h0IHRoZSBtYXRjaGVkIHRleHRcbiAgICAgIC5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBpZiAoIWlzT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICB9IC8vIGhpZ2hsaWdodCBtYXRjaGVkIHRleHRcblxuXG4gICAgICAgIHZhciBtYXRjaFJhbmdlcyA9IGtleXdvcmRzICYmIE9iamVjdChmaWx0ZXJfW1wia2V5d29yZExvY2F0aW9uc1wiXSkob3B0aW9uLnByb3BzLmxhYmVsLCBrZXl3b3Jkcyk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkob3B0aW9uLCB7XG4gICAgICAgICAgbWF0Y2hSYW5nZXM6IG1hdGNoUmFuZ2VzIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH0pOyAvLyBBZGQgdGhlIG9wdGlvbiB0byBhZGQgdGhlIG5ldyB2YWx1ZVxuXG4gICAgICBpZiAoYWxsb3dOZXdWYWx1ZXMgJiYgIWZvdW5kRXhhY3RNYXRjaCAmJiBmaWx0ZXJLZXl3b3JkKSB7XG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShjaGlsZHJlblRvcENvdW50LCAwLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoTXVsdGlzZWxlY3RfT3B0aW9uLCB7XG4gICAgICAgICAgbGFiZWw6IFwiXCIuY29uY2F0KGZpbHRlcktleXdvcmQsIFwiIChuZXcgdmFsdWUpXCIpLFxuICAgICAgICAgIHZhbHVlOiBmaWx0ZXJLZXl3b3JkLFxuICAgICAgICAgIGtleTogXCJuZXdWYWx1ZVwiLFxuICAgICAgICAgIGNvbXBhY3Q6IHRydWUsXG4gICAgICAgICAgb25DbGljazogX3RoaXMuaGFuZGxlTWVudU9wdGlvbkNsaWNrXG4gICAgICAgIH0pKTtcbiAgICAgIH0gLy8gSGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCBJdGVtcyBhbmQgcmVtb3ZlIGhpZGRlblxuXG5cbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGl0ZW0pIHtcbiAgICAgICAgLy8gaWdub3JlIERpdmlkZXJzICYgSGVhZGluZ3NcbiAgICAgICAgaWYgKCFpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0gLy8gSWdub3JlIGFueSBoaWRkZW4gaXRlbXNcblxuXG4gICAgICAgIGlmIChpdGVtLnByb3BzICYmIGl0ZW0ucHJvcHMuaGlkZGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3RpdmUgPSBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXg7XG4gICAgICAgIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50ICs9IDE7XG4gICAgICAgIF90aGlzLnNlbGVjdGVkT3B0aW9uQ291bnQgKz0gaXRlbS5wcm9wcy5zZWxlY3RlZCA/IDEgOiAwO1xuXG4gICAgICAgIGlmICghYWN0aXZlIHx8ICF0ZXh0SGFzRm9jdXMpIHtcbiAgICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpdGVtLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgX3RoaXMuYWN0aXZlVmFsdWUgPSBpdGVtLnByb3BzLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNsb25lZEl0ZW0gPSAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoaXRlbSwge1xuICAgICAgICAgIGFjdGl2ZTogYWN0aXZlLFxuICAgICAgICAgIGlkOiBfdGhpcy5hY3RpdmVJdGVtSWQsXG4gICAgICAgICAgcmVmOiBfdGhpcy5oYW5kbGVBY3RpdmVPcHRpb25Nb3VudFxuICAgICAgICB9KTtcbiAgICAgICAgYWNjLnB1c2goY2xvbmVkSXRlbSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgICBfdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSBjaGlsZHJlbi5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgaXRlbSkge1xuICAgICAgICBpZiAoaXNPcHRpb24oaXRlbSkpIHtcbiAgICAgICAgICBhY2MucHVzaChpdGVtLnByb3BzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFJlc3VsdHNNZW51X2RlZmF1bHQuYSwgQ29tcGFjdF9leHRlbmRzKHtcbiAgICAgICAgY2hpbGRyZW5TdGFydDogX3RoaXMucmVuZGVyQ29udHJvbHMoe1xuICAgICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgICAgIGhhc0NoaWxkcmVuOiAhIWNoaWxkcmVuLmxlbmd0aFxuICAgICAgICB9KSxcbiAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQgIT09IG51bGwgJiYgcGxhY2VtZW50ICE9PSB2b2lkIDAgPyBwbGFjZW1lbnQgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0ICE9PSBudWxsICYmIG1heEhlaWdodCAhPT0gdm9pZCAwID8gbWF4SGVpZ2h0IDogdW5kZWZpbmVkLFxuICAgICAgICBvblNjcm9sbEJvdHRvbTogX3RoaXMucHJvcHMub25TY3JvbGxCb3R0b20gPyBfdGhpcy5oYW5kbGVTY3JvbGxCb3R0b20gOiB1bmRlZmluZWQsXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwicmVzdWx0cy1tZW51XCIsXG4gICAgICAgIGlzTG9hZGluZzogX3RoaXMucHJvcHMuaXNMb2FkaW5nT3B0aW9uc1xuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJwaWNrXCJdKShfdGhpcy5wcm9wcywgJ25vT3B0aW9uc01lc3NhZ2UnLCAnZm9vdGVyTWVzc2FnZScsICdhbmltYXRlTG9hZGluZycsICdsb2FkaW5nTWVzc2FnZScpLCB7XG4gICAgICAgIHN0eWxlOiBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImV4dGVuZFwiXSkoe1xuICAgICAgICAgIHdpZHRoOiBNYXRoLm1heChhbmNob3JXaWR0aCAhPT0gbnVsbCAmJiBhbmNob3JXaWR0aCAhPT0gdm9pZCAwID8gYW5jaG9yV2lkdGggOiAwLCAyMDApXG4gICAgICAgIH0sIF90aGlzLnByb3BzLm1lbnVTdHlsZSlcbiAgICAgIH0pLCBjaGlsZHJlbik7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgZmlsdGVyS2V5d29yZDogJycsXG4gICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIHRleHRIYXNGb2N1czogZmFsc2UsXG4gICAgICB0b3BWYWx1ZXM6IFtdLFxuICAgICAgdmFsdWVzOiBwcm9wcy5kZWZhdWx0VmFsdWVzIHx8IFtdXG4gICAgfTtcbiAgICBfdGhpcy5jb250cm9sbGVkRXh0ZXJuYWxseSA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiaGFzXCJdKShwcm9wcywgJ3ZhbHVlcycpO1xuICAgIF90aGlzLmRpc3BsYXllZFZhbHVlcyA9IFtdO1xuICAgIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50ID0gMDtcbiAgICBfdGhpcy5zZWxlY3RlZE9wdGlvbkNvdW50ID0gMDtcblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIF90aGlzLmFjdGl2ZUl0ZW1JZCA9IE9iamVjdChpZF9bXCJjcmVhdGVET01JRFwiXSkoJ2FjdGl2ZS1pdGVtJyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgQ29tcGFjdF9jcmVhdGVDbGFzcyhDb21wYWN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgICBpZiAoZmFsc2UpIHt9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEN1cnJlbnRWYWx1ZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q3VycmVudFZhbHVlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ29udHJvbGxlZCgpID8gdGhpcy5wcm9wcy52YWx1ZXMgOiB0aGlzLnN0YXRlLnZhbHVlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNDb250cm9sbGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzQ29udHJvbGxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZWRFeHRlcm5hbGx5O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b2dnbGVWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b2dnbGVWYWx1ZShlLCB2YWx1ZSkge1xuICAgICAgdmFyIF90aGlzJGdldEN1cnJlbnRWYWx1ZTQsIF90aGlzJHByb3BzJG9uQ2hhbmdlMywgX3RoaXMkcHJvcHMxMTtcblxuICAgICAgdmFyIHZhbHVlcyA9IChfdGhpcyRnZXRDdXJyZW50VmFsdWU0ID0gdGhpcy5nZXRDdXJyZW50VmFsdWVzKCkpICE9PSBudWxsICYmIF90aGlzJGdldEN1cnJlbnRWYWx1ZTQgIT09IHZvaWQgMCA/IF90aGlzJGdldEN1cnJlbnRWYWx1ZTQgOiBbXTtcbiAgICAgIHZhciBjdXJyZW50SW5kZXggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICAgIHZhciBuZXdWYWx1ZXM7XG5cbiAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gMCkge1xuICAgICAgICBuZXdWYWx1ZXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHZhbHVlcy5zbGljZSgwLCBjdXJyZW50SW5kZXgpKSwgX3RvQ29uc3VtYWJsZUFycmF5KHZhbHVlcy5zbGljZShjdXJyZW50SW5kZXggKyAxKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWVzID0gdmFsdWVzLmNvbmNhdChbdmFsdWVdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmlzQ29udHJvbGxlZCgpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHZhbHVlczogbmV3VmFsdWVzLFxuICAgICAgICAgIG9wZW46IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZTMgPSAoX3RoaXMkcHJvcHMxMSA9IHRoaXMucHJvcHMpLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNoYW5nZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2hhbmdlMy5jYWxsKF90aGlzJHByb3BzMTEsIGUsIHtcbiAgICAgICAgdmFsdWVzOiBuZXdWYWx1ZXMsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDb250cm9sc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDb250cm9scyhfcmVmNCkge1xuICAgICAgdmFyIGhhc0NoaWxkcmVuID0gX3JlZjQuaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgcGxhY2VtZW50ID0gX3JlZjQucGxhY2VtZW50O1xuICAgICAgdmFyIHNlbGVjdENvbnRyb2xzID0gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFRvZ2dsZUFsbENvbnRyb2xzLCB7XG4gICAgICAgICRwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgICAga2V5OiBcInNlbGVjdEFsbFwiXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoTGlua19kZWZhdWx0LmEsIHtcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVTZWxlY3RBbGwsXG4gICAgICAgIGRpc2FibGVkOiAhKHRoaXMuYXZhaWxhYmxlT3B0aW9uQ291bnQgLSB0aGlzLnNlbGVjdGVkT3B0aW9uQ291bnQpLFxuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInNlbGVjdC1hbGxcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBtYXJnaW5SaWdodDogMjBcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcy5zdGF0ZS5maWx0ZXJLZXl3b3JkID8gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1NlbGVjdCBBbGwgTWF0Y2hlcycpIDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1NlbGVjdCBBbGwnKSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChMaW5rX2RlZmF1bHQuYSwge1xuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZUNsZWFyQWxsLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuc2VsZWN0ZWRPcHRpb25Db3VudCxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJjbGVhci1hbGxcIlxuICAgICAgfSwgdGhpcy5zdGF0ZS5maWx0ZXJLZXl3b3JkID8gT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0NsZWFyIEFsbCBNYXRjaGVzJykgOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnQ2xlYXIgQWxsJykpKTtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L3RhYmluZGV4LW5vLXBvc2l0aXZlICovXG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBrZXk6IFwiY29udHJvbHNcIlxuICAgICAgfSwgcGxhY2VtZW50ID09PSAnYWJvdmUnICYmIGhhc0NoaWxkcmVuICYmIHNlbGVjdENvbnRyb2xzLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkRmlsdGVyLCB7XG4gICAgICAgIGtleTogXCJmaWx0ZXJcIixcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJmaWx0ZXJcIixcbiAgICAgICAgJHBsYWNlbWVudDogcGxhY2VtZW50XG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGV4dF9kZWZhdWx0LmEsIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUuZmlsdGVyS2V5d29yZCxcbiAgICAgICAgYXBwZWFyYW5jZTogXCJzZWFyY2hcIixcbiAgICAgICAgYXV0b0NhcGl0YWxpemU6IFwib2ZmXCIsXG4gICAgICAgIGF1dG9Db21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgYXV0b0NvcnJlY3Q6IFwib2ZmXCIsXG4gICAgICAgIHNwZWxsQ2hlY2s6IGZhbHNlLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVUZXh0Q2hhbmdlLFxuICAgICAgICBvbktleURvd246IHRoaXMuaGFuZGxlVGV4dEtleURvd24sXG4gICAgICAgIG9uRm9jdXM6IHRoaXMuaGFuZGxlVGV4dEZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlVGV4dEJsdXIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnZmlsdGVyJyksXG4gICAgICAgIHRhYkluZGV4OiAxLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0ZpbHRlcicpLFxuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiB0aGlzLmFjdGl2ZUl0ZW1JZCxcbiAgICAgICAgaW5wdXRSZWY6IHRoaXMucHJvcHMuaW5wdXRSZWZcbiAgICAgIH0pKSwgcGxhY2VtZW50ICE9PSAnYWJvdmUnICYmIGhhc0NoaWxkcmVuICYmIHNlbGVjdENvbnRyb2xzKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUganN4LWExMXkvdGFiaW5kZXgtbm8tcG9zaXRpdmUgKi9cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRnZXRDdXJyZW50VmFsdWU1O1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczEyLmNoaWxkcmVuLFxuICAgICAgICAgIGRlZmF1bHRQbGFjZW1lbnQgPSBfdGhpcyRwcm9wczEyLmRlZmF1bHRQbGFjZW1lbnQsXG4gICAgICAgICAgZGVzY3JpYmVkQnkgPSBfdGhpcyRwcm9wczEyLmRlc2NyaWJlZEJ5LFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMxMi5kaXNhYmxlZCxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMTIuZXJyb3IsXG4gICAgICAgICAgaW5saW5lID0gX3RoaXMkcHJvcHMxMi5pbmxpbmUsXG4gICAgICAgICAgbGFiZWxsZWRCeSA9IF90aGlzJHByb3BzMTIubGFiZWxsZWRCeSxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMTIucGxhY2Vob2xkZXIsXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IENvbXBhY3Rfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMxMiwgW1wiY2hpbGRyZW5cIiwgXCJkZWZhdWx0UGxhY2VtZW50XCIsIFwiZGVzY3JpYmVkQnlcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiaW5saW5lXCIsIFwibGFiZWxsZWRCeVwiLCBcInBsYWNlaG9sZGVyXCJdKTsgLy8gR2VuZXJhdGUgYnV0dG9uTGFiZWxzXG5cblxuICAgICAgdmFyIGNoaWxkcmVuQXJyYXkgPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKTtcbiAgICAgIHZhciBjdXJyZW50VmFsdWVzID0gKF90aGlzJGdldEN1cnJlbnRWYWx1ZTUgPSB0aGlzLmdldEN1cnJlbnRWYWx1ZXMoKSkgIT09IG51bGwgJiYgX3RoaXMkZ2V0Q3VycmVudFZhbHVlNSAhPT0gdm9pZCAwID8gX3RoaXMkZ2V0Q3VycmVudFZhbHVlNSA6IFtdO1xuICAgICAgdmFyIGJ1dHRvbkxhYmVsID0gY3VycmVudFZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgdmFsdWUsIGluZGV4LCBvcmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkSXRlbSA9IE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wiZmluZFwiXSkoY2hpbGRyZW5BcnJheSwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXNPcHRpb24oaXRlbSkgJiYgaXRlbS5wcm9wcy52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgIGFjYy5wdXNoKG1hdGNoZWRJdGVtLnByb3BzLmNoaWxkcmVuIHx8IG1hdGNoZWRJdGVtLnByb3BzLmxhYmVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2MucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBvcmlnLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBhY2MucHVzaChPYmplY3QoaTE4bl9bXCJfXCJdKSgnLCAnKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuICAgICAgdmFyIHRvZ2dsZSA9IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRCdXR0b24sIENvbXBhY3RfZXh0ZW5kcyh7XG4gICAgICAgIGFwcGVhcmFuY2U6IFwidG9nZ2xlXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXZhbHVlc1wiOiBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWVzKSxcbiAgICAgICAgbGFiZWw6IGJ1dHRvbkxhYmVsLmxlbmd0aCA+IDAgPyBidXR0b25MYWJlbCA6IHBsYWNlaG9sZGVyLFxuICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgIGlubGluZTogaW5saW5lLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICBpc01lbnU6IHRydWUsXG4gICAgICAgIHJvbGU6IFwibGlzdGJveFwiLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBsYWJlbGxlZEJ5LFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogZGVzY3JpYmVkQnksXG4gICAgICAgIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogXCJ0cnVlXCIgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2VwdCBpbmNvbnNpc3RlbmN5IHdpdGggQnV0dG9uXG4gICAgICAgICxcbiAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrXG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKG90aGVyUHJvcHMsICdhbGxvd05ld1ZhbHVlcycsICdhbmltYXRlTG9hZGluZycsICdjb250cm9sbGVkRmlsdGVyJywgJ2RlZmF1bHRWYWx1ZXMnLCAnZm9vdGVyTWVzc2FnZScsICdpbnB1dFJlZicsICdpc0xvYWRpbmdPcHRpb25zJywgJ21lbnVTdHlsZScsICdub09wdGlvbnNNZXNzYWdlJywgJ29uQ2hhbmdlJywgJ29uQ2xpY2snLCAnb25GaWx0ZXJDaGFuZ2UnLCAnb25TY3JvbGxCb3R0b20nLCAnb25PcGVuJywgJ29uQ2xvc2UnLCAndmFsdWVzJywgJ3VzZUNsaWNrYXdheU92ZXJsYXknKSksICEhY3VycmVudFZhbHVlcy5sZW5ndGggJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENvdW50LCB7XG4gICAgICAgIFwiZGF0YS1yb2xlXCI6IFwiY291bnRcIlxuICAgICAgfSwgXCIoXCIsIGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBcIilcIikpO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChEcm9wZG93bl9kZWZhdWx0LmEsIHtcbiAgICAgICAgY2xvc2VSZWFzb25zOiBbJ2NsaWNrQXdheScsICdlc2NhcGVLZXknLCAnb2ZmU2NyZWVuJywgJ3RvZ2dsZUNsaWNrJ10sXG4gICAgICAgIHRvZ2dsZTogdG9nZ2xlLFxuICAgICAgICBvblJlcXVlc3RPcGVuOiB0aGlzLmhhbmRsZVJlcXVlc3RPcGVuLFxuICAgICAgICBvblJlcXVlc3RDbG9zZTogdGhpcy5oYW5kbGVSZXF1ZXN0Q2xvc2UsXG4gICAgICAgIG9wZW46IHRoaXMuc3RhdGUub3BlbixcbiAgICAgICAgcmVwb3NpdGlvbk1vZGU6IFwiZmxpcFwiLFxuICAgICAgICBkZWZhdWx0UGxhY2VtZW50OiBkZWZhdWx0UGxhY2VtZW50LFxuICAgICAgICBjYW5Db3ZlckFuY2hvcjogd2luZG93LmlubmVySGVpZ2h0IDwgNTAwXG4gICAgICB9LCB0aGlzLnJlbmRlck1lbnUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb21wYWN0O1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5Db21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfQ29tcGFjdCwgXCJwcm9wVHlwZXNcIiwgQ29tcGFjdF9wcm9wVHlwZXMpO1xuXG5Db21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfQ29tcGFjdCwgXCJkZWZhdWx0UHJvcHNcIiwgQ29tcGFjdF9kZWZhdWx0UHJvcHMpO1xuXG5Db21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfQ29tcGFjdCwgXCJPcHRpb25cIiwgTXVsdGlzZWxlY3RfT3B0aW9uKTtcblxuQ29tcGFjdF9kZWZpbmVQcm9wZXJ0eShDb21wYWN0X0NvbXBhY3QsIFwiRGl2aWRlclwiLCBNZW51X1tcIkRpdmlkZXJcIl0pO1xuXG5Db21wYWN0X2RlZmluZVByb3BlcnR5KENvbXBhY3RfQ29tcGFjdCwgXCJIZWFkaW5nXCIsIE1lbnVfW1wiSGVhZGluZ1wiXSk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIE11bHRpc2VsZWN0X0NvbXBhY3QgPSAoQ29tcGFjdF9Db21wYWN0KTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0NoaXBcIlxudmFyIENoaXBfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XG52YXIgQ2hpcF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihDaGlwXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1BvcG92ZXJcIlxudmFyIFBvcG92ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG52YXIgUG9wb3Zlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihQb3BvdmVyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL1NjcmVlblJlYWRlckNvbnRlbnRcIlxudmFyIFNjcmVlblJlYWRlckNvbnRlbnRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG52YXIgU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihTY3JlZW5SZWFkZXJDb250ZW50Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0JveFwiXG52YXIgQm94XyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgQm94X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEJveF8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NdWx0aXNlbGVjdC9Ob3JtYWxTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIk5vcm1hbFN0eWxlc19fU3R5bGVkQm94XCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTF1d3dwY28tMFwiXG59KShbXCJib3JkZXItcmFkaXVzOlwiLCBcIjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtd3JhcDp3cmFwO21pbi1oZWlnaHQ6XCIsIFwiO21heC1oZWlnaHQ6MzAwcHg7b3ZlcmZsb3cteTphdXRvO1wiLCBcIjtcIiwgXCIgXCIsIFwiIFwiLCBcIiBcIiwgXCIgXCIsIFwiICZbZGF0YS1pbmxpbmVde3dpZHRoOjQwMHB4O31bZGF0YS1pbmxpbmU9J3RydWUnXSArICZ7bWFyZ2luLWxlZnQ6XCIsIFwifVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJSYWRpdXMsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW5wdXRIZWlnaHQsIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXI6XCIsIFwiO3BhZGRpbmc6MnB4IDAgMCAycHg7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlciksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyOjFweCBzb2xpZCBcIiwgXCI7cGFkZGluZzoycHg7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JCb3JkZXIpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBsaWdodDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLndoaXRlKSxcbiAgICBkYXJrOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTIyKVxuICB9XG59KSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyICRoYXNmb2N1cyA9IF9yZWYuJGhhc2ZvY3VzO1xuICByZXR1cm4gJGhhc2ZvY3VzICYmIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJveC1zaGFkb3c6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c1NoYWRvdyksXG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb2N1c0NvbG9yKVxuICB9KTtcbn0sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGVycm9yID0gX3JlZjIuJGVycm9yO1xuICByZXR1cm4gJGVycm9yICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1jb2xvcjpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmFjY2VudENvbG9yTmVnYXRpdmUpO1xufSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciAkZGlzYWJsZWQgPSBfcmVmMy4kZGlzYWJsZWQ7XG4gIHJldHVybiAkZGlzYWJsZWQgPyBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBsaWdodDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Y3Vyc29yOm5vdC1hbGxvd2VkO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTYpLFxuICAgICAgZGFyazogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Ym9yZGVyLWNvbG9yOlwiLCBcIjtjdXJzb3I6bm90LWFsbG93ZWQ7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXkyMiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5MzApXG4gICAgfSxcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1jb2xvcjpcIiwgXCI7Y3Vyc29yOm5vdC1hbGxvd2VkO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQm9yZGVyRGlzYWJsZWQpXG4gIH0pIDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjpob3Zlcntib3JkZXItY29sb3I6XCIsIFwiO31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyQ29sb3IsXG4gICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JCb3JkZXJIb3ZlclxuICB9KSk7XG59LCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyICRwb3BvdmVyT3BlbiA9IF9yZWY0LiRwb3BvdmVyT3BlbjtcbiAgcmV0dXJuICRwb3BvdmVyT3BlbiAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OmNhbGMoXCIsIFwiIC0gMik7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnppbmRleEZpeGVkTmF2YmFyKTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdIYWxmLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1NtYWxsXG59KSk7XG52YXIgU3R5bGVkSW5wdXRXcmFwcGVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiTm9ybWFsU3R5bGVzX19TdHlsZWRJbnB1dFdyYXBwZXJcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXV3d3Bjby0xXCJcbn0pKFtcImZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOjEwMCU7XCJdKTtcbnZhciBTdHlsZWRJbnB1dCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5pbnB1dC53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiTm9ybWFsU3R5bGVzX19TdHlsZWRJbnB1dFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xdXd3cGNvLTJcIlxufSkoW1wiXCIsIFwiO21pbi13aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjEycHg7XCIsIFwiXCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdibG9jaycpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1F1YXJ0ZXIpLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6M3B4O1wiXSlcbiAgfSxcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6N3B4IDEwcHg7XCJdKSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOjNweDtcIl0pXG4gIH1cbn0pKTtcbnZhciBTdHlsZWRPdmVybGF5ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiTm9ybWFsU3R5bGVzX19TdHlsZWRPdmVybGF5XCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTF1d3dwY28tM1wiXG59KShbXCJcIiwgXCJcIl0sIGZ1bmN0aW9uIChfcmVmNSkge1xuICB2YXIgJHBvcG92ZXJvcGVuID0gX3JlZjUuJHBvcG92ZXJvcGVuO1xuICByZXR1cm4gJHBvcG92ZXJvcGVuICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6Y2FsYyhcIiwgXCIgLSAyKTtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uemluZGV4Rml4ZWROYXZiYXIpO1xufSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvdXBkYXRlUmVhY3RSZWYudHNcbnZhciB1cGRhdGVSZWFjdFJlZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9NdWx0aXNlbGVjdC9Ob3JtYWwudHN4XG5mdW5jdGlvbiBOb3JtYWxfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBOb3JtYWxfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IE5vcm1hbF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gTm9ybWFsX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIE5vcm1hbF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIE5vcm1hbF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IE5vcm1hbF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBOb3JtYWxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBOb3JtYWxfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBOb3JtYWxfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIE5vcm1hbF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIE5vcm1hbF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gTm9ybWFsX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBOb3JtYWxfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gTm9ybWFsX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gTm9ybWFsX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBOb3JtYWxfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgTm9ybWFsX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIE5vcm1hbF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gTm9ybWFsX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBOb3JtYWxfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIE5vcm1hbF9leHRlbmRzKCkgeyBOb3JtYWxfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBOb3JtYWxfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIE5vcm1hbF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIE5vcm1hbF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gTm9ybWFsX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgTm9ybWFsX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBOb3JtYWxfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gTm9ybWFsX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE5vcm1hbF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gTm9ybWFsX3NldFByb3RvdHlwZU9mKG8sIHApIHsgTm9ybWFsX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBOb3JtYWxfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gTm9ybWFsX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBOb3JtYWxfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gTm9ybWFsX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBOb3JtYWxfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIE5vcm1hbF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gTm9ybWFsX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoTm9ybWFsX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gTm9ybWFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gTm9ybWFsX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBOb3JtYWxfZ2V0UHJvdG90eXBlT2YobykgeyBOb3JtYWxfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gTm9ybWFsX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBOb3JtYWxfcHJvcFR5cGVzID0ge1xuICBhbGxvd05ld1ZhbHVlczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgYW5pbWF0ZUxvYWRpbmc6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBjb250cm9sbGVkRmlsdGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBkZWZhdWx0UGxhY2VtZW50OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2Fib3ZlJywgJ2JlbG93JywgJ3ZlcnRpY2FsJ10pLFxuICBkZWZhdWx0VmFsdWVzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheSxcbiAgZGVzY3JpYmVkQnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGVycm9yOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBmb290ZXJNZXNzYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBpbmxpbmU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGlucHV0UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBpc0xvYWRpbmdPcHRpb25zOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBsYWJlbGxlZEJ5OiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGxvYWRpbmdNZXNzYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBtZW51U3R5bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdCxcbiAgbmFtZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBub09wdGlvbnNNZXNzYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBvbkNoYW5nZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25DbG9zZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25GaWx0ZXJDaGFuZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIG9uT3BlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25TY3JvbGxCb3R0b206IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIHRhYkNvbmZpcm1zTmV3VmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHVzZUNsaWNrYXdheU92ZXJsYXk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHZhbHVlczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYXJyYXlcbn07XG52YXIgTm9ybWFsX2RlZmF1bHRQcm9wcyA9IHtcbiAgYWxsb3dOZXdWYWx1ZXM6IGZhbHNlLFxuICBhbmltYXRlTG9hZGluZzogZmFsc2UsXG4gIGRlZmF1bHRQbGFjZW1lbnQ6ICd2ZXJ0aWNhbCcsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaW5saW5lOiBmYWxzZSxcbiAgaXNMb2FkaW5nT3B0aW9uczogZmFsc2UsXG4gIG1lbnVTdHlsZToge30sXG4gIG5vT3B0aW9uc01lc3NhZ2U6IE9iamVjdChpMThuX1tcIl9cIl0pKCdObyBtYXRjaGVzJyksXG4gIHBsYWNlaG9sZGVyOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnU2VsZWN0Li4uJyksXG4gIHRhYkNvbmZpcm1zTmV3VmFsdWU6IGZhbHNlLFxuICB1c2VDbGlja2F3YXlPdmVybGF5OiBmYWxzZVxufTsgLy8gVFM6IG5vdCB0eXBlZCBjb250cm9sbGVkL3VuY29udHJvbGxlZCwgaGFuZGxlZCBieSBNdWx0aXNlbGVjdCB3cmFwcGVyIGNvbXBvbmVudFxuXG52YXIgTm9ybWFsX05vcm1hbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBOb3JtYWxfaW5oZXJpdHMoTm9ybWFsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gTm9ybWFsX2NyZWF0ZVN1cGVyKE5vcm1hbCk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBOb3JtYWxQcm9wc0Jhc2VcbiAgZnVuY3Rpb24gTm9ybWFsKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgTm9ybWFsX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vcm1hbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhY3RpdmVJdGVtSWRcIiwgdm9pZCAwKTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhY3RpdmVWYWx1ZVwiLCB2b2lkIDApO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF2YWlsYWJsZU9wdGlvbkNvdW50XCIsIHZvaWQgMCk7XG5cbiAgICBOb3JtYWxfZGVmaW5lUHJvcGVydHkoTm9ybWFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2hpbGRyZW5cIiwgdm9pZCAwKTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250cm9sbGVkRXh0ZXJuYWxseVwiLCB2b2lkIDApO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0XCIsIG51bGwpO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJJZFwiLCB2b2lkIDApO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRpbnB1dDtcblxuICAgICAgKF90aGlzJGlucHV0ID0gX3RoaXMuaW5wdXQpID09PSBudWxsIHx8IF90aGlzJGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRpbnB1dC5mb2N1cygpO1xuICAgIH0pO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVJlcXVlc3RSZW1vdmVcIiwgZnVuY3Rpb24gKGUsIF9yZWYpIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImRlZmVyXCJdKShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmVWYWx1ZShlLCB2YWx1ZSk7XG4gICAgICB9KTsgLy8gYWxsb3cgdGhlIGV2ZW50IHRvIGJ1YmJsZSBiZWZvcmUgcmVtb3ZpbmcuXG4gICAgfSk7XG5cbiAgICBOb3JtYWxfZGVmaW5lUHJvcGVydHkoTm9ybWFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSW5wdXRGb2N1c1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF90aGlzLnN0YXRlLmZpbHRlcktleXdvcmQgIT09ICcnKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkZpbHRlckMsIF90aGlzJHByb3BzO1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkZpbHRlckMgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25GaWx0ZXJDaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRmlsdGVyQyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25GaWx0ZXJDLmNhbGwoX3RoaXMkcHJvcHMsIGUsIHtcbiAgICAgICAgICBrZXl3b3JkOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmaWx0ZXJLZXl3b3JkOiAnJyxcbiAgICAgICAgaGFzRm9jdXM6IHRydWUsXG4gICAgICAgIG9wZW46IHRydWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uT3BlbiwgX3RoaXMkcHJvcHMyO1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvbk9wZW4gPSAoX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMpLm9uT3BlbikgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25PcGVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbk9wZW4uY2FsbChfdGhpcyRwcm9wczIpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBOb3JtYWxfZGVmaW5lUHJvcGVydHkoTm9ybWFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlSW5wdXRLZXlEb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkaW5wdXQzLCBfdGhpcyRnZXRDdXJyZW50VmFsdWUyO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgb25TY3JvbGxCb3R0b20gPSBfdGhpcyRwcm9wczMub25TY3JvbGxCb3R0b20sXG4gICAgICAgICAgdGFiQ29uZmlybXNOZXdWYWx1ZSA9IF90aGlzJHByb3BzMy50YWJDb25maXJtc05ld1ZhbHVlO1xuICAgICAgdmFyIGV2ZW50S2V5Q29kZSA9IE9iamVjdChrZXlib2FyZF9bXCJrZXljb2RlXCJdKShlLm5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGV2ZW50S2V5Q29kZSA9PT0gJ3RhYicgJiYgX3RoaXMuc3RhdGUub3Blbikge1xuICAgICAgICBpZiAodGFiQ29uZmlybXNOZXdWYWx1ZSAmJiAhT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc1VuZGVmaW5lZFwiXSkoX3RoaXMuYWN0aXZlVmFsdWUpICYmIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50IDw9IDEpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkaW5wdXQyO1xuXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgX3RoaXMuYWRkVmFsdWUoZSwgX3RoaXMuYWN0aXZlVmFsdWUpO1xuXG4gICAgICAgICAgKF90aGlzJGlucHV0MiA9IF90aGlzLmlucHV0KSA9PT0gbnVsbCB8fCBfdGhpcyRpbnB1dDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGlucHV0Mi5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG9wZW46IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudEtleUNvZGUgPT09ICdlbmQnICYmIF90aGlzLnN0YXRlLm9wZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVJbmRleDogX3RoaXMuYXZhaWxhYmxlT3B0aW9uQ291bnQgLSAxXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRLZXlDb2RlID09PSAnaG9tZScgJiYgX3RoaXMuc3RhdGUub3Blbikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZUluZGV4OiAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRLZXlDb2RlID09PSAnZG93bicpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS5vcGVuKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhY3RpdmVJbmRleDogTWF0aC5taW4oc3RhdGUuYWN0aXZlSW5kZXggKyAxLCBfdGhpcy5hdmFpbGFibGVPcHRpb25Db3VudCAtIDEpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICAgICAgb3BlbjogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuICYmIG9uU2Nyb2xsQm90dG9tKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGdldEN1cnJlbnRWYWx1ZTtcblxuICAgICAgICAgIHZhciBiZWZvcmVMYXN0Q2hpbGQgPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKS5sZW5ndGggLSAoMiArICgoX3RoaXMkZ2V0Q3VycmVudFZhbHVlID0gX3RoaXMuZ2V0Q3VycmVudFZhbHVlcygpKSAhPT0gbnVsbCAmJiBfdGhpcyRnZXRDdXJyZW50VmFsdWUgIT09IHZvaWQgMCA/IF90aGlzJGdldEN1cnJlbnRWYWx1ZSA6IFtdKS5sZW5ndGgpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmFjdGl2ZUluZGV4ID09PSBiZWZvcmVMYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgIG9uU2Nyb2xsQm90dG9tKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudEtleUNvZGUgPT09ICd1cCcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS5vcGVuKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhY3RpdmVJbmRleDogTWF0aC5tYXgoc3RhdGUuYWN0aXZlSW5kZXggLSAxLCAwKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgICAgICAgIG9wZW46IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRLZXlDb2RlID09PSAnZW50ZXInICYmICFPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImlzVW5kZWZpbmVkXCJdKShfdGhpcy5hY3RpdmVWYWx1ZSkgJiYgX3RoaXMuc3RhdGUub3Blbikge1xuICAgICAgICBfdGhpcy5hZGRWYWx1ZShlLCBfdGhpcy5hY3RpdmVWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudEtleUNvZGUgPT09ICdiYWNrc3BhY2UnICYmICgoX3RoaXMkaW5wdXQzID0gX3RoaXMuaW5wdXQpID09PSBudWxsIHx8IF90aGlzJGlucHV0MyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaW5wdXQzLnZhbHVlKSA9PT0gJycgJiYgKChfdGhpcyRnZXRDdXJyZW50VmFsdWUyID0gX3RoaXMuZ2V0Q3VycmVudFZhbHVlcygpKSA9PT0gbnVsbCB8fCBfdGhpcyRnZXRDdXJyZW50VmFsdWUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRnZXRDdXJyZW50VmFsdWUyLmxlbmd0aCkpIHtcbiAgICAgICAgX3RoaXMucmVtb3ZlVmFsdWUoZSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJsYXN0XCJdKShfdGhpcy5nZXRDdXJyZW50VmFsdWVzKCkpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dENoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uRmlsdGVyQzIsIF90aGlzJHByb3BzNDtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmaWx0ZXJLZXl3b3JkOiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgYWN0aXZlSW5kZXg6IDBcbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkb25GaWx0ZXJDMiA9IChfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcykub25GaWx0ZXJDaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRmlsdGVyQzIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uRmlsdGVyQzIuY2FsbChfdGhpcyRwcm9wczQsIGUsIHtcbiAgICAgICAga2V5d29yZDogZS50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU1lbnVPcHRpb25DbGlja1wiLCBmdW5jdGlvbiAoZSwgX3JlZjIpIHtcbiAgICAgIHZhciBfdGhpcyRpbnB1dDQ7XG5cbiAgICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlO1xuXG4gICAgICBfdGhpcy5hZGRWYWx1ZShlLCB2YWx1ZSk7XG5cbiAgICAgIChfdGhpcyRpbnB1dDQgPSBfdGhpcy5pbnB1dCkgPT09IG51bGwgfHwgX3RoaXMkaW5wdXQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRpbnB1dDQuZm9jdXMoKTtcbiAgICB9KTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVJbnB1dEJsdXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBwb3BvdmVyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfdGhpcy5wb3BvdmVySWQpO1xuICAgICAgdmFyIGJsdXJUbyA9IGUucmVsYXRlZFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCByZWxhdGVkVGFyZ2V0IGJ1dCBzZXRzIGFjdGl2ZUVsZW1lbnRcblxuICAgICAgdmFyIGlzQmx1clRvT3duT3B0aW9uID0gcG9wb3ZlckVsICYmIGJsdXJUbyAmJiBwb3BvdmVyRWwuY29udGFpbnMoYmx1clRvKTsgLy8gVFM6IHRhcmdldCBhcyBOb2RlIGlzIGFuIHVuc2FmZSBhc3N1bXB0aW9uXG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbHRlcktleXdvcmQ6IGlzQmx1clRvT3duT3B0aW9uID8gc3RhdGUuZmlsdGVyS2V5d29yZCA6ICcnLFxuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghaXNCbHVyVG9Pd25PcHRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uRmlsdGVyQzMsIF90aGlzJHByb3BzNTtcblxuICAgICAgICAoX3RoaXMkcHJvcHMkb25GaWx0ZXJDMyA9IChfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcykub25GaWx0ZXJDaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uRmlsdGVyQzMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uRmlsdGVyQzMuY2FsbChfdGhpcyRwcm9wczUsIGUsIHtcbiAgICAgICAgICBrZXl3b3JkOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVSZXF1ZXN0Q2xvc2VcIiwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUkZWw7XG5cbiAgICAgIHZhciByZWFzb24gPSBfcmVmMy5yZWFzb24sXG4gICAgICAgICAgZXZlbnQgPSBfcmVmMy5ldmVudDtcblxuICAgICAgaWYgKHJlYXNvbiA9PT0gJ2VzY2FwZUtleScgfHwgcmVhc29uID09PSAnb2ZmU2NyZWVuJyB8fCByZWFzb24gPT09ICdjbGlja0F3YXknICYmIGV2ZW50ICE9PSB1bmRlZmluZWQgJiYgISgoX3RoaXMkc3RhdGUkZWwgPSBfdGhpcy5zdGF0ZS5lbCkgPT09IG51bGwgfHwgX3RoaXMkc3RhdGUkZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0YXRlJGVsLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIC8vIFRTOiB0YXJnZXQgYXMgTm9kZSBpcyBhbiB1bnNhZmUgYXNzdW1wdGlvblxuICAgICAgKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgb3BlbjogZmFsc2VcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbG9zZSwgX3RoaXMkcHJvcHM2O1xuXG4gICAgICAgICAgICAoX3RoaXMkcHJvcHMkb25DbG9zZSA9IChfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcykub25DbG9zZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbG9zZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DbG9zZS5jYWxsKF90aGlzJHByb3BzNik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgaWYgKHJlYXNvbiA9PT0gJ2VzY2FwZUtleScpIHtcbiAgICAgICAgdmFyIF90aGlzJGlucHV0NTtcblxuICAgICAgICAoX3RoaXMkaW5wdXQ1ID0gX3RoaXMuaW5wdXQpID09PSBudWxsIHx8IF90aGlzJGlucHV0NSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaW5wdXQ1LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBOb3JtYWxfZGVmaW5lUHJvcGVydHkoTm9ybWFsX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlU2Nyb2xsQm90dG9tXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5vcGVuICYmICFfdGhpcy5wcm9wcy5pc0xvYWRpbmdPcHRpb25zKSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvblNjcm9sbEIsIF90aGlzJHByb3BzNztcblxuICAgICAgICAoX3RoaXMkcHJvcHMkb25TY3JvbGxCID0gKF90aGlzJHByb3BzNyA9IF90aGlzLnByb3BzKS5vblNjcm9sbEJvdHRvbSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25TY3JvbGxCID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvblNjcm9sbEIuY2FsbChfdGhpcyRwcm9wczcpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBsb2FkaW5nTW9yZU1lc3NhZ2U6IFwiXCIuY29uY2F0KF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50LCBcIiBvcHRpb25zLCBsb2FkaW5nIG1vcmUgb3B0aW9uc1wiKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVNb3VudFwiLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZWw6IGVsXG4gICAgICB9KTtcblxuICAgICAgT2JqZWN0KHVwZGF0ZVJlYWN0UmVmW1wiYVwiIC8qIHVwZGF0ZVJlYWN0UmVmICovXSkoX3RoaXMucHJvcHMuZWxlbWVudFJlZiwgZWwpO1xuICAgIH0pO1xuXG4gICAgTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUlucHV0TW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBfdGhpcy5pbnB1dCA9IGVsO1xuICAgICAgT2JqZWN0KHVwZGF0ZVJlYWN0UmVmW1wiYVwiIC8qIHVwZGF0ZVJlYWN0UmVmICovXSkoX3RoaXMucHJvcHMuaW5wdXRSZWYsIGVsKTtcbiAgICB9KTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVBY3RpdmVPcHRpb25Nb3VudFwiLCBmdW5jdGlvbiAoYykge1xuICAgICAgYyA9PT0gbnVsbCB8fCBjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtcbiAgICB9KTtcblxuICAgIE5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW5kZXJNZW51XCIsIGZ1bmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIGFuY2hvcldpZHRoID0gX3JlZjQuYW5jaG9yV2lkdGgsXG4gICAgICAgICAgbWF4SGVpZ2h0ID0gX3JlZjQubWF4SGVpZ2h0LFxuICAgICAgICAgIHBsYWNlbWVudCA9IF9yZWY0LnBsYWNlbWVudDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoUmVzdWx0c01lbnVfZGVmYXVsdC5hLCBOb3JtYWxfZXh0ZW5kcyh7XG4gICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50ICE9PSBudWxsICYmIHBsYWNlbWVudCAhPT0gdm9pZCAwID8gcGxhY2VtZW50IDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodCAhPT0gbnVsbCAmJiBtYXhIZWlnaHQgIT09IHZvaWQgMCA/IG1heEhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNMb2FkaW5nOiBfdGhpcy5wcm9wcy5pc0xvYWRpbmdPcHRpb25zLFxuICAgICAgICBvblNjcm9sbEJvdHRvbTogX3RoaXMucHJvcHMub25TY3JvbGxCb3R0b20gPyBfdGhpcy5oYW5kbGVTY3JvbGxCb3R0b20gOiB1bmRlZmluZWRcbiAgICAgIH0sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wicGlja1wiXSkoX3RoaXMucHJvcHMsICdub09wdGlvbnNNZXNzYWdlJywgJ2Zvb3Rlck1lc3NhZ2UnLCAnYW5pbWF0ZUxvYWRpbmcnLCAnbG9hZGluZ01lc3NhZ2UnKSwge1xuICAgICAgICBzdHlsZTogT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJleHRlbmRcIl0pKHtcbiAgICAgICAgICB3aWR0aDogTWF0aC5tYXgoYW5jaG9yV2lkdGggIT09IG51bGwgJiYgYW5jaG9yV2lkdGggIT09IHZvaWQgMCA/IGFuY2hvcldpZHRoIDogMCwgMjAwKVxuICAgICAgICB9LCBfdGhpcy5wcm9wcy5tZW51U3R5bGUpXG4gICAgICB9KSwgX3RoaXMuY2hpbGRyZW4pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgIGVsOiBudWxsLFxuICAgICAgZmlsdGVyS2V5d29yZDogJycsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIHZhbHVlczogcHJvcHMuZGVmYXVsdFZhbHVlcyB8fCBbXSxcbiAgICAgIGxvYWRpbmdNb3JlTWVzc2FnZTogJydcbiAgICB9O1xuICAgIF90aGlzLmF2YWlsYWJsZU9wdGlvbkNvdW50ID0gMDtcbiAgICBfdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIF90aGlzLmNvbnRyb2xsZWRFeHRlcm5hbGx5ID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKHByb3BzLCAndmFsdWVzJyk7XG4gICAgX3RoaXMuYWN0aXZlSXRlbUlkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgnYWN0aXZlLWl0ZW0nKTtcbiAgICBfdGhpcy5wb3BvdmVySWQgPSBPYmplY3QoaWRfW1wiY3JlYXRlRE9NSURcIl0pKCdwb3BvdmVyJyk7XG5cbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBOb3JtYWxfY3JlYXRlQ2xhc3MoTm9ybWFsLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKGZhbHNlKSB7fVxuXG4gICAgICBpZiAoZmFsc2UpIHt9XG5cbiAgICAgIGlmICh0aGlzLmlzQ29udHJvbGxlZCgpICYmIHByZXZQcm9wcy52YWx1ZXMgIT09IHRoaXMucHJvcHMudmFsdWVzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBmaWx0ZXJLZXl3b3JkOiAnJyxcbiAgICAgICAgICBhY3RpdmVJbmRleDogMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q3VycmVudFZhbHVlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDdXJyZW50VmFsdWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDb250cm9sbGVkKCkgPyB0aGlzLnByb3BzLnZhbHVlcyA6IHRoaXMuc3RhdGUudmFsdWVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NvbnRyb2xsZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNDb250cm9sbGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlZEV4dGVybmFsbHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBsYWNlIGZvY3VzIG9uIHRoZSB0ZXh0IGlucHV0LlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dCkge1xuICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFZhbHVlKGUsIHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0Q3VycmVudFZhbHVlMywgX3RoaXMkcHJvcHMkb25DaGFuZ2UsIF90aGlzJHByb3BzODtcblxuICAgICAgdmFyIHZhbHVlcyA9ICgoX3RoaXMkZ2V0Q3VycmVudFZhbHVlMyA9IHRoaXMuZ2V0Q3VycmVudFZhbHVlcygpKSAhPT0gbnVsbCAmJiBfdGhpcyRnZXRDdXJyZW50VmFsdWUzICE9PSB2b2lkIDAgPyBfdGhpcyRnZXRDdXJyZW50VmFsdWUzIDogW10pLmNvbmNhdChbdmFsdWVdKTtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5wcm9wcy5uYW1lO1xuXG4gICAgICBpZiAoIXRoaXMuaXNDb250cm9sbGVkKCkpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgICAgYWN0aXZlSW5kZXg6IDAsXG4gICAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgICBmaWx0ZXJLZXl3b3JkOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgKF90aGlzJHByb3BzJG9uQ2hhbmdlID0gKF90aGlzJHByb3BzOCA9IHRoaXMucHJvcHMpLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DaGFuZ2UuY2FsbChfdGhpcyRwcm9wczgsIGUsIHtcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVWYWx1ZShlLCB2YWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2hhbmdlMiwgX3RoaXMkcHJvcHM5O1xuXG4gICAgICB2YXIgdmFsdWVzID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJ3aXRob3V0XCJdKSh0aGlzLmdldEN1cnJlbnRWYWx1ZXMoKSwgdmFsdWUpO1xuICAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XG5cbiAgICAgIGlmICghdGhpcy5pc0NvbnRyb2xsZWQoKSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB2YWx1ZXM6IHZhbHVlc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgKF90aGlzJHByb3BzJG9uQ2hhbmdlMiA9IChfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzKS5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNoYW5nZTIuY2FsbChfdGhpcyRwcm9wczksIGUsIHtcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJCdXR0b25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckJ1dHRvbnMoc2VsZWN0ZWRJdGVtcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIHNlbGVjdGVkSXRlbXMgbWF5IGNvbnRhaW4gaXRlbXMgb3IgdW5tYXRjaGVkIHZhbHVlcyBhdCB0aGlzIHBvaW50XG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICB2YXIgaXRlbSA9IHNlbGVjdGVkSXRlbTsgLy8gVFM6IGZha2luZyBwcm9wcyBoZXJlXG5cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChDaGlwX2RlZmF1bHQuYSwge1xuICAgICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiB0cnVlLFxuICAgICAgICAgIGRpc2FibGVkOiBfdGhpczIucHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgaWNvbjogaXRlbS5wcm9wcyA/IGl0ZW0ucHJvcHMuaWNvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBrZXk6IChpdGVtLnByb3BzID8gaXRlbS5wcm9wcy52YWx1ZSA6IGl0ZW0pLnRvU3RyaW5nKCksXG4gICAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJzZWxlY3RlZC1vcHRpb25cIixcbiAgICAgICAgICBvblJlcXVlc3RSZW1vdmU6IF90aGlzMi5oYW5kbGVSZXF1ZXN0UmVtb3ZlLFxuICAgICAgICAgIHJvbGU6IFwib3B0aW9uXCIsXG4gICAgICAgICAgdmFsdWU6IGl0ZW0ucHJvcHMgPyBpdGVtLnByb3BzLnZhbHVlIDogaXRlbSxcbiAgICAgICAgICBhcHBlYXJhbmNlOiBpdGVtLnByb3BzID8gaXRlbS5wcm9wcy5zZWxlY3RlZEFwcGVhcmFuY2UgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpdGVtLnByb3BzID8gaXRlbS5wcm9wcy5zZWxlY3RlZEJhY2tncm91bmRDb2xvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmb3JlZ3JvdW5kQ29sb3I6IGl0ZW0ucHJvcHMgPyBpdGVtLnByb3BzLnNlbGVjdGVkRm9yZWdyb3VuZENvbG9yIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIGl0ZW0ucHJvcHMgPyBpdGVtLnByb3BzLmNoaWxkcmVuIHx8IGl0ZW0ucHJvcHMubGFiZWwgOiBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJGdldEN1cnJlbnRWYWx1ZTQsXG4gICAgICAgICAgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFsbG93TmV3VmFsdWVzID0gX3RoaXMkcHJvcHMxMC5hbGxvd05ld1ZhbHVlcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMTAuY2hpbGRyZW4sXG4gICAgICAgICAgY29udHJvbGxlZEZpbHRlciA9IF90aGlzJHByb3BzMTAuY29udHJvbGxlZEZpbHRlcixcbiAgICAgICAgICBkZWZhdWx0UGxhY2VtZW50ID0gX3RoaXMkcHJvcHMxMC5kZWZhdWx0UGxhY2VtZW50LFxuICAgICAgICAgIGRlc2NyaWJlZEJ5ID0gX3RoaXMkcHJvcHMxMC5kZXNjcmliZWRCeSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzMTAuZGlzYWJsZWQsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczEwLmVycm9yLFxuICAgICAgICAgIGlubGluZSA9IF90aGlzJHByb3BzMTAuaW5saW5lLFxuICAgICAgICAgIGxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wczEwLmxhYmVsbGVkQnksXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczEwLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHVzZUNsaWNrYXdheU92ZXJsYXkgPSBfdGhpcyRwcm9wczEwLnVzZUNsaWNrYXdheU92ZXJsYXksXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IE5vcm1hbF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczEwLCBbXCJhbGxvd05ld1ZhbHVlc1wiLCBcImNoaWxkcmVuXCIsIFwiY29udHJvbGxlZEZpbHRlclwiLCBcImRlZmF1bHRQbGFjZW1lbnRcIiwgXCJkZXNjcmliZWRCeVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJpbmxpbmVcIiwgXCJsYWJlbGxlZEJ5XCIsIFwicGxhY2Vob2xkZXJcIiwgXCJ1c2VDbGlja2F3YXlPdmVybGF5XCJdKTtcblxuICAgICAgdmFyIGFyaWFQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJwaWNrQnlcIl0pKG90aGVyUHJvcHMsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID09PSAncm9sZScgfHwga2V5LmluZGV4T2YoJ2FyaWEtJykgPT09IDA7XG4gICAgICB9KSksIHt9LCB7XG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogZGVzY3JpYmVkQnksXG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbGxlZEJ5LFxuICAgICAgICAnYXJpYS1pbnZhbGlkJzogZXJyb3IgfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgdmFyIGN1cnJlbnRWYWx1ZXMgPSAoX3RoaXMkZ2V0Q3VycmVudFZhbHVlNCA9IHRoaXMuZ2V0Q3VycmVudFZhbHVlcygpKSAhPT0gbnVsbCAmJiBfdGhpcyRnZXRDdXJyZW50VmFsdWU0ICE9PSB2b2lkIDAgPyBfdGhpcyRnZXRDdXJyZW50VmFsdWU0IDogW107XG4gICAgICB2YXIgc2VsZWN0ZWRJdGVtcyA9IGN1cnJlbnRWYWx1ZXMuc2xpY2UoMCk7XG4gICAgICB2YXIgZm91bmRFeGFjdE1hdGNoID0gY3VycmVudFZhbHVlcy5pbmRleE9mKHRoaXMuc3RhdGUuZmlsdGVyS2V5d29yZCkgPj0gMDsgLy8gTWFwIE9wdGlvbnMgdG8gc2VsZWN0ZWQgdmFsdWVzXG5cbiAgICAgIGlmIChjdXJyZW50VmFsdWVzICYmIGN1cnJlbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gTXVsdGlzZWxlY3RfT3B0aW9uO1xuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gTXVsdGlzZWxlY3RfT3B0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IGN1cnJlbnRWYWx1ZXMuaW5kZXhPZihpdGVtLnByb3BzLnZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXNbc2VsZWN0ZWRJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IC8vIEZpbHRlciB0aGUgaXRlbXNcblxuXG4gICAgICB2YXIga2V5d29yZHMgPSBPYmplY3QoZmlsdGVyX1tcInN0cmluZ1RvS2V5d29yZHNcIl0pKHRoaXMuc3RhdGUuZmlsdGVyS2V5d29yZCk7XG4gICAgICB2YXIgY2hpbGRyZW5GaWx0ZXJlZCA9IGNvbnRyb2xsZWRGaWx0ZXIgPyBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS50b0FycmF5KGNoaWxkcmVuKSA6IC8vIGVuc3VyZSBjb25zaXN0ZW50IGtleXNcbiAgICAgIGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIGlmIChPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcImdldFwiXSkob3B0aW9uLCBbJ3Byb3BzJywgJ2xhYmVsJ10sIGZhbHNlKSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QoZmlsdGVyX1tcInRlc3RQaHJhc2VcIl0pKG9wdGlvbi5wcm9wcy5sYWJlbCwga2V5d29yZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgYWxsIGhlYWRlcnMgYW5kIG5vbi1pbnRlcmFjdGl2ZSBvcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlT3B0aW9uQ291bnQgPSAwO1xuICAgICAgdGhpcy5hY3RpdmVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBleHRlcm5hbF9yZWFjdF9bXCJDaGlsZHJlblwiXS5tYXAoY2hpbGRyZW5GaWx0ZXJlZCwgZnVuY3Rpb24gKGNoaWxkcmVuSXRlbSwgaSkge1xuICAgICAgICBpZiAoIWNoaWxkcmVuSXRlbS5wcm9wcyB8fCAhT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKGNoaWxkcmVuSXRlbS5wcm9wcywgJ3ZhbHVlJykpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgSGVhZGluZ3MgYW5kIERpdmlkZXJzXG4gICAgICAgICAgcmV0dXJuIGNoaWxkcmVuSXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVtID0gY2hpbGRyZW5JdGVtOyAvLyBmaW5kIG91dCBpZiB0aGUgc2VhcmNoIHN0cmluZyBleGFjdGx5IG1hdGNoZXMgYSB2YWx1ZVxuXG4gICAgICAgIGlmIChpdGVtLnByb3BzLnZhbHVlID09PSBfdGhpczMuc3RhdGUuZmlsdGVyS2V5d29yZCkge1xuICAgICAgICAgIGZvdW5kRXhhY3RNYXRjaCA9IHRydWU7XG4gICAgICAgIH0gLy8gcmVtb3ZlIGl0ZW1zIHRoYXQgYXJlIGFscmVhZHkgc2VsZWN0ZWRcblxuXG4gICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gY3VycmVudFZhbHVlcy5pbmRleE9mKGl0ZW0ucHJvcHMudmFsdWUpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSAvLyBoaWdobGlnaHQgbWF0Y2hlZCB0ZXh0XG5cblxuICAgICAgICB2YXIgX2l0ZW0kcHJvcHMgPSBpdGVtLnByb3BzLFxuICAgICAgICAgICAgaXRlbUNoaWxkcmVuID0gX2l0ZW0kcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICBsYWJlbCA9IF9pdGVtJHByb3BzLmxhYmVsLFxuICAgICAgICAgICAgbWF0Y2hSYW5nZXMgPSBfaXRlbSRwcm9wcy5tYXRjaFJhbmdlcztcbiAgICAgICAgdmFyIGl0ZW1TdXBwb3J0c01hdGNoUmFuZ2VzID0gaXRlbUNoaWxkcmVuID09PSB1bmRlZmluZWQgfHwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJpc1N0cmluZ1wiXSkoaXRlbUNoaWxkcmVuKTtcbiAgICAgICAgdmFyIG1hdGNoUmFuZ2VzQ2FsYyA9IGl0ZW1TdXBwb3J0c01hdGNoUmFuZ2VzICYmICFjb250cm9sbGVkRmlsdGVyICYmICFtYXRjaFJhbmdlcyAmJiBrZXl3b3JkcyAmJiBPYmplY3QoZmlsdGVyX1tcImtleXdvcmRMb2NhdGlvbnNcIl0pKGxhYmVsLCBrZXl3b3Jkcyk7IC8vIGNsb25lIGl0ZW1cblxuICAgICAgICB2YXIgY2xvbmVkSXRlbSA9IC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShpdGVtLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMy5oYW5kbGVNZW51T3B0aW9uQ2xpY2ssXG4gICAgICAgICAgbWF0Y2hSYW5nZXM6IGl0ZW1TdXBwb3J0c01hdGNoUmFuZ2VzICYmIChtYXRjaFJhbmdlcyB8fCBtYXRjaFJhbmdlc0NhbGMpIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsb25lZEl0ZW07XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IG51bGw7XG4gICAgICB9KTsgLy8gQWRkIHRoZSBvcHRpb24gdG8gYWRkIHRoZSBuZXcgdmFsdWVcblxuICAgICAgaWYgKGFsbG93TmV3VmFsdWVzICYmICFmb3VuZEV4YWN0TWF0Y2ggJiYgdGhpcy5zdGF0ZS5maWx0ZXJLZXl3b3JkKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4udW5zaGlmdCggLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KE11bHRpc2VsZWN0X09wdGlvbiwge1xuICAgICAgICAgIGxhYmVsOiBcIlwiLmNvbmNhdCh0aGlzLnN0YXRlLmZpbHRlcktleXdvcmQsIFwiIChuZXcgdmFsdWUpXCIpLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLmZpbHRlcktleXdvcmQsXG4gICAgICAgICAga2V5OiBcIm5ld1ZhbHVlXCIsXG4gICAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVNZW51T3B0aW9uQ2xpY2tcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5vcGVuKSB7XG4gICAgICAgIC8vIGhpZ2hsaWdodCB0aGUgc2VsZWN0ZWQgSXRlbVxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gZXh0ZXJuYWxfcmVhY3RfW1wiQ2hpbGRyZW5cIl0ubWFwKHRoaXMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZHJlbkl0ZW0pIHtcbiAgICAgICAgICBpZiAoIWNoaWxkcmVuSXRlbS5wcm9wcyB8fCAhT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKGNoaWxkcmVuSXRlbS5wcm9wcywgJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBIZWFkaW5ncyBhbmQgRGl2aWRlcnNcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbkl0ZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGl0ZW0gPSBjaGlsZHJlbkl0ZW07XG4gICAgICAgICAgdmFyIGFjdGl2ZSA9IF90aGlzMy5hdmFpbGFibGVPcHRpb25Db3VudCA9PT0gX3RoaXMzLnN0YXRlLmFjdGl2ZUluZGV4O1xuICAgICAgICAgIF90aGlzMy5hdmFpbGFibGVPcHRpb25Db3VudCArPSAxO1xuXG4gICAgICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXRlbS5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgX3RoaXMzLmFjdGl2ZVZhbHVlID0gaXRlbS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY2xvbmVkSXRlbSA9IC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShpdGVtLCB7XG4gICAgICAgICAgICBhY3RpdmU6IGFjdGl2ZSxcbiAgICAgICAgICAgIGlkOiBfdGhpczMuYWN0aXZlSXRlbUlkLFxuICAgICAgICAgICAgcmVmOiBfdGhpczMuaGFuZGxlQWN0aXZlT3B0aW9uTW91bnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY2xvbmVkSXRlbTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnB1dFdpZHRoID0gXCJcIi5jb25jYXQodGhpcy5zdGF0ZS5maWx0ZXJLZXl3b3JkLmxlbmd0aCAqIDAuOCwgXCJlbVwiKTtcbiAgICAgIHJldHVybiBbLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEJveCwgTm9ybWFsX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IFwiY29udHJvbFwiLFxuICAgICAgICBcImRhdGEtdGVzdC12YWx1ZXNcIjogSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlcyksXG4gICAgICAgIGlubGluZTogaW5saW5lLFxuICAgICAgICAkaGFzZm9jdXM6IHRoaXMuc3RhdGUuaGFzRm9jdXNcbiAgICAgIH0sIGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdLmFwcGx5KHZvaWQgMCwgW290aGVyUHJvcHMsICdhbmltYXRlTG9hZGluZycsICdjb250cm9sbGVkRmlsdGVyJywgJ2RlZmF1bHRWYWx1ZXMnLCAnZm9vdGVyTWVzc2FnZScsICdpbnB1dFJlZicsICdpc0xvYWRpbmdPcHRpb25zJywgJ2xhYmVsbGVkQnknLCAnbWVudVN0eWxlJywgJ25vT3B0aW9uc01lc3NhZ2UnLCAnb25DaGFuZ2UnLCAnb25GaWx0ZXJDaGFuZ2UnLCAnb25TY3JvbGxCb3R0b20nLCAnb25DbG9zZScsICdvbk9wZW4nLCAndmFsdWVzJywgJ3VzZUNsaWNrYXdheU92ZXJsYXknXS5jb25jYXQoTm9ybWFsX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wia2V5c1wiXSkoYXJpYVByb3BzKSkpKSwge1xuICAgICAgICBvbkNsaWNrOiBkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgICRkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICRlcnJvcjogZXJyb3IsXG4gICAgICAgIFwiZGF0YS10ZXN0LXBvcG92ZXItaWRcIjogdGhpcy5wb3BvdmVySWQsXG4gICAgICAgICRwb3BvdmVyT3BlbjogdGhpcy5zdGF0ZS5vcGVuLFxuICAgICAgICBmbGV4OiB0cnVlLFxuICAgICAgICBlbGVtZW50UmVmOiB0aGlzLmhhbmRsZU1vdW50LFxuICAgICAgICByb2xlOiBcImxpc3Rib3hcIixcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkIHx8IHVuZGVmaW5lZFxuICAgICAgfSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTY3JlZW5SZWFkZXJDb250ZW50X2RlZmF1bHQuYSwge1xuICAgICAgICByb2xlOiBcInN0YXR1c1wiLFxuICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiXG4gICAgICB9LCB0aGlzLnN0YXRlLmxvYWRpbmdNb3JlTWVzc2FnZSksIHRoaXMucmVuZGVyQnV0dG9ucyhzZWxlY3RlZEl0ZW1zKSwgIWRpc2FibGVkICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJbnB1dFdyYXBwZXIsIHtcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICBcImFyaWEtb3duc1wiOiB0aGlzLnN0YXRlLm9wZW4gPyB0aGlzLnBvcG92ZXJJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IHRydWUsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiB0aGlzLnN0YXRlLm9wZW5cbiAgICAgIH0sIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJbnB1dCwgTm9ybWFsX2V4dGVuZHMoe1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcInRleHRib3hcIixcbiAgICAgICAgcmVmOiB0aGlzLmhhbmRsZUlucHV0TW91bnQsXG4gICAgICAgIG9uQmx1cjogdGhpcy5oYW5kbGVJbnB1dEJsdXIsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMuaGFuZGxlSW5wdXRGb2N1cyxcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5oYW5kbGVJbnB1dEtleURvd24sXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLmZpbHRlcktleXdvcmQsXG4gICAgICAgIGF1dG9DYXBpdGFsaXplOiBcIm9mZlwiLFxuICAgICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgIGF1dG9Db3JyZWN0OiBcIm9mZlwiLFxuICAgICAgICBzcGVsbENoZWNrOiBmYWxzZSxcbiAgICAgICAgXCJhcmlhLWF1dG9jb21wbGV0ZVwiOiBcImxpc3RcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBmbGV4QmFzaXM6IGlucHV0V2lkdGgsXG4gICAgICAgICAgd2lkdGg6IGlucHV0V2lkdGhcbiAgICAgICAgfSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IGN1cnJlbnRWYWx1ZXMubGVuZ3RoID8gJycgOiBwbGFjZWhvbGRlcixcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogdGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMuYXZhaWxhYmxlT3B0aW9uQ291bnQgPiAwID8gdGhpcy5hY3RpdmVJdGVtSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiB0aGlzLnN0YXRlLm9wZW4gPyB0aGlzLnBvcG92ZXJJZCA6IHVuZGVmaW5lZFxuICAgICAgfSwgYXJpYVByb3BzKSkpLCAhZGlzYWJsZWQgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFBvcG92ZXJfZGVmYXVsdC5hLCB7XG4gICAgICAgIG9wZW46IHRoaXMuc3RhdGUub3BlbiAmJiAhIXRoaXMuc3RhdGUuZWwsXG4gICAgICAgIGF1dG9DbG9zZVdoZW5PZmZTY3JlZW46IHRydWUsXG4gICAgICAgIGFuY2hvcjogdGhpcy5zdGF0ZS5lbCxcbiAgICAgICAgb25SZXF1ZXN0Q2xvc2U6IHRoaXMuaGFuZGxlUmVxdWVzdENsb3NlLFxuICAgICAgICBjYW5Db3ZlckFuY2hvcjogZmFsc2UsXG4gICAgICAgIGRlZmF1bHRQbGFjZW1lbnQ6IGRlZmF1bHRQbGFjZW1lbnQsXG4gICAgICAgIHJlcG9zaXRpb25Nb2RlOiBcImZsaXBcIixcbiAgICAgICAgaWQ6IHRoaXMucG9wb3ZlcklkXG4gICAgICB9LCB0aGlzLnJlbmRlck1lbnUpKSwgdXNlQ2xpY2thd2F5T3ZlcmxheSAmJiB0aGlzLnN0YXRlLm9wZW4gPyAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkT3ZlcmxheSwge1xuICAgICAgICBrZXk6IFwib3ZlcmxheVwiLFxuICAgICAgICAkcG9wb3Zlcm9wZW46IHRoaXMuc3RhdGUub3BlbixcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJvdmVybGF5XCJcbiAgICAgIH0pIDogbnVsbF07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5vcm1hbDtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuTm9ybWFsX2RlZmluZVByb3BlcnR5KE5vcm1hbF9Ob3JtYWwsIFwicHJvcFR5cGVzXCIsIE5vcm1hbF9wcm9wVHlwZXMpO1xuXG5Ob3JtYWxfZGVmaW5lUHJvcGVydHkoTm9ybWFsX05vcm1hbCwgXCJkZWZhdWx0UHJvcHNcIiwgTm9ybWFsX2RlZmF1bHRQcm9wcyk7XG5cbk5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfTm9ybWFsLCBcIk9wdGlvblwiLCBNdWx0aXNlbGVjdF9PcHRpb24pO1xuXG5Ob3JtYWxfZGVmaW5lUHJvcGVydHkoTm9ybWFsX05vcm1hbCwgXCJEaXZpZGVyXCIsIE1lbnVfW1wiRGl2aWRlclwiXSk7XG5cbk5vcm1hbF9kZWZpbmVQcm9wZXJ0eShOb3JtYWxfTm9ybWFsLCBcIkhlYWRpbmdcIiwgTWVudV9bXCJIZWFkaW5nXCJdKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgTXVsdGlzZWxlY3RfTm9ybWFsID0gKE5vcm1hbF9Ob3JtYWwpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTXVsdGlzZWxlY3QvTXVsdGlzZWxlY3QudHN4XG5mdW5jdGlvbiBNdWx0aXNlbGVjdF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IE11bHRpc2VsZWN0X3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBNdWx0aXNlbGVjdF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gTXVsdGlzZWxlY3RfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gTXVsdGlzZWxlY3RfZXh0ZW5kcygpIHsgTXVsdGlzZWxlY3RfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBNdWx0aXNlbGVjdF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gTXVsdGlzZWxlY3RfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBNdWx0aXNlbGVjdF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gTXVsdGlzZWxlY3RfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBNdWx0aXNlbGVjdF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgTXVsdGlzZWxlY3RfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gTXVsdGlzZWxlY3RfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgTXVsdGlzZWxlY3Rfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIE11bHRpc2VsZWN0X3NldFByb3RvdHlwZU9mKG8sIHApIHsgTXVsdGlzZWxlY3Rfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIE11bHRpc2VsZWN0X3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIE11bHRpc2VsZWN0X2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBNdWx0aXNlbGVjdF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBNdWx0aXNlbGVjdF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gTXVsdGlzZWxlY3RfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIE11bHRpc2VsZWN0X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBNdWx0aXNlbGVjdF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKE11bHRpc2VsZWN0X3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gTXVsdGlzZWxlY3RfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIE11bHRpc2VsZWN0X2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIE11bHRpc2VsZWN0X2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBNdWx0aXNlbGVjdF9nZXRQcm90b3R5cGVPZihvKSB7IE11bHRpc2VsZWN0X2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIE11bHRpc2VsZWN0X2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIE11bHRpc2VsZWN0X2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuXG5cblxuXG5cblxuXG5cbnZhciBNdWx0aXNlbGVjdF9wcm9wVHlwZXMgPSB7XG4gIGFsbG93TmV3VmFsdWVzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuICBhbmltYXRlTG9hZGluZzogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGNvbXBhY3Q6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGNvbnRyb2xsZWRGaWx0ZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGRlZmF1bHRQbGFjZW1lbnQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnYWJvdmUnLCAnYmVsb3cnLCAndmVydGljYWwnXSksXG4gIGRlZmF1bHRWYWx1ZXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFycmF5LFxuICBkZXNjcmliZWRCeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZXJyb3I6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGZvb3Rlck1lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGlubGluZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgaW5wdXRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGlzTG9hZGluZ09wdGlvbnM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGxhYmVsbGVkQnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgbG9hZGluZ01lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIG1lbnVTdHlsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICBuYW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIG5vT3B0aW9uc01lc3NhZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIG9uQ2hhbmdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbkNsb3NlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvbkZpbHRlckNoYW5nZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb25PcGVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBvblNjcm9sbEJvdHRvbTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgcGxhY2Vob2xkZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgdGFiQ29uZmlybXNOZXdWYWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgdXNlQ2xpY2thd2F5T3ZlcmxheTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgdmFsdWVzOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hcnJheVxufTtcbnZhciBNdWx0aXNlbGVjdF9kZWZhdWx0UHJvcHMgPSB7XG4gIGFsbG93TmV3VmFsdWVzOiBmYWxzZSxcbiAgYW5pbWF0ZUxvYWRpbmc6IGZhbHNlLFxuICBjb21wYWN0OiBmYWxzZSxcbiAgZGVmYXVsdFBsYWNlbWVudDogJ3ZlcnRpY2FsJyxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBpbmxpbmU6IGZhbHNlLFxuICBpc0xvYWRpbmdPcHRpb25zOiBmYWxzZSxcbiAgbWVudVN0eWxlOiB7fSxcbiAgbm9PcHRpb25zTWVzc2FnZTogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ05vIG1hdGNoZXMnKSxcbiAgcGxhY2Vob2xkZXI6IE9iamVjdChpMThuX1tcIl9cIl0pKCdTZWxlY3QuLi4nKSxcbiAgdGFiQ29uZmlybXNOZXdWYWx1ZTogZmFsc2UsXG4gIHVzZUNsaWNrYXdheU92ZXJsYXk6IGZhbHNlXG59O1xuXG5mdW5jdGlvbiBpc0NvbXBhY3QocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmNvbXBhY3QgPT09IHRydWU7XG59XG5cbnZhciBNdWx0aXNlbGVjdF9NdWx0aXNlbGVjdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBNdWx0aXNlbGVjdF9pbmhlcml0cyhNdWx0aXNlbGVjdCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IE11bHRpc2VsZWN0X2NyZWF0ZVN1cGVyKE11bHRpc2VsZWN0KTtcblxuICBmdW5jdGlvbiBNdWx0aXNlbGVjdCgpIHtcbiAgICBNdWx0aXNlbGVjdF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNdWx0aXNlbGVjdCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBNdWx0aXNlbGVjdF9jcmVhdGVDbGFzcyhNdWx0aXNlbGVjdCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgLy8gQGRvY3MtcHJvcHMtdHlwZSBNdWx0aXNlbGVjdFByb3BzQmFzZVxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICBpZiAoaXNDb21wYWN0KHRoaXMucHJvcHMpKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoTXVsdGlzZWxlY3RfQ29tcGFjdCwgTXVsdGlzZWxlY3RfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJtdWx0aXNlbGVjdFwiXG4gICAgICAgIH0sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wib21pdFwiXSkodGhpcy5wcm9wcywgJ2NvbXBhY3QnKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KE11bHRpc2VsZWN0X05vcm1hbCwgTXVsdGlzZWxlY3RfZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwibXVsdGlzZWxlY3RcIlxuICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKSh0aGlzLnByb3BzLCAnY29tcGFjdCcpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE11bHRpc2VsZWN0O1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5NdWx0aXNlbGVjdF9kZWZpbmVQcm9wZXJ0eShNdWx0aXNlbGVjdF9NdWx0aXNlbGVjdCwgXCJwcm9wVHlwZXNcIiwgTXVsdGlzZWxlY3RfcHJvcFR5cGVzKTtcblxuTXVsdGlzZWxlY3RfZGVmaW5lUHJvcGVydHkoTXVsdGlzZWxlY3RfTXVsdGlzZWxlY3QsIFwiZGVmYXVsdFByb3BzXCIsIE11bHRpc2VsZWN0X2RlZmF1bHRQcm9wcyk7XG5cbk11bHRpc2VsZWN0X2RlZmluZVByb3BlcnR5KE11bHRpc2VsZWN0X011bHRpc2VsZWN0LCBcIk9wdGlvblwiLCBNdWx0aXNlbGVjdF9PcHRpb24pO1xuXG5NdWx0aXNlbGVjdF9kZWZpbmVQcm9wZXJ0eShNdWx0aXNlbGVjdF9NdWx0aXNlbGVjdCwgXCJIZWFkaW5nXCIsIE1lbnVfW1wiSGVhZGluZ1wiXSk7XG5cbk11bHRpc2VsZWN0X2RlZmluZVByb3BlcnR5KE11bHRpc2VsZWN0X011bHRpc2VsZWN0LCBcIkRpdmlkZXJcIiwgTWVudV9bXCJEaXZpZGVyXCJdKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX011bHRpc2VsZWN0X011bHRpc2VsZWN0ID0gKE11bHRpc2VsZWN0X011bHRpc2VsZWN0KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvTXVsdGlzZWxlY3QvaW5kZXgudHNcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVJlYWN0UmVmOyB9KTtcbi8qKlxuICogVXBkYXRlcyBhIFJlYWN0IHJlZi4gQ2FsbGJhY2sgcmVmcyBhbmQgb2JqZWN0IHJlZnMgKGZyb20gYGNyZWF0ZVJlZmAgYW5kIGB1c2VSZWZgKSBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSByZWYgLSBUaGUgUmVhY3QgY2FsbGJhY2sgb3Igb2JqZWN0IHJlZi4gQ2FuIGJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gVGhlIG5ldyB2YWx1ZSBvZiB0aGUgcmVmLlxuICovXG5mdW5jdGlvbiB1cGRhdGVSZWFjdFJlZihyZWYsIGN1cnJlbnQpIHtcbiAgaWYgKHJlZikge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoY3VycmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSBwdWJsaWMgc2lnbmF0dXJlIG9mIHRoaXMgdXRpbCB1c2VzIFJlYWN0LlJlZjxUPiB0byBtaXJyb3IgdGhlIHdheSBSZWFjdCB0eXBlcyByZWZzLlxuICAgICAgLy8gdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIHNpZ25hbCBcIndlIHdpbGwgdGFrZSBjYXJlIG9mIHNldHRpbmcgJ2N1cnJlbnQnLCBub3QgeW91XCIuXG4gICAgICByZWYuY3VycmVudCA9IGN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB9XG4gIH1cbn1cblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9NZW51XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvU2NyZWVuUmVhZGVyQ29udGVudFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0Ryb3Bkb3duXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQnV0dG9uXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvUG9wb3ZlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvZmlsdGVyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvVGV4dFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvTGlua1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1Jlc3VsdHNNZW51XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9Cb3hcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9DaGlwXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9rZXlib2FyZFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNDEpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBDaGlwX0NoaXA7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvY29sb3JcIlxudmFyIGNvbG9yXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9pMThuXCJcbnZhciBpMThuXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2gvb21pdFwiXG52YXIgb21pdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcbnZhciBvbWl0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKG9taXRfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9Dcm9zc01hcmsudHN4XG52YXIgQ3Jvc3NNYXJrID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIlxudmFyIENsaWNrYWJsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBDbGlja2FibGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQ2xpY2thYmxlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NoaXAvQ2hpcFN0eWxlcy50c1xuXG5cblxudmFyIFN0eWxlZEJhc2ljID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ2hpcFN0eWxlc19fU3R5bGVkQmFzaWNcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXNkM3RzaC0wXCJcbn0pKFtcIlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2ZsZXg6MCAxIGF1dG87bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDNweCk7Ym9yZGVyLXJhZGl1czoycHg7XCIsIFwiO1wiLCBcIiBcIiwgXCIgXCIsIFwiXCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdpbmxpbmUtZmxleCcpLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGFwcGVhcmFuY2UnLCB7XG4gIFwiZGVmYXVsdFwiOiB7XG4gICAgZW50ZXJwcmlzZToge1xuICAgICAgZGFyazogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5NDUsXG4gICAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTJcbiAgICB9LFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5uZXV0cmFsMTAwXG4gIH0sXG4gIGluZm86IHtcbiAgICBlbnRlcnByaXNlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmluZm9Db2xvckwxMFxuICB9LFxuICBzdWNjZXNzOiB7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zdWNjZXNzQ29sb3JMMTBcbiAgfSxcbiAgd2FybmluZzoge1xuICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ud2FybmluZ0NvbG9yTDEwXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lcnJvckNvbG9yTDEwLFxuICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlXG4gIH0sXG4gIG91dGxpbmU6IHtcbiAgICBwcmlzbWE6ICd0cmFuc3BhcmVudCdcbiAgfSxcbiAgY3VzdG9tOiBmdW5jdGlvbiBjdXN0b20oX3JlZikge1xuICAgIHZhciAkYmFja2dyb3VuZENvbG9yID0gX3JlZi4kYmFja2dyb3VuZENvbG9yO1xuICAgIHJldHVybiAkYmFja2dyb3VuZENvbG9yO1xuICB9XG59KSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciAkYXBwZWFyYW5jZSA9IF9yZWYyLiRhcHBlYXJhbmNlO1xuICByZXR1cm4gJGFwcGVhcmFuY2UgPT09ICdvdXRsaW5lJyAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQm9yZGVyKTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCIsbGluZS1oZWlnaHQ6XCIsIFwiO21hcmdpbjowIDJweCAycHggMDtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0udGV4dEdyYXksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGluZUhlaWdodCksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiO2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjFweDtcIl0sIGZ1bmN0aW9uIChfcmVmMykge1xuICAgIHZhciAkYXBwZWFyYW5jZSA9IF9yZWYzLiRhcHBlYXJhbmNlO1xuICAgIHJldHVybiAkYXBwZWFyYW5jZSA9PT0gJ2Vycm9yJyA/IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9ySW52ZXJ0ZWQgOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRlZmF1bHQ7XG4gIH0pXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBjb21mb3J0YWJsZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiaGVpZ2h0OmNhbGMoXCIsIFwiIC0gNnB4KTtwYWRkaW5nOjRweCA3cHg7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmlucHV0SGVpZ2h0KSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJoZWlnaHQ6Y2FsYyhcIiwgXCIgLSA2cHgpO3BhZGRpbmc6MnB4IDRweDtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW5wdXRIZWlnaHQpXG4gIH0sXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJoZWlnaHQ6Y2FsYyhcIiwgXCIgLSA4cHgpO3BhZGRpbmc6N3B4IDdweDtmb250LXNpemU6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnB1dEhlaWdodCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsKSxcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJoZWlnaHQ6Y2FsYyhcIiwgXCIgLSA4cHgpO3BhZGRpbmc6M3B4IDdweDtmb250LXNpemU6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnB1dEhlaWdodCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsKVxuICB9XG59KSwgZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciAkZGlzYWJsZWQgPSBfcmVmNC4kZGlzYWJsZWQ7XG4gIHJldHVybiAkZGlzYWJsZWQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGFwcGVhcmFuY2UnLCB7XG4gICAgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGVudGVycHJpc2U6IHtcbiAgICAgICAgZGFyazogJ3JnYmEoMCwgMCwgMCwgMC4xNSknLFxuICAgICAgICBsaWdodDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknXG4gICAgICB9LFxuICAgICAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kRGlzYWJsZWRcbiAgICB9LFxuICAgIGluZm86IHtcbiAgICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJtaXhpbnNcIl0uY29sb3JXaXRoQWxwaGEodGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbmZvQ29sb3JMMTAsIDAuMylcbiAgICB9LFxuICAgIHN1Y2Nlc3M6IHtcbiAgICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJtaXhpbnNcIl0uY29sb3JXaXRoQWxwaGEodGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zdWNjZXNzQ29sb3JMMTAsIDAuMylcbiAgICB9LFxuICAgIHdhcm5pbmc6IHtcbiAgICAgIGVudGVycHJpc2U6IHRoZW1lc19bXCJtaXhpbnNcIl0uY29sb3JXaXRoQWxwaGEodGhlbWVzX1tcInZhcmlhYmxlc1wiXS53YXJuaW5nQ29sb3JMMTAsIDAuMylcbiAgICB9LFxuICAgIGVycm9yOiB7XG4gICAgICBlbnRlcnByaXNlOiB0aGVtZXNfW1wibWl4aW5zXCJdLmNvbG9yV2l0aEFscGhhKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZXJyb3JDb2xvckwxMCwgMC4zKSxcbiAgICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZERpc2FibGVkXG4gICAgfSxcbiAgICBvdXRsaW5lOiB7XG4gICAgICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmREaXNhYmxlZFxuICAgIH0sXG4gICAgY3VzdG9tOiB7XG4gICAgICBlbnRlcnByaXNlOiB7XG4gICAgICAgIGRhcms6ICdyZ2JhKDAsIDAsIDAsIDAuMTUpJyxcbiAgICAgICAgbGlnaHQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJ1xuICAgICAgfSxcbiAgICAgIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZERpc2FibGVkXG4gICAgfVxuICB9KSk7XG59KTtcbnZhciBTdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoU3R5bGVkQmFzaWMpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDaGlwU3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXNkM3RzaC0xXCJcbn0pKFtcImFsaWduLWl0ZW1zOmNlbnRlcjtcIl0pO1xudmFyIFN0eWxlZElubmVyID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ2hpcFN0eWxlc19fU3R5bGVkSW5uZXJcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXNkM3RzaC0yXCJcbn0pKFtcImRpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTtcIl0pO1xudmFyIFN0eWxlZEljb24gPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDaGlwU3R5bGVzX19TdHlsZWRJY29uXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFzZDN0c2gtM1wiXG59KShbXCJmbGV4OjAgMCBhdXRvO21hcmdpbi1yaWdodDpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnM3B4JyxcbiAgcHJpc21hOiB7XG4gICAgY29tcGFjdDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nWFNtYWxsLFxuICAgIGNvbWZvcnRhYmxlOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdTbWFsbFxuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRkaXNhYmxlZCcsIHtcbiAgXCJ0cnVlXCI6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWQsXG4gIFwiZmFsc2VcIjoge1xuICAgIGVudGVycHJpc2U6IGZ1bmN0aW9uIGVudGVycHJpc2UoX3JlZjUpIHtcbiAgICAgIHZhciAkZm9yZWdyb3VuZENvbG9yID0gX3JlZjUuJGZvcmVncm91bmRDb2xvcjtcbiAgICAgIHJldHVybiAkZm9yZWdyb3VuZENvbG9yIHx8IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGVmYXVsdDtcbiAgICB9LFxuICAgIHByaXNtYTogZnVuY3Rpb24gcHJpc21hKF9yZWY2KSB7XG4gICAgICB2YXIgJGZvcmVncm91bmRDb2xvciA9IF9yZWY2LiRmb3JlZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgJGFwcGVhcmFuY2UgPSBfcmVmNi4kYXBwZWFyYW5jZTtcbiAgICAgIHJldHVybiAkZm9yZWdyb3VuZENvbG9yIHx8ICgkYXBwZWFyYW5jZSA9PT0gJ2Vycm9yJyA/IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9ySW52ZXJ0ZWQgOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRlZmF1bHQpO1xuICAgIH1cbiAgfVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IHtcbiAgICBjb21wYWN0OiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJmb250LXNpemU6MTRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO1wiXSksXG4gICAgY29tZm9ydGFibGU6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImZvbnQtc2l6ZToxOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7XCJdKVxuICB9XG59KSk7XG52YXIgU3R5bGVkTGFiZWwgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDaGlwU3R5bGVzX19TdHlsZWRMYWJlbFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xc2QzdHNoLTRcIlxufSkoW1wiXCIsIFwiIGZsZXg6MCAxIGF1dG87Y29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5lbGxpcHNpcygpLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGRpc2FibGVkJywge1xuICBcInRydWVcIjogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZCxcbiAgXCJmYWxzZVwiOiB7XG4gICAgZW50ZXJwcmlzZTogZnVuY3Rpb24gZW50ZXJwcmlzZShfcmVmNykge1xuICAgICAgdmFyICRmb3JlZ3JvdW5kQ29sb3IgPSBfcmVmNy4kZm9yZWdyb3VuZENvbG9yO1xuICAgICAgcmV0dXJuICRmb3JlZ3JvdW5kQ29sb3IgfHwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0O1xuICAgIH0sXG4gICAgcHJpc21hOiBmdW5jdGlvbiBwcmlzbWEoX3JlZjgpIHtcbiAgICAgIHZhciAkZm9yZWdyb3VuZENvbG9yID0gX3JlZjguJGZvcmVncm91bmRDb2xvcixcbiAgICAgICAgICAkYXBwZWFyYW5jZSA9IF9yZWY4LiRhcHBlYXJhbmNlO1xuICAgICAgcmV0dXJuICRmb3JlZ3JvdW5kQ29sb3IgfHwgKCRhcHBlYXJhbmNlID09PSAnZXJyb3InID8gdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JJbnZlcnRlZCA6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlKTtcbiAgICB9XG4gIH1cbn0pKTtcbnZhciBTdHlsZWRSZW1vdmUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuc3Bhbi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ2hpcFN0eWxlc19fU3R5bGVkUmVtb3ZlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFzZDN0c2gtNVwiXG59KShbXCJmbGV4OjAgMCBhdXRvO1wiLCBcIjtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nLWxlZnQ6XCIsIFwiO2ZvbnQtc2l6ZTpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nUXVhcnRlciwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgY29tcGFjdDogJzlweCcsXG4gICAgY29tZm9ydGFibGU6ICcxMC41cHgnXG4gIH0pLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICB2YXIgJGRpc2FibGVkID0gX3JlZjkuJGRpc2FibGVkLFxuICAgICAgICAkZm9yZWdyb3VuZENvbG9yID0gX3JlZjkuJGZvcmVncm91bmRDb2xvcjtcbiAgICByZXR1cm4gJGRpc2FibGVkID8gdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZCA6ICRmb3JlZ3JvdW5kQ29sb3IgfHwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS50ZXh0R3JheTtcbiAgfSksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZm9udC1zaXplOlwiLCBcIjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWxlZnQ6XCIsIFwiO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2ZvbnQtc2l6ZTo5cHg7Y29sb3I6XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgY29tcGFjdDogJzlweCcsXG4gICAgY29tZm9ydGFibGU6ICcxMC41cHgnXG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBjb21wYWN0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmdYU21hbGwsXG4gICAgY29tZm9ydGFibGU6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1NtYWxsXG4gIH0pLCBmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgdmFyICRkaXNhYmxlZCA9IF9yZWYxMC4kZGlzYWJsZWQsXG4gICAgICAgICRmb3JlZ3JvdW5kQ29sb3IgPSBfcmVmMTAuJGZvcmVncm91bmRDb2xvcjtcbiAgICByZXR1cm4gJGRpc2FibGVkID8gdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZCA6ICRmb3JlZ3JvdW5kQ29sb3IgfHwgJ2luaGVyaXQnO1xuICB9KVxufSkpO1xudmFyIFN0eWxlZENsaWNrYWJsZSA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShTdHlsZWRCYXNpYy53aXRoQ29tcG9uZW50KENsaWNrYWJsZV9kZWZhdWx0LmEpKS53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiQ2hpcFN0eWxlc19fU3R5bGVkQ2xpY2thYmxlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFzZDN0c2gtNlwiXG59KShbXCJmbGV4OjAgMSBhdXRvO2xpbmUtaGVpZ2h0OjE2cHg7Y3Vyc29yOnBvaW50ZXI7Jjpmb2N1c3tcIiwgXCI7fSY6bm90KFtkaXNhYmxlZF0pOmhvdmVye1wiLCBcIjt9XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJveC1zaGFkb3c6XCIsIFwiO2NvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3csIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubGlua0NvbG9yKSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7XCIsIFwie2JhY2tncm91bmQtY29sb3I6XCIsIFwiO2JveC1zaGFkb3c6MCAwIDAgM3B4IFwiLCBcIjt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckFjdGl2ZSxcbiAgLyogc2Mtc2VsICovXG4gIFN0eWxlZFJlbW92ZSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzQ29sb3IpXG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiLCBcIntjb2xvcjpcIiwgXCI7fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRhcHBlYXJhbmNlJywge1xuICAgIFwiZGVmYXVsdFwiOiB7XG4gICAgICBkYXJrOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXkzMCxcbiAgICAgIGxpZ2h0OiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmdyYXk5NlxuICAgIH0sXG4gICAgaW5mbzogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbmZvQ29sb3JMMjAsXG4gICAgc3VjY2VzczogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zdWNjZXNzQ29sb3JMMjAsXG4gICAgd2FybmluZzogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS53YXJuaW5nQ29sb3JMMjAsXG4gICAgZXJyb3I6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZXJyb3JDb2xvckwyMCxcbiAgICBjdXN0b206IHtcbiAgICAgIGRhcms6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTMwLFxuICAgICAgbGlnaHQ6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZ3JheTk2XG4gICAgfVxuICB9KSxcbiAgLyogc2Mtc2VsICovXG4gIFN0eWxlZFJlbW92ZSwgZnVuY3Rpb24gKF9yZWYxMSkge1xuICAgIHZhciAkZm9yZWdyb3VuZENvbG9yID0gX3JlZjExLiRmb3JlZ3JvdW5kQ29sb3I7XG4gICAgcmV0dXJuICRmb3JlZ3JvdW5kQ29sb3IgfHwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5saW5rQ29sb3I7XG4gIH0pLFxuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIiwgXCJ7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCIsIFwiO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlLFxuICAvKiBzYy1zZWwgKi9cbiAgU3R5bGVkUmVtb3ZlLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXIsIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgJGFwcGVhcmFuY2UgPSBfcmVmMTIuJGFwcGVhcmFuY2U7XG4gICAgcmV0dXJuICRhcHBlYXJhbmNlID09PSAnZXJyb3InICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9ySW52ZXJ0ZWQpO1xuICB9KVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZSBcIiwgXCJ7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7fVwiXSxcbiAgLyogc2Mtc2VsICovXG4gIFN0eWxlZFJlbW92ZSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUFjdGl2ZSlcbn0pKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ2hpcC9DaGlwLnRzeFxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxuXG5cblxuXG52YXIgcHJvcFR5cGVzID0ge1xuICBhcHBlYXJhbmNlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZihbJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2Vycm9yJywgJ291dGxpbmUnXSksXG4gIGJhY2tncm91bmRDb2xvcjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBjaGlsZHJlbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZS5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZm9yZWdyb3VuZENvbG9yOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGljb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIG9uUmVxdWVzdFJlbW92ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcblxuICAvKiogSW5jbHVkZXMgdGhpcyB2YWx1ZSBpbiBgb25SZXF1ZXN0UmVtb3ZlYCBjYWxsYmFja3MuICovXG4gIHZhbHVlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hbnlcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUocHJvcHMpIHtcbiAgcmV0dXJuICEhcHJvcHMub25SZXF1ZXN0UmVtb3ZlO1xufVxuXG5mdW5jdGlvbiBnZXRTaGFyZWRQcm9wcyhwcm9wcykge1xuICB2YXIgYXBwZWFyYW5jZSA9IHByb3BzLmFwcGVhcmFuY2UsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgICAgZm9yZWdyb3VuZENvbG9yID0gcHJvcHMuZm9yZWdyb3VuZENvbG9yLFxuICAgICAgaWNvbiA9IHByb3BzLmljb24sXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJhcHBlYXJhbmNlXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIFwiZGlzYWJsZWRcIiwgXCJmb3JlZ3JvdW5kQ29sb3JcIiwgXCJpY29uXCJdKTsgLy8gVmFsaWRhdGUgdGhhdCB0aGUgY29sb3IgYmVpbmcgcmVuZGVyZWQgaW50byB0aGUgQ1NTIGlzIHJlc3RyaWN0ZWQgdG8gb25seSB2YWx1ZXMgdGhhdCBhcmUgb2YgQ1NTIHR5cGUgPGNvbG9yPi5cblxuXG4gIHZhciAkZm9yZWdyb3VuZENvbG9yID0gZm9yZWdyb3VuZENvbG9yICYmIE9iamVjdChjb2xvcl9bXCJpc0NTU0NvbG9yXCJdKShmb3JlZ3JvdW5kQ29sb3IpID8gZm9yZWdyb3VuZENvbG9yIDogdW5kZWZpbmVkO1xuICB2YXIgJGJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvciAmJiBPYmplY3QoY29sb3JfW1wiaXNDU1NDb2xvclwiXSkoYmFja2dyb3VuZENvbG9yKSA/IGJhY2tncm91bmRDb2xvciA6IHVuZGVmaW5lZDtcbiAgdmFyIHNoYXJlZFByb3BzID0ge1xuICAgICdkYXRhLXRlc3QnOiAnY2hpcCcsXG4gICAgJGFwcGVhcmFuY2U6IGFwcGVhcmFuY2UgfHwgKCRiYWNrZ3JvdW5kQ29sb3IgPyAnY3VzdG9tJyA6ICdkZWZhdWx0JyksXG4gICAgJGJhY2tncm91bmRDb2xvcjogJGJhY2tncm91bmRDb2xvcixcbiAgICAkZm9yZWdyb3VuZENvbG9yOiAkZm9yZWdyb3VuZENvbG9yLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBpY29uOiBpY29uXG4gIH07XG4gIHJldHVybiBbc2hhcmVkUHJvcHMsIG90aGVyUHJvcHNdO1xufVxuXG5mdW5jdGlvbiBDaGlwSW50ZXJhY3RpdmUocHJvcHMpIHtcbiAgdmFyIF9nZXRTaGFyZWRQcm9wcyA9IGdldFNoYXJlZFByb3BzKHByb3BzKSxcbiAgICAgIF9nZXRTaGFyZWRQcm9wczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0U2hhcmVkUHJvcHMsIDIpLFxuICAgICAgc2hhcmVkUHJvcHMgPSBfZ2V0U2hhcmVkUHJvcHMyWzBdLFxuICAgICAgb3duUHJvcHMgPSBfZ2V0U2hhcmVkUHJvcHMyWzFdO1xuXG4gIHZhciAkYXBwZWFyYW5jZSA9IHNoYXJlZFByb3BzLiRhcHBlYXJhbmNlLFxuICAgICAgJGZvcmVncm91bmRDb2xvciA9IHNoYXJlZFByb3BzLiRmb3JlZ3JvdW5kQ29sb3IsXG4gICAgICBkaXNhYmxlZCA9IHNoYXJlZFByb3BzLmRpc2FibGVkLFxuICAgICAgaWNvbiA9IHNoYXJlZFByb3BzLmljb24sXG4gICAgICBvdGhlclNoYXJlZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNoYXJlZFByb3BzLCBbXCIkYXBwZWFyYW5jZVwiLCBcIiRmb3JlZ3JvdW5kQ29sb3JcIiwgXCJkaXNhYmxlZFwiLCBcImljb25cIl0pO1xuXG4gIHZhciBjaGlsZHJlbiA9IG93blByb3BzLmNoaWxkcmVuLFxuICAgICAgZWxlbWVudFJlZiA9IG93blByb3BzLmVsZW1lbnRSZWYsXG4gICAgICBvblJlcXVlc3RSZW1vdmUgPSBvd25Qcm9wcy5vblJlcXVlc3RSZW1vdmUsXG4gICAgICB2YWx1ZSA9IG93blByb3BzLnZhbHVlLFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvd25Qcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJlbGVtZW50UmVmXCIsIFwib25SZXF1ZXN0UmVtb3ZlXCIsIFwidmFsdWVcIl0pO1xuXG4gIHZhciBoYW5kbGVSZW1vdmVDbGljayA9IE9iamVjdChleHRlcm5hbF9yZWFjdF9bXCJ1c2VDYWxsYmFja1wiXSkoZnVuY3Rpb24gKGUpIHtcbiAgICBvblJlcXVlc3RSZW1vdmUoZSwge1xuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSk7XG4gIH0sIFtvblJlcXVlc3RSZW1vdmUsIHZhbHVlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2xpY2thYmxlLCBfZXh0ZW5kcyh7XG4gICAgJGFwcGVhcmFuY2U6ICRhcHBlYXJhbmNlLFxuICAgICRkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgJGZvcmVncm91bmRDb2xvcjogJGZvcmVncm91bmRDb2xvcixcbiAgICBcImRhdGEtdGVzdC12YWx1ZVwiOiB2YWx1ZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZWxlbWVudFJlZjogZWxlbWVudFJlZixcbiAgICBvbkNsaWNrOiBoYW5kbGVSZW1vdmVDbGlja1xuICB9LCBvdGhlclNoYXJlZFByb3BzLCBvbWl0X2RlZmF1bHQoKShvdGhlclByb3BzLCBPYmplY3Qua2V5cyhwcm9wVHlwZXMpKSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJbm5lciwgbnVsbCwgaWNvbiAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwge1xuICAgICRhcHBlYXJhbmNlOiAkYXBwZWFyYW5jZSxcbiAgICAkZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICRmb3JlZ3JvdW5kQ29sb3I6ICRmb3JlZ3JvdW5kQ29sb3JcbiAgfSwgaWNvbiksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbCwge1xuICAgIFwiZGF0YS10ZXN0XCI6IFwibGFiZWxcIixcbiAgICAkYXBwZWFyYW5jZTogJGFwcGVhcmFuY2UsXG4gICAgJGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAkZm9yZWdyb3VuZENvbG9yOiAkZm9yZWdyb3VuZENvbG9yXG4gIH0sIGNoaWxkcmVuKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFJlbW92ZSwge1xuICAgICRkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgJGZvcmVncm91bmRDb2xvcjogJGZvcmVncm91bmRDb2xvclxuICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQ3Jvc3NNYXJrW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJjcm9zc21hcmtcIixcbiAgICBlbnRlcnByaXNlU2l6ZTogMC44NSxcbiAgICBwcmlzbWFTaXplOiBcInNtYWxsXCIsXG4gICAgc2NyZWVuUmVhZGVyVGV4dDogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ1JlbW92ZScpXG4gIH0pKSkpO1xufVxuXG5mdW5jdGlvbiBDaGlwTm9uSW50ZXJhY3RpdmUocHJvcHMpIHtcbiAgdmFyIF9nZXRTaGFyZWRQcm9wczMgPSBnZXRTaGFyZWRQcm9wcyhwcm9wcyksXG4gICAgICBfZ2V0U2hhcmVkUHJvcHM0ID0gX3NsaWNlZFRvQXJyYXkoX2dldFNoYXJlZFByb3BzMywgMiksXG4gICAgICBzaGFyZWRQcm9wcyA9IF9nZXRTaGFyZWRQcm9wczRbMF0sXG4gICAgICBvd25Qcm9wcyA9IF9nZXRTaGFyZWRQcm9wczRbMV07XG5cbiAgdmFyICRhcHBlYXJhbmNlID0gc2hhcmVkUHJvcHMuJGFwcGVhcmFuY2UsXG4gICAgICAkZm9yZWdyb3VuZENvbG9yID0gc2hhcmVkUHJvcHMuJGZvcmVncm91bmRDb2xvcixcbiAgICAgIGRpc2FibGVkID0gc2hhcmVkUHJvcHMuZGlzYWJsZWQsXG4gICAgICBpY29uID0gc2hhcmVkUHJvcHMuaWNvbixcbiAgICAgIG90aGVyU2hhcmVkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc2hhcmVkUHJvcHMsIFtcIiRhcHBlYXJhbmNlXCIsIFwiJGZvcmVncm91bmRDb2xvclwiLCBcImRpc2FibGVkXCIsIFwiaWNvblwiXSk7XG5cbiAgdmFyIGNoaWxkcmVuID0gb3duUHJvcHMuY2hpbGRyZW4sXG4gICAgICBlbGVtZW50UmVmID0gb3duUHJvcHMuZWxlbWVudFJlZixcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3duUHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiZWxlbWVudFJlZlwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWQsIF9leHRlbmRzKHtcbiAgICAkYXBwZWFyYW5jZTogJGFwcGVhcmFuY2UsXG4gICAgJGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICByZWY6IGVsZW1lbnRSZWZcbiAgfSwgb3RoZXJTaGFyZWRQcm9wcywgb21pdF9kZWZhdWx0KCkob3RoZXJQcm9wcywgT2JqZWN0LmtleXMocHJvcFR5cGVzKSkpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSW5uZXIsIG51bGwsIGljb24gJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEljb24sIHtcbiAgICAkYXBwZWFyYW5jZTogJGFwcGVhcmFuY2UsXG4gICAgJGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAkZm9yZWdyb3VuZENvbG9yOiAkZm9yZWdyb3VuZENvbG9yXG4gIH0sIGljb24pLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkTGFiZWwsIHtcbiAgICBcImRhdGEtdGVzdFwiOiBcImxhYmVsXCIsXG4gICAgJGFwcGVhcmFuY2U6ICRhcHBlYXJhbmNlLFxuICAgICRkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgJGZvcmVncm91bmRDb2xvcjogJGZvcmVncm91bmRDb2xvclxuICB9LCBjaGlsZHJlbikpKTtcbn1cblxuZnVuY3Rpb24gQ2hpcChwcm9wcykge1xuICAvLyBAZG9jcy1wcm9wcy10eXBlIENoaXBQcm9wc0Jhc2VcbiAgcmV0dXJuIGlzSW50ZXJhY3RpdmUocHJvcHMpID8gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENoaXBJbnRlcmFjdGl2ZSwgcHJvcHMpIDogLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KENoaXBOb25JbnRlcmFjdGl2ZSwgcHJvcHMpO1xufVxuXG5DaGlwLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbkNoaXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQ2hpcF9DaGlwID0gKENoaXApO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ2hpcC9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDcm9zc01hcms7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DbG9zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DbG9zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2xvc2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNzA3MTEgNS4yOTI4OUM2LjMxNjU4IDQuOTAyMzcgNS42ODM0MiA0LjkwMjM3IDUuMjkyODkgNS4yOTI4OUM0LjkwMjM3IDUuNjgzNDIgNC45MDIzNyA2LjMxNjU4IDUuMjkyODkgNi43MDcxMUwxMC41ODU4IDEyTDUuMjkyOSAxNy4yOTI5QzQuOTAyMzggMTcuNjgzNCA0LjkwMjM4IDE4LjMxNjYgNS4yOTI5IDE4LjcwNzFDNS42ODM0MiAxOS4wOTc2IDYuMzE2NTkgMTkuMDk3NiA2LjcwNzExIDE4LjcwNzFMMTIgMTMuNDE0MkwxNy4yOTI5IDE4LjcwNzFDMTcuNjgzNCAxOS4wOTc2IDE4LjMxNjYgMTkuMDk3NiAxOC43MDcxIDE4LjcwNzFDMTkuMDk3NiAxOC4zMTY2IDE5LjA5NzYgMTcuNjgzNCAxOC43MDcxIDE3LjI5MjlMMTMuNDE0MiAxMkwxOC43MDcxIDYuNzA3MTFDMTkuMDk3NiA2LjMxNjU4IDE5LjA5NzYgNS42ODM0MiAxOC43MDcxIDUuMjkyODlDMTguMzE2NiA0LjkwMjM3IDE3LjY4MzQgNC45MDIzNyAxNy4yOTI5IDUuMjkyODlMMTIgMTAuNTg1OEw2LjcwNzExIDUuMjkyODlaXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIFByaXNtYTE2KF9yZWYyKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYyKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4yMDI0IDIuNjkwMDlDMTIuNTA5MiAyLjM4MzI1IDEzLjAwNjcgMi4zODMyNSAxMy4zMTM2IDIuNjkwMDlDMTMuNjIwNCAyLjk5NjkzIDEzLjYyMDQgMy40OTQ0MiAxMy4zMTM2IDMuODAxMjZMOS4xMTcyMSA3Ljk5NzYyTDEzLjMxMTQgMTIuMTkxOEMxMy42MjA2IDEyLjUwMSAxMy42MjA2IDEzLjAwMjMgMTMuMzExNCAxMy4zMTE0QzEzLjAwMjMgMTMuNjIwNiAxMi41MDEgMTMuNjIwNiAxMi4xOTE4IDEzLjMxMTRMNy45OTc2MiA5LjExNzIxTDMuODg1IDEzLjIyOThDMy41NzgxNiAxMy41MzY3IDMuMDgwNjcgMTMuNTM2NyAyLjc3MzgzIDEzLjIyOThDMi40NjY5OSAxMi45MjMgMi40NjY5OSAxMi40MjU1IDIuNzczODMgMTIuMTE4N0w2Ljg4NjQ1IDguMDA2MDRMMi42OTE4MyAzLjgxMTQyQzIuMzgyNjcgMy41MDIyNiAyLjM4MjY3IDMuMDAxIDIuNjkxODMgMi42OTE4M0MzLjAwMSAyLjM4MjY3IDMuNTAyMjYgMi4zODI2NyAzLjgxMTQyIDIuNjkxODNMOC4wMDYwNCA2Ljg4NjQ2TDEyLjIwMjQgMi42OTAwOVpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ3Jvc3NNYXJrKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DbG9zZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYSxcbiAgICBQcmlzbWExNjogUHJpc21hMTYsXG4gICAgUHJpc21hMjQ6IFByaXNtYTI0XG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9DbG9zZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2gvb21pdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvY29sb3JcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1ZHOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxudmFyIFN0eWxlZCA9IHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN2Zy53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiU1ZHX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWJ6MHJ5aC0wXCJcbn0pKFtcImZsZXg6MCAwIGF1dG87XCJdKTtcbmZ1bmN0aW9uIFNWRyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEljb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cbnZhciBpbmxpbmVTdHlsZXMgPSB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xufTtcbnZhciBibG9ja1N0eWxlcyA9IHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgZmxleDogJzAgMCBhdXRvJyxcbiAgbWFyZ2luOiAnMCBhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJ1xufTtcbnZhciBwcm9wVHlwZXMgPSB7XG4gIEVudGVycHJpc2U6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgZW50ZXJwcmlzZVNpemU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgZW50ZXJwcmlzZVdpZHRoOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIGVudGVycHJpc2VIZWlnaHQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgUHJpc21hMjQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxuICBQcmlzbWEyMDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBQcmlzbWExNjogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBwcmlzbWFTaXplOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLFxuICBpbmxpbmU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuYm9vbCxcbiAgc2NyZWVuUmVhZGVyVGV4dDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmdcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBpbmxpbmU6IHRydWUsXG4gIHByaXNtYVNpemU6ICdtZWRpdW0nXG59O1xuZnVuY3Rpb24gSWNvbihfcmVmKSB7XG4gIHZhciBFbnRlcnByaXNlID0gX3JlZi5FbnRlcnByaXNlLFxuICAgICAgUHJpc21hMjQgPSBfcmVmLlByaXNtYTI0LFxuICAgICAgUHJpc21hMjAgPSBfcmVmLlByaXNtYTIwLFxuICAgICAgUHJpc21hMTYgPSBfcmVmLlByaXNtYTE2LFxuICAgICAgcHJpc21hU2l6ZSA9IF9yZWYucHJpc21hU2l6ZSxcbiAgICAgIGlubGluZSA9IF9yZWYuaW5saW5lLFxuICAgICAgZW50ZXJwcmlzZVNpemUgPSBfcmVmLmVudGVycHJpc2VTaXplLFxuICAgICAgZW50ZXJwcmlzZVdpZHRoID0gX3JlZi5lbnRlcnByaXNlV2lkdGgsXG4gICAgICBlbnRlcnByaXNlSGVpZ2h0ID0gX3JlZi5lbnRlcnByaXNlSGVpZ2h0LFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dCA9IF9yZWYuc2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiRW50ZXJwcmlzZVwiLCBcIlByaXNtYTI0XCIsIFwiUHJpc21hMjBcIiwgXCJQcmlzbWExNlwiLCBcInByaXNtYVNpemVcIiwgXCJpbmxpbmVcIiwgXCJlbnRlcnByaXNlU2l6ZVwiLCBcImVudGVycHJpc2VXaWR0aFwiLCBcImVudGVycHJpc2VIZWlnaHRcIiwgXCJzY3JlZW5SZWFkZXJUZXh0XCJdKTtcblxuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gT2JqZWN0KF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJ1c2VTcGx1bmtUaGVtZVwiXSkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHksXG4gICAgICBkZW5zaXR5ID0gX3VzZVNwbHVua1RoZW1lLmRlbnNpdHk7IC8vIEVudGVycHJpc2UgLSBhbGwgdmFyaWFudHNcblxuXG4gIGlmIChmYW1pbHkgPT09ICdlbnRlcnByaXNlJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChFbnRlcnByaXNlLCBfZXh0ZW5kcyh7XG4gICAgICBzaXplOiBlbnRlcnByaXNlU2l6ZSxcbiAgICAgIHdpZHRoOiBlbnRlcnByaXNlV2lkdGgsXG4gICAgICBoZWlnaHQ6IGVudGVycHJpc2VIZWlnaHQsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0OiBzY3JlZW5SZWFkZXJUZXh0IHx8IG51bGwsXG4gICAgICBoaWRlRGVmYXVsdFRvb2x0aXA6IHRydWUsXG4gICAgICBpbmxpbmU6IGlubGluZVxuICAgIH0sIG90aGVyUHJvcHMpKTtcbiAgfVxuXG4gIHZhciBwcmlzbWFQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICdhcmlhLWxhYmVsJzogc2NyZWVuUmVhZGVyVGV4dCxcbiAgICBzdHlsZTogaW5saW5lID8gaW5saW5lU3R5bGVzIDogYmxvY2tTdHlsZXNcbiAgfSwgb3RoZXJQcm9wcyk7IC8vIFByaXNtYSAtIHNtYWxsK2NvbXBhY3QsIHNtYWxsK2NvbWZvcnRhYmxlXG5cblxuICBpZiAocHJpc21hU2l6ZSA9PT0gJ3NtYWxsJykge1xuICAgIHZhciBTVkcgPSBQcmlzbWExNiB8fCBQcmlzbWEyNDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCJcbiAgICB9LCBwcmlzbWFQcm9wcykpO1xuICB9IC8vIFByaXNtYSAtIG1lZGl1bStjb21wYWN0XG5cblxuICBpZiAoZGVuc2l0eSA9PT0gJ2NvbXBhY3QnKSB7XG4gICAgdmFyIF9TVkcgPSBQcmlzbWEyMCB8fCBQcmlzbWEyNDtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogXCIyMFwiLFxuICAgICAgaGVpZ2h0OiBcIjIwXCJcbiAgICB9LCBwcmlzbWFQcm9wcykpO1xuICB9IC8vIFByaXNtYSAtIG1lZGl1bStjb21mb3J0YWJsZVxuXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFByaXNtYTI0LCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IFwiMjRcIixcbiAgICBoZWlnaHQ6IFwiMjRcIlxuICB9LCBwcmlzbWFQcm9wcykpO1xufVxuSWNvbi5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG5JY29uLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cGFuZFNob3J0SGFuZEhleCA9IGV4cGFuZFNob3J0SGFuZEhleDtcbmV4cG9ydHMuaXNWYWxpZEhleENvbG9yID0gaXNWYWxpZEhleENvbG9yO1xuZXhwb3J0cy5pc0NTU0NvbG9yID0gaXNDU1NDb2xvcjtcbmV4cG9ydHMuZXh0ZW5kZWRDb2xvcktleXdvcmRzID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0ICovXG5cbi8qKlxuICogQGZpbGVcbiAqIEEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgQ29sb3IuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBzaG9ydGhhbmQgaGV4IGNvbG9yIHZhbHVlIHRvIHRoZSBlcXVpdmFsZW50IHNpeC1kaWdpdCBoZXhhZGVjaW1hbCB2YWx1ZS5cbiAqXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8bnVsbHx1bmRlZmluZWR9IHZhbHVlIC0gVGhyZWUtZGlnaXQgb3IgZm91ci1kaWdpdCBzaG9ydGhhbmQgaGV4YWRlY2ltYWwgdmFsdWUgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybnMge1N0cmluZ3xudWxsfHVuZGVmaW5lZH0gdmFsdWUgLSBJZiB2YWxpZCB0aHJlZSBvciBmb3VyLWRpZ2l0IHNob3J0aGFuZCBoZXhhZGVjaW1hbCB2YWx1ZSwgcmV0dXJuc1xuICogY29udmVydGVkIHNpeC1kaWdpdCBvciBlaWdodC1kaWdpdCBjb2RlOyBvcmlnaW5hbCB2YWx1ZSBvdGhlcndpc2UuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZFNob3J0SGFuZEhleCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhciBzdGFydHNXaXRoUG91bmQgPSB2YWx1ZS5zdGFydHNXaXRoKCcjJyk7XG4gICAgdmFyIHZhbHVlV2l0aG91dFBvdW5kID0gc3RhcnRzV2l0aFBvdW5kID8gdmFsdWUuc2xpY2UoMSkgOiB2YWx1ZTtcbiAgICB2YXIgaXNTaG9ydGhhbmRlZCA9IC9eWzAtOUEtRl17Myw0fSQvaS50ZXN0KHZhbHVlV2l0aG91dFBvdW5kKTtcblxuICAgIHZhciBfdmFsdWVXaXRob3V0UG91bmQgPSBfc2xpY2VkVG9BcnJheSh2YWx1ZVdpdGhvdXRQb3VuZCwgNCksXG4gICAgICAgIHIgPSBfdmFsdWVXaXRob3V0UG91bmRbMF0sXG4gICAgICAgIGcgPSBfdmFsdWVXaXRob3V0UG91bmRbMV0sXG4gICAgICAgIGIgPSBfdmFsdWVXaXRob3V0UG91bmRbMl0sXG4gICAgICAgIF92YWx1ZVdpdGhvdXRQb3VuZCQgPSBfdmFsdWVXaXRob3V0UG91bmRbM10sXG4gICAgICAgIGEgPSBfdmFsdWVXaXRob3V0UG91bmQkID09PSB2b2lkIDAgPyAnJyA6IF92YWx1ZVdpdGhvdXRQb3VuZCQ7XG5cbiAgICB2YXIgc2l4SGV4YWRlY2ltYWwgPSBpc1Nob3J0aGFuZGVkID8gXCJcIi5jb25jYXQocikuY29uY2F0KHIpLmNvbmNhdChnKS5jb25jYXQoZykuY29uY2F0KGIpLmNvbmNhdChiKS5jb25jYXQoYSkuY29uY2F0KGEpIDogdmFsdWVXaXRob3V0UG91bmQ7XG4gICAgcmV0dXJuIHN0YXJ0c1dpdGhQb3VuZCA/IFwiI1wiLmNvbmNhdChzaXhIZXhhZGVjaW1hbCkgOiBzaXhIZXhhZGVjaW1hbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gYHZhbHVlYCBpcyBhIHZhbGlkIGA8aGV4LWNvbG9yPmAuXG4gKiBgPGhleC1jb2xvcj5gcyBhcmUgc3RyaW5ncyB0aGF0IGNhbiBiZSAzLCA0LCA2LCBvciA4IGRpZ2l0cyBhbmQgbXVzdCBzdGFydCB3aXRoIGAjYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEhleENvbG9yKHZhbHVlKSB7XG4gIHJldHVybiAvKF4jWzAtOWEtZl17M30kKXwoXiNbMC05YS1mXXs2fSQpfCheI1swLTlhLWZdezR9JCl8KF4jWzAtOWEtZl17OH0kKS9pLnRlc3QodmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcbn1cbi8qKlxuICogYEFycmF5YCBjb250YWluaW5nIGBzdHJpbmdgcyBvZiB0aGUgW25hbWVkIGNvbG9yc10oaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNuYW1lZC1jb2xvcnMpIGZyb20gW0NTUyBDb2xvciBNb2R1bGUgNF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00KS5cbiAqIEBwdWJsaWNcbiAqL1xuXG5cbnZhciBleHRlbmRlZENvbG9yS2V5d29yZHMgPSBbJ2FsaWNlYmx1ZScsICdhbnRpcXVld2hpdGUnLCAnYXF1YScsICdhcXVhbWFyaW5lJywgJ2F6dXJlJywgJ2JlaWdlJywgJ2Jpc3F1ZScsICdibGFjaycsICdibGFuY2hlZGFsbW9uZCcsICdibHVlJywgJ2JsdWV2aW9sZXQnLCAnYnJvd24nLCAnYnVybHl3b29kJywgJ2NhZGV0Ymx1ZScsICdjaGFydHJldXNlJywgJ2Nob2NvbGF0ZScsICdjb3JhbCcsICdjb3JuZmxvd2VyYmx1ZScsICdjb3Juc2lsaycsICdjcmltc29uJywgJ2N5YW4nLCAnZGFya2JsdWUnLCAnZGFya2N5YW4nLCAnZGFya2dvbGRlbnJvZCcsICdkYXJrZ3JheScsICdkYXJrZ3JlZW4nLCAnZGFya2dyZXknLCAnZGFya2toYWtpJywgJ2RhcmttYWdlbnRhJywgJ2RhcmtvbGl2ZWdyZWVuJywgJ2RhcmtvcmFuZ2UnLCAnZGFya29yY2hpZCcsICdkYXJrcmVkJywgJ2RhcmtzYWxtb24nLCAnZGFya3NlYWdyZWVuJywgJ2RhcmtzbGF0ZWJsdWUnLCAnZGFya3NsYXRlZ3JheScsICdkYXJrc2xhdGVncmV5JywgJ2Rhcmt0dXJxdW9pc2UnLCAnZGFya3Zpb2xldCcsICdkZWVwcGluaycsICdkZWVwc2t5Ymx1ZScsICdkaW1ncmF5JywgJ2RpbWdyZXknLCAnZG9kZ2VyYmx1ZScsICdmaXJlYnJpY2snLCAnZmxvcmFsd2hpdGUnLCAnZm9yZXN0Z3JlZW4nLCAnZnVjaHNpYScsICdnYWluc2Jvcm8nLCAnZ2hvc3R3aGl0ZScsICdnb2xkJywgJ2dvbGRlbnJvZCcsICdncmF5JywgJ2dyZWVuJywgJ2dyZWVueWVsbG93JywgJ2dyZXknLCAnaG9uZXlkZXcnLCAnaG90cGluaycsICdpbmRpYW5yZWQnLCAnaW5kaWdvJywgJ2l2b3J5JywgJ2toYWtpJywgJ2xhdmVuZGVyJywgJ2xhdmVuZGVyYmx1c2gnLCAnbGF3bmdyZWVuJywgJ2xlbW9uY2hpZmZvbicsICdsaWdodGJsdWUnLCAnbGlnaHRjb3JhbCcsICdsaWdodGN5YW4nLCAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnLCAnbGlnaHRncmF5JywgJ2xpZ2h0Z3JlZW4nLCAnbGlnaHRncmV5JywgJ2xpZ2h0cGluaycsICdsaWdodHNhbG1vbicsICdsaWdodHNlYWdyZWVuJywgJ2xpZ2h0c2t5Ymx1ZScsICdsaWdodHNsYXRlZ3JheScsICdsaWdodHNsYXRlZ3JleScsICdsaWdodHN0ZWVsYmx1ZScsICdsaWdodHllbGxvdycsICdsaW1lJywgJ2xpbWVncmVlbicsICdsaW5lbicsICdtYWdlbnRhJywgJ21hcm9vbicsICdtZWRpdW1hcXVhbWFyaW5lJywgJ21lZGl1bWJsdWUnLCAnbWVkaXVtb3JjaGlkJywgJ21lZGl1bXB1cnBsZScsICdtZWRpdW1zZWFncmVlbicsICdtZWRpdW1zbGF0ZWJsdWUnLCAnbWVkaXVtc3ByaW5nZ3JlZW4nLCAnbWVkaXVtdHVycXVvaXNlJywgJ21lZGl1bXZpb2xldHJlZCcsICdtaWRuaWdodGJsdWUnLCAnbWludGNyZWFtJywgJ21pc3R5cm9zZScsICdtb2NjYXNpbicsICduYXZham93aGl0ZScsICduYXZ5JywgJ29sZGxhY2UnLCAnb2xpdmUnLCAnb2xpdmVkcmFiJywgJ29yYW5nZScsICdvcmFuZ2VyZWQnLCAnb3JjaGlkJywgJ3BhbGVnb2xkZW5yb2QnLCAncGFsZWdyZWVuJywgJ3BhbGV0dXJxdW9pc2UnLCAncGFsZXZpb2xldHJlZCcsICdwYXBheWF3aGlwJywgJ3BlYWNocHVmZicsICdwZXJ1JywgJ3BpbmsnLCAncGx1bScsICdwb3dkZXJibHVlJywgJ3B1cnBsZScsICdyZWJlY2NhcHVycGxlJywgJ3JlZCcsICdyb3N5YnJvd24nLCAncm95YWxibHVlJywgJ3NhZGRsZWJyb3duJywgJ3NhbG1vbicsICdzYW5keWJyb3duJywgJ3NlYWdyZWVuJywgJ3NlYXNoZWxsJywgJ3NpZW5uYScsICdzaWx2ZXInLCAnc2t5Ymx1ZScsICdzbGF0ZWJsdWUnLCAnc2xhdGVncmF5JywgJ3NsYXRlZ3JleScsICdzbm93JywgJ3NwcmluZ2dyZWVuJywgJ3N0ZWVsYmx1ZScsICd0YW4nLCAndGVhbCcsICd0aGlzdGxlJywgJ3RvbWF0bycsICd0dXJxdW9pc2UnLCAndmlvbGV0JywgJ3doZWF0JywgJ3doaXRlJywgJ3doaXRlc21va2UnLCAneWVsbG93JywgJ3llbGxvd2dyZWVuJ107XG4vKipcbiAqIFZhbGlkYXRlcyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgWzxjb2xvcj4gdHlwZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNjb2xvci10eXBlKSBpbiBDU1MuXG4gKlxuICogU3VwcG9ydHM6XG4gKiAtIGA8aGV4LWNvbG9yPmBzIDMsIDQsIDYgYW5kIDggZGlnaXRcbiAqIC0gYDxuYW1lZC1jb2xvcj5gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNuYW1lZC1jb2xvcnNcbiAqIC0gYCdjdXJyZW50Q29sb3InYFxuICogLSBgJ3RyYW5zcGFyZW50J2BcbiAqXG4gKiBEb2VzIG5vdCBzdXBwb3J0OlxuICogLSB0aGUgY29sb3ItZnVuY3Rpb25zOiBgPHJnYigpPmAsIGA8cmdiYSgpPmAsIGA8aHNsKCk+YCwgYDxoc2xhKCk+YCwgYDxod2IoKT5gLCBgPGxhYigpPmAsIGA8bGNoKCk+YCwgYW5kIGA8Y29sb3IoKT5gLlxuICogLSBgPGRldmljZS1jbXlrKCk+YFxuICogLSBgPHN5c3RlbS1jb2xvcj5gXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmV4dGVuZGVkQ29sb3JLZXl3b3JkcyA9IGV4dGVuZGVkQ29sb3JLZXl3b3JkcztcblxuZnVuY3Rpb24gaXNDU1NDb2xvcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyA8aGV4LWNvbG9yPlxuXG5cbiAgaWYgKGlzVmFsaWRIZXhDb2xvcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyA8bmFtZWQtY29sb3I+LCB0cmFuc3BhcmVudCwgY3VycmVudENvbG9yXG4gIC8vIENoZWNrIGxhc3Qgc28gaXRlcmF0aW5nIGV4dGVuZGVkQ29sb3JLZXl3b3JkcyBpcyBsYXN0IHJlc29ydFxuXG5cbiAgcmV0dXJuIHZhbHVlID09PSAndHJhbnNwYXJlbnQnIHx8IHZhbHVlID09PSAnY3VycmVudENvbG9yJyB8fCBleHRlbmRlZENvbG9yS2V5d29yZHMuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSk7XG59IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMjEpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfUmFkaW9CYXJfUmFkaW9CYXI7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiT3B0aW9uXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gUmFkaW9CYXJfT3B0aW9uOyB9KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInJlYWN0XCJcbnZhciBleHRlcm5hbF9yZWFjdF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xudmFyIGV4dGVybmFsX3JlYWN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3JlYWN0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJwcm9wLXR5cGVzXCJcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9wcm9wX3R5cGVzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJsb2Rhc2hcIlxudmFyIGV4dGVybmFsX2xvZGFzaF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25Hcm91cFwiXG52YXIgQnV0dG9uR3JvdXBfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OSk7XG52YXIgQnV0dG9uR3JvdXBfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQnV0dG9uR3JvdXBfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQnV0dG9uXCJcbnZhciBCdXR0b25fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgQnV0dG9uX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEJ1dHRvbl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwic3R5bGVkLWNvbXBvbmVudHNcIlxudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQ2xpY2thYmxlXCJcbnZhciBDbGlja2FibGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgQ2xpY2thYmxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKENsaWNrYWJsZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9SYWRpb0Jhci9PcHRpb25TdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRDbGlja2FibGUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQ2xpY2thYmxlX2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIk9wdGlvblN0eWxlc19fU3R5bGVkQ2xpY2thYmxlXCIsXG4gIGNvbXBvbmVudElkOiBcImZ5cTc3cC0wXCJcbn0pKFtcImJvcmRlci1yYWRpdXM6M3B4O2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOlwiLCBcIjtwYWRkaW5nOjJweCAxMnB4O2hlaWdodDpjYWxjKFwiLCBcIiAtIDZweCk7cG9zaXRpb246cmVsYXRpdmU7JiArICZ7bWFyZ2luLWxlZnQ6MnB4O31cIiwgXCIgXCIsIFwiICY6Zm9jdXN7Y29sb3I6XCIsIFwiO2JveC1zaGFkb3c6XCIsIFwiO3otaW5kZXg6MjsmOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9fVwiLCBcIiBcIiwgXCJcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGVmYXVsdCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnB1dEhlaWdodCwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyICRzZWxlY3RlZCA9IF9yZWYuJHNlbGVjdGVkO1xuICByZXR1cm4gJHNlbGVjdGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtib3gtc2hhZG93OlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBkYXJrOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpJyxcbiAgICBsaWdodDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS53aGl0ZVxuICB9KSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5lbWJvc3NTaGFkb3cpO1xufSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciAkc2VsZWN0ZWQgPSBfcmVmMi4kc2VsZWN0ZWQsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkO1xuICByZXR1cm4gJHNlbGVjdGVkICYmIGRpc2FibGVkICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5iYWNrZ3JvdW5kQ29sb3JQYWdlKTtcbn0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93LCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5QWN0aXZlLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyICRzZWxlY3RlZCA9IF9yZWYzLiRzZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkID0gX3JlZjMuZGlzYWJsZWQ7XG4gIHJldHVybiAhJHNlbGVjdGVkICYmICFkaXNhYmxlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCImOmhvdmVye2NvbG9yOlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjt9JjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7fVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmUsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvck92ZXJsYXlIb3ZlciwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUFjdGl2ZSk7XG59LCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGRpc2FibGVkID0gX3JlZjQuZGlzYWJsZWQ7XG4gIHJldHVybiBkaXNhYmxlZCAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRpc2FibGVkKTtcbn0pO1xudmFyIFN0eWxlZEljb24gPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJPcHRpb25TdHlsZXNfX1N0eWxlZEljb25cIixcbiAgY29tcG9uZW50SWQ6IFwiZnlxNzdwLTFcIlxufSkoW1wiZmxleDowIDAgYXV0bzttYXJnaW4tdG9wOi0ycHg7Zm9udC1zaXplOjE1cHg7XCJdKTtcbnZhciBTdHlsZWRMYWJlbCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIk9wdGlvblN0eWxlc19fU3R5bGVkTGFiZWxcIixcbiAgY29tcG9uZW50SWQ6IFwiZnlxNzdwLTJcIlxufSkoW1wiZmxleDowIDEgYXV0bztcIiwgXCIgJjpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tbGVmdDo4cHg7fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5lbGxpcHNpcyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1JhZGlvQmFyL09wdGlvbi50c3hcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgLyoqIEBwcml2YXRlICovXG4gIGFwcGVhcmFuY2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnZGVmYXVsdCcsICdwaWxsJywgJ3ByaXNtYSddKSxcbiAgZGlzYWJsZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGljb246IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGxhYmVsOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG5cbiAgLyoqIEBwcml2YXRlIFNldCBieSBgUmFkaW9CYXJgLiAqL1xuICBvbkNsaWNrOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZSBTZXQgYnkgYFJhZGlvQmFyYC4gKi9cbiAgc2VsZWN0ZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG5cbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgYE9wdGlvbmAuICovXG4gIHZhbHVlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hbnkuaXNSZXF1aXJlZCxcblxuICAvKiogQHByaXZhdGUgU2V0IGJ5IGBSYWRpb0JhcmAuICovXG4gIGVycm9yOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sXG59O1xuXG5mdW5jdGlvbiBPcHRpb24oX3JlZikge1xuICB2YXIgYXBwZWFyYW5jZSA9IF9yZWYuYXBwZWFyYW5jZSxcbiAgICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIGljb24gPSBfcmVmLmljb24sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgc2VsZWN0ZWQgPSBfcmVmLnNlbGVjdGVkLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJhcHBlYXJhbmNlXCIsIFwiZGlzYWJsZWRcIiwgXCJsYWJlbFwiLCBcImljb25cIiwgXCJvbkNsaWNrXCIsIFwic2VsZWN0ZWRcIiwgXCJ2YWx1ZVwiXSk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBPcHRpb25Qcm9wc0Jhc2VcbiAgaWYgKGFwcGVhcmFuY2UgPT09ICdwcmlzbWEnKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDbGlja2FibGUsIF9leHRlbmRzKHtcbiAgICAgIFwiZGF0YS10ZXN0XCI6IFwib3B0aW9uXCIsXG4gICAgICBcImRhdGEtdGVzdC12YWx1ZVwiOiB2YWx1ZVxuICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgIG9uQ2xpY2s6IHNlbGVjdGVkID8gdW5kZWZpbmVkIDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljayhlLCB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICBcImFyaWEtY2hlY2tlZFwiOiBzZWxlY3RlZCxcbiAgICAgICRzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICB0YWJJbmRleDogc2VsZWN0ZWQgPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0pLCBpY29uICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRJY29uLCBudWxsLCBpY29uKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsLCBudWxsLCBsYWJlbCkpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChCdXR0b25fZGVmYXVsdC5hLCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJvcHRpb25cIixcbiAgICBcImRhdGEtdGVzdC12YWx1ZVwiOiB2YWx1ZSxcbiAgICBhcHBlYXJhbmNlOiBhcHBlYXJhbmNlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBsYWJlbDogbGFiZWwsXG4gICAgaWNvbjogaWNvbixcbiAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0sIG90aGVyUHJvcHMsIHtcbiAgICBvbkNsaWNrOiBzZWxlY3RlZCA/IHVuZGVmaW5lZCA6IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNsaWNrKGUsIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcm9sZTogXCJyYWRpb1wiLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IHNlbGVjdGVkLFxuICAgIHRhYkluZGV4OiBzZWxlY3RlZCA/IC0xIDogdW5kZWZpbmVkXG4gIH0pKTtcbn1cblxuT3B0aW9uLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFJhZGlvQmFyX09wdGlvbiA9IChPcHRpb24pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCJcbnZhciBCb3hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBCb3hfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQm94Xyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1JhZGlvQmFyL1JhZGlvQmFyU3R5bGVzLnRzXG5cblxuXG52YXIgU3R5bGVkUmFkaW9CYXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlJhZGlvQmFyU3R5bGVzX19TdHlsZWRSYWRpb0JhclwiLFxuICBjb21wb25lbnRJZDogXCJnZzFiNzktMFwiXG59KShbXCJoZWlnaHQ6XCIsIFwiO3BhZGRpbmc6MnB4O2JvcmRlci1yYWRpdXM6XCIsIFwiO2JhY2tncm91bmQ6XCIsIFwiO2JvcmRlcjoxcHggc29saWQgXCIsIFwiO1tkYXRhLWlubGluZV0gKyAme21hcmdpbi1sZWZ0OlwiLCBcIjt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmlucHV0SGVpZ2h0LCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlclJhZGl1cywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyICRkaXNhYmxlZCA9IF9yZWYuJGRpc2FibGVkO1xuICByZXR1cm4gJGRpc2FibGVkID8gdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZERpc2FibGVkIDogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZDtcbn0sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJGVycm9yID0gX3JlZjIuJGVycm9yO1xuICByZXR1cm4gJGVycm9yID8gdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5hY2NlbnRDb2xvck5lZ2F0aXZlIDogJ3RyYW5zcGFyZW50Jztcbn0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ0xhcmdlKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUmFkaW9CYXIvUmFkaW9CYXIudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIFJhZGlvQmFyX2V4dGVuZHMoKSB7IFJhZGlvQmFyX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gUmFkaW9CYXJfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIFJhZGlvQmFyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBSYWRpb0Jhcl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gUmFkaW9CYXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxuXG5cbnZhciBSYWRpb0Jhcl9wcm9wVHlwZXMgPSB7XG4gIGFwcGVhcmFuY2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnZGVmYXVsdCcsICdwaWxsJywgJ2ZsYXQnXSksXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBkZWZhdWx0VmFsdWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmFueSxcbiAgZGVzY3JpYmVkQnk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgZXJyb3I6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIGlubGluZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgbGFiZWxsZWRCeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBuYW1lOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIG9uQ2hhbmdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBzcGx1bmtUaGVtZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0LFxuICB2YWx1ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYW55XG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgYXBwZWFyYW5jZTogJ2RlZmF1bHQnLFxuICBlcnJvcjogZmFsc2UsXG4gIGlubGluZTogZmFsc2Vcbn07XG5cbi8qKlxuICogUmFkaW9CYXIgaXMgYSBmb3JtIGNvbnRyb2wgdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZWxlY3Qgb25lIG9wdGlvbiBvdXQgb2YgYSBncm91cC5cbiAqL1xudmFyIFJhZGlvQmFyX1JhZGlvQmFyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSYWRpb0JhciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSYWRpb0Jhcik7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBSYWRpb0JhclByb3BzQmFzZVxuICBmdW5jdGlvbiBSYWRpb0Jhcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSYWRpb0Jhcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250cm9sbGVkRXh0ZXJuYWxseVwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZUNsaWNrXCIsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgbmFtZSA9IF90aGlzLnByb3BzLm5hbWU7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy52YWx1ZSAhPT0gZGF0YS52YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DaGFuZ2UsIF90aGlzJHByb3BzO1xuXG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkNoYW5nZSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQ2hhbmdlLmNhbGwoX3RoaXMkcHJvcHMsIGUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGF0YSksIHt9LCB7XG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKCFfdGhpcy5pc0NvbnRyb2xsZWQoKSkge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF90aGlzLmNvbnRyb2xsZWRFeHRlcm5hbGx5ID0gT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJoYXNcIl0pKHByb3BzLCAndmFsdWUnKTtcblxuICAgIGlmICghX3RoaXMuaXNDb250cm9sbGVkKCkpIHtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICB2YWx1ZTogcHJvcHMuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChmYWxzZSkge31cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhSYWRpb0JhciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChmYWxzZSkge31cblxuICAgICAgaWYgKGZhbHNlKSB7fVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0NvbnRyb2xsZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNDb250cm9sbGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlZEV4dGVybmFsbHk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXBwZWFyYW5jZSA9IF90aGlzJHByb3BzMi5hcHBlYXJhbmNlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGRlc2NyaWJlZEJ5ID0gX3RoaXMkcHJvcHMyLmRlc2NyaWJlZEJ5LFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMyLmVycm9yLFxuICAgICAgICAgIGxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wczIubGFiZWxsZWRCeSxcbiAgICAgICAgICBzcGx1bmtUaGVtZSA9IF90aGlzJHByb3BzMi5zcGx1bmtUaGVtZSxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHByb3BzMi52YWx1ZSxcbiAgICAgICAgICBvdGhlclByb3BzID0gUmFkaW9CYXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBbXCJhcHBlYXJhbmNlXCIsIFwiY2hpbGRyZW5cIiwgXCJkZXNjcmliZWRCeVwiLCBcImVycm9yXCIsIFwibGFiZWxsZWRCeVwiLCBcInNwbHVua1RoZW1lXCIsIFwidmFsdWVcIl0pO1xuXG4gICAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHRoaXMuaXNDb250cm9sbGVkKCkgPyB2YWx1ZSA6IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgICB2YXIgaXNQcmlzbWEgPSBzcGx1bmtUaGVtZS5mYW1pbHkgPT09ICdwcmlzbWEnO1xuICAgICAgdmFyIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHZhciBjaGlsZHJlbkZvcm1hdHRlZCA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgIGlmIChpdGVtLnByb3BzICYmICFpdGVtLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcImNsb25lRWxlbWVudFwiXSkoaXRlbSwge1xuICAgICAgICAgIGFwcGVhcmFuY2U6IGlzUHJpc21hID8gJ3ByaXNtYScgOiBhcHBlYXJhbmNlLFxuICAgICAgICAgIGtleTogaXRlbS5rZXkgfHwgaSxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpczIuaGFuZGxlQ2xpY2ssXG4gICAgICAgICAgcm9sZTogJ3JhZGlvJyxcbiAgICAgICAgICBzZWxlY3RlZDogaXRlbS5wcm9wcy52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogaXRlbS5wcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBlcnJvcjogaXNQcmlzbWEgPyBmYWxzZSA6IGVycm9yXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpc1ByaXNtYSkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFJhZGlvQmFyLCBSYWRpb0Jhcl9leHRlbmRzKHtcbiAgICAgICAgICAkZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICRlcnJvcjogZXJyb3IsXG4gICAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJyYWRpby1iYXJcIixcbiAgICAgICAgICBcImRhdGEtdGVzdC12YWx1ZVwiOiBzZWxlY3RlZFZhbHVlLFxuICAgICAgICAgIHJvbGU6IFwicmFkaW9ncm91cFwiLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsbGVkQnksXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGRlc2NyaWJlZEJ5LFxuICAgICAgICAgIGZsZXg6IHRydWVcbiAgICAgICAgfSwgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJvbWl0XCJdKShvdGhlclByb3BzLCAnb25DaGFuZ2UnKSksIGNoaWxkcmVuRm9ybWF0dGVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChCdXR0b25Hcm91cF9kZWZhdWx0LmEsIFJhZGlvQmFyX2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogZGVzY3JpYmVkQnksXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsbGVkQnksXG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwicmFkaW8tYmFyXCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXZhbHVlXCI6IHNlbGVjdGVkVmFsdWUsXG4gICAgICAgIGZsZXg6IHRydWUsXG4gICAgICAgIHJvbGU6IFwicmFkaW9ncm91cFwiXG4gICAgICB9LCBPYmplY3QoZXh0ZXJuYWxfbG9kYXNoX1tcIm9taXRcIl0pKG90aGVyUHJvcHMsICdvbkNoYW5nZScpKSwgY2hpbGRyZW5Gb3JtYXR0ZWQpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBSYWRpb0Jhcjtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuX2RlZmluZVByb3BlcnR5KFJhZGlvQmFyX1JhZGlvQmFyLCBcInByb3BUeXBlc1wiLCBSYWRpb0Jhcl9wcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoUmFkaW9CYXJfUmFkaW9CYXIsIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyk7XG5cbl9kZWZpbmVQcm9wZXJ0eShSYWRpb0Jhcl9SYWRpb0JhciwgXCJPcHRpb25cIiwgUmFkaW9CYXJfT3B0aW9uKTtcblxudmFyIFJhZGlvQmFyV2l0aFRoZW1lID0gT2JqZWN0KHRoZW1lc19bXCJ3aXRoU3BsdW5rVGhlbWVcIl0pKFJhZGlvQmFyX1JhZGlvQmFyKTtcbnZhciBSYWRpb0JhcldpdGhUaGVtZU9wdGlvbiA9IFJhZGlvQmFyV2l0aFRoZW1lO1xuUmFkaW9CYXJXaXRoVGhlbWVPcHRpb24ucHJvcFR5cGVzID0gUmFkaW9CYXJfUmFkaW9CYXIucHJvcFR5cGVzO1xuUmFkaW9CYXJXaXRoVGhlbWVPcHRpb24uT3B0aW9uID0gUmFkaW9CYXJfT3B0aW9uO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX1JhZGlvQmFyX1JhZGlvQmFyID0gKFJhZGlvQmFyV2l0aFRoZW1lT3B0aW9uKTtcbiAvLyBvbmx5IGZvciBzdHlsZWQgY29tcG9uZW50cyB1c2luZyBSYWRpb0JhclxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUmFkaW9CYXIvaW5kZXgudHNcblxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9Cb3hcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA4OTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25Hcm91cFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMzgpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBTdGF0aWNDb250ZW50X1N0YXRpY0NvbnRlbnQ7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0JveFwiXG52YXIgQm94XyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgQm94X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEJveF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9TdGF0aWNDb250ZW50L1N0YXRpY0NvbnRlbnRTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlN0YXRpY0NvbnRlbnRTdHlsZXNfX1N0eWxlZEJveFwiLFxuICBjb21wb25lbnRJZDogXCJzeHF5cnAtMFwiXG59KShbXCJcIiwgXCI7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjA7Zm9udC13ZWlnaHQ6XCIsIFwiO3dvcmQtd3JhcDpicmVhay13b3JkO21pbi1oZWlnaHQ6XCIsIFwiO3BhZGRpbmc6XCIsIFwiO1tkYXRhLWlubGluZV0gKyAmW2RhdGEtaW5saW5lXXttYXJnaW4tbGVmdDpcIiwgXCI7fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnZmxleCcpLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvbnRXZWlnaHRTZW1pQm9sZCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnB1dEhlaWdodCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHtcbiAgICBjb21mb3J0YWJsZTogJzZweCA3cHgnLFxuICAgIGNvbXBhY3Q6ICc0cHggNXB4J1xuICB9LFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogJzEwcHggMCcsXG4gICAgY29tcGFjdDogJzZweCAwJ1xuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1F1YXJ0ZXIsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nTGFyZ2Vcbn0pKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvU3RhdGljQ29udGVudC9TdGF0aWNDb250ZW50LnRzeFxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIGlubGluZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgc2l6ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWydzbWFsbCcsICdtZWRpdW0nXSlcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBhIGNvbnRyb2wgZ3JvdXAsIGVpdGhlciB0byBkaXNwbGF5IGEgc3RhdGljIHZhbHVlIG9yXG4gKiBiZXR3ZWVuIHR3byBjb250cm9scy5cbiAqL1xuZnVuY3Rpb24gU3RhdGljQ29udGVudChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGlubGluZSA9IF9yZWYuaW5saW5lLFxuICAgICAgaW5saW5lID0gX3JlZiRpbmxpbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpbmxpbmUsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbWVkaXVtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIiwgXCJpbmxpbmVcIiwgXCJzaXplXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIFN0YXRpY0NvbnRlbnRQcm9wc0Jhc2VcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRCb3gsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdFwiOiBcInN0YXRpYy1jb250ZW50XCIsXG4gICAgXCJkYXRhLXNpemVcIjogc2l6ZSxcbiAgICBpbmxpbmU6IGlubGluZVxuICB9LCBvdGhlclByb3BzKSwgY2hpbGRyZW4pO1xufVxuXG5TdGF0aWNDb250ZW50LnByb3BUeXBlcyA9IHByb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFN0YXRpY0NvbnRlbnRfU3RhdGljQ29udGVudCA9IChTdGF0aWNDb250ZW50KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1N0YXRpY0NvbnRlbnQvaW5kZXgudHNcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDExNik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDExNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFBhZ2luYXRvcl9QYWdpbmF0b3I7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvZm9ybWF0XCJcbnZhciBmb3JtYXRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIlxudmFyIGkxOG5fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCJcbnZhciBCb3hfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbnZhciBCb3hfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQm94Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LWljb25zL01vcmVcIlxudmFyIE1vcmVfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XG52YXIgTW9yZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihNb3JlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvVGhlbWVkSWNvbi50c3hcbnZhciBUaGVtZWRJY29uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9TVkcudHN4XG52YXIgU1ZHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvaWNvbnMvTW9yZS50c3hcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yODkzMyAxMi4wMDAxQzYuMjg5MzMgMTEuMDk2NCA1LjU1NjcgMTAuMzYzNyA0LjY1Mjk3IDEwLjM2MzdDMy43NDkyMyAxMC4zNjM3IDMuMDE2NiAxMS4wOTY0IDMuMDE2NiAxMi4wMDAxQzMuMDE2NiAxMi45MDM4IDMuNzQ5MjMgMTMuNjM2NSA0LjY1Mjk3IDEzLjYzNjVDNS41NTY3IDEzLjYzNjUgNi4yODkzMyAxMi45MDM4IDYuMjg5MzMgMTIuMDAwMVpNMTIuMDE2NiAxMC4zNjM3QzEyLjkyMDQgMTAuMzYzNyAxMy42NTMgMTEuMDk2NCAxMy42NTMgMTIuMDAwMUMxMy42NTMgMTIuOTAzOCAxMi45MjA0IDEzLjYzNjUgMTIuMDE2NiAxMy42MzY1QzExLjExMjkgMTMuNjM2NSAxMC4zODAyIDEyLjkwMzggMTAuMzgwMiAxMi4wMDAxQzEwLjM4MDIgMTEuMDk2NCAxMS4xMTI5IDEwLjM2MzcgMTIuMDE2NiAxMC4zNjM3Wk0xOS4zODAzIDEwLjM2MzdDMjAuMjg0IDEwLjM2MzcgMjEuMDE2NiAxMS4wOTY0IDIxLjAxNjYgMTIuMDAwMUMyMS4wMTY2IDEyLjkwMzggMjAuMjg0IDEzLjYzNjUgMTkuMzgwMyAxMy42MzY1QzE4LjQ3NjUgMTMuNjM2NSAxNy43NDM5IDEyLjkwMzggMTcuNzQzOSAxMi4wMDAxQzE3Ljc0MzkgMTEuMDk2NCAxOC40NzY1IDEwLjM2MzcgMTkuMzgwMyAxMC4zNjM3WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBNb3JlKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoVGhlbWVkSWNvbltcImFcIiAvKiBkZWZhdWx0ICovXSwgX2V4dGVuZHMoe1xuICAgIEVudGVycHJpc2U6IE1vcmVfZGVmYXVsdC5hLFxuICAgIFByaXNtYTI0OiBQcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImxvZGFzaFwiXG52YXIgZXh0ZXJuYWxfbG9kYXNoXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJzdHlsZWQtY29tcG9uZW50c1wiXG52YXIgZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25TaW1wbGVcIlxudmFyIEJ1dHRvblNpbXBsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcbnZhciBCdXR0b25TaW1wbGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQnV0dG9uU2ltcGxlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhZ2luYXRvci9CdXR0b25TdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRCdXR0b25TaW1wbGUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQnV0dG9uU2ltcGxlX2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkJ1dHRvblN0eWxlc19fU3R5bGVkQnV0dG9uU2ltcGxlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFuZXp0cTctMFwiXG59KShbXCJtaW4td2lkdGg6XCIsIFwiO21pbi1oZWlnaHQ6XCIsIFwiO3RleHQtYWxpZ246Y2VudGVyO2ZsZXgtc2hyaW5rOjA7XCIsIFwiXCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmlucHV0SGVpZ2h0LCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmlucHV0SGVpZ2h0LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZToge1xuICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ1F1YXJ0ZXIpLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6M3B4O1wiXSlcbiAgfSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOlwiLCBcIjtcIiwgXCIgJiArICZ7bWFyZ2luLWxlZnQ6OHB4O31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGNvbWZvcnRhYmxlOiAnNXB4IDhweCcsXG4gICAgY29tcGFjdDogJzRweCdcbiAgfSksIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gX3JlZi5zZWxlY3RlZDtcbiAgICByZXR1cm4gc2VsZWN0ZWQgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZm9udC13ZWlnaHQ6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250V2VpZ2h0Qm9sZCk7XG4gIH0pXG59KSk7XG52YXIgU3R5bGVkUHJldk5leHQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJCdXR0b25TdHlsZXNfX1N0eWxlZFByZXZOZXh0XCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFuZXp0cTctMVwiXG59KShbXCJwYWRkaW5nOlwiLCBcIjt3aGl0ZS1zcGFjZTpub3dyYXA7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJzAgM3B4JyxcbiAgcHJpc21hOiAnMCA4cHgnXG59KSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhZ2luYXRvci9CdXR0b24udHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIEJ1dHRvbl9leHRlbmRzKCkgeyBCdXR0b25fZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBCdXR0b25fZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGxhYmVsOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBvbkNsaWNrOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLFxuICBwYWdlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXIsXG5cbiAgLyoqIEBwcml2YXRlICovXG4gIHNlbGVjdGVkOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgc2VsZWN0ZWQ6IGZhbHNlXG59O1xuXG52YXIgQnV0dG9uX1BhZ2luYXRvckJ1dHRvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUGFnaW5hdG9yQnV0dG9uLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFBhZ2luYXRvckJ1dHRvbik7XG5cbiAgZnVuY3Rpb24gUGFnaW5hdG9yQnV0dG9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYWdpbmF0b3JCdXR0b24pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVDbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzLm9uQ2xpY2ssXG4gICAgICAgICAgcGFnZSA9IF90aGlzJHByb3BzLnBhZ2U7XG4gICAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2xpY2soZSwge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gZ3VhcmFudGVlZCBieSBvbkNsaWNrIG9uIFN0eWxlQnV0dG9uU2ltcGxlIGJlbG93XG4gICAgICAgIHBhZ2U6IHBhZ2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBhZ2luYXRvckJ1dHRvbiwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIGxhYmVsID0gX3RoaXMkcHJvcHMyLmxhYmVsLFxuICAgICAgICAgIHBhZ2UgPSBfdGhpcyRwcm9wczIucGFnZSxcbiAgICAgICAgICBzZWxlY3RlZCA9IF90aGlzJHByb3BzMi5zZWxlY3RlZDtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkQnV0dG9uU2ltcGxlLCBCdXR0b25fZXh0ZW5kcyh7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwicGFnZVwiLFxuICAgICAgICBcImRhdGEtdGVzdC1wYWdlXCI6IHBhZ2UsXG4gICAgICAgIGFwcGVhcmFuY2U6IFwicGlsbFwiLFxuICAgICAgICBvbkNsaWNrOiBwYWdlICE9PSB1bmRlZmluZWQgPyB0aGlzLmhhbmRsZUNsaWNrIDogdW5kZWZpbmVkLFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRcbiAgICAgIH0sIE9iamVjdChleHRlcm5hbF9sb2Rhc2hfW1wib21pdFwiXSkodGhpcy5wcm9wcywgT2JqZWN0KGV4dGVybmFsX2xvZGFzaF9bXCJrZXlzXCJdKShQYWdpbmF0b3JCdXR0b24ucHJvcFR5cGVzKSkpLCBsYWJlbCwgY2hpbGRyZW4gJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFByZXZOZXh0LCBudWxsLCBjaGlsZHJlbikpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQYWdpbmF0b3JCdXR0b247XG59KGV4dGVybmFsX3JlYWN0X1tcIkNvbXBvbmVudFwiXSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShCdXR0b25fUGFnaW5hdG9yQnV0dG9uLCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoQnV0dG9uX1BhZ2luYXRvckJ1dHRvbiwgXCJkZWZhdWx0UHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQnV0dG9uID0gKEJ1dHRvbl9QYWdpbmF0b3JCdXR0b24pO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9pY29ucy9DaGV2cm9uTGVmdC50c3hcbnZhciBDaGV2cm9uTGVmdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2ljb25zL0NoZXZyb25SaWdodC50c3hcbnZhciBDaGV2cm9uUmlnaHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvUGFnaW5hdG9yL1BhZ2luYXRvclN0eWxlcy50c1xuXG5cblxuXG52YXIgU3R5bGVkQ2hldnJvbkxlZnQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQ2hldnJvbkxlZnRbXCJhXCIgLyogZGVmYXVsdCAqL10pLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJQYWdpbmF0b3JTdHlsZXNfX1N0eWxlZENoZXZyb25MZWZ0XCIsXG4gIGNvbXBvbmVudElkOiBcInBtYWJzcC0wXCJcbn0pKFtcIlwiLCBcIlwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm1hcmdpbjotMXB4IDNweCAwcHggMHB4O1wiXSksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wibWFyZ2luOi0ycHggNnB4IDBweCAwcHg7Y29sb3I6XCIsIFwiO1wiXSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgJGRpc2FibGVkID0gX3JlZi4kZGlzYWJsZWQ7XG4gICAgcmV0dXJuICRkaXNhYmxlZCA/IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWQgOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkO1xuICB9KVxufSkpO1xudmFyIFN0eWxlZENoZXZyb25SaWdodCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQoKShDaGV2cm9uUmlnaHRbXCJhXCIgLyogZGVmYXVsdCAqL10pLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJQYWdpbmF0b3JTdHlsZXNfX1N0eWxlZENoZXZyb25SaWdodFwiLFxuICBjb21wb25lbnRJZDogXCJwbWFic3AtMVwiXG59KShbXCJcIiwgXCJcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJtYXJnaW46LTFweCAwcHggMHB4IDNweDtcIl0pLFxuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIm1hcmdpbjotMnB4IDBweCAwcHggNnB4O2NvbG9yOlwiLCBcIjtcIl0sIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciAkZGlzYWJsZWQgPSBfcmVmMi4kZGlzYWJsZWQ7XG4gICAgcmV0dXJuICRkaXNhYmxlZCA/IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yRGlzYWJsZWQgOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkO1xuICB9KVxufSkpO1xudmFyIFN0eWxlZEVsbGlwc2lzV3JhcHBlciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5zcGFuLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJQYWdpbmF0b3JTdHlsZXNfX1N0eWxlZEVsbGlwc2lzV3JhcHBlclwiLFxuICBjb21wb25lbnRJZDogXCJwbWFic3AtMlwiXG59KShbXCJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTFweDtjb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckFjdGl2ZSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhZ2luYXRvci9QYWdpbmF0b3IudHN4XG5mdW5jdGlvbiBQYWdpbmF0b3JfZXh0ZW5kcygpIHsgUGFnaW5hdG9yX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gUGFnaW5hdG9yX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgUGFnaW5hdG9yX3Byb3BUeXBlcyA9IHtcbiAgYWx3YXlzU2hvd0xhc3RQYWdlTGluazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgY3VycmVudDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBudW1QYWdlTGlua3M6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgb25DaGFuZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHRvdGFsUGFnZXM6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlclxufTtcblxuZnVuY3Rpb24gUGFnaW5hdG9yKF9yZWYpIHtcbiAgdmFyIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICAgIF9yZWYkY3VycmVudCA9IF9yZWYuY3VycmVudCxcbiAgICAgIGN1cnJlbnQgPSBfcmVmJGN1cnJlbnQgPT09IHZvaWQgMCA/IDEgOiBfcmVmJGN1cnJlbnQsXG4gICAgICBfcmVmJGFsd2F5c1Nob3dMYXN0UGEgPSBfcmVmLmFsd2F5c1Nob3dMYXN0UGFnZUxpbmssXG4gICAgICBhbHdheXNTaG93TGFzdFBhZ2VMaW5rID0gX3JlZiRhbHdheXNTaG93TGFzdFBhID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYWx3YXlzU2hvd0xhc3RQYSxcbiAgICAgIF9yZWYkbnVtUGFnZUxpbmtzID0gX3JlZi5udW1QYWdlTGlua3MsXG4gICAgICBudW1QYWdlTGlua3MgPSBfcmVmJG51bVBhZ2VMaW5rcyA9PT0gdm9pZCAwID8gNSA6IF9yZWYkbnVtUGFnZUxpbmtzLFxuICAgICAgdG90YWxQYWdlcyA9IF9yZWYudG90YWxQYWdlcyxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wib25DaGFuZ2VcIiwgXCJjdXJyZW50XCIsIFwiYWx3YXlzU2hvd0xhc3RQYWdlTGlua1wiLCBcIm51bVBhZ2VMaW5rc1wiLCBcInRvdGFsUGFnZXNcIl0pO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgUGFnaW5hdG9yUHJvcHNCYXNlXG4gIHZhciBfdXNlU3BsdW5rVGhlbWUgPSBPYmplY3QodGhlbWVzX1tcInVzZVNwbHVua1RoZW1lXCJdKSgpLFxuICAgICAgZmFtaWx5ID0gX3VzZVNwbHVua1RoZW1lLmZhbWlseTsgLy8gQ2FuJ3Qgc2hvdyBtb3JlIGxpbmtzIHRoYW4gdG90YWwgbnVtYmVyIG9mIHBhZ2VzLlxuXG5cbiAgdmFyIG51bUxpbmtzID0gTWF0aC5taW4obnVtUGFnZUxpbmtzLCB0b3RhbFBhZ2VzKTtcbiAgdmFyIGxvTWlkID0gTWF0aC5jZWlsKG51bUxpbmtzIC8gMik7XG4gIHZhciBoaU1pZCA9IE1hdGguY2VpbCh0b3RhbFBhZ2VzIC0gbnVtTGlua3MgLyAyKTtcbiAgdmFyIHBhZ2VzID0gW107XG5cbiAgaWYgKHRvdGFsUGFnZXMgPD0gMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKChjdXJyZW50ID4gdG90YWxQYWdlcyB8fCBjdXJyZW50IDwgMSkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBpbiBQYWdpbmF0b3I6IEN1cnJlbnQgcGFnZSBpcyBvdXQgb2YgYm91bmRzJyk7XG4gIH1cblxuICB2YXIgZmlyc3RQYWdlO1xuICB2YXIgbGFzdFBhZ2U7XG5cbiAgaWYgKGN1cnJlbnQgPD0gbG9NaWQgKyAxKSB7XG4gICAgLy8gKyAxIHRvIGF2b2lkIGVsbGlwc2lzIGJldHdlZW4gMSBhbmQgMlxuICAgIGZpcnN0UGFnZSA9IDE7XG4gICAgbGFzdFBhZ2UgPSBmaXJzdFBhZ2UgKyBNYXRoLm1pbih0b3RhbFBhZ2VzLCBudW1MaW5rcykgLSAxO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPiBsb01pZCAmJiBjdXJyZW50IDwgaGlNaWQpIHtcbiAgICBsYXN0UGFnZSA9IE1hdGguY2VpbChjdXJyZW50ICsgKG51bUxpbmtzIC0gMikgLyAyKTtcbiAgICBmaXJzdFBhZ2UgPSBsYXN0UGFnZSAtIG51bUxpbmtzICsgMjtcbiAgfSBlbHNlIHtcbiAgICAvLyBpbmNsdWRlIHBhZ2UgIzEgdG8gYXZvaWQgZWxsaXBzaXMgYmV0d2VlbiAxIGFuZCAyXG4gICAgZmlyc3RQYWdlID0gdG90YWxQYWdlcyAtIG51bUxpbmtzID09PSAxID8gMSA6IHRvdGFsUGFnZXMgLSBudW1MaW5rcyArIDE7XG4gICAgbGFzdFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICB9IC8vIGJ1bXAgdXAgdGhlIGxhc3QgcGFnZSB0byBhdm9pZCBlbGxpcHNpc1xuXG5cbiAgbGFzdFBhZ2UgPSBhbHdheXNTaG93TGFzdFBhZ2VMaW5rICYmIGxhc3RQYWdlICsgMSA9PT0gdG90YWxQYWdlcyA/IHRvdGFsUGFnZXMgOiBsYXN0UGFnZTtcbiAgdmFyIGVsbGlwc2lzID0gZmFtaWx5ID09PSAnZW50ZXJwcmlzZScgPyAnLi4uJyA6IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRFbGxpcHNpc1dyYXBwZXIsIG51bGwsIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChNb3JlLCB7XG4gICAgcHJpc21hU2l6ZTogXCJzbWFsbFwiXG4gIH0pKTtcbiAgcGFnZXMucHVzaCggLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIFwiZGF0YS10ZXN0XCI6IFwicHJldlwiLFxuICAgIGRpc2FibGVkOiBjdXJyZW50ID09PSAxLFxuICAgIG9uQ2xpY2s6IG9uQ2hhbmdlLFxuICAgIHBhZ2U6IGN1cnJlbnQgLSAxLFxuICAgIGtleTogXCJwcmV2XCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IE9iamVjdChpMThuX1tcIl9cIl0pKCdHbyB0byBwcmV2aW91cyBwYWdlJylcbiAgfSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENoZXZyb25MZWZ0LCB7XG4gICAgJGRpc2FibGVkOiBjdXJyZW50ID09PSAxXG4gIH0pLCBPYmplY3QoaTE4bl9bXCJfXCJdKSgnUHJldicpKSk7XG5cbiAgaWYgKGN1cnJlbnQgPiBsb01pZCAmJiB0b3RhbFBhZ2VzID4gbnVtTGlua3MgJiYgZmlyc3RQYWdlICE9PSAxKSB7XG4gICAgcGFnZXMucHVzaCggLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgICAgbGFiZWw6IFwiMVwiLFxuICAgICAga2V5OiBcImZpcnN0XCIsXG4gICAgICBvbkNsaWNrOiBvbkNoYW5nZSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBcImFyaWEtbGFiZWxcIjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0dvIHRvIGZpcnN0IHBhZ2UnKVxuICAgIH0pKTtcbiAgICBwYWdlcy5wdXNoKCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICBsYWJlbDogZWxsaXBzaXMsXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgIGtleTogXCJwcmV2RWxsaXBzaXNcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBzZWxlY3RlZDogZmFsc2VcbiAgICB9KSk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gZmlyc3RQYWdlOyBpIDw9IGxhc3RQYWdlOyBpICs9IDEpIHtcbiAgICB2YXIgaXNDdXJyZW50ID0gaSA9PT0gY3VycmVudDtcbiAgICBwYWdlcy5wdXNoKCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICBsYWJlbDogU3RyaW5nKGkpLFxuICAgICAgc2VsZWN0ZWQ6IGlzQ3VycmVudCxcbiAgICAgIG9uQ2xpY2s6IG9uQ2hhbmdlLFxuICAgICAgcGFnZTogaSxcbiAgICAgIGtleTogaSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBpc0N1cnJlbnQgPyBPYmplY3QoaTE4bl9bXCJfXCJdKSgnQ3VycmVudCBwYWdlJykgOiBPYmplY3QoZm9ybWF0X1tcInNwcmludGZcIl0pKE9iamVjdChpMThuX1tcIl9cIl0pKCdHbyB0byBwYWdlICUocGFnZU51bWJlcilkJyksIHtcbiAgICAgICAgcGFnZU51bWJlcjogaVxuICAgICAgfSlcbiAgICB9KSk7XG4gIH1cblxuICBpZiAoY3VycmVudCA8PSBoaU1pZCAmJiB0b3RhbFBhZ2VzID4gbnVtTGlua3MgJiYgbGFzdFBhZ2UgIT09IHRvdGFsUGFnZXMpIHtcbiAgICBwYWdlcy5wdXNoKCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgICBsYWJlbDogZWxsaXBzaXMsXG4gICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgIGtleTogXCJuZXh0RWxsaXBzaXNcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbiAgICB9KSk7XG5cbiAgICBpZiAoYWx3YXlzU2hvd0xhc3RQYWdlTGluaykge1xuICAgICAgcGFnZXMucHVzaCggLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgICAgICBcImRhdGEtdGVzdFwiOiBcImxhc3RcIixcbiAgICAgICAgbGFiZWw6IFN0cmluZyh0b3RhbFBhZ2VzKSxcbiAgICAgICAga2V5OiBcImxhc3RcIixcbiAgICAgICAgb25DbGljazogb25DaGFuZ2UsXG4gICAgICAgIHBhZ2U6IHRvdGFsUGFnZXMsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBPYmplY3QoaTE4bl9bXCJfXCJdKSgnR28gdG8gbGFzdCBwYWdlJylcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBwYWdlcy5wdXNoKCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJuZXh0XCIsXG4gICAgZGlzYWJsZWQ6IGN1cnJlbnQgPT09IHRvdGFsUGFnZXMsXG4gICAgb25DbGljazogb25DaGFuZ2UsXG4gICAgcGFnZTogY3VycmVudCArIDEsXG4gICAga2V5OiBcIm5leHRcIixcbiAgICBcImFyaWEtbGFiZWxcIjogT2JqZWN0KGkxOG5fW1wiX1wiXSkoJ0dvIHRvIG5leHQgcGFnZScpXG4gIH0sIE9iamVjdChpMThuX1tcIl9cIl0pKCdOZXh0JyksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDaGV2cm9uUmlnaHQsIHtcbiAgICAkZGlzYWJsZWQ6IGN1cnJlbnQgPT09IHRvdGFsUGFnZXNcbiAgfSkpKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChCb3hfZGVmYXVsdC5hLCBQYWdpbmF0b3JfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJwYWdpbmF0b3JcIixcbiAgICBcImRhdGEtdGVzdC1jdXJyZW50XCI6IGN1cnJlbnQsXG4gICAgZmxleDogdHJ1ZSxcbiAgICBpbmxpbmU6IHRydWUsXG4gICAgcm9sZTogXCJuYXZpZ2F0aW9uXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IE9iamVjdChpMThuX1tcIl9cIl0pKCdQYWdpbmF0aW9uIG5hdmlnYXRpb24nKVxuICB9LCBvdGhlclByb3BzKSwgcGFnZXMpO1xufVxuXG5QYWdpbmF0b3IucHJvcFR5cGVzID0gUGFnaW5hdG9yX3Byb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFBhZ2luYXRvcl9QYWdpbmF0b3IgPSAoUGFnaW5hdG9yKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1BhZ2luYXRvci9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDaGV2cm9uUmlnaHQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvblJpZ2h0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cblxuXG5cblxuXG5mdW5jdGlvbiBQcmlzbWEyNChfcmVmKSB7XG4gIHZhciBvdGhlclByb3BzID0gX2V4dGVuZHMoe30sIF9yZWYpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogZGVmYXVsdCAqLyBcImFcIl0sIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiXG4gIH0sIG90aGVyUHJvcHMpLCAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljc4NjEgMTEuOTk5OUw4LjQ4NTg3IDUuNjk5NzJDOC4wOTUzNCA1LjMwOTIgOC4wOTUzNCA0LjY3NjAzIDguNDg1ODcgNC4yODU1MUM4Ljg3NjM5IDMuODk0OTkgOS41MDk1NiAzLjg5NDk5IDkuOTAwMDggNC4yODU1MUwxNi41NTM4IDEwLjkzOTNDMTcuMTM5NiAxMS41MjUgMTcuMTM5NiAxMi40NzQ4IDE2LjU1MzggMTMuMDYwNkw5LjkwMTQyIDE5LjcxM0M5LjUxMDkgMjAuMTAzNSA4Ljg3NzczIDIwLjEwMzUgOC40ODcyMSAxOS43MTNDOC4wOTY2OSAxOS4zMjI0IDguMDk2NjkgMTguNjg5MyA4LjQ4NzIxIDE4LjI5ODhMMTQuNzg2MSAxMS45OTk5WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBQcmlzbWExNihfcmVmMikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmMik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNzEwOSA3Ljk5NzZMNS43MTAxNyAxMy45OTgzTDQuMjk1OTcgMTIuNTg0MUw4Ljg4OTE0IDcuOTkwOTVMNC4zNDQ4MiAzLjQwMzYzTDUuNzY1NjcgMS45OTYwOUwxMS43MTA5IDcuOTk3NlpcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gQ2hldnJvblJpZ2h0KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19DaGV2cm9uUmlnaHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEsXG4gICAgUHJpc21hMTY6IFByaXNtYTE2LFxuICAgIFByaXNtYTI0OiBQcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvQ2hldnJvblJpZ2h0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3R5bGVkLWNvbXBvbmVudHNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9mb3JtYXRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0MTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25TaW1wbGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1MDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENoZXZyb25MZWZ0OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkxlZnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkxlZnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX0NoZXZyb25MZWZ0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuZnVuY3Rpb24gUHJpc21hMjQoX3JlZikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjIxMzk0IDEyTDE1LjUxNDEgNS42OTk4NUMxNS45MDQ2IDUuMzA5MzMgMTUuOTA0NiA0LjY3NjE2IDE1LjUxNDEgNC4yODU2NEMxNS4xMjM2IDMuODk1MTEgMTQuNDkwNCAzLjg5NTExIDE0LjA5OTkgNC4yODU2NEw3LjQ0NjE4IDEwLjkzOTRDNi44NjAzOSAxMS41MjUyIDYuODYwMzkgMTIuNDc0OSA3LjQ0NjE4IDEzLjA2MDdMMTQuMDk5OSAxOS43MTQ0QzE0LjQ5MDQgMjAuMTA1IDE1LjEyMzYgMjAuMTA1IDE1LjUxNDEgMTkuNzE0NEMxNS45MDQ2IDE5LjMyMzkgMTUuOTA0NiAxOC42OTA3IDE1LjUxNDEgMTguMzAwMkw5LjIxMzk0IDEyWlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBQcmlzbWExNihfcmVmMikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmMik7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCJcbiAgfSwgb3RoZXJQcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4yODkwNiA3Ljk5NzZMMTAuMjg5OCAxMy45OTgzTDExLjcwNCAxMi41ODQxTDcuMTEwODYgNy45OTA5NUwxMS42NTUyIDMuNDAzNjNMMTAuMjM0MyAxLjk5NjA5TDQuMjg5MDYgNy45OTc2WlwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBDaGV2cm9uTGVmdChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1RoZW1lZEljb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1svKiBkZWZhdWx0ICovIFwiYVwiXSwgX2V4dGVuZHMoe1xuICAgIEVudGVycHJpc2U6IF9zcGx1bmtfcmVhY3RfaWNvbnNfQ2hldnJvbkxlZnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEsXG4gICAgUHJpc21hMTY6IFByaXNtYTE2LFxuICAgIFByaXNtYTI0OiBQcmlzbWEyNFxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvQ2hldnJvbkxlZnRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1ZHOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxudmFyIFN0eWxlZCA9IHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN2Zy53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiU1ZHX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWJ6MHJ5aC0wXCJcbn0pKFtcImZsZXg6MCAwIGF1dG87XCJdKTtcbmZ1bmN0aW9uIFNWRyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEljb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cbnZhciBpbmxpbmVTdHlsZXMgPSB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xufTtcbnZhciBibG9ja1N0eWxlcyA9IHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgZmxleDogJzAgMCBhdXRvJyxcbiAgbWFyZ2luOiAnMCBhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJ1xufTtcbnZhciBwcm9wVHlwZXMgPSB7XG4gIEVudGVycHJpc2U6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgZW50ZXJwcmlzZVNpemU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgZW50ZXJwcmlzZVdpZHRoOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIGVudGVycHJpc2VIZWlnaHQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgUHJpc21hMjQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxuICBQcmlzbWEyMDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBQcmlzbWExNjogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBwcmlzbWFTaXplOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLFxuICBpbmxpbmU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuYm9vbCxcbiAgc2NyZWVuUmVhZGVyVGV4dDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmdcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBpbmxpbmU6IHRydWUsXG4gIHByaXNtYVNpemU6ICdtZWRpdW0nXG59O1xuZnVuY3Rpb24gSWNvbihfcmVmKSB7XG4gIHZhciBFbnRlcnByaXNlID0gX3JlZi5FbnRlcnByaXNlLFxuICAgICAgUHJpc21hMjQgPSBfcmVmLlByaXNtYTI0LFxuICAgICAgUHJpc21hMjAgPSBfcmVmLlByaXNtYTIwLFxuICAgICAgUHJpc21hMTYgPSBfcmVmLlByaXNtYTE2LFxuICAgICAgcHJpc21hU2l6ZSA9IF9yZWYucHJpc21hU2l6ZSxcbiAgICAgIGlubGluZSA9IF9yZWYuaW5saW5lLFxuICAgICAgZW50ZXJwcmlzZVNpemUgPSBfcmVmLmVudGVycHJpc2VTaXplLFxuICAgICAgZW50ZXJwcmlzZVdpZHRoID0gX3JlZi5lbnRlcnByaXNlV2lkdGgsXG4gICAgICBlbnRlcnByaXNlSGVpZ2h0ID0gX3JlZi5lbnRlcnByaXNlSGVpZ2h0LFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dCA9IF9yZWYuc2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiRW50ZXJwcmlzZVwiLCBcIlByaXNtYTI0XCIsIFwiUHJpc21hMjBcIiwgXCJQcmlzbWExNlwiLCBcInByaXNtYVNpemVcIiwgXCJpbmxpbmVcIiwgXCJlbnRlcnByaXNlU2l6ZVwiLCBcImVudGVycHJpc2VXaWR0aFwiLCBcImVudGVycHJpc2VIZWlnaHRcIiwgXCJzY3JlZW5SZWFkZXJUZXh0XCJdKTtcblxuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gT2JqZWN0KF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJ1c2VTcGx1bmtUaGVtZVwiXSkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHksXG4gICAgICBkZW5zaXR5ID0gX3VzZVNwbHVua1RoZW1lLmRlbnNpdHk7IC8vIEVudGVycHJpc2UgLSBhbGwgdmFyaWFudHNcblxuXG4gIGlmIChmYW1pbHkgPT09ICdlbnRlcnByaXNlJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChFbnRlcnByaXNlLCBfZXh0ZW5kcyh7XG4gICAgICBzaXplOiBlbnRlcnByaXNlU2l6ZSxcbiAgICAgIHdpZHRoOiBlbnRlcnByaXNlV2lkdGgsXG4gICAgICBoZWlnaHQ6IGVudGVycHJpc2VIZWlnaHQsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0OiBzY3JlZW5SZWFkZXJUZXh0IHx8IG51bGwsXG4gICAgICBoaWRlRGVmYXVsdFRvb2x0aXA6IHRydWUsXG4gICAgICBpbmxpbmU6IGlubGluZVxuICAgIH0sIG90aGVyUHJvcHMpKTtcbiAgfVxuXG4gIHZhciBwcmlzbWFQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICdhcmlhLWxhYmVsJzogc2NyZWVuUmVhZGVyVGV4dCxcbiAgICBzdHlsZTogaW5saW5lID8gaW5saW5lU3R5bGVzIDogYmxvY2tTdHlsZXNcbiAgfSwgb3RoZXJQcm9wcyk7IC8vIFByaXNtYSAtIHNtYWxsK2NvbXBhY3QsIHNtYWxsK2NvbWZvcnRhYmxlXG5cblxuICBpZiAocHJpc21hU2l6ZSA9PT0gJ3NtYWxsJykge1xuICAgIHZhciBTVkcgPSBQcmlzbWExNiB8fCBQcmlzbWEyNDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCJcbiAgICB9LCBwcmlzbWFQcm9wcykpO1xuICB9IC8vIFByaXNtYSAtIG1lZGl1bStjb21wYWN0XG5cblxuICBpZiAoZGVuc2l0eSA9PT0gJ2NvbXBhY3QnKSB7XG4gICAgdmFyIF9TVkcgPSBQcmlzbWEyMCB8fCBQcmlzbWEyNDtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogXCIyMFwiLFxuICAgICAgaGVpZ2h0OiBcIjIwXCJcbiAgICB9LCBwcmlzbWFQcm9wcykpO1xuICB9IC8vIFByaXNtYSAtIG1lZGl1bStjb21mb3J0YWJsZVxuXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFByaXNtYTI0LCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IFwiMjRcIixcbiAgICBoZWlnaHQ6IFwiMjRcIlxuICB9LCBwcmlzbWFQcm9wcykpO1xufVxuSWNvbi5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG5JY29uLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuLyoqKi8gfSksXG5cbi8qKiovIDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gODg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtaWNvbnMvTW9yZVwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwcmludGYgPSBzcHJpbnRmO1xuZXhwb3J0cy5hYmJyZXZpYXRlTnVtYmVyID0gYWJicmV2aWF0ZU51bWJlcjtcbmV4cG9ydHMuYnl0ZXNUb0ZpbGVTaXplID0gYnl0ZXNUb0ZpbGVTaXplO1xuZXhwb3J0cy5zbWFydFRyaW0gPSBzbWFydFRyaW07XG5cbnZhciBfbG9kYXNoID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxudmFyIF9pMThuID0gcmVxdWlyZShcIi4vaTE4blwiKTtcblxudmFyIF9tYXRoID0gcmVxdWlyZShcIi4vbWF0aFwiKTtcblxudmFyIF9zcHJpbnRmID0gcmVxdWlyZShcIi4vc3ByaW50ZlwiKTtcblxuLyoqXG4gKiBAZmlsZVxuICogTnVtYmVyIGFuZCBTdHJpbmcgZm9ybWF0IHV0aWxpdGllcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB0ZXh0ID0gc3ByaW50ZignJTEkcyAlMiRzIGEgJTMkcycsICdQb2xseScsICd3YW50cycsICdjcmFja2VyJykgLy8gJ1BvbGx5IHdhbnRzIGEgY3JhY2tlcidcbiAqIGBgYFxuICpcbiAqICMjIyMgRm9ybWF0IFNwZWNpZmljYXRpb25cbiAqIFRoZSBwbGFjZWhvbGRlcnMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgYXJlIG1hcmtlZCBieSBgJWAgYW5kIGFyZSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBvZiB0aGVzZSBlbGVtZW50cywgaW4gdGhpcyBvcmRlcjpcbiAqXG4gKiAqIEFuIG9wdGlvbmFsIG51bWJlciBmb2xsb3dlZCBieSBhIGAkYCBzaWduIHRoYXQgc2VsZWN0cyB3aGljaCBhcmd1bWVudCBpbmRleCB0byB1c2UgZm9yIHRoZSB2YWx1ZS4gSWYgbm90IHNwZWNpZmllZCwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHBsYWNlaG9sZGVycyBpbiB0aGUgaW5wdXQgc3RyaW5nLlxuICogKiBBbiBvcHRpb25hbCBgK2Agc2lnbiB0aGF0IGZvcmNlcyB0byBwcmVjZWVkIHRoZSByZXN1bHQgd2l0aCBhIHBsdXMgb3IgbWludXMgc2lnbiBvbiBudW1lcmljIHZhbHVlcy4gQnkgZGVmYXVsdCwgb25seSB0aGUgYC1gIHNpZ24gaXMgdXNlZCBvbiBuZWdhdGl2ZSBudW1iZXJzLlxuICogKiBBbiBvcHRpb25hbCBwYWRkaW5nIHNwZWNpZmllciB0aGF0IHNheXMgd2hhdCBjaGFyYWN0ZXIgdG8gdXNlIGZvciBwYWRkaW5nLCBpZiBzcGVjaWZpZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYDBgIG9yIGFueSBvdGhlciBjaGFyYWN0ZXIgcHJlY2VkZWQgYnkgYSAoYCdgKSAoc2luZ2xlIHF1b3RlKS4gVGhlIGRlZmF1bHQgaXMgdG8gcGFkIHdpdGggKnNwYWNlcyouXG4gKiAqIEFuIG9wdGlvbmFsIGAtYCBzaWduIHRoYXQgY2F1c2VzIGBzcHJpbnRmYCB0byBsZWZ0LWFsaWduIHRoZSByZXN1bHQgb2YgdGhpcyBwbGFjZWhvbGRlci4gVGhlIGRlZmF1bHQgaXMgdG8gcmlnaHQtYWxpZ24gdGhlIHJlc3VsdC5cbiAqICogQW4gb3B0aW9uYWwgbnVtYmVyIHRoYXQgc2F5cyBob3cgbWFueSBjaGFyYWN0ZXJzIHRoZSByZXN1bHQgaGFzLiBJZiB0aGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaXMgc2hvcnRlciB0aGFuIHRoaXMgbnVtYmVyLCB0aGUgcmVzdWx0IGlzIHBhZGRlZC4gV2hlbiB1c2VkIHdpdGggdGhlIGBqYCAoSlNPTikgdHlwZSBzcGVjaWZpZXIsIHRoZSBwYWRkaW5nIGxlbmd0aCBzcGVjaWZpZXMgdGhlIHRhYiBzaXplIHVzZWQgZm9yIGluZGVudGF0aW9uLlxuICogKiBBbiBvcHRpb25hbCBwcmVjaXNpb24gbW9kaWZpZXIsIGNvbnNpc3Rpbmcgb2YgYSBgLmAgKGRvdCkgZm9sbG93ZWQgYnkgYSBudW1iZXIsIHRoYXQgc2F5cyBob3cgbWFueSBkaWdpdHMgYXJlIGRpc3BsYXllZCBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gV2hlbiB1c2VkIHdpdGggdGhlIGBnYCB0eXBlIHNwZWNpZmllciwgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzLiBXaGVuIHVzZWQgb24gYSBzdHJpbmcsIGl0IGNhdXNlcyB0aGUgcmVzdWx0IHRvIGJlIHRydW5jYXRlZC5cbiAqICogQSB0eXBlIHNwZWNpZmllciB0aGF0IGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzpcbiAqICAgICAqIGAlYCDigJQgeWllbGRzIGEgbGl0ZXJhbCBgJWAgY2hhcmFjdGVyXG4gKiAgICAgKiBgYmAg4oCUIHlpZWxkcyBhbiBpbnRlZ2VyIGFzIGEgYmluYXJ5IG51bWJlclxuICogICAgICogYGNgIOKAlCB5aWVsZHMgYW4gaW50ZWdlciBhcyB0aGUgY2hhcmFjdGVyIHdpdGggdGhhdCBBU0NJSSB2YWx1ZVxuICogICAgICogYGRgIG9yIGBpYCDigJQgeWllbGRzIGFuIGludGVnZXIgYXMgYSBzaWduZWQgZGVjaW1hbCBudW1iZXJcbiAqICAgICAqIGBlYCDigJQgeWllbGRzIGEgZmxvYXQgdXNpbmcgc2NpZW50aWZpYyBub3RhdGlvblxuICogICAgICogYHVgIOKAlCB5aWVsZHMgYW4gaW50ZWdlciBhcyBhbiB1bnNpZ25lZCBkZWNpbWFsIG51bWJlclxuICogICAgICogYGZgIOKAlCB5aWVsZHMgYSBmbG9hdCBhcyBpczsgc2VlIG5vdGVzIG9uIHByZWNpc2lvbiBhYm92ZVxuICogICAgICogYGdgIOKAlCB5aWVsZHMgYSBmbG9hdCBhcyBpczsgc2VlIG5vdGVzIG9uIHByZWNpc2lvbiBhYm92ZVxuICogICAgICogYG9gIOKAlCB5aWVsZHMgYW4gaW50ZWdlciBhcyBhbiBvY3RhbCBudW1iZXJcbiAqICAgICAqIGBzYCDigJQgeWllbGRzIGEgc3RyaW5nIGFzIGlzXG4gKiAgICAgKiBgdGAg4oCUIHlpZWxkcyBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogICAgICogYFRgIOKAlCB5aWVsZHMgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50PHN1cD48YSBocmVmPVwiI2ZuLTFcIiBuYW1lPVwiZm4tcmVmLTFcIj4xPC9hPjwvc3VwPlxuICogICAgICogYHZgIOKAlCB5aWVsZHMgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50XG4gKiAgICAgKiBgeGAg4oCUIHlpZWxkcyBhbiBpbnRlZ2VyIGFzIGEgaGV4YWRlY2ltYWwgbnVtYmVyIChsb3dlci1jYXNlKVxuICogICAgICogYFhgIOKAlCB5aWVsZHMgYW4gaW50ZWdlciBhcyBhIGhleGFkZWNpbWFsIG51bWJlciAodXBwZXItY2FzZSlcbiAqICAgICAqIGBqYCDigJQgeWllbGRzIGEgSmF2YVNjcmlwdCBvYmplY3Qgb3IgYXJyYXkgYXMgYSBKU09OIGVuY29kZWQgc3RyaW5nXG4gKlxuICogVGhpcyB1dGlsaXR5IHdhcyBhZGFwdGVkIGZyb20gW0FsZXhhbmRydSdzIHNwcmludGYtanMgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4ZWkvc3ByaW50Zi5qcykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIFRoZSBzdHJpbmcgdG8gZm9ybWF0IGFuZCBpbnNlcnQgdmFsdWVzIGludG8uXG4gKiBAcGFyYW0ge0FueX0gdmFsdWVzIC0gVGhlIHZhbHVlcyB0byBpbnNlcnQgaW50byB0aGUgZm9ybWF0IHN0cmluZy4gU2VlIHNwZWNpZmljYXRpb24gYWJvdmUuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNwcmludGYoa2V5KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3NwcmludGYuc3ByaW50ZkZvcm1hdCkoKDAsIF9zcHJpbnRmLnNwcmludGZQYXJzZSkoa2V5KSwgW2tleV0uY29uY2F0KHJlc3QpKTtcbn1cbi8qKlxuICogQWJicmV2aWF0ZXMgYSBudW1iZXIgYnkgcm91bmRpbmcgdG8gbm8gbW9yZSB0aGFuIHRocmVlIGRlY2ltYWwgcGxhY2VzIGFuZCBieSBhcHBlbmRpbmcgYVxuICogc3VmZml4OiBLL00vQi4gQWRkaXRpb25hbGx5LCB0aGUgcmVzdWx0aW5nIG51bWJlciBpcyBmb3JtYXR0ZWQgdXNpbmcgYSBnaXZlbiBsb2NhbGUuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICogYDk5NTQ5YCByZXR1cm5zIGA5OS41S2BcbiAqICAgKiBgMTE1OTAwMGAgcmV0dXJucyBgMS4xNk1gXG4gKiAgICogYDk1MDBgLCBgZGUtZGVgIHJldHVybnMgYDksNUtgXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBudW1iZXIgVGhlIG51bWJlciB0byBhYmJyZXZpYXRlLlxuICogQHBhcmFtIHtTdHJpbmd9IFtsb2NhbGU9J2VuLXVzJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBhYmJyZXZpYXRlZCBhbmQgbG9jYWxpemVkIG51bWJlciBpZiBgbnVtYmVyYCBpcyBwb3NpdGl2ZS4gVGhlIGxvY2FsaXplZFxuICogIG51bWJlciBpZiBuZWdhdGl2ZS5cbiAqIEBwdWJsaWNcbiAqL1xuXG5cbmZ1bmN0aW9uIGFiYnJldmlhdGVOdW1iZXIobnVtYmVyKSB7XG4gIHZhciBsb2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdlbi11cyc7XG4gIHZhciB2YWx1ZSA9ICgwLCBfbG9kYXNoLnRvTnVtYmVyKShudW1iZXIpO1xuXG4gIGlmICh2YWx1ZSA8PSAxMDAwKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSk7XG4gIH1cblxuICBpZiAodmFsdWUgPCAxMDAwMCkge1xuICAgIHJldHVybiBzcHJpbnRmKCgwLCBfaTE4bi5fKSgnJXNLJyksICgwLCBfbWF0aC5yb3VuZFRvRGVjaW1hbCkodmFsdWUgLyAxMDAwLCAtMikudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSk7XG4gIH1cblxuICBpZiAodmFsdWUgPCAxMDAwMDApIHtcbiAgICByZXR1cm4gc3ByaW50ZigoMCwgX2kxOG4uXykoJyVzSycpLCAoMCwgX21hdGgucm91bmRUb0RlY2ltYWwpKHZhbHVlIC8gMTAwMCwgLTEpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkpO1xuICB9XG5cbiAgaWYgKHZhbHVlIDwgOTk5NTAwKSB7XG4gICAgcmV0dXJuIHNwcmludGYoKDAsIF9pMThuLl8pKCclc0snKSwgKDAsIF9tYXRoLnJvdW5kVG9EZWNpbWFsKSh2YWx1ZSAvIDEwMDAsIDApLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkpO1xuICB9XG5cbiAgaWYgKHZhbHVlIDwgMTAwMDAwMDApIHtcbiAgICByZXR1cm4gc3ByaW50ZigoMCwgX2kxOG4uXykoJyVzTScpLCAoMCwgX21hdGgucm91bmRUb0RlY2ltYWwpKHZhbHVlIC8gMTAwMDAwMCwgLTIpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkpO1xuICB9XG5cbiAgaWYgKHZhbHVlIDwgMTAwMDAwMDAwKSB7XG4gICAgcmV0dXJuIHNwcmludGYoKDAsIF9pMThuLl8pKCclc00nKSwgKDAsIF9tYXRoLnJvdW5kVG9EZWNpbWFsKSh2YWx1ZSAvIDEwMDAwMDAsIC0xKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA8IDk5OTUwMDAwMCkge1xuICAgIHJldHVybiBzcHJpbnRmKCgwLCBfaTE4bi5fKSgnJXNNJyksICgwLCBfbWF0aC5yb3VuZFRvRGVjaW1hbCkodmFsdWUgLyAxMDAwMDAwLCAwKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA8IDEwMDAwMDAwMDAwKSB7XG4gICAgcmV0dXJuIHNwcmludGYoKDAsIF9pMThuLl8pKCclc0InKSwgKDAsIF9tYXRoLnJvdW5kVG9EZWNpbWFsKSh2YWx1ZSAvIDEwMDAwMDAwMDAsIC0yKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA8IDEwMDAwMDAwMDAwMCkge1xuICAgIHJldHVybiBzcHJpbnRmKCgwLCBfaTE4bi5fKSgnJXNCJyksICgwLCBfbWF0aC5yb3VuZFRvRGVjaW1hbCkodmFsdWUgLyAxMDAwMDAwMDAwLCAtMSkudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSk7XG4gIH1cblxuICByZXR1cm4gc3ByaW50ZigoMCwgX2kxOG4uXykoJyVzQicpLCAoMCwgX21hdGgucm91bmRUb0RlY2ltYWwpKHZhbHVlIC8gMTAwMDAwMDAwMCwgMCkudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSk7XG59XG4vKipcbiAqIEFiYnJldmlhdGVzIGEgbnVtYmVyIGJ5IHJvdW5kaW5nIHRvIG5vIG1vcmUgdGhhbiB0d28gZGVjaW1hbCBwbGFjZXMgYW5kIGJ5IGNvbnZlcnRpbmcgdG9cbiAqIGJpbmFyeSBwcmVmaXhlcyAoQi9LQi9NQi9HQi9UQikuIEFkZGl0aW9uYWxseSwgdGhlIHJlc3VsdGluZyBudW1iZXIgaXMgZm9ybWF0dGVkIHVzaW5nIGFcbiAqIGdpdmVuIGxvY2FsZS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgKiBgMTAwYCByZXR1cm5zIGAxMDAgQmBcbiAqICAgKiBgMTIwMGAgcmV0dXJucyBgMS4xNyBLQmBcbiAqICAgKiBgOTY2MTkxMzZgLCBgZGUtZGVgIHJldHVybnMgYDkyLDE0IE1CYFxuICpcbiAqIEBwYXJhbSAge051bWJlcnxTdHJpbmd9IGJ5dGVzIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWJicmV2aWF0ZS5cbiAqIEBwYXJhbSAge1N0cmluZ30gW2xvY2FsZT0nZW4tdXMnXVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgYGJ5dGVzYCBpcyBsZXNzIHRoYW4gemVyby5cbiAqIEByZXR1cm4ge1N0cmluZ30gVGhlIGFiYnJldmlhdGVkIGFuZCBsb2NhbGl6ZWQgbnVtYmVyLlxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24gYnl0ZXNUb0ZpbGVTaXplKGJ5dGVzKSB7XG4gIHZhciBsb2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdlbi11cyc7XG4gIHZhciBrYkZpbGVTaXplID0gKGJ5dGVzIHx8IDApIC8gMTAyNDtcblxuICBpZiAoa2JGaWxlU2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYnl0ZXMgbXVzdCBiZSA+PSAwJyk7XG4gIH1cblxuICBpZiAoTWF0aC5mbG9vcihrYkZpbGVTaXplKSA9PT0gMCkge1xuICAgIHJldHVybiBzcHJpbnRmKCgwLCBfaTE4bi5fKSgnJXMgQicpLCBieXRlcy50b0xvY2FsZVN0cmluZyhsb2NhbGUpKTtcbiAgfVxuXG4gIHZhciBtYkZpbGVTaXplID0ga2JGaWxlU2l6ZSAvIDEwMjQ7XG5cbiAgaWYgKE1hdGguZmxvb3IobWJGaWxlU2l6ZSkgPT09IDApIHtcbiAgICByZXR1cm4gc3ByaW50ZigoMCwgX2kxOG4uXykoJyVzIEtCJyksICgwLCBfbWF0aC5yb3VuZFRvRGVjaW1hbCkoa2JGaWxlU2l6ZSwgLTIpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkpO1xuICB9XG5cbiAgdmFyIGdiRmlsZVNpemUgPSBtYkZpbGVTaXplIC8gMTAyNDtcblxuICBpZiAoTWF0aC5mbG9vcihnYkZpbGVTaXplKSA9PT0gMCkge1xuICAgIHJldHVybiBzcHJpbnRmKCgwLCBfaTE4bi5fKSgnJXMgTUInKSwgKDAsIF9tYXRoLnJvdW5kVG9EZWNpbWFsKShtYkZpbGVTaXplLCAtMikudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSk7XG4gIH1cblxuICB2YXIgdGJGaWxlU2l6ZSA9IGdiRmlsZVNpemUgLyAxMDI0O1xuXG4gIGlmIChNYXRoLmZsb29yKHRiRmlsZVNpemUpID09PSAwKSB7XG4gICAgcmV0dXJuIHNwcmludGYoKDAsIF9pMThuLl8pKCclcyBHQicpLCAoMCwgX21hdGgucm91bmRUb0RlY2ltYWwpKGdiRmlsZVNpemUsIC0yKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpKTtcbiAgfVxuXG4gIHJldHVybiBzcHJpbnRmKCgwLCBfaTE4bi5fKSgnJXMgVEInKSwgKDAsIF9tYXRoLnJvdW5kVG9EZWNpbWFsKSh0YkZpbGVTaXplLCAtMikudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSk7XG59XG4vKipcbiAqIFRyaW0gYSBTdHJpbmcgYnkgcmVwbGFjaW5nIGNoYXJhY3RlcnMgaW4gdGhlIG1pZGRsZSB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEV4YW1wbGVzOlxuICogICAqIGAxMjM0NTY3ODkwYCwgYDdgIHJldHVybnMgYDEyMy4uLjc4OTBgXG4gKiAgICogYDEyMzQ1Njc4OTBgLCBgMTBgIHJldHVybnMgYDEyMzQ1Njc4OTBgXG4gKiAgICogYDEyMzQ1Njc4OTBgLCBgNTBgIHJldHVybnMgYDEyMzQ1Njc4OTBgXG4gKiAgICogYDEyMzQ1Njc4OTBgLCBgMmAsIGB7IHByZWNvbXBvc2VkOiB0cnVlIH1gIHJldHVybnMgYDHigKYwYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIGlucHV0IHN0cmluZy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBtYXhDaGFyc0Zyb21TdHJpbmcgSG93IG1hbnkgY2hhcmFjdGVycyB0byB0YWtlIGZyb20gYHN0cmluZ2AuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICogYHByZWNvbXBvc2VkYDogVXNlIG9uZSBlbGxpcHNpcyBjaGFyYWN0ZXIgKOKApilcbiAqICBpbnN0ZWFkIG9mIHRocmVlIHBlcmlvZHMuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSB0cmltbWVkIHJlc3VsdC4gTm90ZSB0aGF0IHRoZSB0b3RhbCBsZW5ndGggbWlnaHQgYmUgdXAgdG8gdGhyZWUgY2hhcmFjdGVyc1xuICogIG1vcmUgdGhhbiBgbWF4Q2hhcnNGcm9tU3RyaW5nYC4gSWYgYHN0cmluZ2AgaXMgZmFsc3kgb3IgaWYgYG1heENoYXJzRnJvbVN0cmluZ2AgaXMgbGVzcyB0aGFuIDEsXG4gKiAgYHN0cmluZ2AgaXMgcmV0dXJuZWQuXG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBzbWFydFRyaW0oc3RyaW5nLCBtYXhDaGFyc0Zyb21TdHJpbmcpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgX3JlZiRwcmVjb21wb3NlZCA9IF9yZWYucHJlY29tcG9zZWQsXG4gICAgICBwcmVjb21wb3NlZCA9IF9yZWYkcHJlY29tcG9zZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRwcmVjb21wb3NlZDtcblxuICBpZiAoIXN0cmluZyB8fCBtYXhDaGFyc0Zyb21TdHJpbmcgPCAxIHx8IHN0cmluZy5sZW5ndGggPD0gbWF4Q2hhcnNGcm9tU3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHZhciBlbGxpcHNpcyA9IHByZWNvbXBvc2VkID8gJ+KApicgOiAnLi4uJztcblxuICBpZiAobWF4Q2hhcnNGcm9tU3RyaW5nID09PSAxKSB7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHN0cmluZ1swXSkuY29uY2F0KGVsbGlwc2lzKTtcbiAgfVxuXG4gIHZhciBtaWRwb2ludCA9IE1hdGguY2VpbChzdHJpbmcubGVuZ3RoIC8gMik7XG4gIHZhciB0b1JlbW92ZSA9IHN0cmluZy5sZW5ndGggLSBtYXhDaGFyc0Zyb21TdHJpbmc7XG4gIHZhciBsc3RyaXAgPSBNYXRoLmNlaWwodG9SZW1vdmUgLyAyKTtcbiAgdmFyIHJzdHJpcCA9IHRvUmVtb3ZlIC0gbHN0cmlwO1xuICByZXR1cm4gXCJcIi5jb25jYXQoc3RyaW5nLnN1YnN0cmluZygwLCBtaWRwb2ludCAtIGxzdHJpcCkpLmNvbmNhdChlbGxpcHNpcykuY29uY2F0KHN0cmluZy5zdWJzdHJpbmcobWlkcG9pbnQgKyByc3RyaXApKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaWN0UGFyc2VGbG9hdCA9IHN0cmljdFBhcnNlRmxvYXQ7XG5leHBvcnRzLnJvdW5kVG9EZWNpbWFsID0gcm91bmRUb0RlY2ltYWw7XG5leHBvcnRzLmZsb29yUG93ZXJPZlRlbiA9IGZsb29yUG93ZXJPZlRlbjtcbmV4cG9ydHMuaXNMZXNzVGhhbk1pblNhZmVJbnQgPSBpc0xlc3NUaGFuTWluU2FmZUludDtcbmV4cG9ydHMuaXNHcmVhdGVyVGhhbk1heFNhZmVJbnQgPSBpc0dyZWF0ZXJUaGFuTWF4U2FmZUludDtcblxudmFyIF9sb2Rhc2ggPSByZXF1aXJlKFwibG9kYXNoXCIpO1xuXG4vKipcbiAqIEBmaWxlXG4gKiBNYXRoIGFuZCBmbG9hdGluZyBwb2ludCB1dGlsaXRpZXMuXG4gKi9cbnZhciBkZWNpbWFsT3JTY2llbnRpZmljUmVnZXggPSAvKF5bLStdP1swLTldKlsuXT9bMC05XSokKXwoXlstK10/WzAtOV1bLl0/WzAtOV0qZVstK10/WzAtOV1bMC05XSokKS9pO1xudmFyIG1pblNhZmVJbnRlZ2VyID0gLTkwMDcxOTkyNTQ3NDA5OTE7IC8vIHJlcXVpcmVkIGFzIGxvbmcgYXMgd2Ugc3VwcG9ydCBJRTExXG5cbnZhciBtYXhTYWZlSW50ZWdlciA9IDkwMDcxOTkyNTQ3NDA5OTE7IC8vIHJlcXVpcmVkIGFzIGxvbmcgYXMgd2Ugc3VwcG9ydCBJRTExXG5cbi8qKlxuICogQSBzdHJpY3QgdmVyc2lvbiBvZiBgcGFyc2VGbG9hdGAgdGhhdCByZXF1aXJlcyB0aGUgZW50aXJlIGlucHV0IHN0cmluZyB0byBiZSB2YWxpZCBkZWNpbWFsXG4gKiBvciBzY2llbnRpZmljIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJucyB7KE51bWJlcnxOYU4pfVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHN0cmljdFBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIC8vIGlmIHRoZSBudW1iZXIgaXMgbm90IGluIGRlY2ltYWwgb3Igc2NpZW50aWZpYyBmb3JtYXQsIHJldHVybiBOYU4gZXhwbGljaXRseVxuICAvLyBpbnN0ZWFkIG9mIGxldHRpbmcgSmF2YVNjcmlwdCBkbyBpdHMgbG9vc2UgcGFyc2luZ1xuICByZXR1cm4gIWRlY2ltYWxPclNjaWVudGlmaWNSZWdleC50ZXN0KHN0cmluZykgPyBOYU4gOiBwYXJzZUZsb2F0KHN0cmluZyk7XG59XG4vKipcbiAqXG4gKiBSb3VuZHMgYSBudW1iZXIgdG8gYSBzcGVjaWZpYyBleHBvbmVudCBvZiBiYXNlIDEwLlxuICpcbiAqIEV4YW1wbGVzOlxuICogICAqIGB2YWx1ZWAgMTI1LjY3OCBhbmQgYGV4cGAgLTIgcm91bmRzIHRvIDEyNS42OFxuICogICAqIGB2YWx1ZWAgMTI1LjY3OCBhbmQgYGV4cGAgLTEgcm91bmRzIHRvIDEyNS43XG4gKiAgICogYHZhbHVlYCAxMjUuNjc4IGFuZCBgZXhwYCAwIHJvdW5kcyB0byAxMjZcbiAqICAgKiBgdmFsdWVgIDEyNS42NzggYW5kIGBleHBgIDEgcm91bmRzIHRvIDEzMFxuICogICAqIGB2YWx1ZWAgMTI1LjY3OCBhbmQgYGV4cGAgMiByb3VuZHMgdG8gMTAwXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge051bWJlcn0gW2V4cD0wXSBFeHBvbmVudCBvZiBiYXNlIDEwIG9mIHRoZSBkZWNpbWFsIHBsYWNlIHRvIHJvdW5kIHRvLlxuICogQHJldHVybnMgeyhOdW1iZXJ8TmFOKX0gVGhlIHJvdW5kZWQgbnVtYmVyIG9yIE5hTiBpZiBgdmFsdWVgIGlzIG5vdCBhIE51bWJlciBvciBgZXhwYCBpc24ndFxuICogIGFuIGludGVnZXIuXG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiByb3VuZFRvRGVjaW1hbCh2YWx1ZSkge1xuICB2YXIgZXhwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICByZXR1cm4gKDAsIF9sb2Rhc2gucm91bmQpKHZhbHVlLCBleHAgKiAtMSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIG5lYXJlc3Qgd2hvbGUgcG93ZXIgb2YgdGVuIGxlc3Mgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIG51bWJlci5cbiAqXG4gKiBFeGFtcGxlczpcbiAqICAgKiAxMCByZXR1cm5zIDEwXG4gKiAgICogMTEgcmV0dXJucyAxMFxuICogICAqIDk5IHJldHVybnMgMTBcbiAqICAgKiAxMDAgcmV0dXJucyAxMDBcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyXG4gKiBAcmV0dXJucyB7KE51bWJlcnxOYU4pfSBUaGUgcmVzdWx0IGlmIGBudW1iZXJgIGlzIHBvc2l0aXZlLCBgMGAgaWYgYG51bWJlcmAgaXMgYDBgLCBgTmFOYCBpZlxuICogIGBudW1iZXJgIGlzIG5lZ2F0aXZlLlxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24gZmxvb3JQb3dlck9mVGVuKG51bWJlcikge1xuICByZXR1cm4gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cobnVtYmVyKSAvIE1hdGguTE4xMCkpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBudW1iZXIgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHNhZmUgaW50ZWdlciAoLTkwMDcxOTkyNTQ3NDA5OTEpLlxuICogQHBhcmFtIHtOdW1iZXJ9IG51bWJlclxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBnaXZlbiBudW1iZXIgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHNhZmUgaW50ZWdlciwgYGZhbHNlYFxuICogIG90aGVyd2lzZSAob3IgaWYgYG51bWJlcmAgaXNuJ3QgYSBOdW1iZXIpLlxuICogQHB1YmxpY1xuICovXG5cblxuZnVuY3Rpb24gaXNMZXNzVGhhbk1pblNhZmVJbnQobnVtYmVyKSB7XG4gIGlmICghKDAsIF9sb2Rhc2guaXNOdW1iZXIpKG51bWJlcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbnVtYmVyIDw9IG1pblNhZmVJbnRlZ2VyO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHNhZmUgaW50ZWdlciAoOTAwNzE5OTI1NDc0MDk5MSkuXG4gKiBAcGFyYW0ge051bWJlcn0gbnVtYmVyXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gc2FmZSBpbnRlZ2VyLCBgZmFsc2VgXG4gKiAgb3RoZXJ3aXNlIChvciBpZiBgbnVtYmVyYCBpc24ndCBhIE51bWJlcikuXG4gKiBAcHVibGljXG4gKi9cblxuXG5mdW5jdGlvbiBpc0dyZWF0ZXJUaGFuTWF4U2FmZUludChudW1iZXIpIHtcbiAgaWYgKCEoMCwgX2xvZGFzaC5pc051bWJlcikobnVtYmVyKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBudW1iZXIgPj0gbWF4U2FmZUludGVnZXI7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwcmludGZGb3JtYXQgPSBzcHJpbnRmRm9ybWF0O1xuZXhwb3J0cy5zcHJpbnRmUGFyc2UgPSBzcHJpbnRmUGFyc2U7XG5cbnZhciBfbG9kYXNoID0gcmVxdWlyZShcImxvZGFzaFwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vLyBUaGlzIGZpbGUgd2FzIGFkYXB0ZWQgZnJvbSBbQWxleGFuZHJ1J3Mgc3ByaW50Zi1qcyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL2FsZXhlaS9zcHJpbnRmLmpzKSxcbi8vIHdoaWNoIGlzIEJTRC0zLUNsYXVzZS1saWNlbnNlZDpcbi8vXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDctcHJlc2VudCwgQWxleGFuZHJ1IE3Eg3LEg8iZdGVhbnUgPGhlbGxvQGFsZXhlaS5ybz5cbi8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbi8vICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbi8vICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuLy8gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuLy8gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4vLyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4vLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhpcyBzb2Z0d2FyZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlXG4vLyAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbi8vICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuLy9cbi8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbi8vIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbi8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Jcbi8vIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4vLyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbi8vIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuLy9cbi8vIEVuZCBvZiBCU0QtMy1DbGF1c2UgbGljZW5zZSB0ZXh0LlxuXG4vKipcbiAqIFJlZ0V4cyB1c2VkIGJ5IHNwcmludGYuXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgcmUgPSB7XG4gIG5vdFR5cGU6IC9bXlRdLyxcbiAgbm90UHJpbWl0aXZlOiAvW152XS8sXG4gIG51bWJlcjogL1tkaWVmZ10vLFxuICBudW1lcmljQXJnOiAvW2JjZGllZmd1eFhdLyxcbiAganNvbjogL1tqXS8sXG4gIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW14pXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxcbiAga2V5OiAvXihbYS16X11bYS16X1xcZF0qKS9pLFxuICBrZXlBY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gIGluZGV4QWNjZXNzOiAvXlxcWyhcXGQrKVxcXS8sXG4gIHNpZ246IC9eWystXS9cbn07XG4vKipcbiAqIEludGVybmFsIGhlbHBlci5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3ByaW50ZihrZXkpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHJldHVybiBzcHJpbnRmRm9ybWF0KHNwcmludGZQYXJzZShrZXkpLCBba2V5XS5jb25jYXQocmVzdCkpO1xufVxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBzcHJpbnRmLlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIHNwcmludGZGb3JtYXQocGFyc2VUcmVlLCBhcmd2KSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIGRlZmF1bHQtY2FzZSwgbm8tYml0d2lzZSwgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbiAgdmFyIHRyZWVMZW5ndGggPSBwYXJzZVRyZWUubGVuZ3RoO1xuICB2YXIgY3Vyc29yID0gMTtcbiAgdmFyIGFyZztcbiAgdmFyIG91dHB1dCA9ICcnO1xuICB2YXIgaTtcbiAgdmFyIGs7XG4gIHZhciBwaDtcbiAgdmFyIHBhZDtcbiAgdmFyIHBhZENoYXJhY3RlcjtcbiAgdmFyIHBhZExlbmd0aDtcbiAgdmFyIGlzUG9zaXRpdmU7XG4gIHZhciBzaWduO1xuXG4gIGZvciAoaSA9IDA7IGkgPCB0cmVlTGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodHlwZW9mIHBhcnNlVHJlZVtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG91dHB1dCArPSBwYXJzZVRyZWVbaV07XG4gICAgfSBlbHNlIGlmIChfdHlwZW9mKHBhcnNlVHJlZVtpXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBwaCA9IHBhcnNlVHJlZVtpXTsgLy8gY29udmVuaWVuY2UgcHVycG9zZXMgb25seVxuXG4gICAgICBpZiAocGgua2V5cykge1xuICAgICAgICAvLyBrZXl3b3JkIGFyZ3VtZW50XG4gICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yXTtcblxuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcGgua2V5cy5sZW5ndGg7IGsgKz0gMSkge1xuICAgICAgICAgIGlmICghKDAsIF9sb2Rhc2guaGFzKShhcmcsIHBoLmtleXNba10pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIHByb3BlcnR5IFwiJXNcIiBkb2VzIG5vdCBleGlzdCcsIHBoLmtleXNba10pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmcgPSBhcmdbcGgua2V5c1trXV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGgucGFyYW1Obykge1xuICAgICAgICAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChleHBsaWNpdClcbiAgICAgICAgYXJnID0gYXJndltwaC5wYXJhbU5vXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGltcGxpY2l0KVxuICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcl07XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAocmUubm90VHlwZS50ZXN0KHBoLnR5cGUpICYmIHJlLm5vdFByaW1pdGl2ZS50ZXN0KHBoLnR5cGUpICYmIGFyZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIGFyZyA9IGFyZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmUubnVtZXJpY0FyZy50ZXN0KHBoLnR5cGUpICYmIHR5cGVvZiBhcmcgIT09ICdudW1iZXInICYmIE51bWJlci5pc05hTihOdW1iZXIoYXJnKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVQnLCBhcmcpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgIGlzUG9zaXRpdmUgPSBhcmcgPj0gMDtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChwaC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgIGFyZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIHBoLndpZHRoID8gcGFyc2VJbnQocGgud2lkdGgsIDEwKSA6IDApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbCgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZyc6XG4gICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gU3RyaW5nKE51bWJlcihhcmcudG9QcmVjaXNpb24ocGgucHJlY2lzaW9uKSkpIDogcGFyc2VGbG9hdChhcmcpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ28nOlxuICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoOCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgYXJnID0gU3RyaW5nKGFyZyk7XG4gICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIGFyZyA9IFN0cmluZyghIWFyZyk7XG4gICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgIGFyZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd1JzpcbiAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKSA+Pj4gMDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICBhcmcgPSBhcmcudmFsdWVPZigpO1xuICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAocmUuanNvbi50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgIG91dHB1dCArPSBhcmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkgJiYgKCFpc1Bvc2l0aXZlIHx8IHBoLnNpZ24pKSB7XG4gICAgICAgICAgc2lnbiA9IGlzUG9zaXRpdmUgPyAnKycgOiAnLSc7XG4gICAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKCkucmVwbGFjZShyZS5zaWduLCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2lnbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFkQ2hhcmFjdGVyID0gcGgucGFkQ2hhciA/IHBoLnBhZENoYXIgPT09ICcwJyA/ICcwJyA6IHBoLnBhZENoYXIuY2hhckF0KDEpIDogJyAnO1xuICAgICAgICBwYWRMZW5ndGggPSBwaC53aWR0aCAtIChzaWduICsgYXJnKS5sZW5ndGg7XG4gICAgICAgIHBhZCA9IHBoLndpZHRoID8gcGFkTGVuZ3RoID4gMCA/ICgwLCBfbG9kYXNoLnJlcGVhdCkocGFkQ2hhcmFjdGVyLCBwYWRMZW5ndGgpIDogJycgOiAnJztcbiAgICAgICAgb3V0cHV0ICs9IHBoLmFsaWduID8gc2lnbiArIGFyZyArIHBhZCA6IHBhZENoYXJhY3RlciA9PT0gJzAnID8gc2lnbiArIHBhZCArIGFyZyA6IHBhZCArIHNpZ24gKyBhcmc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbiAgLyogZXNsaW50LWVuYWJsZSBkZWZhdWx0LWNhc2UsIG5vLWJpdHdpc2UsIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG59XG4vKipcbiAqIENhY2hlIHVzZWQgYnkgc3ByaW50ZlBhcnNlXG4gKiBAcHJpdmF0ZVxuICovXG5cblxudmFyIHNwcmludGZQYXJzZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKlxuICogQ3JlYXRlcyBhbiBBU1Qgb2YgZm10LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbXQgLSBUaGUgdGFyZ2V0IHN0cmluZy5cbiAqIEByZXR1cm5zIHtBcnJheX0gQW4gQVNUIG9mIGZtdC5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3ByaW50ZlBhcnNlKGZtdCkge1xuICBpZiAoc3ByaW50ZlBhcnNlQ2FjaGVbZm10XSkge1xuICAgIHJldHVybiBzcHJpbnRmUGFyc2VDYWNoZVtmbXRdO1xuICB9XG5cbiAgdmFyIGN1cnJlbnQgPSBmbXQ7XG4gIHZhciBtYXRjaDtcbiAgdmFyIGFyZ05hbWVzID0gMDtcbiAgdmFyIHBhcnNlVHJlZSA9IFtdO1xuXG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24sIG5vLWJpdHdpc2UgKi9cbiAgICBpZiAoKG1hdGNoID0gcmUudGV4dC5leGVjKGN1cnJlbnQpKSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlLnB1c2gobWF0Y2hbMF0pO1xuICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoY3VycmVudCkpICE9PSBudWxsKSB7XG4gICAgICBwYXJzZVRyZWUucHVzaCgnJScpO1xuICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gcmUucGxhY2Vob2xkZXIuZXhlYyhjdXJyZW50KSkgIT09IG51bGwpIHtcbiAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICBhcmdOYW1lcyB8PSAxO1xuICAgICAgICB2YXIgcmVwbGFjZW1lbnRGaWVsZCA9IG1hdGNoWzJdO1xuICAgICAgICB2YXIgZmllbGRNYXRjaCA9IFtdO1xuICAgICAgICB2YXIgZmllbGRMaXN0ID0gW107XG5cbiAgICAgICAgaWYgKChmaWVsZE1hdGNoID0gcmUua2V5LmV4ZWMocmVwbGFjZW1lbnRGaWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgZmllbGRMaXN0LnB1c2goZmllbGRNYXRjaFsxXSk7XG5cbiAgICAgICAgICB3aGlsZSAoKHJlcGxhY2VtZW50RmllbGQgPSByZXBsYWNlbWVudEZpZWxkLnN1YnN0cmluZyhmaWVsZE1hdGNoWzBdLmxlbmd0aCkpICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKChmaWVsZE1hdGNoID0gcmUua2V5QWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRGaWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkTGlzdC5wdXNoKGZpZWxkTWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZmllbGRNYXRjaCA9IHJlLmluZGV4QWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRGaWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpZWxkTGlzdC5wdXNoKGZpZWxkTWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXRjaFsyXSA9IGZpZWxkTGlzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ05hbWVzIHw9IDI7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdOYW1lcyA9PT0gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcGFyc2VUcmVlLnB1c2goe1xuICAgICAgICBwbGFjZWhvbGRlcjogbWF0Y2hbMF0sXG4gICAgICAgIHBhcmFtTm86IG1hdGNoWzFdLFxuICAgICAgICBrZXlzOiBtYXRjaFsyXSxcbiAgICAgICAgc2lnbjogbWF0Y2hbM10sXG4gICAgICAgIHBhZENoYXI6IG1hdGNoWzRdLFxuICAgICAgICBhbGlnbjogbWF0Y2hbNV0sXG4gICAgICAgIHdpZHRoOiBtYXRjaFs2XSxcbiAgICAgICAgcHJlY2lzaW9uOiBtYXRjaFs3XSxcbiAgICAgICAgdHlwZTogbWF0Y2hbOF1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyJyk7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGN1cnJlbnQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiwgbm8tYml0d2lzZSAqL1xuICB9XG5cbiAgc3ByaW50ZlBhcnNlQ2FjaGVbZm10XSA9IHBhcnNlVHJlZTtcbiAgcmV0dXJuIHNwcmludGZQYXJzZUNhY2hlW2ZtdF07XG59IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA0Mik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pMThuXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9TVkdJbnRlcm5hbFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkZWZhdWx0XCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ2hldnJvbkxlZnQ7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuZnVuY3Rpb24gQ2hldnJvbkxlZnQocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0LmEsIF9leHRlbmRzKHtcbiAgICBzY3JlZW5SZWFkZXJUZXh0OiBPYmplY3QoX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXCJfXCJdKSgnQ2hldnJvbiBMZWZ0JyksXG4gICAgdmlld0JveDogXCIwIDAgODg1IDE1MDBcIlxuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNzUxLjAyNyAxNTAwTDAgNzUwIDc1MCAwbDEzNC41OSAxMzQuNTlMMjY5LjE3NyA3NTBsNjE1LjQxIDYxNS40MVwiXG4gIH0pKTtcbn1cblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMTApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDExMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIE1vcmU7IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3NwbHVua191aV91dGlsc19pMThuX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdWlfdXRpbHNfaTE4bl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfU1ZHSW50ZXJuYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihfc3BsdW5rX3JlYWN0X2ljb25zX1NWR0ludGVybmFsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuXG5cblxuZnVuY3Rpb24gTW9yZShwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX3NwbHVua19yZWFjdF9pY29uc19TVkdJbnRlcm5hbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQuYSwgX2V4dGVuZHMoe1xuICAgIHNjcmVlblJlYWRlclRleHQ6IE9iamVjdChfc3BsdW5rX3VpX3V0aWxzX2kxOG5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcIl9cIl0pKCdNb3JlJyksXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIlxuICB9LCBwcm9wcyksIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSwxNmMwLDEuNy0xLjMsMy0zLDNzLTMtMS4zLTMtM3MxLjMtMywzLTNTOSwxNC4zLDksMTZ6IE0xNiwxM2MtMS43LDAtMywxLjMtMywzczEuMywzLDMsM3MzLTEuMywzLTNTMTcuNywxMywxNiwxM3pNMjYsMTNjLTEuNywwLTMsMS4zLTMsM3MxLjMsMywzLDNzMy0xLjMsMy0zUzI3LjcsMTMsMjYsMTN6XCJcbiAgfSkpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9TVkdJbnRlcm5hbFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7IiwibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMDcpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMDc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLy8gRVNNIENPTVBBVCBGTEFHXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIEVYUE9SVFNcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBzcmNfQ2FyZF9DYXJkOyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkhlYWRlclwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIENhcmRfSGVhZGVyOyB9KTtcbl9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcIkJvZHlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAvKiByZWV4cG9ydCAqLyBDYXJkX0JvZHk7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiRm9vdGVyXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gQ2FyZF9Gb290ZXI7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0JveFwiXG52YXIgQm94XyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG52YXIgQm94X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEJveF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXNcIlxudmFyIHRoZW1lc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9DYXJkL0JvZHlTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkJvZHlTdHlsZXNfX1N0eWxlZEJveFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xMTMwdWRwLTBcIlxufSkoW1wiZmxleDoxIDEgYXV0bztvdmVyZmxvdzphdXRvO2hlaWdodDoxMDAlO1wiLCBcIlwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6XCIsIFwiOyY6bm90KDpmaXJzdC1jaGlsZCl7cGFkZGluZy10b3A6MDt9XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmcpLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLXJhZGl1czpcIiwgXCI7Y29sb3I6XCIsIFwiO3BhZGRpbmc6MTJweCAyNHB4OyY6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6MjhweDt9JjpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjI4cHg7fVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJSYWRpdXMsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQpLFxuICAgIGNvbXBhY3Q6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1yYWRpdXM6XCIsIFwiO2NvbG9yOlwiLCBcIjtwYWRkaW5nOjhweCAyNHB4OyY6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6MjBweDt9JjpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjIwcHg7fVwiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJSYWRpdXMsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yTXV0ZWQpXG4gIH1cbn0pKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ2FyZC9Cb2R5LnRzeFxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSlcbn07XG5cbi8qKlxuICogQSBzdHlsZWQgY29udGFpbmVyIGZvciBgQ2FyZGAgYm9keSBjb250ZW50LlxuICovXG5mdW5jdGlvbiBCb2R5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIl0pO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgQm9keVByb3BzQmFzZVxuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEJveCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10ZXN0XCI6IFwiYm9keVwiXG4gIH0sIG90aGVyUHJvcHMpLCBjaGlsZHJlbik7XG59XG5cbkJvZHkucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQ2FyZF9Cb2R5ID0gKEJvZHkpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ2FyZC9Gb290ZXJTdHlsZXMudHNcblxuXG5cbnZhciBGb290ZXJTdHlsZXNfU3R5bGVkQm94ID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdCgpKEJveF9kZWZhdWx0LmEpLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJGb290ZXJTdHlsZXNfX1N0eWxlZEJveFwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xeXUzcjRzLTBcIlxufSkoW1wiXCIsIFwiO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6XCIsIFwiO1wiLCBcIlwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInBhZGRpbmc6XCIsIFwiOyY6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDpub25lO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZyksXG4gIHByaXNtYToge1xuICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOjI0cHg7XCJdKSxcbiAgICBjb21wYWN0OiBcInBhZGRpbmc6IDE4cHggMjRweFwiXG4gIH1cbn0pLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvck11dGVkLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJHNob3dUb3BCb3JkZXIgPSBfcmVmLiRzaG93VG9wQm9yZGVyO1xuICByZXR1cm4gJHNob3dUb3BCb3JkZXIgJiYgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm9yZGVyLXRvcDoxcHggc29saWQgXCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ncmF5OTIpXG4gIH0pO1xufSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0NhcmQvRm9vdGVyLnRzeFxuZnVuY3Rpb24gRm9vdGVyX2V4dGVuZHMoKSB7IEZvb3Rlcl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIEZvb3Rlcl9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gRm9vdGVyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBGb290ZXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIEZvb3Rlcl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIEZvb3Rlcl9wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBzaG93Qm9yZGVyOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sXG59O1xuXG4vKipcbiAqIEEgc3R5bGVkIGNvbnRhaW5lciBmb3IgYENhcmRgIGZvb3RlciBjb250ZW50LlxuICovXG5mdW5jdGlvbiBGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRzaG93Qm9yZGVyID0gX3JlZi5zaG93Qm9yZGVyLFxuICAgICAgc2hvd0JvcmRlciA9IF9yZWYkc2hvd0JvcmRlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc2hvd0JvcmRlcixcbiAgICAgIG90aGVyUHJvcHMgPSBGb290ZXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIiwgXCJzaG93Qm9yZGVyXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIEZvb3RlclByb3BzQmFzZVxuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEZvb3RlclN0eWxlc19TdHlsZWRCb3gsIEZvb3Rlcl9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdFwiOiBcImZvb3RlclwiLFxuICAgICRzaG93VG9wQm9yZGVyOiBzaG93Qm9yZGVyXG4gIH0sIG90aGVyUHJvcHMpLCBjaGlsZHJlbik7XG59XG5cbkZvb3Rlci5wcm9wVHlwZXMgPSBGb290ZXJfcHJvcFR5cGVzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgQ2FyZF9Gb290ZXIgPSAoRm9vdGVyKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3VpLXV0aWxzL2kxOG5cIlxudmFyIGkxOG5fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQW5jaG9yXCJcbnZhciBBbmNob3JfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MSk7XG52YXIgQW5jaG9yX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKEFuY2hvcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9CdXR0b25cIlxudmFyIEJ1dHRvbl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcbnZhciBCdXR0b25fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQnV0dG9uXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3JlYWN0LXVpL0Ryb3Bkb3duXCJcbnZhciBEcm9wZG93bl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBEcm9wZG93bl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihEcm9wZG93bl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay90aGVtZXMvdXNlU3BsdW5rVGhlbWVcIlxudmFyIHVzZVNwbHVua1RoZW1lXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpO1xudmFyIHVzZVNwbHVua1RoZW1lX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHVzZVNwbHVua1RoZW1lXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvaWNvbnMvTW9yZVZlcnRpY2FsLnRzeFxudmFyIE1vcmVWZXJ0aWNhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9DYXJkL0hlYWRlclN0eWxlcy50c1xuXG5cblxudmFyIFN0eWxlZFRpdGxlID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSGVhZGVyU3R5bGVzX19TdHlsZWRUaXRsZVwiLFxuICBjb21wb25lbnRJZDogXCJlcWk2dWstMFwiXG59KShbXCJcIiwgXCIgXCIsIFwiIG1hcmdpbjowO292ZXJmbG93LXdyYXA6YnJlYWstd29yZDtwYWRkaW5nOjA7XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdibG9jaycpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZm9udC13ZWlnaHQ6XCIsIFwiO2ZvbnQtc2l6ZTpcIiwgXCI7bGluZS1oZWlnaHQ6MS4yO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250V2VpZ2h0U2VtaUJvbGQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFNpemVMYXJnZSksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZm9udC13ZWlnaHQ6XCIsIFwiO2NvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFdlaWdodEJvbGQsIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlKVxufSkpO1xudmFyIFN0eWxlZFN1YnRpdGxlID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiSGVhZGVyU3R5bGVzX19TdHlsZWRTdWJ0aXRsZVwiLFxuICBjb21wb25lbnRJZDogXCJlcWk2dWstMVwiXG59KShbXCJcIiwgXCI7XCIsIFwiIG1hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDpub3JtYWw7XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLnJlc2V0KCdpbmxpbmUnKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImZvbnQtc2l6ZTpcIiwgXCI7Y29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnRleHRHcmF5KSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmNvbnRlbnRDb2xvckRlZmF1bHQpXG59KSk7XG52YXIgU3R5bGVkVGl0bGVDb250YWluZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkZXJTdHlsZXNfX1N0eWxlZFRpdGxlQ29udGFpbmVyXCIsXG4gIGNvbXBvbmVudElkOiBcImVxaTZ1ay0yXCJcbn0pKFtcIlwiLCBcIiAmOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OlwiLCBcIjt9XCJdLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgJHRydW5jYXRlVGl0bGUgPSBfcmVmLiR0cnVuY2F0ZVRpdGxlO1xuICByZXR1cm4gJHRydW5jYXRlVGl0bGUgJiYgT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wib3ZlcmZsb3c6aGlkZGVuOyYgPiBcIiwgXCIsJiA+IFwiLCBcIntvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7fVwiXSxcbiAgLyogc2Mtc2VsICovXG4gIFN0eWxlZFRpdGxlLFxuICAvKiBzYy1zZWwgKi9cbiAgU3R5bGVkU3VidGl0bGUpO1xufSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uc3BhY2luZ0hhbGYsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nU21hbGxcbn0pKTtcbnZhciBTdHlsZWRBY3Rpb25Db250YWluZXIgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJIZWFkZXJTdHlsZXNfX1N0eWxlZEFjdGlvbkNvbnRhaW5lclwiLFxuICBjb21wb25lbnRJZDogXCJlcWk2dWstM1wiXG59KShbXCJcIiwgXCIgcG9zaXRpb246YWJzb2x1dGU7XCIsIFwiO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnYmxvY2snKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInJpZ2h0OlwiLCBcIjt0b3A6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5zcGFjaW5nLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmcpLFxuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcInJpZ2h0OjEycHg7dG9wOjEycHg7XCJdKVxufSkpO1xudmFyIEhlYWRlclN0eWxlc19TdHlsZWRCb3ggPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQm94X2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIkhlYWRlclN0eWxlc19fU3R5bGVkQm94XCIsXG4gIGNvbXBvbmVudElkOiBcImVxaTZ1ay00XCJcbn0pKFtcImRpc3BsYXk6ZmxleDtmbGV4OjAgMCBhdXRvO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6MzBweDtcIiwgXCIgXCIsIFwiID46bm90KFwiLCBcIik6bm90KFwiLCBcIil7ZmxleDoxIDAgYXV0bzt9XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLnNwYWNpbmcpLFxuICBwcmlzbWE6IHtcbiAgICBjb21mb3J0YWJsZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzoxNnB4IDI0cHg7JjpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjMycHg7fVwiXSksXG4gICAgY29tcGFjdDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzoxMnB4IDI0cHg7JjpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjI0cHg7fVwiXSlcbiAgfVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci10b3AtbGVmdC1yYWRpdXM6XCIsIFwiO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyUmFkaXVzLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJvcmRlclJhZGl1cylcbn0pLFxuLyogc2Mtc2VsICovXG5TdHlsZWRUaXRsZUNvbnRhaW5lcixcbi8qIHNjLXNlbCAqL1xuU3R5bGVkQWN0aW9uQ29udGFpbmVyKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ2FyZC9IZWFkZXIudHN4XG5mdW5jdGlvbiBIZWFkZXJfZXh0ZW5kcygpIHsgSGVhZGVyX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gSGVhZGVyX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBIZWFkZXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IEhlYWRlcl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gSGVhZGVyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgSGVhZGVyX3Byb3BUeXBlcyA9IHtcbiAgYWN0aW9uUHJpbWFyeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgYWN0aW9uc1NlY29uZGFyeTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgYW5jaG9yOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuICBzdWJ0aXRsZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcbiAgdGl0bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIHRydW5jYXRlVGl0bGU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2xcbn07XG5cbi8qKlxuICogQSBzdHlsZWQgY29udGFpbmVyIGZvciBgQ2FyZGAgaGVhZGVyIGNvbnRlbnQuXG4gKi9cbmZ1bmN0aW9uIEhlYWRlcihfcmVmKSB7XG4gIHZhciBhY3Rpb25QcmltYXJ5ID0gX3JlZi5hY3Rpb25QcmltYXJ5LFxuICAgICAgYWN0aW9uc1NlY29uZGFyeSA9IF9yZWYuYWN0aW9uc1NlY29uZGFyeSxcbiAgICAgIGFuY2hvciA9IF9yZWYuYW5jaG9yLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgc3VidGl0bGUgPSBfcmVmLnN1YnRpdGxlLFxuICAgICAgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgX3JlZiR0cnVuY2F0ZVRpdGxlID0gX3JlZi50cnVuY2F0ZVRpdGxlLFxuICAgICAgdHJ1bmNhdGVUaXRsZSA9IF9yZWYkdHJ1bmNhdGVUaXRsZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkdHJ1bmNhdGVUaXRsZSxcbiAgICAgIG90aGVyUHJvcHMgPSBIZWFkZXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiYWN0aW9uUHJpbWFyeVwiLCBcImFjdGlvbnNTZWNvbmRhcnlcIiwgXCJhbmNob3JcIiwgXCJjaGlsZHJlblwiLCBcInN1YnRpdGxlXCIsIFwidGl0bGVcIiwgXCJ0cnVuY2F0ZVRpdGxlXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIEhlYWRlclByb3BzQmFzZVxuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gdXNlU3BsdW5rVGhlbWVfZGVmYXVsdCgpKCksXG4gICAgICBmYW1pbHkgPSBfdXNlU3BsdW5rVGhlbWUuZmFtaWx5O1xuXG4gIHZhciBhY3Rpb25zU2Vjb25kYXJ5VG9nZ2xlID0gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KEJ1dHRvbl9kZWZhdWx0LmEsIHtcbiAgICBhcHBlYXJhbmNlOiBcInNlY29uZGFyeVwiLFxuICAgIFwiZGF0YS10ZXN0XCI6IFwiYWN0aW9ucy1zZWNvbmRhcnktdG9nZ2xlXCIsXG4gICAgaWNvbjogLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KE1vcmVWZXJ0aWNhbFtcImFcIiAvKiBkZWZhdWx0ICovXSwge1xuICAgICAgc2NyZWVuUmVhZGVyVGV4dDogYWN0aW9uUHJpbWFyeSA/IE9iamVjdChpMThuX1tcIl9cIl0pKCdNb3JlIEFjdGlvbnMnKSA6IE9iamVjdChpMThuX1tcIl9cIl0pKCdBY3Rpb25zJylcbiAgICB9KSxcbiAgICBzdHlsZToge1xuICAgICAgbWFyZ2luTGVmdDogMTBcbiAgICB9XG4gIH0pO1xuICB2YXIgZGVmYXVsdFBsYWNlbWVudCA9IGZhbWlseSA9PT0gJ3ByaXNtYScgPyAncmlnaHQnIDogJ2JlbG93JztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChIZWFkZXJTdHlsZXNfU3R5bGVkQm94LCBIZWFkZXJfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXRlc3RcIjogXCJoZWFkZXJcIlxuICB9LCBvdGhlclByb3BzKSwgKHRpdGxlIHx8IHN1YnRpdGxlKSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVGl0bGVDb250YWluZXIsIHtcbiAgICAkdHJ1bmNhdGVUaXRsZTogdHJ1bmNhdGVUaXRsZVxuICB9LCB0aXRsZSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVGl0bGUsIG51bGwsIGFuY2hvciA/IC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChBbmNob3JfZGVmYXVsdC5hLCB7XG4gICAgbmFtZTogYW5jaG9yXG4gIH0sIHRpdGxlKSA6IHRpdGxlKSwgc3VidGl0bGUgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZFN1YnRpdGxlLCBudWxsLCBzdWJ0aXRsZSkpLCBjaGlsZHJlbiwgKGFjdGlvblByaW1hcnkgfHwgYWN0aW9uc1NlY29uZGFyeSkgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZEFjdGlvbkNvbnRhaW5lciwgbnVsbCwgYWN0aW9uUHJpbWFyeSwgYWN0aW9uc1NlY29uZGFyeSAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoRHJvcGRvd25fZGVmYXVsdC5hLCB7XG4gICAgZGVmYXVsdFBsYWNlbWVudDogZGVmYXVsdFBsYWNlbWVudCxcbiAgICB0b2dnbGU6IGFjdGlvbnNTZWNvbmRhcnlUb2dnbGVcbiAgfSwgYWN0aW9uc1NlY29uZGFyeSkpKTtcbn1cblxuSGVhZGVyLnByb3BUeXBlcyA9IEhlYWRlcl9wcm9wVHlwZXM7XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBDYXJkX0hlYWRlciA9IChIZWFkZXIpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvcmVhY3QtdWkvQ2xpY2thYmxlXCJcbnZhciBDbGlja2FibGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgQ2xpY2thYmxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKENsaWNrYWJsZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9DYXJkL0NhcmRTdHlsZXMudHNcblxuXG5cblxudmFyIGNhcmRUcmFuc2l0aW9uVGltZSA9ICcwLjJzJztcbnZhciBTdHlsZWQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDYXJkU3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwib2xhM3gwLTBcIlxufSkoW1wiXCIsIFwiO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdHJldGNoO21pbi13aWR0aDoxMDBweDtmbGV4OjE7dmVydGljYWwtYWxpZ246dG9wO1wiLCBcIiB0cmFuc2l0aW9uOmhlaWdodCBcIiwgXCIsd2lkdGggXCIsIFwiLG1pbi13aWR0aCBcIiwgXCIsbWF4LXdpZHRoIFwiLCBcIixtYXJnaW4gXCIsIFwiLGJveC1zaGFkb3cgXCIsIFwiLGJvcmRlci1jb2xvciBcIiwgXCI7XCIsIFwiICZbZGF0YS1jbGlja2FibGU9J3RydWUnXXtjdXJzb3I6cG9pbnRlcjtcIiwgXCIgJjpob3ZlcntcIiwgXCJ9Jjpmb2N1c3tcIiwgXCJ9fVwiLCBcIlwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnaW5saW5lLWZsZXgnKSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQtY29sb3I6XCIsIFwiO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJhY2tncm91bmRDb2xvciksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7Ym9yZGVyLXJhZGl1czpcIiwgXCI7Ym94LXNoYWRvdzpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmJhY2tncm91bmRDb2xvclNlY3Rpb24sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyUmFkaXVzLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVtYm9zc1NoYWRvdylcbn0pLCBjYXJkVHJhbnNpdGlvblRpbWUsIGNhcmRUcmFuc2l0aW9uVGltZSwgY2FyZFRyYW5zaXRpb25UaW1lLCBjYXJkVHJhbnNpdGlvblRpbWUsIGNhcmRUcmFuc2l0aW9uVGltZSwgY2FyZFRyYW5zaXRpb25UaW1lLCBjYXJkVHJhbnNpdGlvblRpbWUsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciAkY2FyZEhhc0JvcmRlciA9IF9yZWYuJGNhcmRIYXNCb3JkZXI7XG4gIHJldHVybiAkY2FyZEhhc0JvcmRlciAmJiBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJMaWdodENvbG9yKVxuICB9KTtcbn0sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgJHNlbGVjdGVkID0gX3JlZjIuJHNlbGVjdGVkO1xuICByZXR1cm4gJHNlbGVjdGVkICYmIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvcmRlci1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzQ29sb3IpLFxuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1wibWl4aW5zXCJdLm92ZXJsYXlDb2xvcnModGhlbWVzX1tcInZhcmlhYmxlc1wiXS5iYWNrZ3JvdW5kQ29sb3JTZWN0aW9uLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5U2VsZWN0ZWQpKVxuICB9KTtcbn0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3gtc2hhZG93OlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ub3ZlcmxheVNoYWRvdyksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm94LXNoYWRvdzpcIiwgXCI7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmVtYm9zc1NoYWRvdywgdGhlbWVzX1tcIm1peGluc1wiXS5vdmVybGF5Q29sb3JzKHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYmFja2dyb3VuZENvbG9yU2VjdGlvbiwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yT3ZlcmxheUhvdmVyKSlcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiYm94LXNoYWRvdzpcIiwgXCI7XCJdLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvY3VzU2hhZG93KSxcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3gtc2hhZG93OlwiLCBcIjtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZW1ib3NzU2hhZG93LCB0aGVtZXNfW1wibWl4aW5zXCJdLm92ZXJsYXlDb2xvcnModGhlbWVzX1tcInZhcmlhYmxlc1wiXS5iYWNrZ3JvdW5kQ29sb3JTZWN0aW9uLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmludGVyYWN0aXZlQ29sb3JPdmVybGF5SG92ZXIpKVxufSksIGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgcmVuZGVyc0FzQnV0dG9uID0gX3JlZjMucmVuZGVyc0FzQnV0dG9uO1xuICByZXR1cm4gcmVuZGVyc0FzQnV0dG9uICYmIE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiYgXCIsIFwie2ZsZXgtYmFzaXM6MDt9XCJdLCBTdHlsZWRCb3gpO1xufSk7XG52YXIgU3R5bGVkQ2xpY2thYmxlID0gU3R5bGVkLndpdGhDb21wb25lbnQoQ2xpY2thYmxlX2RlZmF1bHQuYSk7XG4vKiBBIGNoaWxkIGVsZW1lbnQgd2UgYWRkIHRvIDxidXR0b24+cyB0byBtYWtlIGZsZXhib3ggd29yay5cbiAgIFdpdGhvdXQgdGhpcyB3cmFwcGVyIGVsZW1lbnQsIGNoaWxkIGVsZW1lbnRzIHdvbid0IGZsZXhcbiAgIGluIEZpcmVmb3guXG4gICBUaGlzIHVuZm9ydHVuYXRlbHkgZXhwb3NlcyBzb21lIGZyYWdpbGl0eSBpbiBJRSAoZS5nLiwgYWRkaW5nXG4gICBhIGZsZXg6IDEgc3R5bGUgaGVyZSB3aWxsIGNhdXNlIHRoZSBjYXJkIHRvIGNvbGxhcHNlKSBzbyB0ZXN0XG4gICBhY3Jvc3MgdGhlIHN1cHBvcnRlZCBicm93c2VycyBpZiBtYWtpbmcgYSBjaGFuZ2UgaGVyZS5cbiovXG5cbnZhciBTdHlsZWRGaXJlZm94RmxleEhhY2sgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJDYXJkU3R5bGVzX19TdHlsZWRGaXJlZm94RmxleEhhY2tcIixcbiAgY29tcG9uZW50SWQ6IFwib2xhM3gwLTFcIlxufSkoW1wiZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7aGVpZ2h0OjEwMCU7XCIsIFwiXCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJib3JkZXItcmFkaXVzOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYm9yZGVyUmFkaXVzKVxufSkpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9DYXJkL0NhcmQudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIENhcmRfZXh0ZW5kcygpIHsgQ2FyZF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIENhcmRfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBDYXJkX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBDYXJkX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBDYXJkX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5cblxuXG5cblxuXG52YXIgQ2FyZF9wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuICBlbGVtZW50UmVmOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vbmVPZlR5cGUoW2V4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9iamVjdF0pLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBtYXJnaW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcblxuICAvKiogQHByaXZhdGUgKi9cbiAgbWF4V2lkdGg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmddKSxcblxuICAvKiogQHByaXZhdGUgKi9cbiAgbWluV2lkdGg6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgb25DbGljazogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgb3BlbkluTmV3Q29udGV4dDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgc2VsZWN0ZWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHNob3dCb3JkZXI6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmJvb2wsXG4gIHRvOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsXG4gIHZhbHVlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5hbnlcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBvcGVuSW5OZXdDb250ZXh0OiBmYWxzZSxcbiAgc2VsZWN0ZWQ6IGZhbHNlLFxuICBzaG93Qm9yZGVyOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc0NsaWNrYWJsZShwcm9wcykge1xuICByZXR1cm4gISFwcm9wcy5vbkNsaWNrIHx8ICEhcHJvcHMudG87XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFByb3BzKHByb3BzKSB7XG4gIHZhciBtYXJnaW4gPSBwcm9wcy5tYXJnaW4sXG4gICAgICBtYXhXaWR0aCA9IHByb3BzLm1heFdpZHRoLFxuICAgICAgbWluV2lkdGggPSBwcm9wcy5taW5XaWR0aCxcbiAgICAgIHNlbGVjdGVkID0gcHJvcHMuc2VsZWN0ZWQsXG4gICAgICBzaG93Qm9yZGVyID0gcHJvcHMuc2hvd0JvcmRlcixcbiAgICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgICBvdGhlclByb3BzID0gQ2FyZF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgW1wibWFyZ2luXCIsIFwibWF4V2lkdGhcIiwgXCJtaW5XaWR0aFwiLCBcInNlbGVjdGVkXCIsIFwic2hvd0JvcmRlclwiLCBcInN0eWxlXCJdKTtcblxuICB2YXIgY2FyZFN0eWxlID0gX29iamVjdFNwcmVhZCh7XG4gICAgbWluV2lkdGg6IG1pbldpZHRoLFxuICAgIG1heFdpZHRoOiBtYXhXaWR0aCxcbiAgICBtYXJnaW46IG1hcmdpblxuICB9LCBzdHlsZSk7XG5cbiAgdmFyIHNoYXJlZFByb3BzID0ge1xuICAgIHNob3dCb3JkZXI6IHNob3dCb3JkZXIsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICdkYXRhLXRlc3QnOiAnY2FyZCcsXG4gICAgc3R5bGU6IGNhcmRTdHlsZVxuICB9O1xuICByZXR1cm4gW3NoYXJlZFByb3BzLCBvdGhlclByb3BzXTtcbn1cblxudmFyIENhcmRfQ2FyZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQ2FyZCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDYXJkKTtcblxuICBmdW5jdGlvbiBDYXJkKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDYXJkKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2FyZENsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGljaywgX3RoaXMkcHJvcHMyO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzZWxlY3RlZCA9IF90aGlzJHByb3BzLnNlbGVjdGVkLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMudmFsdWU7XG4gICAgICAoX3RoaXMkcHJvcHMkb25DbGljayA9IChfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcykub25DbGljaykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DbGljay5jYWxsKF90aGlzJHByb3BzMiwgZSwge1xuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ2FyZCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIGlmIChpc0NsaWNrYWJsZSh0aGlzLnByb3BzKSkge1xuICAgICAgICB2YXIgX2dldFNoYXJlZFByb3BzID0gZ2V0U2hhcmVkUHJvcHModGhpcy5wcm9wcyksXG4gICAgICAgICAgICBfZ2V0U2hhcmVkUHJvcHMyID0gX3NsaWNlZFRvQXJyYXkoX2dldFNoYXJlZFByb3BzLCAyKSxcbiAgICAgICAgICAgIF9zaGFyZWRQcm9wcyA9IF9nZXRTaGFyZWRQcm9wczJbMF0sXG4gICAgICAgICAgICBfb3duUHJvcHMgPSBfZ2V0U2hhcmVkUHJvcHMyWzFdO1xuXG4gICAgICAgIHZhciBfc2VsZWN0ZWQgPSBfc2hhcmVkUHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgICAgICBfc2hvd0JvcmRlciA9IF9zaGFyZWRQcm9wcy5zaG93Qm9yZGVyO1xuXG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSBfb3duUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICBfZWxlbWVudFJlZiA9IF9vd25Qcm9wcy5lbGVtZW50UmVmLFxuICAgICAgICAgICAgb25DbGljayA9IF9vd25Qcm9wcy5vbkNsaWNrLFxuICAgICAgICAgICAgb3BlbkluTmV3Q29udGV4dCA9IF9vd25Qcm9wcy5vcGVuSW5OZXdDb250ZXh0LFxuICAgICAgICAgICAgdG8gPSBfb3duUHJvcHMudG8sXG4gICAgICAgICAgICBfb3RoZXJQcm9wcyA9IENhcmRfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX293blByb3BzLCBbXCJjaGlsZHJlblwiLCBcImVsZW1lbnRSZWZcIiwgXCJvbkNsaWNrXCIsIFwib3BlbkluTmV3Q29udGV4dFwiLCBcInRvXCJdKTtcblxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENsaWNrYWJsZSwgQ2FyZF9leHRlbmRzKHtcbiAgICAgICAgICBcImRhdGEtY2xpY2thYmxlXCI6IHRydWUsXG4gICAgICAgICAgJHNlbGVjdGVkOiBfc2VsZWN0ZWQsXG4gICAgICAgICAgJGNhcmRIYXNCb3JkZXI6IF9zaG93Qm9yZGVyLFxuICAgICAgICAgIGVsZW1lbnRSZWY6IF9lbGVtZW50UmVmXG4gICAgICAgIH0sIF9zaGFyZWRQcm9wcywgX290aGVyUHJvcHMsIHtcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsaWNrID8gdGhpcy5oYW5kbGVDYXJkQ2xpY2sgOiB1bmRlZmluZWQsXG4gICAgICAgICAgb3BlbkluTmV3Q29udGV4dDogb3BlbkluTmV3Q29udGV4dCxcbiAgICAgICAgICByZW5kZXJzQXNCdXR0b246IG9uQ2xpY2sgJiYgIXRvLFxuICAgICAgICAgIHRvOiB0byB8fCB1bmRlZmluZWRcbiAgICAgICAgfSksIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRGaXJlZm94RmxleEhhY2ssIG51bGwsIF9jaGlsZHJlbikpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2dldFNoYXJlZFByb3BzMyA9IGdldFNoYXJlZFByb3BzKHRoaXMucHJvcHMpLFxuICAgICAgICAgIF9nZXRTaGFyZWRQcm9wczQgPSBfc2xpY2VkVG9BcnJheShfZ2V0U2hhcmVkUHJvcHMzLCAyKSxcbiAgICAgICAgICBzaGFyZWRQcm9wcyA9IF9nZXRTaGFyZWRQcm9wczRbMF0sXG4gICAgICAgICAgb3duUHJvcHMgPSBfZ2V0U2hhcmVkUHJvcHM0WzFdO1xuXG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzaGFyZWRQcm9wcy5zZWxlY3RlZCxcbiAgICAgICAgICBzaG93Qm9yZGVyID0gc2hhcmVkUHJvcHMuc2hvd0JvcmRlcjtcblxuICAgICAgdmFyIGNoaWxkcmVuID0gb3duUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZWxlbWVudFJlZiA9IG93blByb3BzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IENhcmRfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3duUHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiZWxlbWVudFJlZlwiXSk7XG5cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkLCBDYXJkX2V4dGVuZHMoe1xuICAgICAgICAkc2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICAkY2FyZEhhc0JvcmRlcjogc2hvd0JvcmRlcixcbiAgICAgICAgcmVmOiBlbGVtZW50UmVmXG4gICAgICB9LCBzaGFyZWRQcm9wcywgb3RoZXJQcm9wcyksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ2FyZDtcbn0oZXh0ZXJuYWxfcmVhY3RfW1wiQ29tcG9uZW50XCJdKTtcblxuX2RlZmluZVByb3BlcnR5KENhcmRfQ2FyZCwgXCJwcm9wVHlwZXNcIiwgQ2FyZF9wcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoQ2FyZF9DYXJkLCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG5fZGVmaW5lUHJvcGVydHkoQ2FyZF9DYXJkLCBcIkhlYWRlclwiLCBDYXJkX0hlYWRlcik7XG5cbl9kZWZpbmVQcm9wZXJ0eShDYXJkX0NhcmQsIFwiQm9keVwiLCBDYXJkX0JvZHkpO1xuXG5fZGVmaW5lUHJvcGVydHkoQ2FyZF9DYXJkLCBcIkZvb3RlclwiLCBDYXJkX0Zvb3Rlcik7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19DYXJkX0NhcmQgPSAoQ2FyZF9DYXJkKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvQ2FyZC9pbmRleC50c1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDExOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0NsaWNrYWJsZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0Ryb3Bkb3duXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTc6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQnV0dG9uXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHlsZWQtY29tcG9uZW50c1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lcy91c2VTcGx1bmtUaGVtZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdWktdXRpbHMvaTE4blwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDUyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gTW9yZVZlcnRpY2FsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zcGx1bmtfcmVhY3RfaWNvbnNfTW9yZVZlcnRpY2FsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3JlYWN0X2ljb25zX01vcmVWZXJ0aWNhbF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfcmVhY3RfaWNvbnNfTW9yZVZlcnRpY2FsX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9UaGVtZWRJY29uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TVkdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxuXG5cblxuZnVuY3Rpb24gUHJpc21hMjQoX3JlZikge1xuICB2YXIgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBfcmVmKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoX1NWR19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIlxuICB9LCBvdGhlclByb3BzKSwgLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4wMTY3IDYuMjcyNzNDMTIuOTIwNSA2LjI3MjczIDEzLjY1MzEgNS41NDAxIDEzLjY1MzEgNC42MzYzNkMxMy42NTMxIDMuNzMyNjMgMTIuOTIwNSAzIDEyLjAxNjcgM0MxMS4xMTMgMyAxMC4zODA0IDMuNzMyNjMgMTAuMzgwNCA0LjYzNjM2QzEwLjM4MDQgNS41NDAxIDExLjExMyA2LjI3MjczIDEyLjAxNjcgNi4yNzI3M1pNMTMuNjUzMSAxMkMxMy42NTMxIDEyLjkwMzggMTIuOTIwNSAxMy42MzY0IDEyLjAxNjcgMTMuNjM2NEMxMS4xMTMgMTMuNjM2NCAxMC4zODA0IDEyLjkwMzggMTAuMzgwNCAxMkMxMC4zODA0IDExLjA5NjMgMTEuMTEzIDEwLjM2MzYgMTIuMDE2NyAxMC4zNjM2QzEyLjkyMDUgMTAuMzYzNiAxMy42NTMxIDExLjA5NjMgMTMuNjUzMSAxMlpNMTMuNjUzMSAxOS4zNjM3QzEzLjY1MzEgMjAuMjY3NCAxMi45MjA1IDIxIDEyLjAxNjcgMjFDMTEuMTEzIDIxIDEwLjM4MDQgMjAuMjY3NCAxMC4zODA0IDE5LjM2MzdDMTAuMzgwNCAxOC40NTk5IDExLjExMyAxNy43MjczIDEyLjAxNjcgMTcuNzI3M0MxMi45MjA1IDE3LjcyNzMgMTMuNjUzMSAxOC40NTk5IDEzLjY1MzEgMTkuMzYzN1pcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gTW9yZVZlcnRpY2FsKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfVGhlbWVkSWNvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLCBfZXh0ZW5kcyh7XG4gICAgRW50ZXJwcmlzZTogX3NwbHVua19yZWFjdF9pY29uc19Nb3JlVmVydGljYWxfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEsXG4gICAgUHJpc21hMjQ6IFByaXNtYTI0XG4gIH0sIHByb3BzKSk7XG59XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1Mzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay9yZWFjdC1pY29ucy9Nb3JlVmVydGljYWxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1ZHOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciByZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc3R5bGVkX2NvbXBvbmVudHNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5cblxudmFyIFN0eWxlZCA9IHN0eWxlZF9jb21wb25lbnRzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLnN2Zy53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiU1ZHX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMWJ6MHJ5aC0wXCJcbn0pKFtcImZsZXg6MCAwIGF1dG87XCJdKTtcbmZ1bmN0aW9uIFNWRyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICB9LCBwcm9wcykpO1xufVxuXG4vKioqLyB9KSxcblxuLyoqKi8gNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEljb247IH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIHJlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfc3BsdW5rX3RoZW1lc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cblxuXG5cbnZhciBpbmxpbmVTdHlsZXMgPSB7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJ1xufTtcbnZhciBibG9ja1N0eWxlcyA9IHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgZmxleDogJzAgMCBhdXRvJyxcbiAgbWFyZ2luOiAnMCBhdXRvJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJ1xufTtcbnZhciBwcm9wVHlwZXMgPSB7XG4gIEVudGVycHJpc2U6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYyxcbiAgZW50ZXJwcmlzZVNpemU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgZW50ZXJwcmlzZVdpZHRoOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mVHlwZShbcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5udW1iZXIsIHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuc3RyaW5nXSksXG4gIGVudGVycHJpc2VIZWlnaHQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEub25lT2ZUeXBlKFtwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm51bWJlciwgcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmddKSxcbiAgUHJpc21hMjQ6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxuICBQcmlzbWEyMDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBQcmlzbWExNjogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5mdW5jLFxuICBwcmlzbWFTaXplOiBwcm9wX3R5cGVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdC5hLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLFxuICBpbmxpbmU6IHByb3BfdHlwZXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0LmEuYm9vbCxcbiAgc2NyZWVuUmVhZGVyVGV4dDogcHJvcF90eXBlc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQuYS5zdHJpbmdcbn07XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBpbmxpbmU6IHRydWUsXG4gIHByaXNtYVNpemU6ICdtZWRpdW0nXG59O1xuZnVuY3Rpb24gSWNvbihfcmVmKSB7XG4gIHZhciBFbnRlcnByaXNlID0gX3JlZi5FbnRlcnByaXNlLFxuICAgICAgUHJpc21hMjQgPSBfcmVmLlByaXNtYTI0LFxuICAgICAgUHJpc21hMjAgPSBfcmVmLlByaXNtYTIwLFxuICAgICAgUHJpc21hMTYgPSBfcmVmLlByaXNtYTE2LFxuICAgICAgcHJpc21hU2l6ZSA9IF9yZWYucHJpc21hU2l6ZSxcbiAgICAgIGlubGluZSA9IF9yZWYuaW5saW5lLFxuICAgICAgZW50ZXJwcmlzZVNpemUgPSBfcmVmLmVudGVycHJpc2VTaXplLFxuICAgICAgZW50ZXJwcmlzZVdpZHRoID0gX3JlZi5lbnRlcnByaXNlV2lkdGgsXG4gICAgICBlbnRlcnByaXNlSGVpZ2h0ID0gX3JlZi5lbnRlcnByaXNlSGVpZ2h0LFxuICAgICAgc2NyZWVuUmVhZGVyVGV4dCA9IF9yZWYuc2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiRW50ZXJwcmlzZVwiLCBcIlByaXNtYTI0XCIsIFwiUHJpc21hMjBcIiwgXCJQcmlzbWExNlwiLCBcInByaXNtYVNpemVcIiwgXCJpbmxpbmVcIiwgXCJlbnRlcnByaXNlU2l6ZVwiLCBcImVudGVycHJpc2VXaWR0aFwiLCBcImVudGVycHJpc2VIZWlnaHRcIiwgXCJzY3JlZW5SZWFkZXJUZXh0XCJdKTtcblxuICB2YXIgX3VzZVNwbHVua1RoZW1lID0gT2JqZWN0KF9zcGx1bmtfdGhlbWVzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXCJ1c2VTcGx1bmtUaGVtZVwiXSkoKSxcbiAgICAgIGZhbWlseSA9IF91c2VTcGx1bmtUaGVtZS5mYW1pbHksXG4gICAgICBkZW5zaXR5ID0gX3VzZVNwbHVua1RoZW1lLmRlbnNpdHk7IC8vIEVudGVycHJpc2UgLSBhbGwgdmFyaWFudHNcblxuXG4gIGlmIChmYW1pbHkgPT09ICdlbnRlcnByaXNlJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChFbnRlcnByaXNlLCBfZXh0ZW5kcyh7XG4gICAgICBzaXplOiBlbnRlcnByaXNlU2l6ZSxcbiAgICAgIHdpZHRoOiBlbnRlcnByaXNlV2lkdGgsXG4gICAgICBoZWlnaHQ6IGVudGVycHJpc2VIZWlnaHQsXG4gICAgICBzY3JlZW5SZWFkZXJUZXh0OiBzY3JlZW5SZWFkZXJUZXh0IHx8IG51bGwsXG4gICAgICBoaWRlRGVmYXVsdFRvb2x0aXA6IHRydWUsXG4gICAgICBpbmxpbmU6IGlubGluZVxuICAgIH0sIG90aGVyUHJvcHMpKTtcbiAgfVxuXG4gIHZhciBwcmlzbWFQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICdhcmlhLWxhYmVsJzogc2NyZWVuUmVhZGVyVGV4dCxcbiAgICBzdHlsZTogaW5saW5lID8gaW5saW5lU3R5bGVzIDogYmxvY2tTdHlsZXNcbiAgfSwgb3RoZXJQcm9wcyk7IC8vIFByaXNtYSAtIHNtYWxsK2NvbXBhY3QsIHNtYWxsK2NvbWZvcnRhYmxlXG5cblxuICBpZiAocHJpc21hU2l6ZSA9PT0gJ3NtYWxsJykge1xuICAgIHZhciBTVkcgPSBQcmlzbWExNiB8fCBQcmlzbWEyNDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL3JlYWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU1ZHLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogXCIxNlwiLFxuICAgICAgaGVpZ2h0OiBcIjE2XCJcbiAgICB9LCBwcmlzbWFQcm9wcykpO1xuICB9IC8vIFByaXNtYSAtIG1lZGl1bStjb21wYWN0XG5cblxuICBpZiAoZGVuc2l0eSA9PT0gJ2NvbXBhY3QnKSB7XG4gICAgdmFyIF9TVkcgPSBQcmlzbWEyMCB8fCBQcmlzbWEyNDtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovcmVhY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChfU1ZHLCBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogXCIyMFwiLFxuICAgICAgaGVpZ2h0OiBcIjIwXCJcbiAgICB9LCBwcmlzbWFQcm9wcykpO1xuICB9IC8vIFByaXNtYSAtIG1lZGl1bStjb21mb3J0YWJsZVxuXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9yZWFjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFByaXNtYTI0LCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IFwiMjRcIixcbiAgICBoZWlnaHQ6IFwiMjRcIlxuICB9LCBwcmlzbWFQcm9wcykpO1xufVxuSWNvbi5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG5JY29uLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuLyoqKi8gfSksXG5cbi8qKiovIDcxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0FuY2hvclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvQm94XCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE1NCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvdGhlbWVzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE1NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIEFuY2hvcl9BbmNob3I7IH0pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicmVhY3RcIlxudmFyIGV4dGVybmFsX3JlYWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG52YXIgZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcmVhY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInByb3AtdHlwZXNcIlxudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3Byb3BfdHlwZXNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0FuY2hvci9BbmNob3JTdHlsZXMudHNcblxuIC8vIFRPRE86IG5hbWUgaXMgZGVwcmVjYXRlZCwgaXQncyBvbmx5IGRlZmluZWQgaGVyZSB0byBzYXRpc2Z5IHRzIC0gcmVtb3ZlL3JlcGxhY2VcblxudmFyIFN0eWxlZEFuY2hvciA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5hLndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJBbmNob3JTdHlsZXNfX1N0eWxlZEFuY2hvclwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xbTl5emV0LTBcIlxufSkoW1wiXCIsIFwiO2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1yZW5kZXJpbmc6aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxcHg7Jjpob3Zlcjo6YWZ0ZXJ7Y29udGVudDonICMnO29wYWNpdHk6MC41O30mOmZvY3VzLCY6YWN0aXZle2JveC1zaGFkb3c6XCIsIFwiOyY6OmFmdGVye2NvbnRlbnQ6JyAjJztvcGFjaXR5OjAuNTt9fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnaW5saW5lJyksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3cpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9BbmNob3IvQW5jaG9yLnRzeFxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm5vZGUsXG4gIGVsZW1lbnRSZWY6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mVHlwZShbZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYywgZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub2JqZWN0XSksXG4gIG5hbWU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG4vKipcbiAqIGBBbmNob3JgIGlzIGEgdXRpbGl0eSBjb21wb25lbnQgdXNlZCB0byBhZGQgYSBmcmFnbWVudCBsaW5rIHRvIGFuIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIEFuY2hvcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBlbGVtZW50UmVmID0gX3JlZi5lbGVtZW50UmVmLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2hpbGRyZW5cIiwgXCJlbGVtZW50UmVmXCIsIFwibmFtZVwiXSk7XG5cbiAgLy8gQGRvY3MtcHJvcHMtdHlwZSBBbmNob3JQcm9wc0Jhc2VcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRBbmNob3IsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtdGVzdFwiOiBcImFuY2hvclwiLFxuICAgIHJlZjogZWxlbWVudFJlZlxuICB9LCBvdGhlclByb3BzLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBocmVmOiBcIiNcIi5jb25jYXQobmFtZSlcbiAgfSksIGNoaWxkcmVuKTtcbn1cblxuQW5jaG9yLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIEFuY2hvcl9BbmNob3IgPSAoQW5jaG9yKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL0FuY2hvci9pbmRleC50c1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG5pbXBvcnQgZnJlZUdsb2JhbCBmcm9tICcuL19mcmVlR2xvYmFsLmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5leHBvcnQgZGVmYXVsdCByb290O1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IERhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApO1xuICogfSwgXy5ub3coKSk7XG4gKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICovXG52YXIgbm93ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiByb290LkRhdGUubm93KCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBub3c7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG52YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbi8qKlxuICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltbWVkRW5kSW5kZXg7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuaW1wb3J0IHRyaW1tZWRFbmRJbmRleCBmcm9tICcuL190cmltbWVkRW5kSW5kZXguanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgID8gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUcmltO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbmltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbmltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBnZXRSYXdUYWcgZnJvbSAnLi9fZ2V0UmF3VGFnLmpzJztcbmltcG9ydCBvYmplY3RUb1N0cmluZyBmcm9tICcuL19vYmplY3RUb1N0cmluZy5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0VGFnO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG5pbXBvcnQgYmFzZVRyaW0gZnJvbSAnLi9fYmFzZVRyaW0uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9OdW1iZXI7XG5cbiIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IG5vdyBmcm9tICcuL25vdy5qcyc7XG5pbXBvcnQgdG9OdW1iZXIgZnJvbSAnLi90b051bWJlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTtcblxuIiwiLyoqKiBJTVBPUlRTIEZST00gaW1wb3J0cy1sb2FkZXIgKioqL1xudmFyIGRlZmluZSA9IGZhbHNlO1xuXG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnLi9kZWJvdW5jZS5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICpcbiAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuXG4iLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbmltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Z1bmN0aW9uO1xuXG4iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIENvbXBvbmVudCwgaXNWYWxpZEVsZW1lbnQsIGNsb25lRWxlbWVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVzaXplT2JzZXJ2ZXIgZnJvbSAncmVzaXplLW9ic2VydmVyLXBvbHlmaWxsJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwibG9kYXNoLWVzL2RlYm91bmNlXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcImxvZGFzaC1lcy90aHJvdHRsZVwiO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSBcImxvZGFzaC1lcy9pc0Z1bmN0aW9uXCI7XG52YXIgbGlzdE1vZGUgPSB7XG4gIGRlYm91bmNlOiBkZWJvdW5jZSxcbiAgdGhyb3R0bGU6IHRocm90dGxlXG59O1xudmFyIHN0eWxlcyA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICBkaXNwbGF5OiAnbm9uZSdcbn07XG4vKipcbiAqIGRldGVjdCBjb21wb25lbnQncyBjaGlsZHJlbiBhbmQgY29udmVydCB0aGVtIHRvIGFycmF5XG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIC0gY29tcG9uZW50J3MgY2hpbGRyZW5cbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0Q2hpbGRyZW5Ub0FycmF5KGNoaWxkcmVuKSB7XG4gIGlmICghY2hpbGRyZW4pIHJldHVybiBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuIFtjaGlsZHJlbl07XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxudmFyIFJlc2l6ZURldGVjdG9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUmVzaXplRGV0ZWN0b3IsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSZXNpemVEZXRlY3Rvcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZXNpemVEZXRlY3Rvcik7XG5cbiAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihSZXNpemVEZXRlY3RvcikuY2FsbCh0aGlzLCBwcm9wcykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpLCBcImdldEVsZW1lbnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc2l6YWJsZUVsZW1lbnRJZCA9IF90aGlzLnByb3BzLnJlc2l6YWJsZUVsZW1lbnRJZDtcbiAgICAgIHZhciBvdGhlckVsZW1lbnQgPSByZXNpemFibGVFbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocmVzaXphYmxlRWxlbWVudElkKTtcbiAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gX3RoaXMuZWwgJiYgX3RoaXMuZWwucGFyZW50RWxlbWVudDtcbiAgICAgIHZhciByZXNpemFibGVFbGVtZW50ID0gb3RoZXJFbGVtZW50IHx8IHBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gcmVzaXphYmxlRWxlbWVudDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJjcmVhdGVSZXNpemVIYW5kbGVyXCIsIGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBoYW5kbGVXaWR0aCA9IF90aGlzJHByb3BzLmhhbmRsZVdpZHRoLFxuICAgICAgICAgIGhhbmRsZUhlaWdodCA9IF90aGlzJHByb3BzLmhhbmRsZUhlaWdodCxcbiAgICAgICAgICBvblJlc2l6ZSA9IF90aGlzJHByb3BzLm9uUmVzaXplO1xuICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICB2YXIgX2VudHJ5JGNvbnRlbnRSZWN0ID0gZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgICB3aWR0aCA9IF9lbnRyeSRjb250ZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IF9lbnRyeSRjb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgICAgIHZhciBub3RpZnlXaWR0aCA9IGhhbmRsZVdpZHRoICYmIF90aGlzLnN0YXRlLndpZHRoICE9PSB3aWR0aDtcbiAgICAgICAgdmFyIG5vdGlmeUhlaWdodCA9IGhhbmRsZUhlaWdodCAmJiBfdGhpcy5zdGF0ZS5oZWlnaHQgIT09IGhlaWdodDtcblxuICAgICAgICBpZiAoIV90aGlzLnNraXBPbk1vdW50ICYmIChub3RpZnlXaWR0aCB8fCBub3RpZnlIZWlnaHQpICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgX3RoaXMuYW5pbWF0aW9uRnJhbWVJRCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb25SZXNpemUod2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5za2lwT25Nb3VudCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIFwiaGFuZGxlUmVuZGVyUHJvcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHN0YXRlLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHN0YXRlLmhlaWdodDtcbiAgICAgIHZhciByZW5kZXIgPSBfdGhpcy5wcm9wcy5yZW5kZXI7XG5cbiAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY2xvbmVFbGVtZW50KHJlbmRlcih7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICAgIH0pLCB7XG4gICAgICAgICAga2V5OiAncmVuZGVyJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgXCJyZW5kZXJDaGlsZHJlblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRzdGF0ZTIud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkc3RhdGUyLmhlaWdodDtcbiAgICAgIHZhciBjaGlsZHJlbiA9IF90aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgICAgcmV0dXJuIGNvbnZlcnRDaGlsZHJlblRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuICEhY2hpbGQ7XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKGNoaWxkLCBrZXkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2hpbGQpKSByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkKHdpZHRoLCBoZWlnaHQpLCB7XG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIHNraXBPbk1vdW50ID0gcHJvcHMuc2tpcE9uTW91bnQsXG4gICAgICAgIHJlZnJlc2hNb2RlID0gcHJvcHMucmVmcmVzaE1vZGUsXG4gICAgICAgIHJlZnJlc2hSYXRlID0gcHJvcHMucmVmcmVzaFJhdGUsXG4gICAgICAgIHJlZnJlc2hPcHRpb25zID0gcHJvcHMucmVmcmVzaE9wdGlvbnM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgaGVpZ2h0OiB1bmRlZmluZWRcbiAgICB9O1xuICAgIF90aGlzLnNraXBPbk1vdW50ID0gc2tpcE9uTW91bnQ7XG4gICAgX3RoaXMuYW5pbWF0aW9uRnJhbWVJRCA9IG51bGw7XG4gICAgX3RoaXMucmVzaXplSGFuZGxlciA9IGxpc3RNb2RlW3JlZnJlc2hNb2RlXSA/IGxpc3RNb2RlW3JlZnJlc2hNb2RlXShfdGhpcy5jcmVhdGVSZXNpemVIYW5kbGVyLCByZWZyZXNoUmF0ZSwgcmVmcmVzaE9wdGlvbnMpIDogX3RoaXMuY3JlYXRlUmVzaXplSGFuZGxlcjtcbiAgICBfdGhpcy5ybyA9IG5ldyBSZXNpemVPYnNlcnZlcihfdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmVzaXplRGV0ZWN0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIHJlc2l6YWJsZUVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcbiAgICAgIGlmIChyZXNpemFibGVFbGVtZW50KSB0aGlzLnJvLm9ic2VydmUocmVzaXphYmxlRWxlbWVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIHJlc2l6YWJsZUVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcbiAgICAgIGlmIChyZXNpemFibGVFbGVtZW50KSB0aGlzLnJvLnVub2JzZXJ2ZShyZXNpemFibGVFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYW5pbWF0aW9uRnJhbWVJRCkge1xuICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucmVzaXplSGFuZGxlciAmJiB0aGlzLnJlc2l6ZUhhbmRsZXIuY2FuY2VsKSB7XG4gICAgICAgIC8vIGNhbmNlbCBkZWJvdW5jZWQgaGFuZGxlclxuICAgICAgICB0aGlzLnJlc2l6ZUhhbmRsZXIuY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIG5vZGVUeXBlID0gdGhpcy5wcm9wcy5ub2RlVHlwZTtcbiAgICAgIHZhciByZXNpemVEZXRlY3RvciA9IGNyZWF0ZUVsZW1lbnQobm9kZVR5cGUsIHtcbiAgICAgICAga2V5OiAncmVzaXplLWRldGVjdG9yJyxcbiAgICAgICAgc3R5bGU6IHN0eWxlcyxcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoZWwpIHtcbiAgICAgICAgICBfdGhpczIuZWwgPSBlbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gW3Jlc2l6ZURldGVjdG9yLCB0aGlzLmhhbmRsZVJlbmRlclByb3AoKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnJlbmRlckNoaWxkcmVuKCkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVzaXplRGV0ZWN0b3I7XG59KFB1cmVDb21wb25lbnQpO1xuXG5SZXNpemVEZXRlY3Rvci5wcm9wVHlwZXMgPSB7XG4gIGhhbmRsZVdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFuZGxlSGVpZ2h0OiBQcm9wVHlwZXMuYm9vbCxcbiAgc2tpcE9uTW91bnQ6IFByb3BUeXBlcy5ib29sLFxuICByZWZyZXNoUmF0ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgcmVmcmVzaE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlZnJlc2hPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxlYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAgIHRyYWlsaW5nOiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgcmVzaXphYmxlRWxlbWVudElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvblJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0L2ZvcmJpZC1wcm9wLXR5cGVzXG4gIG5vZGVUeXBlOiBQcm9wVHlwZXMubm9kZSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0L2ZvcmJpZC1wcm9wLXR5cGVzXG5cbn07XG5SZXNpemVEZXRlY3Rvci5kZWZhdWx0UHJvcHMgPSB7XG4gIGhhbmRsZVdpZHRoOiBmYWxzZSxcbiAgaGFuZGxlSGVpZ2h0OiBmYWxzZSxcbiAgc2tpcE9uTW91bnQ6IGZhbHNlLFxuICByZWZyZXNoUmF0ZTogMTAwMCxcbiAgcmVmcmVzaE1vZGU6IHVuZGVmaW5lZCxcbiAgcmVmcmVzaE9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgcmVzaXphYmxlRWxlbWVudElkOiAnJyxcbiAgb25SZXNpemU6IGZ1bmN0aW9uIG9uUmVzaXplKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfSxcbiAgcmVuZGVyOiB1bmRlZmluZWQsXG4gIGNoaWxkcmVuOiBudWxsLFxuICBub2RlVHlwZTogJ2Rpdidcbn07XG5leHBvcnQgdmFyIHdpdGhSZXNpemVEZXRlY3RvciA9IGZ1bmN0aW9uIHdpdGhSZXNpemVEZXRlY3RvcihXcmFwcGVkQ29tcG9uZW50KSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIGhhbmRsZVdpZHRoOiB0cnVlLFxuICAgIGhhbmRsZUhlaWdodDogdHJ1ZVxuICB9O1xuICByZXR1cm4gKFxuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzKFJlc2l6ZURldGVjdG9ySE9DLCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gUmVzaXplRGV0ZWN0b3JIT0MoKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZXNpemVEZXRlY3RvckhPQyk7XG5cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihSZXNpemVEZXRlY3RvckhPQykuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9XG5cbiAgICAgIF9jcmVhdGVDbGFzcyhSZXNpemVEZXRlY3RvckhPQywgW3tcbiAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlc2l6ZURldGVjdG9yLCBwcm9wcywgUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCB0aGlzLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH1dKTtcblxuICAgICAgcmV0dXJuIFJlc2l6ZURldGVjdG9ySE9DO1xuICAgIH0oQ29tcG9uZW50KVxuICApO1xufTtcbmV4cG9ydCBkZWZhdWx0IFJlc2l6ZURldGVjdG9yOyIsIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxudmFyIGdldFJhbmRvbVZhbHVlcztcbnZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLiBBbHNvLFxuICAgIC8vIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byAobXNDcnlwdG8pIG9uIElFMTEuXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSB8fCB0eXBlb2YgbXNDcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCJleHBvcnQgZGVmYXVsdCAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7IiwiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbnZhciBieXRlVG9IZXggPSBbXTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFycikge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgdmFyIHV1aWQgPSAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwiaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/package/appserver/static/js/build/0.licenses.txt b/package/appserver/static/js/build/0.licenses.txt deleted file mode 100644 index ef2919c..0000000 --- a/package/appserver/static/js/build/0.licenses.txt +++ /dev/null @@ -1,1281 +0,0 @@ -@babel/runtime -MIT -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@splunk/react-icons -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/react-toast-notifications -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/react-ui -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/themes -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/ui-utils -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -immutability-helper -MIT -MIT License - -Copyright (c) 2017 Moshe Kolodny - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -lodash -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -lodash-es -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -react-flip-move -MIT -The MIT License (MIT) - -Copyright (c) 2016-present Joshua Comeau - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -react-resize-detector -MIT -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -regenerator-runtime -MIT -MIT License - -Copyright (c) 2014-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -resize-observer-polyfill -MIT -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -uuid -MIT -The MIT License (MIT) - -Copyright (c) 2010-2020 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package/appserver/static/js/build/1.js b/package/appserver/static/js/build/1.js deleted file mode 100644 index a80ad42..0000000 --- a/package/appserver/static/js/build/1.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{292:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var r=n(72),a=n.n(r),o=n(0),i=n.n(o),l=n(3),c=n.n(l),s=Object(o.createContext)({rowData:{},setRowData:function(){}}),u=function(e){var t=e.children,n=Object(o.useState)({}),r=a()(n,2),l=r[0],c=r[1],u=Object(o.useState)(""),d=a()(u,2),p=d[0],f=d[1],h=Object(o.useState)("all"),m=a()(h,2),v=m[0],g=m[1],b=Object(o.useState)(10),y=a()(b,2),O=y[0],E=y[1],j=Object(o.useState)(0),k=a()(j,2),w=k[0],C=k[1];return i.a.createElement(s.Provider,{value:{rowData:l,setRowData:c,searchText:p,setSearchText:f,searchType:v,setSearchType:g,pageSize:O,setPageSize:E,currentPage:w,setCurrentPage:C}},t)};u.propTypes={children:c.a.oneOfType([c.a.arrayOf(c.a.node),c.a.node]).isRequired},t.b=s},293:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"c",(function(){return a})),n.d(t,"d",(function(){return o})),n.d(t,"b",(function(){return i}));var r="clone",a="create",o="edit",i="config"},294:function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var r=n(288),a=n.n(r),o=n(52),i=n.n(o),l=n(141),c=n(140),s=n(47);function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t0&&T)):S.a.createElement(S.a.Fragment,null,S.a.createElement(Ee,{className:"dropdownBox","data-test-loading":N,value:e.value,name:t,error:o,placeholder:V,disabled:D,onChange:E,filter:!g,inline:!0},T&&T.length>0&&T),q?S.a.createElement(de.a,{"data-test":"clear",appearance:"secondary",icon:S.a.createElement(fe.a,null),onClick:function(){return c.handleChange(t,"RESET_VALUE")}}):null))}ke.propTypes={disabled:N.a.bool,value:N.a.string,error:N.a.bool,handleChange:N.a.func.isRequired,field:N.a.string,dependencyValues:N.a.object,controlOptions:N.a.shape({autoCompleteFields:N.a.array,endpointUrl:N.a.string,denyList:N.a.string,allowList:N.a.string,placeholder:N.a.string,dependencies:N.a.array,createSearchChoice:N.a.bool,referenceName:N.a.string,disableSearch:N.a.bool,labelField:N.a.string,hideClearBtn:N.a.bool})};var we,Ce=ke,Re=n(483),Se=n.n(Re),xe=n(8);function Ne(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pe(e){for(var t=1;t0&&P)}_e.propTypes={disabled:N.a.bool,value:N.a.string,error:N.a.bool,handleChange:N.a.func.isRequired,field:N.a.string,dependencyValues:N.a.object,controlOptions:N.a.shape({delimiter:N.a.string,placeholder:N.a.string,createSearchChoice:N.a.bool,referenceName:N.a.string,dependencies:N.a.array,endpointUrl:N.a.string,denyList:N.a.string,allowList:N.a.string,labelField:N.a.string,items:N.a.arrayOf(N.a.shape({label:N.a.string.isRequired,value:N.a.string.isRequired}))})};var Te=_e,Fe=n(300),De=n.n(Fe);function Ve(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=y()(e);if(t){var a=y()(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return g()(this,n)}}var qe=function(e){m()(n,e);var t=Ve(n);function n(){var e;s()(this,n);for(var r=arguments.length,a=new Array(r),o=0;o * {\n &:first-child {\n width: 240px !important;\n }\n &:nth-child(3) {\n margin-left: 270px !important;\n width: 320px;\n }\n }\n"]))),ot=function(e){m()(n,e);var t=nt(n);function n(e){var r;return s()(this,n),r=t.call(this,e),E()(f()(r),"isString",(function(e){return!!("string"==typeof e||e instanceof String)})),r.controlType=r.isString(e.entity.type)?tt[e.entity.type]:null,r}return d()(n,[{key:"render",value:function(){var e,t=this.props.entity,n=t.field,r=t.type,a=t.label,o=t.tooltip,i=t.help,l=t.encrypted,c=void 0!==l&&l,s=this.props.utilityFuncts,u=s.handleChange,d=s.addCustomValidator,p=s.utilCustomFunctions,f=this.props.markdownMessage||{},h=f.text,m=f.link,v=f.color,g=f.markdownType,b=f.token,y=f.linkText;if("custom"===this.props.entity.type){var O={value:this.props.value,mode:this.props.mode,serviceName:this.props.serviceName};e=this.controlType?S.a.createElement(this.controlType,{data:O,field:n,handleChange:u,addCustomValidator:d,utilCustomFunctions:p,controlOptions:this.props.entity.options}):"No View Found for ".concat(r," type")}else e=this.controlType?S.a.createElement(this.controlType,{handleChange:u,value:this.props.value,field:n,controlOptions:this.props.entity.options,error:this.props.error,disabled:this.props.disabled,encrypted:c,dependencyValues:this.props.dependencyValues}):"No View Found for ".concat(r," type");var E=S.a.createElement(S.a.Fragment,null,S.a.createElement(U,{text:h||"",link:m||"",color:v||"",markdownType:g||"",token:b||"",linkText:y||""}),i);return this.props.display&&S.a.createElement(at,{label:a,help:E,tooltip:o,error:this.props.error,dataName:n},S.a.createElement(rt,null,e))}}]),n}(S.a.PureComponent);ot.propTypes={mode:N.a.string,utilityFuncts:N.a.object,value:N.a.any,display:N.a.bool,error:N.a.bool,entity:N.a.object,disabled:N.a.bool,markdownMessage:N.a.object,serviceName:N.a.string,dependencyValues:N.a.object};var it=ot,lt={url:{regex:/^(?:(?:https?|ftp|opc\.tcp):\/\/)?(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?_?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))?)(?::\d{2,5})?(?:\/[^\s]*)?$/,inputValueType:Object(xe.a)(111)},email:{regex:/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,inputValueType:Object(xe.a)(112)},ipv4:{regex:/^(?:(?:[0-1]?\d{1,2}|2[0-4]\d|25[0-5])(?:\.|$)){4}$/,inputValueType:Object(xe.a)(113)},date:{regex:/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,inputValueType:Object(xe.a)(114)}},ct=n(109);var st,ut,dt=function(){function e(t){s()(this,e),E()(this,"checkIsFieldHasInput",(function(e){return void 0!==e&&""!==e&&null!==e})),this.entities=t,this.isName=t.find((function(e){return"name"===e.field}))}return d()(e,[{key:"RequiredValidator",value:function(e,t,n){return!this.checkIsFieldHasInput(n)&&{errorField:e,errorMsg:Object(xe.a)(6,[t])}}},{key:"StringValidator",value:function(e,t,n,r){var a=Object(ct.d)(n.minLength,n.maxLength).error;return a?{errorField:e,errorMsg:a}:this.checkIsFieldHasInput(r)&&r.length>n.maxLength?{errorField:e,errorMsg:n.errorMsg?n.errorMsg:Object(xe.a)(18,[t,n.maxLength])}:!!(this.checkIsFieldHasInput(r)&&r.lengthn.range[1]||o-1})))return{errorField:"name",errorMsg:Object(xe.a)(3,[r])};if(n.length>=1024)return{errorField:"name",errorMsg:Object(xe.a)(22,[r])}}var a,o,i;for(o=0;o1?n-1:0),o=1;o1){a.isAuthVal=!0;var l={};l.value=void 0!==a.currentInput.auth_type?a.currentInput.auth_type:i[0],l.display=!0,l.error=!1,l.disabled=!1,c.auth_type=l;var s={field:"auth_type",type:"singleSelect",label:"Auth Type"},d={basic:"Basic Authentication",oauth:"OAuth 2.0 Authentication"};s.options={},s.options.hideClearBtn=!0,s.options.autoCompleteFields=i.map((function(e){return{label:d[e],value:e}})),u.push(s)}else a.isSingleOauth=i.includes("oauth");if(i.forEach((function(n){var r=[],o=null==t?void 0:t.options[n];o&&(o.forEach((function(t){var o={};if(e.mode===pt.c)o.value=void 0!==(null==t?void 0:t.defaultValue)?t.defaultValue:null;else{var i=void 0!==(null==t?void 0:t.encrypted)&&(null==t?void 0:t.encrypted);o.value=i?"":a.currentInput[t.field]}o.display=void 0===c.auth_type||n===c.auth_type.value,o.error=!1,o.disabled=!1,c[t.field]=o,t.type=void 0!==(null==t?void 0:t.type)?t.type:"text","redirect_url"===t.field&&(o.value=window.location.href.split("?")[0].replace("configuration","".concat(a.appName.toLowerCase(),"_redirect")),o.disabled=!0),u.push(t),r.push(t.field)})),a.authMap[n]=r)})),i.includes("oauth")){var p={};p.popupWidth=t.options.oauth_popup_width?t.options.oauth_popup_width:600,p.popupHeight=t.options.oauth_popup_height?t.options.oauth_popup_height:600,p.authTimeout=t.options.oauth_timeout?t.options.oauth_timeout:180,p.authCodeEndpoint=t.options.auth_code_endpoint?t.options.auth_code_endpoint:null,p.accessTokenEndpoint=t.options.access_token_endpoint?t.options.access_token_endpoint:null,a.oauthConf=p}}}else{var f,h,m={};if(t.encrypted=void 0!==t.encrypted&&t.encrypted,e.mode===pt.c)m.value=void 0!==t.defaultValue?t.defaultValue:null,m.display=void 0===(null==t||null===(h=t.options)||void 0===h?void 0:h.display)||t.options.display,m.error=!1,m.disabled=!1,c[t.field]=m;else if(e.mode===pt.d){var v,g;m.value=void 0!==a.currentInput[t.field]?a.currentInput[t.field]:null,m.value=t.encrypted?"":m.value,m.display=void 0===(null==t||null===(v=t.options)||void 0===v?void 0:v.display)||t.options.display,m.error=!1,m.disabled=!1,"name"===t.field?m.disabled=!0:void 0!==(null==t||null===(g=t.options)||void 0===g?void 0:g.disableonEdit)&&(m.disabled=t.options.disableonEdit),c[t.field]=m}else if(e.mode===pt.a){var b;m.value="name"===t.field||t.encrypted?"":a.currentInput[t.field],m.display=void 0===(null==t||null===(b=t.options)||void 0===b?void 0:b.display)||t.options.display,m.error=!1,m.disabled=!1,c[t.field]=m}else{if(e.mode!==pt.b)throw new Error("Invalid mode :",e.mode);var y,O;t.defaultValue=void 0!==t.defaultValue?t.defaultValue:null,m.value=void 0!==a.currentInput[t.field]?a.currentInput[t.field]:t.defaultValue,m.value=t.encrypted?"":m.value,m.display=void 0===(null==t||null===(y=t.options)||void 0===y?void 0:y.display)||t.options.display,m.error=!1,m.disabled=!1,"name"===t.field?m.disabled=!0:void 0!==(null==t||null===(O=t.options)||void 0===O?void 0:O.disableonEdit)&&(m.disabled=t.options.disableonEdit),c[t.field]=m}var j=null===(f=t.options)||void 0===f?void 0:f.dependencies;j&&j.forEach((function(e){var n=a.dependencyMap.get(e);n?n[t.field]=j:a.dependencyMap.set(e,E()({},t.field,j))})),u.push(t)}})),a.entities=u;var d={};a.dependencyMap.forEach((function(e){d=vt(vt({},d),e)}));var p={};return Object.keys(d).forEach((function(e){var t=d[e],n={},r=!0;t.forEach((function(e){var t=!!a.entities.find((function(t){return t.field===e})).required,o=c[e].value;t&&!o?(r=!1,n[e]=null):n[e]=o})),r&&(p[e]={dependencyValues:{$set:n}})})),c=M()(c,p),a.state={data:c,errorMsg:"",warningMsg:""},a.hookDeferred&&a.hookDeferred.then((function(){if("function"==typeof a.hook.onCreate)try{a.hook.onCreate()}catch(e){console.error(e)}})),a}return d()(n,[{key:"render",value:function(){var e=this;return this.flag&&(this.hookDeferred&&this.hookDeferred.then((function(){if("function"==typeof e.hook.onRender)try{e.hook.onRender()}catch(e){console.error(e)}})),this.props.mode===pt.d&&this.hookDeferred&&this.hookDeferred.then((function(){if("function"==typeof e.hook.onEditLoad)try{e.hook.onEditLoad()}catch(e){console.error(e)}})),this.flag=!1),S.a.createElement("div",null,S.a.createElement("form",{style:this.props.mode===pt.b?{marginTop:"25px"}:{}},this.generateWarningMessage(),this.generateErrorMessage(),this.renderGroupElements(),this.entities.map((function(t){var n;if(t.isGrouping)return null;var r=e.state.data[t.field];return r.placeholder&&(t=vt(vt({},t),{},{options:vt(vt({},t.options),{},{placeholder:r.placeholder})})),t.required||Object.prototype.hasOwnProperty.call(t,"oauth_field")||null!==(n=t.options)&&void 0!==n&&n.placeholder||(t.options=vt(vt({},t.options),{},{placeholder:"optional"})),S.a.createElement(it,{key:t.field,utilityFuncts:e.utilControlWrapper,value:r.value,display:r.display,error:r.error,entity:t,serviceName:e.props.serviceName,mode:e.props.mode,disabled:r.disabled,markdownMessage:r.markdownMessage,dependencyValues:r.dependencyValues||null})}))))}}]),n}(R.PureComponent);E()(Ot,"contextType",ht.b),Ot.propTypes={page:N.a.string,serviceName:N.a.string,stanzaName:N.a.string,currentServiceState:N.a.object,mode:N.a.string,handleFormSubmit:N.a.func};t.a=Ot},353:function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return a}));var r="page",a="modal"},360:function(e,t,n){"use strict";var r=n(288),a=n.n(r),o=n(72),i=n.n(o),l=n(0),c=n.n(l),s=n(318),u=n.n(s),d=n(52),p=n.n(d),f=n(3),h=n.n(f),m=n(77),v=n(294),g=n(47),b=n(354),y=n.n(b),O=n(319),E=n.n(O),j=n(7),k=n(321),w=n(293),C=n(50),R=n(14),S=n.n(R),x=n(449),N=n.n(x),P=n(1),M=n(33),_=n.n(M),T=n(34),F=n.n(T),D=n(129),V=n.n(D),q=n(36),A=n.n(q),z=n(37),I=n.n(z),L=n(21),B=n.n(L),H=n(39);function U(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=B()(e);if(t){var a=B()(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return I()(this,n)}}var $=function(e){A()(n,e);var t=U(n);function n(e){var r;return _()(this,n),r=t.call(this,e),a()(V()(r),"loadCustomControl",(function(){return new Promise((function(e){if("external"===r.props.type)import("".concat(Object(H.a)(),"/custom/").concat(r.props.fileName,".js")).then((function(t){var n=t.default;e(n)}));else{var t=Object(g.d)().meta.name;require(["app/".concat(t,"/js/build/custom/").concat(r.props.fileName)],(function(t){return e(t)}))}}))})),r.state={loading:!0},r.shouldRender=!0,r}return F()(n,[{key:"componentDidMount",value:function(){var e=this,t=Object(g.d)();this.setState({loading:!0}),this.loadCustomControl().then((function(n){e.customControl=new n(t,e.props.serviceName,e.el,e.props.row,e.props.field),e.setState({loading:!1})}))}},{key:"shouldComponentUpdate",value:function(e,t){return this.props.row!==e.row||!(t.loading||!this.shouldRender)&&(this.shouldRender=!1,!0)}},{key:"render",value:function(){var e=this;if(!this.state.loading)try{this.customControl.render(this.props.row,this.props.field)}catch(e){console.error(e)}return c.a.createElement(c.a.Fragment,null,this.state.loading&&Object(j._)("Loading..."),c.a.createElement("span",{ref:function(t){e.el=t},style:{visibility:this.state.loading?"hidden":"visible"}}))}}]),n}(l.Component);$.propTypes={serviceName:h.a.string.isRequired,row:h.a.object.isRequired,field:h.a.string,fileName:h.a.string.isRequired,type:h.a.string};var W,K=$,Z=Object(P.default)(E.a.Cell)(W||(W=S()(["\n border-top: none;\n"])));function G(e,t,n){var r=Object(g.d)().pages.inputs.table.customRow;return c.a.createElement(E.a.Row,{key:"".concat(t.id,"-expansion")},c.a.createElement(Z,{colSpan:e},r&&r.src?c.a.createElement(c.a.Fragment,null,c.a.createElement(K,{serviceName:t.serviceName,row:t,fileName:r.src,type:r.type})):c.a.createElement(N.a,{termWidth:250},function(e,t){var n=[];return null!=t&&t.length&&t.forEach((function(t){var r=Object(j._)(t.label);t.field in e&&null!==e[t.field]&&""!==e[t.field]&&(n.push(c.a.createElement(N.a.Term,{key:t.field},r)),n.push(c.a.createElement(N.a.Description,{key:"".concat(t.field,"_decr")},t.mapping&&t.mapping[e[t.field]]?t.mapping[e[t.field]]:String(e[t.field]))))})),n}(t,n))))}var X,J,Q=n(353),Y=n(76),ee=n.n(Y),te=n(300),ne=n.n(te),re=n(356),ae=n.n(re),oe=n(320),ie=n.n(oe),le=n(450),ce=n.n(le),se=n(451),ue=n.n(se),de=n(452),pe=n.n(de),fe=Object(P.default)(E.a.Cell)(X||(X=S()(["\n padding: 2px;\n"]))),he=P.default.div(J||(J=S()(["\n display: flex;\n\n .toggle_switch {\n padding: 0;\n margin-right: 10px;\n }\n"])));function me(e){var t=e.row,n=e.columns,r=e.headerMapping,a=e.handleToggleActionClick,o=e.handleEditActionClick,i=e.handleCloneActionClick,s=e.handleDeleteActionClick,u=Object(l.useCallback)((function(e){return c.a.createElement(fe,{"data-column":"actions",key:e.id},c.a.createElement(ae.a,null,c.a.createElement(ie.a,{content:Object(j._)("Edit")},c.a.createElement(m.a,{appearance:"flat",icon:c.a.createElement(ce.a,{screenReaderText:null,size:1}),onClick:function(){return o(e)},className:"editBtn"})),c.a.createElement(ie.a,{content:Object(j._)("Clone")},c.a.createElement(m.a,{appearance:"flat",icon:c.a.createElement(ue.a,{screenReaderText:null,size:1}),onClick:function(){return i(e)},className:"cloneBtn"})),c.a.createElement(ie.a,{content:Object(j._)("Delete")},c.a.createElement(m.a,{appearance:"destructive",icon:c.a.createElement(pe.a,{screenReaderText:null,size:1}),onClick:function(){return s(e)},className:"deleteBtn"}))))}),[o,i,s]),d="Enabled";return t.__toggleShowSpinner?d=c.a.createElement(ee.a,null):t.disabled&&(d=null!=r&&r.disabled&&r.disabled[t.disabled]?r.disabled[t.disabled]:"Disabled"),c.a.createElement(c.a.Fragment,null,c.a.createElement(E.a.Row,y()({key:t.id},e),n&&n.length&&n.map((function(e){var n="";if(e.customCell&&e.customCell.src)n=c.a.createElement(E.a.Cell,{"data-column":e.field,key:e.field},function(e,n){return c.a.createElement(K,{serviceName:t.serviceName,field:n.field,row:e,fileName:n.customCell.src,type:n.customCell.type})}(t,e));else if("disabled"===e.field){var o,i;n=c.a.createElement(E.a.Cell,{"data-column":e.field,key:e.field},c.a.createElement(he,null,c.a.createElement(ne.a,{key:t.name,value:t.disabled,onClick:function(){return a(t)},selected:!t.disabled,disabled:t.__toggleShowSpinner,appearance:"toggle",className:"toggle_switch",selectedLabel:Object(j._)(null!=r&&null!==(o=r.disabled)&&void 0!==o&&o.false?r.disabled.false:"Enabled"),unselectedLabel:Object(j._)(null!=r&&null!==(i=r.disabled)&&void 0!==i&&i.true?r.disabled.true:"Disabled")}),c.a.createElement("span",{"data-test":"status"},d)))}else n="actions"===e.field?u(t):c.a.createElement(E.a.Cell,{"data-column":e.field,key:e.field},r[e.field]&&Object.prototype.hasOwnProperty.call(r[e.field],t[e.field])?r[e.field][t[e.field]]:t[e.field]);return n}))))}me.propTypes={row:h.a.any,columns:h.a.array,headerMapping:h.a.object,handleToggleActionClick:h.a.func,handleEditActionClick:h.a.func,handleCloneActionClick:h.a.func,handleDeleteActionClick:h.a.func};var ve,ge=c.a.memo(me),be=n(322),ye=n(35),Oe=n.n(ye),Ee=n(30),je=n.n(Ee),ke=n(91),we=n.n(ke),Ce=n(292),Re=n(8);function Se(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xe(e){for(var t=1;t1?Object(j._)(" ".concat(v,"s")):Object(j._)(" ".concat(v))),t===C.b?c.a.createElement(m.c,null,c.a.createElement(Ae.a,{value:i,className:"dropdownPage",onChange:function(e,t){var n=t.value;u(0),d(n)}},c.a.createElement(Ae.a.Option,{key:"10",label:Object(j._)("10 Per Page"),value:10}),c.a.createElement(Ae.a.Option,{key:"25",label:Object(j._)("25 Per Page"),value:25}),c.a.createElement(Ae.a.Option,{key:"50",label:Object(j._)("50 Per Page"),value:50})),function(){if(n.length<2)return null;var e=[];return(e=n.map((function(e){return c.a.createElement(Ae.a.Option,{key:e.name,label:e.title,value:e.name})}))).unshift(c.a.createElement(Ae.a.Option,{key:"all",label:Object(j._)("All"),value:"all"})),c.a.createElement(Ae.a,{value:p,className:"dropdownInput",onChange:function(e,t){var n=t.value;u(0),f(n)}},e)}()):null),c.a.createElement(Ze,null,c.a.createElement(We,{handleChange:function(e,t){var n=t.value;u(0),h(n)}})),c.a.createElement("div",null,c.a.createElement(Ie.a,{onChange:function(e,t){var n=t.page;return u(n-1)},current:s+1,alwaysShowLastPageLink:!0,totalPages:Math.ceil(r/i)}),t===C.b?null:c.a.createElement(Oe.a,{label:Object(j._)("Add"),appearance:"primary",onClick:a})))}Ge.propTypes={page:h.a.string,services:h.a.array,totalElement:h.a.number,handleRequestModalOpen:h.a.func};var Xe=Ge;function Je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Qe(e){for(var t=1;t(void 0===n[t]?"":n[t])?1:-1;if("desc"===O){var r=void 0===e[t]?"":e[t];return(void 0===n[t]?"":n[t])>r?1:-1}return 0})),r=n.slice(z*A,(z+1)*A);return z>0&&!r.length&&(r=n.slice((z-1)*A,A)),[r,e.length]}(),X=i()(G,2),J=X[0],Q=X[1];return c.a.createElement(c.a.Fragment,null,c.a.createElement(Xe,{page:t,services:W,totalElement:Q,handleRequestModalOpen:r}),c.a.createElement(Ve,{page:t,serviceName:n,data:J,handleToggleActionClick:function(e){return function(e){q((function(t){return u()(t,a()({},e.serviceName,a()({},e.name,{__toggleShowSpinner:{$set:!0}})))}));var t=new URLSearchParams;t.append("disabled",!e.disabled),Object(v.a)({serviceName:"".concat(e.serviceName,"/").concat(e.name),body:t,customHeaders:{"Content-Type":"application/x-www-form-urlencoded"},method:"post",handleError:!0,callbackOnError:function(){q((function(t){return u()(t,a()({},e.serviceName,a()({},e.name,{__toggleShowSpinner:{$set:!1}})))}))}}).then((function(t){q((function(n){return u()(n,a()({},e.serviceName,a()({},e.name,{disabled:{$set:Object(g.f)(t.data.entry[0].content.disabled)},__toggleShowSpinner:{$set:!1}})))}))}))}(e)},handleSort:function(e,t){var n=f===t.sortKey?O:"none";E("asc"===n?"desc":"asc"),h(t.sortKey),R(t.isCustomMapping)},sortDir:O,sortKey:f,handleOpenPageStyleDialog:o}))}Ye.propTypes={page:h.a.string,serviceName:h.a.string,handleRequestModalOpen:h.a.func,handleOpenPageStyleDialog:h.a.func};t.a=Object(l.memo)(Ye)},361:function(e,t,n){"use strict";var r=n(33),a=n.n(r),o=n(34),i=n.n(o),l=n(36),c=n.n(l),s=n(37),u=n.n(s),d=n(21),p=n.n(d),f=n(0),h=n.n(f),m=n(3),v=n.n(m),g=n(344),b=n.n(g),y=n(7),O=n(494),E=n.n(O),j=n(139),k=n.n(j),w=n(130),C=n.n(w),R={ERR0001:h.a.createElement(h.a.Fragment,null,"This is normal on Splunk search heads as they do not require an Input page. Check your installation or return to the ",h.a.createElement(C.a,{to:"configuration"},"configuration page"),"."),ERR0002:"Configuration page failed to load, the server reported internal errors which may indicate you do not have access to this page.",ERR0003:"Failed to load content due to no response from server!",ERR0004:"Failed to load content due to failed request processing!",ERR0005:"Failed to load current state for selected entity in form!"};function S(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=p()(e);if(t){var a=p()(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return u()(this,n)}}var x=function(e){c()(n,e);var t=S(n);function n(e){var r;return a()(this,n),(r=t.call(this,e)).state={errorCode:null,error:null,errorInfo:null},r}return i()(n,[{key:"componentDidCatch",value:function(e,t){this.setState({error:e,errorInfo:t})}},{key:"render",value:function(){var e;return this.state.error?h.a.createElement("div",{align:"center",style:{marginTop:"10%"}},h.a.createElement(E.a,{style:{boxShadow:"10px 10px 5px #aaaaaa"}},h.a.createElement(E.a.Header,null,h.a.createElement(b.a,{style:{textAlign:"center"},level:2},h.a.createElement(k.a,{style:{fontSize:"120px",color:"#ff9900"}}),h.a.createElement("br",null),h.a.createElement("br",null),"ERR0001"===this.state.errorCode?Object(y._)("Failed to load Inputs Page"):Object(y._)("Something went wrong!"))),h.a.createElement(E.a.Body,null,this.state.errorCode?h.a.createElement(h.a.Fragment,null,Object(y._)(R[this.state.errorCode]),h.a.createElement("br",null),h.a.createElement("br",null)):null,h.a.createElement("details",{style:{whiteSpace:"pre-wrap"}},null===(e=this.state.error)||void 0===e?void 0:e.toString())),h.a.createElement(E.a.Footer,{showBorder:!1},this.state.errorCode?this.state.errorCode:null))):this.props.children}}],[{key:"getDerivedStateFromError",value:function(e){return{errorCode:e.uccErrorCode}}}]),n}(h.a.Component);x.propTypes={children:v.a.oneOfType([v.a.arrayOf(v.a.node),v.a.node]).isRequired};t.a=x}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29udGV4dC9UYWJsZUNvbnRleHQuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb25zdGFudHMvbW9kZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL3V0aWwvYXhpb3NDYWxsV3JhcHBlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvcGFnZXMvSW5wdXQvSW5wdXRQYWdlU3R5bGUuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9ob29rcy91c2VRdWVyeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9FbnRpdHlNb2RhbC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvTWFya2Rvd25NZXNzYWdlLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9IZWxwTGlua0NvbXBvbmVudC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvVGV4dENvbXBvbmVudC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvU2luZ2xlSW5wdXRDb21wb25lbnQuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb21wb25lbnRzL011bHRpSW5wdXRDb21wb25lbnQuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb21wb25lbnRzL0NoZWNrQm94Q29tcG9uZW50LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9SYWRpb0NvbXBvbmVudC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvUGxhY2Vob2xkZXJDb21wb25lbnQuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb21wb25lbnRzL0N1c3RvbUNvbnRyb2wuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb25zdGFudHMvQ29udHJvbFR5cGVNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvQ29udHJvbFdyYXBwZXIuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb25zdGFudHMvcHJlRGVmaW5lZFJlZ2V4LmpzIiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC91dGlsL1ZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9CYXNlRm9ybVZpZXcuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb25zdGFudHMvb0F1dGhFcnJvck1lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbnN0YW50cy9kaWFsb2dTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvdGFibGUvQ3VzdG9tVGFibGVDb250cm9sLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy90YWJsZS9UYWJsZUV4cGFuc2lvblJvdy5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvdGFibGUvQ3VzdG9tVGFibGVSb3cuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb21wb25lbnRzL0RlbGV0ZU1vZGFsLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy90YWJsZS9DdXN0b21UYWJsZS5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvdGFibGUvVGFibGVGaWx0ZXIuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb21wb25lbnRzL3RhYmxlL1RhYmxlSGVhZGVyLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy90YWJsZS9UYWJsZVdyYXBwZXIuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb25zdGFudHMvZXJyb3JDb2Rlcy5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL2NvbXBvbmVudHMvRXJyb3JCb3VuZGFyeS5qc3giXSwibmFtZXMiOlsiVGFibGVDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInJvd0RhdGEiLCJzZXRSb3dEYXRhIiwiVGFibGVDb250ZXh0UHJvdmlkZXIiLCJjaGlsZHJlbiIsInVzZVN0YXRlIiwic2VhcmNoVGV4dCIsInNldFNlYXJjaFRleHQiLCJzZWFyY2hUeXBlIiwic2V0U2VhcmNoVHlwZSIsInBhZ2VTaXplIiwic2V0UGFnZVNpemUiLCJjdXJyZW50UGFnZSIsInNldEN1cnJlbnRQYWdlIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9uZU9mVHlwZSIsImFycmF5T2YiLCJub2RlIiwiaXNSZXF1aXJlZCIsIk1PREVfQ0xPTkUiLCJNT0RFX0NSRUFURSIsIk1PREVfRURJVCIsIk1PREVfQ09ORklHIiwiYXhpb3NDYWxsV3JhcHBlciIsInNlcnZpY2VOYW1lIiwiZW5kcG9pbnRVcmwiLCJwYXJhbXMiLCJib2R5IiwiY2FuY2VsVG9rZW4iLCJjdXN0b21IZWFkZXJzIiwibWV0aG9kIiwiaGFuZGxlRXJyb3IiLCJjYWxsYmFja09uRXJyb3IiLCJlbmRwb2ludCIsImdlbmVyYXRlRW5kUG9pbnRVcmwiLCJhcHBEYXRhIiwiYXBwIiwib3duZXIiLCJiYXNlSGVhZGVycyIsIkNTUkZUb2tlbiIsImhlYWRlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJ1cmwiLCJjcmVhdGVSRVNUVVJMIiwibmV3UGFyYW1zIiwib3V0cHV0X21vZGUiLCJvcHRpb25zIiwiY3JlZGVudGlhbHMiLCJkYXRhIiwiYXhpb3MiLCJlcnJvciIsIm1lc3NhZ2UiLCJpc0NhbmNlbCIsInJlc3BvbnNlIiwibWVzc2FnZXMiLCJ0ZXh0IiwicmVxdWVzdCIsImdlbmVyYXRlVG9hc3QiLCJQcm9taXNlIiwicmVqZWN0IiwiVGl0bGVDb21wb25lbnQiLCJzdHlsZWQiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsInZhcmlhYmxlcyIsImZvbnRTaXplWFhMYXJnZSIsIlN1YlRpdGxlQ29tcG9uZW50IiwiZm9udFNpemUiLCJ1c2VRdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInVzZUxvY2F0aW9uIiwic2VhcmNoIiwiTW9kYWxXcmFwcGVyIiwiTW9kYWwiLCJFbnRpdHlNb2RhbCIsInByb3BzIiwiaGFuZGxlUmVxdWVzdENsb3NlIiwiZm9ybSIsImN1cnJlbnQiLCJoYW5kbGVTdWJtaXQiLCJzZXQiLCJjbG9zZSIsInNldFN0YXRlIiwiaXNTdWJtaXRpdG5nIiwiUmVhY3QiLCJjcmVhdGVSZWYiLCJzdGF0ZSIsIm1vZGUiLCJidXR0b25UZXh0IiwiXyIsIm9wZW4iLCJ0aGlzIiwiSGVhZGVyIiwidGl0bGUiLCJmb3JtTGFiZWwiLCJvblJlcXVlc3RDbG9zZSIsIkJvZHkiLCJyZWYiLCJwYWdlIiwic3RhbnphTmFtZSIsImhhbmRsZUZvcm1TdWJtaXQiLCJGb290ZXIiLCJhcHBlYXJhbmNlIiwib25DbGljayIsImxhYmVsIiwiZGlzYWJsZWQiLCJDb21wb25lbnQiLCJzdHJpbmciLCJib29sIiwiZnVuYyIsIk1hcmtkb3duV3JhcHBlciIsInNwYW4iLCJjb2xvciIsIk1hcmtkb3duTWVzc2FnZSIsImRhdGEtdGVzdCIsIm1hcmtkb3duVGV4dCIsIm1hcmtkb3duVHlwZSIsInRvIiwibGluayIsImFycmF5IiwiZm4iLCJpIiwibGVuZ3RoIiwibWFwcGluZyIsImNvbmNhdCIsImZsYXRNYXAiLCJzcGxpdCIsInRva2VuIiwicGFydCIsImtleSIsImxpbmtUZXh0IiwicG9wIiwibWVtbyIsIkhlbHBMaW5rQ29tcG9uZW50IiwiY29udHJvbE9wdGlvbnMiLCJvcGVuSW5OZXdDb250ZXh0Iiwib2JqZWN0IiwiVGV4dFdyYXBwZXIiLCJUZXh0IiwiVGV4dENvbXBvbmVudCIsImUiLCJoYW5kbGVDaGFuZ2UiLCJmaWVsZCIsImlubGluZSIsInBsYWNlaG9sZGVyIiwidG9TdHJpbmciLCJvbkNoYW5nZSIsInR5cGUiLCJlbmNyeXB0ZWQiLCJudW1iZXIiLCJTZWxlY3RXcmFwcGVyIiwiU2VsZWN0IiwiU3R5bGVkRGl2IiwiU2luZ2xlSW5wdXRDb21wb25lbnQiLCJkZXBlbmRlbmN5VmFsdWVzIiwicmVzdFByb3BzIiwiZGVueUxpc3QiLCJhbGxvd0xpc3QiLCJkZXBlbmRlbmNpZXMiLCJjcmVhdGVTZWFyY2hDaG9pY2UiLCJyZWZlcmVuY2VOYW1lIiwiZGlzYWJsZVNlYXJjaCIsImxhYmVsRmllbGQiLCJhdXRvQ29tcGxldGVGaWVsZHMiLCJoaWRlQ2xlYXJCdG4iLCJvYmoiLCJPcHRpb24iLCJDb21ib0JveCIsIkhlYWRpbmciLCJnZW5lcmF0ZU9wdGlvbnMiLCJpdGVtcyIsImZvckVhY2giLCJpdGVtIiwicHVzaCIsImNoaWxkIiwibG9hZGluZyIsInNldExvYWRpbmciLCJzZXRPcHRpb25zIiwidXNlRWZmZWN0Iiwic291cmNlIiwiQ2FuY2VsVG9rZW4iLCJjb3VudCIsImtleXMiLCJ0aGVuIiwiZmlsdGVyUmVzcG9uc2UiLCJlbnRyeSIsImNhbmNlbCIsImVmZmVjdGl2ZURpc2FibGVkIiwiZWZmZWN0aXZlUGxhY2Vob2xkZXIiLCJlZmZlY3RpdmVJc0NsZWFyYWJsZSIsIm5hbWUiLCJkYXRhLXRlc3QtbG9hZGluZyIsImZpbHRlciIsImljb24iLCJzaGFwZSIsIk11bHRpU2VsZWN0V3JhcHBlciIsIk11bHRpc2VsZWN0IiwiTXVsdGlJbnB1dENvbXBvbmVudCIsImRlbGltaXRlciIsIml0ZW1MaXN0IiwibWFwIiwiZ2V0Rm9ybWF0dGVkTWVzc2FnZSIsInZhbHVlTGlzdCIsInZhbHVlcyIsImFsbG93TmV3VmFsdWVzIiwiam9pbiIsIkNoZWNrQm94Q29tcG9uZW50IiwiaXNGYWxzZSIsInNlbGVjdGVkIiwiUmFkaW9CYXJXcmFwcGVyIiwiUmFkaW9CYXIiLCJSYWRpb0NvbXBvbmVudCIsIlBsYWNlaG9sZGVyQ29tcG9uZW50IiwiZGVmYXVsdFZhbHVlIiwiQ3VzdG9tQ29udHJvbCIsIm1vZHVsZSIsImFwcE5hbWUiLCJyZXNvbHZlIiwiaW1wb3J0IiwiZ2V0QnVpbGREaXJQYXRoIiwiZXh0ZXJuYWwiLCJDb250cm9sIiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJuZXdWYWx1ZSIsInNob3VsZFJlbmRlciIsImdsb2JhbENvbmZpZyIsImdldFVuaWZpZWRDb25maWdzIiwibWV0YSIsImxvYWRDdXN0b21Db250cm9sIiwic3JjIiwiY3VzdG9tQ29udHJvbCIsImVsIiwic2V0VmFsdWUiLCJ1dGlsQ3VzdG9tRnVuY3Rpb25zIiwicmVuZGVyIiwidmFsaWRhdGlvbiIsImFkZEN1c3RvbVZhbGlkYXRvciIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsInN0eWxlIiwidmlzaWJpbGl0eSIsInNpbmdsZVNlbGVjdCIsImhlbHBMaW5rIiwibXVsdGlwbGVTZWxlY3QiLCJjaGVja2JveCIsInJhZGlvIiwiY3VzdG9tIiwiQ3VzdG9tRWxlbWVudCIsIkNvbnRyb2xHcm91cFdyYXBwZXIiLCJDb250cm9sR3JvdXAiLCJkYXRhTmFtZSIsIkNvbnRyb2xXcmFwcGVyIiwic3RyIiwiU3RyaW5nIiwiY29udHJvbFR5cGUiLCJpc1N0cmluZyIsImVudGl0eSIsIkNPTlRST0xfVFlQRV9NQVAiLCJyb3dWaWV3IiwidG9vbHRpcCIsImhlbHAiLCJ1dGlsaXR5RnVuY3RzIiwibWFya2Rvd25NZXNzYWdlIiwiY3JlYXRlRWxlbWVudCIsImhlbHBUZXh0IiwiZGlzcGxheSIsIlB1cmVDb21wb25lbnQiLCJhbnkiLCJQUkVERUZJTkVEX1ZBTElEQVRPUlNfRElDVCIsInJlZ2V4IiwiaW5wdXRWYWx1ZVR5cGUiLCJlbWFpbCIsImlwdjQiLCJkYXRlIiwiVmFsaWRhdG9yIiwiZW50aXRpZXMiLCJhdHRyVmFsdWUiLCJ1bmRlZmluZWQiLCJpc05hbWUiLCJmaW5kIiwiY2hlY2tJc0ZpZWxkSGFzSW5wdXQiLCJlcnJvckZpZWxkIiwiZXJyb3JNc2ciLCJ2YWxpZGF0b3IiLCJwYXJzZVN0cmluZ1ZhbGlkYXRvciIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhcnNlUmVnZXhSYXdTdHIiLCJwYXR0ZXJuIiwicmVzdWx0IiwidGVzdCIsInBhcnNlTnVtYmVyVmFsaWRhdG9yIiwicmFuZ2UiLCJ2YWwiLCJOdW1iZXIiLCJpc05hTiIsInRhcmdldFZhbHVlIiwibmFtZUZpZWxkTGFiZWwiLCJzdGFydHNXaXRoIiwidG9Mb3dlckNhc2UiLCJzb21lIiwiZCIsImluZGV4T2YiLCJyZXQiLCJqIiwicmVxdWlyZWQiLCJSZXF1aXJlZFZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJTdHJpbmdWYWxpZGF0b3IiLCJSZWdleFZhbGlkYXRvciIsIk51bWJlclZhbGlkYXRvciIsIlByZURlZmluZWRSZWdleFZhbGlkYXRvciIsIkN1c3RvbVZhbGlkYXRvciIsInZhbGlkYXRvckZ1bmMiLCJDb2xsYXBzaWJsZVBhbmVsV3JhcHBlciIsIkNvbGxhcHNpYmxlUGFuZWwiLCJDdXN0b21Hcm91cExhYmVsIiwiQmFzZUZvcm1WaWV3IiwiY29udGV4dCIsInNlcnZpY2UiLCJncm91cHMiLCJncm91cCIsImZpZWxkcyIsImZpZWxkTmFtZSIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlZE9iaiIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImlzR3JvdXBpbmciLCJzcGxpY2UiLCJjbGVhckVycm9yTXNnIiwiZGF0YWRpY3QiLCJob29rIiwib25TYXZlIiwiZXhlY3V0ZVZhbGlkYXRpb25TdWJtaXQiLCJ0ZW1FbnRpdGllcyIsImluY2x1ZGVzIiwiQm9vbGVhbiIsInNldEVycm9yRmllbGRNc2ciLCJpc09BdXRoIiwicmVxRmllbGRzIiwiYXV0aE1hcCIsImF1dGhfdHlwZSIsImlzQXV0aFZhbCIsImRvVmFsaWRhdGlvbiIsInNhdmVWYWxpZGF0b3IiLCJmb3JtRGF0YSIsInBhcnNlRnVuY3Rpb25SYXdTdHIiLCJTYXZlVmFsaWRhdG9yIiwic2V0RXJyb3JNc2ciLCJpc1NpbmdsZU9hdXRoIiwicGFyYW1ldGVycyIsImNsaWVudF9pZCIsInJlZGlyZWN0X3VybCIsInN0YXRlRW5hYmxlZCIsImlzb2F1dGhTdGF0ZSIsInN0YXRlX2VuYWJsZWQiLCJvYXV0aF9zdGF0ZSIsInV1aWR2NCIsInJlcGxhY2UiLCJob3N0Iiwib2F1dGhDb25mIiwiYXV0aENvZGVFbmRwb2ludCIsImEiLCJpc0NhbGxlZCIsImlzRXJyb3IiLCJpc1Jlc3BvbnNlIiwiY2hpbGRXaW4iLCJ3aW5kb3ciLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJnZXRNZXNzYWdlIiwiaGFuZGxlT2F1dGhUb2tlbiIsIndhaXRGb3JBdXRoZW50aWNhdGlvbiIsImF1dGhUaW1lb3V0IiwiY2xvc2VkIiwid2FpdEZvckJhY2tlbmRSZXNwb25zZSIsInNhdmVEYXRhIiwib25TYXZlUHJvbWlzZSIsImFwcGVuZCIsInRtcE9iaiIsImNvbnRlbnQiLCJpZCIsInVwZGF0ZSIsIiRtZXJnZSIsIm9uU2F2ZVN1Y2Nlc3MiLCJtb2RlX2NvbmZpZ190aXRsZSIsImVyciIsImVycm9yU3VibWl0TXNnIiwicGFyc2VFcnJvck1zZyIsIm9uU2F2ZUZhaWwiLCJjaGFuZ2VzIiwiJHNldCIsImRlcGVuZGVuY3lNYXAiLCJoYXMiLCJnZXQiLCJsb2FkRmllbGQiLCJsb2FkIiwiZGVwZW5kZW5jeSIsImN1cnJlbnRWYWx1ZSIsIm5ld0ZpZWxkcyIsInRlbXBTdGF0ZSIsImNsZWFyQWxsRXJyb3JNc2ciLCJob29rRGVmZXJyZWQiLCJ4IiwibXNnIiwicHJldmlvdXNTdGF0ZSIsIlN0YXRlIiwid2FybmluZ01zZyIsIm5ld0RhdGEiLCJ0ZW1EYXRhIiwiSG9vayIsInV0aWwiLCJjb2RlIiwic3RhdGVSZXNwb25zZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImFjY2Vzc1Rva2VuRW5kcG9pbnQiLCJncmFudF90eXBlIiwiY2xpZW50X3NlY3JldCIsInJlZGlyZWN0X3VyaSIsIk9BdXRoRW5kcG9pbnQiLCJhY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsImluc3RhbmNlVXJsIiwiaW5zdGFuY2VfdXJsIiwicmVmcmVzaFRva2VuIiwicmVmcmVzaF90b2tlbiIsInNsZWVwIiwidGltZW91dCIsImFyZ3MiLCJtcyIsInNldFRpbWVvdXQiLCJjb2xscHNpYmxlRWxlbWVudCIsInRlbVN0YXRlIiwidXRpbENvbnRyb2xXcmFwcGVyIiwiaXNFeHBhbmRhYmxlIiwiZmxhZyIsImN1cnJlbnRJbnB1dCIsImVuY29kZVVSSUNvbXBvbmVudCIsImNhbGxiYWNrIiwiUEFHRV9JTlBVVCIsInBhZ2VzIiwiaW5wdXRzIiwic2VydmljZXMiLCJ1cGRhdGVFbnRpdGllc0Zvckdyb3VwIiwibG9hZEhvb2siLCJjb25maWd1cmF0aW9uIiwidGFicyIsInRhYiIsInRhYmxlIiwiY3VycmVudFNlcnZpY2VTdGF0ZSIsIk1hcCIsIlBBR0VfQ09ORiIsImF1dGhUeXBlIiwib2F1dGhfc3RhdGVfZW5hYmxlZCIsInRlbXBFbnRpdHkiLCJiYXNpYyIsIm9hdXRoIiwiYXV0aGZpZWxkcyIsImlzRW5jcnlwdGVkIiwibG9jYXRpb24iLCJocmVmIiwib2F1dGhDb25mRGF0YSIsIm9hdXRoX3BvcHVwX3dpZHRoIiwib2F1dGhfcG9wdXBfaGVpZ2h0Iiwib2F1dGhfdGltZW91dCIsImF1dGhfY29kZV9lbmRwb2ludCIsImFjY2Vzc190b2tlbl9lbmRwb2ludCIsImRpc2FibGVvbkVkaXQiLCJFcnJvciIsImNoYW5nZUZpZWxkcyIsImZsYXR0ZW5lZE1hcCIsIm9uQ3JlYXRlIiwiY29uc29sZSIsIm9uUmVuZGVyIiwib25FZGl0TG9hZCIsIm1hcmdpblRvcCIsImdlbmVyYXRlV2FybmluZ01lc3NhZ2UiLCJnZW5lcmF0ZUVycm9yTWVzc2FnZSIsInJlbmRlckdyb3VwRWxlbWVudHMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJTVFlMRV9QQUdFIiwiU1RZTEVfTU9EQUwiLCJDdXN0b21UYWJsZUNvbnRyb2wiLCJmaWxlTmFtZSIsInJvdyIsIlRhYmxlQ2VsbFdyYXBwZXIiLCJUYWJsZSIsIkNlbGwiLCJnZXRFeHBhbnNpb25Sb3ciLCJjb2xTcGFuIiwibW9yZUluZm8iLCJjdXN0b21Sb3ciLCJSb3ciLCJ0ZXJtV2lkdGgiLCJEZWZpbml0aW9uTGlzdHMiLCJUZXJtIiwiRGVzY3JpcHRpb24iLCJnZXRFeHBhbnNpb25Sb3dEYXRhIiwiU3dpdGNoV3JhcHBlciIsIkN1c3RvbVRhYmxlUm93IiwiY29sdW1ucyIsImhlYWRlck1hcHBpbmciLCJoYW5kbGVUb2dnbGVBY3Rpb25DbGljayIsImhhbmRsZUVkaXRBY3Rpb25DbGljayIsImhhbmRsZUNsb25lQWN0aW9uQ2xpY2siLCJoYW5kbGVEZWxldGVBY3Rpb25DbGljayIsInJvd0FjdGlvbnNQcmltYXJ5QnV0dG9uIiwidXNlQ2FsbGJhY2siLCJzZWxlY3RlZFJvdyIsImRhdGEtY29sdW1uIiwic2NyZWVuUmVhZGVyVGV4dCIsInNpemUiLCJzdGF0dXNDb250ZW50IiwiX190b2dnbGVTaG93U3Bpbm5lciIsImhlYWRlciIsImNlbGxIVE1MIiwiY3VzdG9tQ2VsbCIsImdldEN1c3RvbUNlbGwiLCJzZWxlY3RlZExhYmVsIiwidW5zZWxlY3RlZExhYmVsIiwiRGVsZXRlTW9kYWwiLCJFcnJvck1zZyIsInByZXZTdGF0ZSIsImlzRGVsZXRpbmciLCIkdW5zZXQiLCJkZWxldGVNc2ciLCJoYW5kbGVEZWxldGUiLCJDdXN0b21UYWJsZSIsImhhbmRsZU9wZW5QYWdlU3R5bGVEaWFsb2ciLCJoYW5kbGVTb3J0Iiwic29ydERpciIsInNvcnRLZXkiLCJ1bmlmaWVkQ29uZmlncyIsImVudGl0eU1vZGFsIiwic2V0RW50aXR5TW9kYWwiLCJkZWxldGVNb2RhbCIsInNldERlbGV0ZU1vZGFsIiwidXNlQ29udGV4dCIsInRhYmxlQ29uZmlnIiwic2VydmljZVRvU3R5bGVNYXAiLCJxdWVyeSIsInNlcnZpY2VLZXkiLCJjb2x1bW4iLCJoYW5kbGVFbnRpdHlDbG9zZSIsImhhbmRsZURlbGV0ZUNsb3NlIiwiaXNDdXN0b21NYXBwaW5nIiwiZ2V0VGFibGVIZWFkZXJDZWxsIiwiSGVhZCIsImhlYWREYXRhIiwiSGVhZENlbGwiLCJvblNvcnQiLCJzdHJpcGVSb3dzIiwicm93RXhwYW5zaW9uIiwiZXhwYW5zaW9uUm93IiwiZ2VuZXJhdGVNb2RhbERpYWxvZyIsIlRhYmxlRmlsdGVyIiwid2FpdCIsImxhdGVyIiwiY2xlYXJUaW1lb3V0IiwiVGFibGVIZWFkZXJXcmFwcGVyIiwiVGFibGVGaWx0ZXJXcmFwcGVyIiwiVGFibGVIZWFkZXIiLCJ0b3RhbEVsZW1lbnQiLCJoYW5kbGVSZXF1ZXN0TW9kYWxPcGVuIiwiaXRlbUxhYmVsIiwiYXJyIiwidW5zaGlmdCIsImdldFNlYXJjaFR5cGVEcm9wZG93biIsInBhZ2VOdW1iZXIiLCJhbHdheXNTaG93TGFzdFBhZ2VMaW5rIiwidG90YWxQYWdlcyIsIk1hdGgiLCJjZWlsIiwiVGFibGVXcmFwcGVyIiwic2V0U29ydEtleSIsInNldFNvcnREaXIiLCJzZXRDdXN0b21NYXBwaW5nU3RhdHVzIiwic2V0RXJyb3IiLCJmZXRjaElucHV0cyIsInJlcXVlc3RzIiwiYWxsIiwiZXJyb3JDb2RlIiwidWNjRXJyb3JDb2RlIiwicmVzIiwic2VydmljZVRpdGxlIiwiZmluZEJ5TWF0Y2hpbmdWYWx1ZSIsInRhYmxlRmllbGRzIiwibW9yZUluZm9EYXRhIiwidiIsImZvdW5kIiwidnYiLCJ0cmltIiwibmV3QXJyIiwiX3NvcnRLZXkiLCJzb3J0ZWRBcnIiLCJzb3J0Iiwicm93QSIsInJvd0IiLCJyb3dBVmFsdWUiLCJ1cGRhdGVkQXJyIiwic2xpY2UiLCJnZXRSb3dEYXRhIiwiZmlsdGVyZWREYXRhIiwiY3VycmVudFJvd0RhdGEiLCJpc1RydWUiLCJjaGFuZ2VUb2dnbGVTdGF0dXMiLCJwcmV2U29ydERpciIsIkVSUjAwMDEiLCJFUlIwMDAyIiwiRVJSMDAwMyIsIkVSUjAwMDQiLCJFUlIwMDA1IiwiRXJyb3JCb3VuZGFyeSIsImVycm9ySW5mbyIsImFsaWduIiwiYm94U2hhZG93IiwidGV4dEFsaWduIiwibGV2ZWwiLCJlcnJvckNvZGVzIiwid2hpdGVTcGFjZSIsInNob3dCb3JkZXIiXSwibWFwcGluZ3MiOiJpTEFHTUEsRUFBZUMsd0JBQWMsQ0FDL0JDLFFBQVMsR0FDVEMsV0FBWSxlQUdIQyxFQUF1QixTQUFDLEdBQWlCLElBQWZDLEVBQWUsRUFBZkEsU0FBZSxFQUNwQkMsbUJBQVMsSUFEVyxXQUMzQ0osRUFEMkMsS0FDbENDLEVBRGtDLE9BRWRHLG1CQUFTLElBRkssV0FFM0NDLEVBRjJDLEtBRS9CQyxFQUYrQixPQUdkRixtQkFBUyxPQUhLLFdBRzNDRyxFQUgyQyxLQUcvQkMsRUFIK0IsT0FJbEJKLG1CQUFTLElBSlMsV0FJM0NLLEVBSjJDLEtBSWpDQyxFQUppQyxPQUtaTixtQkFBUyxHQUxHLFdBSzNDTyxFQUwyQyxLQUs5QkMsRUFMOEIsS0FPbEQsT0FDSSxrQkFBQ2QsRUFBYWUsU0FBZCxDQUNJQyxNQUFPLENBQ0hkLFVBQ0FDLGFBQ0FJLGFBQ0FDLGdCQUNBQyxhQUNBQyxnQkFDQUMsV0FDQUMsY0FDQUMsY0FDQUMsbUJBR0hULElBS2JELEVBQXFCYSxVQUFZLENBQzdCWixTQUFVYSxJQUFVQyxVQUFVLENBQUNELElBQVVFLFFBQVFGLElBQVVHLE1BQU9ILElBQVVHLE9BQU9DLFlBR3hFdEIsTyxpQ0N2Q2Ysd0lBQU8sSUFBTXVCLEVBQWEsUUFDYkMsRUFBYyxTQUVkQyxFQUFZLE9BQ1pDLEVBQWMsVSxxc0JDYzNCLElBQU1DLEVBQW1CLFNBQUMsR0FVcEIsSUFURkMsRUFTRSxFQVRGQSxZQUNBQyxFQVFFLEVBUkZBLFlBQ0FDLEVBT0UsRUFQRkEsT0FDQUMsRUFNRSxFQU5GQSxLQUNBQyxFQUtFLEVBTEZBLFlBS0UsSUFKRkMscUJBSUUsTUFKYyxHQUlkLE1BSEZDLGNBR0UsTUFITyxNQUdQLE1BRkZDLG1CQUVFLGFBREZDLHVCQUNFLE1BRGdCLGFBQ2hCLEVB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QXlqQixnQixvQkFLUixXQUMwQixNQUF0QixPQUFJL2dCLEtBQUtMLE1BQU1yQyxNQUdQLHlCQUFLMGpCLE1BQU0sU0FBUzVYLE1BQU8sQ0FBRStPLFVBQVcsUUFDcEMsa0JBQUMsSUFBRCxDQUFNL08sTUFBTyxDQUFFNlgsVUFBVywwQkFDdEIsa0JBQUMsSUFBS2hoQixPQUFOLEtBQ0ksa0JBQUMsSUFBRCxDQUFTbUosTUFBTyxDQUFFOFgsVUFBVyxVQUFZQyxNQUFPLEdBQzVDLGtCQUFDLElBQUQsQ0FBYS9YLE1BQU8sQ0FBRTVLLFNBQVUsUUFBUzZDLE1BQU8sYUFDaEQsNkJBQ0EsNkJBQzBCLFlBQXpCckIsS0FBS0wsTUFBTW9mLFVBQ05qZixZQUFFLDhCQUNGQSxZQUFFLDJCQUdoQixrQkFBQyxJQUFLTyxLQUFOLEtBQ0tMLEtBQUtMLE1BQU1vZixVQUNSLG9DQUNLamYsWUFBRXNoQixFQUFXcGhCLEtBQUtMLE1BQU1vZixZQUN6Qiw2QkFDQSw4QkFFSixLQUNKLDZCQUFTM1YsTUFBTyxDQUFFaVksV0FBWSxhQUE5QixVQUNLcmhCLEtBQUtMLE1BQU1yQyxhQURoQixhQUNLLEVBQWtCZ0csYUFHM0Isa0JBQUMsSUFBSzVDLE9BQU4sQ0FBYTRnQixZQUFZLEdBQ3BCdGhCLEtBQUtMLE1BQU1vZixVQUFZL2UsS0FBS0wsTUFBTW9mLFVBQVksUUFPNUQvZSxLQUFLaEIsTUFBTTVFLFksdUNBbER0QixTQUFnQ2tELEdBRTVCLE1BQU8sQ0FBRXloQixVQUFXemhCLEVBQU0waEIsa0IsR0FSTnZmLElBQU1zQixXQTREbEMrZixFQUFjOWxCLFVBQVksQ0FDdEJaLFNBQVVhLElBQVVDLFVBQVUsQ0FBQ0QsSUFBVUUsUUFBUUYsSUFBVUcsTUFBT0gsSUFBVUcsT0FBT0MsWUFHeEV5bEIiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNvbnN0IFRhYmxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICAgIHJvd0RhdGE6IHt9LFxuICAgIHNldFJvd0RhdGE6ICgpID0+IHt9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBUYWJsZUNvbnRleHRQcm92aWRlciA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgICBjb25zdCBbcm93RGF0YSwgc2V0Um93RGF0YV0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3NlYXJjaFRleHQsIHNldFNlYXJjaFRleHRdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtzZWFyY2hUeXBlLCBzZXRTZWFyY2hUeXBlXSA9IHVzZVN0YXRlKCdhbGwnKTtcbiAgICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZVN0YXRlKDEwKTtcbiAgICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKDApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgICAgIHNldFJvd0RhdGEsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICBzZXRTZWFyY2hUZXh0LFxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUsXG4gICAgICAgICAgICAgICAgc2V0U2VhcmNoVHlwZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBzZXRQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgICAgICBzZXRDdXJyZW50UGFnZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9UYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbn07XG5cblRhYmxlQ29udGV4dFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUNvbnRleHQ7XG4iLCJleHBvcnQgY29uc3QgTU9ERV9DTE9ORSA9ICdjbG9uZSc7XG5leHBvcnQgY29uc3QgTU9ERV9DUkVBVEUgPSAnY3JlYXRlJztcbmV4cG9ydCBjb25zdCBNT0RFX0RFTEVURSA9ICdkZWxldGUnO1xuZXhwb3J0IGNvbnN0IE1PREVfRURJVCA9ICdlZGl0JztcbmV4cG9ydCBjb25zdCBNT0RFX0NPTkZJRyA9ICdjb25maWcnO1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IENTUkZUb2tlbiwgYXBwIH0gZnJvbSAnQHNwbHVuay9zcGx1bmstdXRpbHMvY29uZmlnJztcbmltcG9ydCB7IGNyZWF0ZVJFU1RVUkwgfSBmcm9tICdAc3BsdW5rL3NwbHVuay11dGlscy91cmwnO1xuaW1wb3J0IHsgZ2VuZXJhdGVFbmRQb2ludFVybCwgZ2VuZXJhdGVUb2FzdCB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFRoZSBvYmplY3QgY29udGFpbmluZyByZXF1aXJlZCBwYXJhbXMgZm9yIHJlcXVlc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLnNlcnZpY2VOYW1lIHNlcnZpY2UgbmFtZSB3aGljaCBpcyBpbnB1dCBuYW1lIG9yIHRhYiBuYW1lIGJhc2VkIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YS5lbmRwb2ludFVybCByZXN0IGVuZHBvaW50IHBhdGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhLnBhcmFtcyBvYmplY3Qgd2l0aCBwYXJhbXMgYXMga2V5IHZhbHVlIHBhaXJzXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YS5ib2R5IG9iamVjdCB3aXRoIGJvZHkgYXMga2V5IHZhbHVlIHBhaXJzIGZvciBwb3N0IHJlcXVlc3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhLmN1c3RvbUhlYWRlcnMgZXh0cmEgaGVhZGVycyBhcyBrZXkgdmFsdWUgcGFpclxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEubWV0aG9kIHJlc3QgbWV0aG9kIHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLmhhbmRsZUVycm9yIHdoZXRoZXIgb3Igbm90IHNob3cgdG9hc3Qgbm90aWZpY2F0aW9ucyBvbiBmYWlsdXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YS5jYWxsYmFja09uRXJyb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBoYW5kbGluZyBlcnJvci4gT25seSBleGVjdXRlZCB3aGVuIGhhbmRsZUVycm9yIGlzIHNldCB0byB0cnVlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBheGlvc0NhbGxXcmFwcGVyID0gKHtcbiAgICBzZXJ2aWNlTmFtZSxcbiAgICBlbmRwb2ludFVybCxcbiAgICBwYXJhbXMsXG4gICAgYm9keSxcbiAgICBjYW5jZWxUb2tlbixcbiAgICBjdXN0b21IZWFkZXJzID0ge30sXG4gICAgbWV0aG9kID0gJ2dldCcsXG4gICAgaGFuZGxlRXJyb3IgPSBmYWxzZSxcbiAgICBjYWxsYmFja09uRXJyb3IgPSAoKSA9PiB7fSxcbn0pID0+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHNlcnZpY2VOYW1lID8gZ2VuZXJhdGVFbmRQb2ludFVybChzZXJ2aWNlTmFtZSkgOiBlbmRwb2ludFVybDtcbiAgICBjb25zdCBhcHBEYXRhID0ge1xuICAgICAgICBhcHAsXG4gICAgICAgIG93bmVyOiAnbm9ib2R5JyxcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VIZWFkZXJzID0ge1xuICAgICAgICAnWC1TcGx1bmstRm9ybS1LZXknOiBDU1JGVG9rZW4sXG4gICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JyxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9O1xuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKGJhc2VIZWFkZXJzLCBjdXN0b21IZWFkZXJzKTtcbiAgICBjb25zdCB1cmwgPSBjcmVhdGVSRVNUVVJMKGVuZHBvaW50LCBhcHBEYXRhKTtcblxuICAgIGxldCBuZXdQYXJhbXMgPSB7IG91dHB1dF9tb2RlOiAnanNvbicgfTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgIG5ld1BhcmFtcyA9IHsgLi4ubmV3UGFyYW1zLCAuLi5wYXJhbXMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBwYXJhbXM6IG5ld1BhcmFtcyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGNhbmNlbFRva2VuLFxuICAgIH07XG5cbiAgICBpZiAobWV0aG9kID09PSAncG9zdCcpIHtcbiAgICAgICAgb3B0aW9ucy5kYXRhID0gYm9keTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlRXJyb3JcbiAgICAgICAgPyBheGlvcyhvcHRpb25zKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgaWYgKGF4aW9zLmlzQ2FuY2VsKGVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRXJyb3IgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXI6ICR7ZXJyb3IucmVzcG9uc2UuZGF0YS5tZXNzYWdlc1swXS50ZXh0fWA7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBObyByZXNwb25zZSByZWNlaXZlZCB3aGlsZSBtYWtpbmcgcmVxdWVzdCB0byAke2VuZHBvaW50fWA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgaGFwcGVuZWQgaW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCBhbiBFcnJvclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBFcnJvciBtYWtpbmcgJHttZXRob2R9IHJlcXVlc3QgdG8gJHtlbmRwb2ludH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGdlbmVyYXRlVG9hc3QobWVzc2FnZSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgIGNhbGxiYWNrT25FcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBheGlvcyhvcHRpb25zKTtcbn07XG5cbmV4cG9ydCB7IGF4aW9zQ2FsbFdyYXBwZXIgfTtcbiIsImltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgdmFyaWFibGVzIH0gZnJvbSAnQHNwbHVuay90aGVtZXMnO1xuXG5leHBvcnQgY29uc3QgVGl0bGVDb21wb25lbnQgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgICBjbGFzc05hbWU6ICdwYWdlVGl0bGUnLFxufSlgXG4gICAgJi5wYWdlVGl0bGUge1xuICAgICAgICBmb250LXNpemU6ICR7dmFyaWFibGVzLmZvbnRTaXplWFhMYXJnZX07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFN1YlRpdGxlQ29tcG9uZW50ID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gICAgY2xhc3NOYW1lOiAncGFnZVN1YnRpdGxlJyxcbn0pYFxuICAgICYucGFnZVN1YnRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAke3ZhcmlhYmxlcy5mb250U2l6ZX07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IFRhYmxlQ2FwdGlvbkNvbXBvbmVudCA9IHN0eWxlZC5kaXZgXG4gICAgLnRhYmxlLWNhcHRpb24taW5uZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbmA7XG4iLCJpbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuXG4vLyBBIGN1c3RvbSBob29rIHRoYXQgYnVpbGRzIG9uIHVzZUxvY2F0aW9uIHRvIHBhcnNlIHRoZSBxdWVyeSBzdHJpbmcgZm9yIHlvdS5cbmZ1bmN0aW9uIHVzZVF1ZXJ5KCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHVzZUxvY2F0aW9uKCkuc2VhcmNoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlUXVlcnk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQHNwbHVuay9yZWFjdC11aS9CdXR0b24nO1xuaW1wb3J0IE1vZGFsIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvTW9kYWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgV2FpdFNwaW5uZXIgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9XYWl0U3Bpbm5lcic7XG5pbXBvcnQgeyBfIH0gZnJvbSAnQHNwbHVuay91aS11dGlscy9pMThuJztcblxuaW1wb3J0IHsgTU9ERV9DTE9ORSwgTU9ERV9DUkVBVEUsIE1PREVfRURJVCB9IGZyb20gJy4uL2NvbnN0YW50cy9tb2Rlcyc7XG5pbXBvcnQgQmFzZUZvcm1WaWV3IGZyb20gJy4vQmFzZUZvcm1WaWV3JztcblxuY29uc3QgTW9kYWxXcmFwcGVyID0gc3R5bGVkKE1vZGFsKWBcbiAgICB3aWR0aDogODAwcHg7XG5gO1xuXG5jbGFzcyBFbnRpdHlNb2RhbCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICAvLyBSZWYgaXMgdXNlZCBoZXJlIHRvIGNhbGwgc3VibWl0IG1ldGhvZCBvZiBmb3JtIG9ubHlcbiAgICAgICAgdGhpcy5mb3JtID0gUmVhY3QuY3JlYXRlUmVmKCk7IC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1uby1yZWZzLnJlYWN0LW5vLXJlZnNcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgaXNTdWJtaXRpdG5nOiBmYWxzZSB9O1xuXG4gICAgICAgIGlmIChwcm9wcy5tb2RlID09PSBNT0RFX0NSRUFURSkge1xuICAgICAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gXygnQWRkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMubW9kZSA9PT0gTU9ERV9DTE9ORSkge1xuICAgICAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gXygnU2F2ZScpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLm1vZGUgPT09IE1PREVfRURJVCkge1xuICAgICAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gXygnVXBkYXRlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvblRleHQgPSBfKCdTdWJtaXQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlcXVlc3RDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVSZXF1ZXN0Q2xvc2UoKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZvcm0uY3VycmVudC5oYW5kbGVTdWJtaXQoKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0Q2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2V0OiB3aGV0aGVyIGZvcm0gaXMgc3VibWl0dGluZ1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvc2UgOiBjbG9zZSB0aGUgRW50aXR5IG1vZGFsXG4gICAgICovXG4gICAgaGFuZGxlRm9ybVN1Ym1pdCA9IChzZXQsIGNsb3NlKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1N1Ym1pdGl0bmc6IHNldCB9KTtcbiAgICAgICAgaWYgKGNsb3NlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNb2RhbFdyYXBwZXIgb3Blbj17dGhpcy5wcm9wcy5vcGVufT5cbiAgICAgICAgICAgICAgICA8TW9kYWwuSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLmZvcm1MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e3RoaXMuaGFuZGxlUmVxdWVzdENsb3NlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPE1vZGFsLkJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxCYXNlRm9ybVZpZXcgLy8gbm9zZW1ncmVwOiB0eXBlc2NyaXB0LnJlYWN0LnNlY3VyaXR5LmF1ZGl0LnJlYWN0LW5vLXJlZnMucmVhY3Qtbm8tcmVmc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLmZvcm19XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlPXt0aGlzLnByb3BzLnBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT17dGhpcy5wcm9wcy5zZXJ2aWNlTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9e3RoaXMucHJvcHMubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YW56YU5hbWU9e3RoaXMucHJvcHMuc3RhbnphTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZvcm1TdWJtaXQ9e3RoaXMuaGFuZGxlRm9ybVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L01vZGFsLkJvZHk+XG4gICAgICAgICAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfKCdDYW5jZWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzU3VibWl0aXRuZ31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2F2ZUJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17dGhpcy5zdGF0ZS5pc1N1Ym1pdGl0bmcgPyA8V2FpdFNwaW5uZXIgLz4gOiB0aGlzLmJ1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzU3VibWl0aXRuZ31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgIDwvTW9kYWxXcmFwcGVyPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuRW50aXR5TW9kYWwucHJvcFR5cGVzID0ge1xuICAgIHBhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGFuZGxlUmVxdWVzdENsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzZXJ2aWNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHN0YW56YU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9ybUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRW50aXR5TW9kYWw7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IExpbmsgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9MaW5rJztcblxuY29uc3QgTWFya2Rvd25XcmFwcGVyID0gc3R5bGVkLnNwYW5gXG4gICAgY29sb3I6ICR7KHByb3BzKSA9PiBwcm9wcy5jb2xvcn07XG5gO1xuXG5mdW5jdGlvbiBNYXJrZG93bk1lc3NhZ2UocHJvcHMpIHtcbiAgICAvLyBmbGF0TWFwIGFkZHMgdGhlIGxpbmsgdG8gdGhlIHBhcnQgb2YgdGV4dCB0aGF0IGhhcyBiZWVuIHNwbGl0IGZyb20gdGV4dFxuICAgIC8vIGFuZCByZXR1cm5zIGEgbmV3IGFycmF5IGZvcm1lZCBieSBhcHBseWluZyBhIGdpdmVuIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXksXG4gICAgLy8gYW5kIHRoZW4gZmxhdHRlbmluZyB0aGUgcmVzdWx0IGJ5IG9uZSBsZXZlbFxuICAgIGZ1bmN0aW9uIGZsYXRNYXAoYXJyYXksIGZuKSB7XG4gICAgICAgIGxldCBtYXJrZG93blRleHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgbWFwcGluZyA9IGZuKGFycmF5W2ldKTtcbiAgICAgICAgICAgIG1hcmtkb3duVGV4dCA9IG1hcmtkb3duVGV4dC5jb25jYXQobWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcmtkb3duVGV4dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRNYXJrZG93blRleHQoKSB7XG4gICAgICAgIGxldCBtYXJrZG93blRleHQgPSBwcm9wcy50ZXh0O1xuICAgICAgICBpZiAocHJvcHMubWFya2Rvd25UeXBlID09PSAnbGluaycpIHtcbiAgICAgICAgICAgIG1hcmtkb3duVGV4dCA9IDxMaW5rIHRvPXtwcm9wcy5saW5rfT57cHJvcHMudGV4dH08L0xpbms+O1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLm1hcmtkb3duVHlwZSA9PT0gJ2h5YnJpZCcpIHtcbiAgICAgICAgICAgIC8vIG1hcmtkb3duVHlwZSBoeWJyaWQgaXMgZm9yIHN1cHBvcnQgb2YgYm90aCB0ZXh0IGFuZCBsaW5rXG4gICAgICAgICAgICBtYXJrZG93blRleHQgPSBmbGF0TWFwKG1hcmtkb3duVGV4dC5zcGxpdChwcm9wcy50b2tlbiksIChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgcGFydCxcbiAgICAgICAgICAgICAgICAgICAgPExpbmsga2V5PXtwYXJ0fSB0bz17cHJvcHMubGlua30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMubGlua1RleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvTGluaz4sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWFya2Rvd25UZXh0LnBvcCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLm1hcmtkb3duVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBtYXJrZG93blRleHQgPSA8TWFya2Rvd25XcmFwcGVyIGNvbG9yPXtwcm9wcy5jb2xvcn0+e3Byb3BzLnRleHR9PC9NYXJrZG93bldyYXBwZXI+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hcmtkb3duVGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gPGRpdiBkYXRhLXRlc3Q9XCJtc2ctbWFya2Rvd25cIj57Z2V0TWFya2Rvd25UZXh0KCl9PC9kaXY+O1xufVxuXG5NYXJrZG93bk1lc3NhZ2UucHJvcFR5cGVzID0ge1xuICAgIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGluazogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtYXJrZG93blR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG9rZW46IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGlua1RleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKE1hcmtkb3duTWVzc2FnZSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBMaW5rIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvTGluayc7XG5cbmZ1bmN0aW9uIEhlbHBMaW5rQ29tcG9uZW50KHByb3BzKSB7XG4gICAgY29uc3QgeyB0ZXh0LCBsaW5rIH0gPSBwcm9wcy5jb250cm9sT3B0aW9ucztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxMaW5rIHRvPXtsaW5rfSBvcGVuSW5OZXdDb250ZXh0PlxuICAgICAgICAgICAge3RleHR9XG4gICAgICAgIDwvTGluaz5cbiAgICApO1xufVxuXG5IZWxwTGlua0NvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gICAgY29udHJvbE9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBIZWxwTGlua0NvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFRleHQgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9UZXh0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5jb25zdCBUZXh0V3JhcHBlciA9IHN0eWxlZChUZXh0KWBcbiAgICB3aWR0aDogMzIwcHggIWltcG9ydGFudDtcbmA7XG5cbmNsYXNzIFRleHRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGhhbmRsZUNoYW5nZSA9IChlLCB7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVDaGFuZ2UodGhpcy5wcm9wcy5maWVsZCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGV4dFdyYXBwZXJcbiAgICAgICAgICAgICAgICBpbmxpbmVcbiAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5wcm9wcy5lcnJvcn1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcz8uY29udHJvbE9wdGlvbnM/LnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5maWVsZH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMucHJvcHMudmFsdWUgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJvcHMudmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgdHlwZT17dGhpcy5wcm9wcy5lbmNyeXB0ZWQgPyAncGFzc3dvcmQnIDogJ3RleHQnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblRleHRDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIC8vIE51bWJlciBpcyBleHBlY3RlZCBpZiBwcm92aWRlZCBudW1iZXIgaW4gZ2xvYmFsQ29uZmlnLmpzb24gaW5zdGVhZCBvZiBhIHN0cmluZy5cbiAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29udHJvbE9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZW5jcnlwdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0Q29tcG9uZW50O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1NlbGVjdCc7XG5pbXBvcnQgQ29tYm9Cb3ggZnJvbSAnQHNwbHVuay9yZWFjdC11aS9Db21ib0JveCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvQnV0dG9uJztcbmltcG9ydCBDbGVhciBmcm9tICdAc3BsdW5rL3JlYWN0LWljb25zL0NsZWFyJztcbmltcG9ydCB7IF8gfSBmcm9tICdAc3BsdW5rL3VpLXV0aWxzL2kxOG4nO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBheGlvc0NhbGxXcmFwcGVyIH0gZnJvbSAnLi4vdXRpbC9heGlvc0NhbGxXcmFwcGVyJztcbmltcG9ydCB7IGZpbHRlclJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuY29uc3QgU2VsZWN0V3JhcHBlciA9IHN0eWxlZChTZWxlY3QpYFxuICAgIHdpZHRoOiAzMjBweCAhaW1wb3J0YW50O1xuYDtcblxuY29uc3QgU3R5bGVkRGl2ID0gc3R5bGVkLmRpdmBcbiAgICBkaXY6Zmlyc3QtY2hpbGQge1xuICAgICAgICB3aWR0aDogMzIwcHggIWltcG9ydGFudDtcbiAgICB9XG5gO1xuXG5mdW5jdGlvbiBTaW5nbGVJbnB1dENvbXBvbmVudChwcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICAgIGNvbnRyb2xPcHRpb25zLFxuICAgICAgICBkZXBlbmRlbmN5VmFsdWVzLFxuICAgICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgICBlbmRwb2ludFVybCxcbiAgICAgICAgZGVueUxpc3QsXG4gICAgICAgIGFsbG93TGlzdCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBfKCdTZWxlY3QgYSB2YWx1ZScpLFxuICAgICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICAgIGNyZWF0ZVNlYXJjaENob2ljZSxcbiAgICAgICAgcmVmZXJlbmNlTmFtZSxcbiAgICAgICAgZGlzYWJsZVNlYXJjaCxcbiAgICAgICAgbGFiZWxGaWVsZCxcbiAgICAgICAgYXV0b0NvbXBsZXRlRmllbGRzLFxuICAgICAgICBoaWRlQ2xlYXJCdG4sXG4gICAgfSA9IGNvbnRyb2xPcHRpb25zO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGUsIG9iaikge1xuICAgICAgICByZXN0UHJvcHMuaGFuZGxlQ2hhbmdlKGZpZWxkLCBvYmoudmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBPcHRpb24gPSBjcmVhdGVTZWFyY2hDaG9pY2UgPyBDb21ib0JveC5PcHRpb24gOiBTZWxlY3QuT3B0aW9uO1xuICAgIGNvbnN0IEhlYWRpbmcgPSBjcmVhdGVTZWFyY2hDaG9pY2UgPyBDb21ib0JveC5IZWFkaW5nIDogU2VsZWN0LkhlYWRpbmc7XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbnMoaXRlbXMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAmJiBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKDxPcHRpb24gbGFiZWw9e2l0ZW0ubGFiZWx9IHZhbHVlPXtpdGVtLnZhbHVlfSBrZXk9e2l0ZW0udmFsdWV9IC8+KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goPEhlYWRpbmcga2V5PXtpdGVtLmxhYmVsfT57aXRlbS5sYWJlbH08L0hlYWRpbmc+KTtcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaCg8T3B0aW9uIGxhYmVsPXtjaGlsZC5sYWJlbH0gdmFsdWU9e2NoaWxkLnZhbHVlfSBrZXk9e2NoaWxkLnZhbHVlfSAvPik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVuZHBvaW50VXJsICYmICFyZWZlcmVuY2VOYW1lICYmIGF1dG9Db21wbGV0ZUZpZWxkcykge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhnZW5lcmF0ZU9wdGlvbnMoYXV0b0NvbXBsZXRlRmllbGRzKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGF4aW9zLkNhbmNlbFRva2VuLnNvdXJjZSgpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgY2FuY2VsVG9rZW46IHNvdXJjZS50b2tlbiwgaGFuZGxlRXJyb3I6IHRydWUsIHBhcmFtczogeyBjb3VudDogLTEgfSB9O1xuICAgICAgICBpZiAocmVmZXJlbmNlTmFtZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zZXJ2aWNlTmFtZSA9IHJlZmVyZW5jZU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnRVcmwpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZW5kcG9pbnRVcmwgPSBlbmRwb2ludFVybDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5VmFsdWVzKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhcmFtcyA9IHsgLi4ub3B0aW9ucy5wYXJhbXMsIC4uLmRlcGVuZGVuY3lWYWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcGVuZGVuY2llcyB8fCAoZGVwZW5kZW5jeVZhbHVlcyAmJiBPYmplY3Qua2V5cyhkZXBlbmRlbmN5VmFsdWVzKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgYXhpb3NDYWxsV3JhcHBlcihvcHRpb25zKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLmRhdGEuZW50cnksIGxhYmVsRmllbGQsIGFsbG93TGlzdCwgZGVueUxpc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldE9wdGlvbnMobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBzb3VyY2UuY2FuY2VsKCdPcGVyYXRpb24gY2FuY2VsZWQuJyk7XG4gICAgICAgICAgICBjdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbZGVwZW5kZW5jeVZhbHVlc10pO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlRGlzYWJsZWQgPSBsb2FkaW5nID8gdHJ1ZSA6IGRpc2FibGVkO1xuICAgIGNvbnN0IGVmZmVjdGl2ZVBsYWNlaG9sZGVyID0gbG9hZGluZyA/IF8oJ0xvYWRpbmcnKSA6IHBsYWNlaG9sZGVyO1xuICAgIC8vIGhpZGVDbGVhckJ0bj10cnVlIG9ubHkgcGFzc2VkIGZvciBPQXV0aCBlbHNlIGl0cyB1bmRlZmluZWRcbiAgICBjb25zdCBlZmZlY3RpdmVJc0NsZWFyYWJsZSA9IGVmZmVjdGl2ZURpc2FibGVkID8gZmFsc2UgOiAhaGlkZUNsZWFyQnRuO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtjcmVhdGVTZWFyY2hDaG9pY2UgPyAoXG4gICAgICAgICAgICAgICAgPFN0eWxlZERpdiBjbGFzc05hbWU9XCJkcm9wZG93bkJveFwiPlxuICAgICAgICAgICAgICAgICAgICA8Q29tYm9Cb3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZSA9PT0gbnVsbCA/ICcnIDogcHJvcHMudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtmaWVsZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtlZmZlY3RpdmVQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtlZmZlY3RpdmVEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPiAwICYmIG9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIDwvQ29tYm9Cb3g+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWREaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkcm9wZG93bkJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3QtbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e2ZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2VmZmVjdGl2ZVBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2VmZmVjdGl2ZURpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj17IWRpc2FibGVTZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPiAwICYmIG9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0V3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAge2VmZmVjdGl2ZUlzQ2xlYXJhYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8Q2xlYXIgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcmVzdFByb3BzLmhhbmRsZUNoYW5nZShmaWVsZCwgJ1JFU0VUX1ZBTFVFJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cblNpbmdsZUlucHV0Q29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXBlbmRlbmN5VmFsdWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNvbnRyb2xPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBhdXRvQ29tcGxldGVGaWVsZHM6IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgZW5kcG9pbnRVcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGRlbnlMaXN0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBhbGxvd0xpc3Q6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgY3JlYXRlU2VhcmNoQ2hvaWNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgcmVmZXJlbmNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZGlzYWJsZVNlYXJjaDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGxhYmVsRmllbGQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGhpZGVDbGVhckJ0bjogUHJvcFR5cGVzLmJvb2wsXG4gICAgfSksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVJbnB1dENvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBNdWx0aXNlbGVjdCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL011bHRpc2VsZWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuaW1wb3J0IHsgYXhpb3NDYWxsV3JhcHBlciB9IGZyb20gJy4uL3V0aWwvYXhpb3NDYWxsV3JhcHBlcic7XG5pbXBvcnQgeyBmaWx0ZXJSZXNwb25zZSB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBnZXRGb3JtYXR0ZWRNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbC9tZXNzYWdlVXRpbCc7XG5cbmNvbnN0IE11bHRpU2VsZWN0V3JhcHBlciA9IHN0eWxlZChNdWx0aXNlbGVjdClgXG4gICAgd2lkdGg6IDMyMHB4ICFpbXBvcnRhbnQ7XG5gO1xuXG5mdW5jdGlvbiBNdWx0aUlucHV0Q29tcG9uZW50KHByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGNvbnRyb2xPcHRpb25zLFxuICAgICAgICBkZXBlbmRlbmN5VmFsdWVzLFxuICAgICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgICBlbmRwb2ludFVybCxcbiAgICAgICAgZGVueUxpc3QsXG4gICAgICAgIGFsbG93TGlzdCxcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgcmVmZXJlbmNlTmFtZSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGNyZWF0ZVNlYXJjaENob2ljZSxcbiAgICAgICAgbGFiZWxGaWVsZCxcbiAgICAgICAgZGVsaW1pdGVyID0gJywnLFxuICAgIH0gPSBjb250cm9sT3B0aW9ucztcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShlLCB7IHZhbHVlcyB9KSB7XG4gICAgICAgIHJlc3RQcm9wcy5oYW5kbGVDaGFuZ2UoZmllbGQsIHZhbHVlcy5qb2luKGRlbGltaXRlcikpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlT3B0aW9ucyhpdGVtTGlzdCkge1xuICAgICAgICByZXR1cm4gaXRlbUxpc3QubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TXVsdGlzZWxlY3QuT3B0aW9uIGxhYmVsPXtpdGVtLmxhYmVsfSB2YWx1ZT17aXRlbS52YWx1ZX0ga2V5PXtpdGVtLnZhbHVlfSAvPlxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVuZHBvaW50VXJsICYmIGl0ZW1zKSB7XG4gICAgICAgICAgICBzZXRPcHRpb25zKGdlbmVyYXRlT3B0aW9ucyhpdGVtcykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBheGlvcy5DYW5jZWxUb2tlbi5zb3VyY2UoKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGNhbmNlbFRva2VuOiBzb3VyY2UudG9rZW4sIGhhbmRsZUVycm9yOiB0cnVlLCBwYXJhbXM6IHsgY291bnQ6IC0xIH0gfTtcbiAgICAgICAgaWYgKHJlZmVyZW5jZU5hbWUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VydmljZU5hbWUgPSByZWZlcmVuY2VOYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50VXJsKSB7XG4gICAgICAgICAgICBvcHRpb25zLmVuZHBvaW50VXJsID0gZW5kcG9pbnRVcmw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVwZW5kZW5jeVZhbHVlcykge1xuICAgICAgICAgICAgb3B0aW9ucy5wYXJhbXMgPSB7IC4uLm9wdGlvbnMucGFyYW1zLCAuLi5kZXBlbmRlbmN5VmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXBlbmRlbmNpZXMgfHwgZGVwZW5kZW5jeVZhbHVlcykge1xuICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgICAgIGF4aW9zQ2FsbFdyYXBwZXIob3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJSZXNwb25zZShyZXNwb25zZS5kYXRhLmVudHJ5LCBsYWJlbEZpZWxkLCBhbGxvd0xpc3QsIGRlbnlMaXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBzb3VyY2UuY2FuY2VsKCdPcGVyYXRpb24gY2FuY2VsZWQuJyk7XG4gICAgICAgICAgICBjdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbZGVwZW5kZW5jeVZhbHVlc10pO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlRGlzYWJsZWQgPSBsb2FkaW5nID8gdHJ1ZSA6IGRpc2FibGVkO1xuICAgIGNvbnN0IGVmZmVjdGl2ZVBsYWNlaG9sZGVyID0gbG9hZGluZyA/IGdldEZvcm1hdHRlZE1lc3NhZ2UoMTE1KSA6IHBsYWNlaG9sZGVyO1xuXG4gICAgY29uc3QgdmFsdWVMaXN0ID0gdmFsdWUgPyB2YWx1ZS5zcGxpdChkZWxpbWl0ZXIpIDogW107XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8TXVsdGlTZWxlY3RXcmFwcGVyXG4gICAgICAgICAgICB2YWx1ZXM9e3ZhbHVlTGlzdH1cbiAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgIG5hbWU9e2ZpZWxkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2VmZmVjdGl2ZVBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2VmZmVjdGl2ZURpc2FibGVkfVxuICAgICAgICAgICAgYWxsb3dOZXdWYWx1ZXM9e2NyZWF0ZVNlYXJjaENob2ljZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBpbmxpbmVcbiAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPiAwICYmIG9wdGlvbnN9XG4gICAgICAgIDwvTXVsdGlTZWxlY3RXcmFwcGVyPlxuICAgICk7XG59XG5cbk11bHRpSW5wdXRDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGFuZGxlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlcGVuZGVuY3lWYWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY29udHJvbE9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGNyZWF0ZVNlYXJjaENob2ljZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIHJlZmVyZW5jZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGRlcGVuZGVuY2llczogUHJvcFR5cGVzLmFycmF5LFxuICAgICAgICBlbmRwb2ludFVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZGVueUxpc3Q6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFsbG93TGlzdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgbGFiZWxGaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgIH0pLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlJbnB1dENvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFN3aXRjaCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1N3aXRjaCc7XG5pbXBvcnQgeyBpc0ZhbHNlIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuY2xhc3MgQ2hlY2tCb3hDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGhhbmRsZUNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgJiYgIWlzRmFsc2UodGhpcy5wcm9wcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlQ2hhbmdlKHRoaXMucHJvcHMuZmllbGQsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVDaGFuZ2UodGhpcy5wcm9wcy5maWVsZCwgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgIGtleT17dGhpcy5wcm9wcy5maWVsZH1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5wcm9wcy5maWVsZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBzZWxlY3RlZD17ISh0aGlzLnByb3BzLnZhbHVlID8gaXNGYWxzZSh0aGlzLnByb3BzLnZhbHVlKSA6IHRydWUpfVxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuQ2hlY2tCb3hDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGVja0JveENvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJhZGlvQmFyIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvUmFkaW9CYXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmNvbnN0IFJhZGlvQmFyV3JhcHBlciA9IHN0eWxlZChSYWRpb0JhcilgXG4gICAgd2lkdGg6IDMyMHB4O1xuYDtcblxuY2xhc3MgUmFkaW9Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIGhhbmRsZUNoYW5nZSA9IChlLCB7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVDaGFuZ2UodGhpcy5wcm9wcy5maWVsZCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UmFkaW9CYXJXcmFwcGVyXG4gICAgICAgICAgICAgICAgaW5saW5lXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnByb3BzLnZhbHVlfVxuICAgICAgICAgICAgICAgIGtleT17dGhpcy5wcm9wcy5maWVsZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jb250cm9sT3B0aW9ucy5pdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFJhZGlvQmFyLk9wdGlvbiBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfSBsYWJlbD17aXRlbS5sYWJlbH0gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvUmFkaW9CYXJXcmFwcGVyPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuUmFkaW9Db21wb25lbnQucHJvcFR5cGVzID0ge1xuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJhZGlvQ29tcG9uZW50O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgU3RhdGljQ29udGVudCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1N0YXRpY0NvbnRlbnQnO1xuXG5mdW5jdGlvbiBQbGFjZWhvbGRlckNvbXBvbmVudChwcm9wcykge1xuICAgIGNvbnN0IHsgZGVmYXVsdFZhbHVlIH0gPSBwcm9wcy5jb250cm9sT3B0aW9ucztcblxuICAgIHJldHVybiA8U3RhdGljQ29udGVudD57ZGVmYXVsdFZhbHVlfTwvU3RhdGljQ29udGVudD47XG59XG5cblBsYWNlaG9sZGVyQ29tcG9uZW50LnByb3BUeXBlcyA9IHtcbiAgICBjb250cm9sT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBsYWNlaG9sZGVyQ29tcG9uZW50O1xuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBfIH0gZnJvbSAnQHNwbHVuay91aS11dGlscy9pMThuJztcblxuaW1wb3J0IHsgZ2V0VW5pZmllZENvbmZpZ3MgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgZ2V0QnVpbGREaXJQYXRoIH0gZnJvbSAnLi4vdXRpbC9zY3JpcHQnO1xuXG5jbGFzcyBDdXN0b21Db250cm9sIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNob3VsZFJlbmRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSBnbG9iYWxDb25maWcubWV0YS5uYW1lO1xuXG4gICAgICAgIHRoaXMubG9hZEN1c3RvbUNvbnRyb2woXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNvbnRyb2xPcHRpb25zLnNyYyxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY29udHJvbE9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgIGFwcE5hbWVcbiAgICAgICAgKS50aGVuKChDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Db250cm9sID0gbmV3IENvbnRyb2woXG4gICAgICAgICAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgICAgICAgIHRoaXMuZWwsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51dGlsQ3VzdG9tRnVuY3Rpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VzdG9tQ29udHJvbC5yZW5kZXIoKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXN0b21Db250cm9sLnZhbGlkYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmFkZEN1c3RvbVZhbGlkYXRvcih0aGlzLnByb3BzLmZpZWxkLCBjdXN0b21Db250cm9sLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICAgICAgaWYgKCFuZXh0U3RhdGUubG9hZGluZyAmJiB0aGlzLnNob3VsZFJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsb2FkQ3VzdG9tQ29udHJvbCA9IChtb2R1bGUsIHR5cGUsIGFwcE5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2V4dGVybmFsJykge1xuICAgICAgICAgICAgICAgIGltcG9ydCgvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovIGAke2dldEJ1aWxkRGlyUGF0aCgpfS9jdXN0b20vJHttb2R1bGV9LmpzYCkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgKGV4dGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250cm9sID0gZXh0ZXJuYWwuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQ29udHJvbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhbYGFwcC8ke2FwcE5hbWV9L2pzL2J1aWxkL2N1c3RvbS8ke21vZHVsZX1gXSwgKENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShDb250cm9sKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHNldFZhbHVlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMuaGFuZGxlQ2hhbmdlKHRoaXMucHJvcHMuZmllbGQsIG5ld1ZhbHVlKTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5sb2FkaW5nICYmIF8oJ0xvYWRpbmcuLi4nKX1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1uby1yZWZzLnJlYWN0LW5vLXJlZnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17KGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHZpc2liaWxpdHk6IHRoaXMuc3RhdGUubG9hZGluZyA/ICdoaWRkZW4nIDogJ3Zpc2libGUnIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5DdXN0b21Db250cm9sLnByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhhbmRsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY29udHJvbE9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgYWRkQ3VzdG9tVmFsaWRhdG9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB1dGlsQ3VzdG9tRnVuY3Rpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tQ29udHJvbDtcbiIsImltcG9ydCBIZWxwTGlua0NvbXBvbmVudCBmcm9tICcuLi9jb21wb25lbnRzL0hlbHBMaW5rQ29tcG9uZW50JztcbmltcG9ydCBUZXh0Q29tcG9uZW50IGZyb20gJy4uL2NvbXBvbmVudHMvVGV4dENvbXBvbmVudCc7XG5pbXBvcnQgU2luZ2xlSW5wdXRDb21wb25lbnQgZnJvbSAnLi4vY29tcG9uZW50cy9TaW5nbGVJbnB1dENvbXBvbmVudCc7XG5pbXBvcnQgTXVsdGlJbnB1dENvbXBvbmVudCBmcm9tICcuLi9jb21wb25lbnRzL011bHRpSW5wdXRDb21wb25lbnQnO1xuaW1wb3J0IENoZWNrQm94Q29tcG9uZW50IGZyb20gJy4uL2NvbXBvbmVudHMvQ2hlY2tCb3hDb21wb25lbnQnO1xuaW1wb3J0IFJhZGlvQ29tcG9uZW50IGZyb20gJy4uL2NvbXBvbmVudHMvUmFkaW9Db21wb25lbnQnO1xuaW1wb3J0IFBsYWNlaG9sZGVyQ29tcG9uZW50IGZyb20gJy4uL2NvbXBvbmVudHMvUGxhY2Vob2xkZXJDb21wb25lbnQnO1xuaW1wb3J0IEN1c3RvbUNvbnRyb2wgZnJvbSAnLi4vY29tcG9uZW50cy9DdXN0b21Db250cm9sJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHRleHQ6IFRleHRDb21wb25lbnQsXG4gICAgc2luZ2xlU2VsZWN0OiBTaW5nbGVJbnB1dENvbXBvbmVudCxcbiAgICBoZWxwTGluazogSGVscExpbmtDb21wb25lbnQsXG4gICAgbXVsdGlwbGVTZWxlY3Q6IE11bHRpSW5wdXRDb21wb25lbnQsXG4gICAgY2hlY2tib3g6IENoZWNrQm94Q29tcG9uZW50LFxuICAgIHJhZGlvOiBSYWRpb0NvbXBvbmVudCxcbiAgICBwbGFjZWhvbGRlcjogUGxhY2Vob2xkZXJDb21wb25lbnQsXG4gICAgY3VzdG9tOiBDdXN0b21Db250cm9sLFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IENvbnRyb2xHcm91cCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0NvbnRyb2xHcm91cCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IE1hcmtkb3duTWVzc2FnZSBmcm9tICcuL01hcmtkb3duTWVzc2FnZSc7XG5pbXBvcnQgQ09OVFJPTF9UWVBFX01BUCBmcm9tICcuLi9jb25zdGFudHMvQ29udHJvbFR5cGVNYXAnO1xuXG5jb25zdCBDdXN0b21FbGVtZW50ID0gc3R5bGVkLmRpdmBcbiAgICBtYXJnaW4tbGVmdDogMzBweDtcbmA7XG5cbmNvbnN0IENvbnRyb2xHcm91cFdyYXBwZXIgPSBzdHlsZWQoQ29udHJvbEdyb3VwKS5hdHRycygocHJvcHMpID0+ICh7XG4gICAgJ2RhdGEtbmFtZSc6IHByb3BzLmRhdGFOYW1lLFxufSkpYFxuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcblxuICAgID4gKiB7XG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgd2lkdGg6IDI0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDI3MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB3aWR0aDogMzIwcHg7XG4gICAgICAgIH1cbiAgICB9XG5gO1xuXG5jbGFzcyBDb250cm9sV3JhcHBlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5jb250cm9sVHlwZSA9IHRoaXMuaXNTdHJpbmcocHJvcHMuZW50aXR5LnR5cGUpXG4gICAgICAgICAgICA/IENPTlRST0xfVFlQRV9NQVBbcHJvcHMuZW50aXR5LnR5cGVdXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgaXNTdHJpbmcgPSAoc3RyKSA9PiB7XG4gICAgICAgIHJldHVybiAhISh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyB8fCBzdHIgaW5zdGFuY2VvZiBTdHJpbmcpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQsIHR5cGUsIGxhYmVsLCB0b29sdGlwLCBoZWxwLCBlbmNyeXB0ZWQgPSBmYWxzZSB9ID0gdGhpcy5wcm9wcy5lbnRpdHk7XG4gICAgICAgIGNvbnN0IHsgaGFuZGxlQ2hhbmdlLCBhZGRDdXN0b21WYWxpZGF0b3IsIHV0aWxDdXN0b21GdW5jdGlvbnMgfSA9IHRoaXMucHJvcHMudXRpbGl0eUZ1bmN0cztcbiAgICAgICAgLy8gV2UgaGF2ZSB0byBwdXQgZW1wdHkgb2JqZWN0IGJlY2F1c2UgbWFya0Rvd25NZXNzYWdlIHByb3AgY2FuIGJlIHVuZGVmaW5lZFxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFyZSBub3QgZXhwbGljaXRseSBzZXR0aW5nIGl0IGJ1dCBleHBlY3RpbmcgaXQgZnJvbSBjdXN0b20gaG9va3Mgb25seS5cbiAgICAgICAgY29uc3QgeyB0ZXh0LCBsaW5rLCBjb2xvciwgbWFya2Rvd25UeXBlLCB0b2tlbiwgbGlua1RleHQgfSA9XG4gICAgICAgICAgICB0aGlzLnByb3BzLm1hcmtkb3duTWVzc2FnZSB8fCB7fTtcbiAgICAgICAgbGV0IHJvd1ZpZXc7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmVudGl0eS50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiB0aGlzLnByb3BzLm1vZGUsXG4gICAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHRoaXMucHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByb3dWaWV3ID0gdGhpcy5jb250cm9sVHlwZVxuICAgICAgICAgICAgICAgID8gUmVhY3QuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRyb2xUeXBlLCB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGFkZEN1c3RvbVZhbGlkYXRvcixcbiAgICAgICAgICAgICAgICAgICAgdXRpbEN1c3RvbUZ1bmN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE9wdGlvbnM6IHRoaXMucHJvcHMuZW50aXR5Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGBObyBWaWV3IEZvdW5kIGZvciAke3R5cGV9IHR5cGVgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93VmlldyA9IHRoaXMuY29udHJvbFR5cGVcbiAgICAgICAgICAgICAgICA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQodGhpcy5jb250cm9sVHlwZSwge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE9wdGlvbnM6IHRoaXMucHJvcHMuZW50aXR5Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiB0aGlzLnByb3BzLmVycm9yLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGVkLFxuICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5VmFsdWVzOiB0aGlzLnByb3BzLmRlcGVuZGVuY3lWYWx1ZXMsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGBObyBWaWV3IEZvdW5kIGZvciAke3R5cGV9IHR5cGVgO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVscFRleHQgPSAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxNYXJrZG93bk1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgdGV4dD17dGV4dCB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgbGluaz17bGluayB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e2NvbG9yIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICBtYXJrZG93blR5cGU9e21hcmtkb3duVHlwZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgdG9rZW49e3Rva2VuIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICBsaW5rVGV4dD17bGlua1RleHQgfHwgJyd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGVscH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmRpc3BsYXkgJiYgKFxuICAgICAgICAgICAgICAgIDxDb250cm9sR3JvdXBXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgaGVscD17aGVscFRleHR9XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9e3Rvb2x0aXB9XG4gICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLnByb3BzLmVycm9yfVxuICAgICAgICAgICAgICAgICAgICBkYXRhTmFtZT17ZmllbGR9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q3VzdG9tRWxlbWVudD57cm93Vmlld308L0N1c3RvbUVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Db250cm9sR3JvdXBXcmFwcGVyPlxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cblxuQ29udHJvbFdyYXBwZXIucHJvcFR5cGVzID0ge1xuICAgIG1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdXRpbGl0eUZ1bmN0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBkaXNwbGF5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgZW50aXR5OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtYXJrZG93bk1lc3NhZ2U6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc2VydmljZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVwZW5kZW5jeVZhbHVlczogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRyb2xXcmFwcGVyO1xuIiwiaW1wb3J0IHsgZ2V0Rm9ybWF0dGVkTWVzc2FnZSB9IGZyb20gJy4uL3V0aWwvbWVzc2FnZVV0aWwnO1xuXG4vLyBSZWdleCBvZiBpcHY0LCBlbWFpbCBhbmQgZGF0ZSBjb21lIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGRlZWQvbWV0ZW9yLXNpbXBsZS1zY2hlbWEvYmxvYi80YzFlMjU3MGIxMDU1YWQ2MGUxZTY1NDA1ODJiODgyZjc2NWZkZTEzL3NpbXBsZS1zY2hlbWEuanMjTDUyNVxuZXhwb3J0IGNvbnN0IFJFR0VYX0lQVjQgPSAvXig/Oig/OlswLTFdP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSg/OlxcLnwkKSl7NH0kLztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5leHBvcnQgY29uc3QgUkVHRVhfRU1BSUwgPSAvXlthLXpBLVowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcblxuLy8gQ29kZVFMOiBUaGlzIFJlZ2V4IHdpbGwgYmUgZXhlY3V0ZWQgYXQgY2xpZW50IHNpZGUgYW5kIHRvIGF2b2lkIHJlZ3Jlc3Npb24gd2Ugd29uJ3QgZml4LlxuZXhwb3J0IGNvbnN0IFJFR0VYX1VSTCA9IC9eKD86KD86aHR0cHM/fGZ0cHxvcGNcXC50Y3ApOlxcL1xcLyk/KD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPzpbMS05XVxcZD98MVxcZFxcZHwyWzAxXVxcZHwyMlswLTNdKSg/OlxcLig/OjE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pKXsyfSg/OlxcLig/OlsxLTldXFxkP3wxXFxkXFxkfDJbMC00XVxcZHwyNVswLTRdKSl8KD86KD86W2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0rLT9fPykqW2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0rKSg/OlxcLig/OlthLXpcXHUwMGExLVxcdWZmZmYwLTldKy0/KSpbYS16XFx1MDBhMS1cXHVmZmZmMC05XSspKig/OlxcLig/OlthLXpcXHUwMGExLVxcdWZmZmZdezIsfSkpPykoPzo6XFxkezIsNX0pPyg/OlxcL1teXFxzXSopPyQvO1xuXG4vLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2Jsb2IvMi4xNy4xL21vbWVudC5qcyNMMTk4MCBtb21lbnQuanMgaXMgdXNpbmcgcmVnZXggYmVsb3cgZm9yIGNoZWNraW5nIElTTzg2MDEgZGF0ZSBzdHJpbmdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuZXhwb3J0IGNvbnN0IFJFR0VYX0RBVEUgPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC87XG5cbmV4cG9ydCBjb25zdCBQUkVERUZJTkVEX1ZBTElEQVRPUlNfRElDVCA9IHtcbiAgICB1cmw6IHsgcmVnZXg6IFJFR0VYX1VSTCwgaW5wdXRWYWx1ZVR5cGU6IGdldEZvcm1hdHRlZE1lc3NhZ2UoMTExKSB9LFxuICAgIGVtYWlsOiB7IHJlZ2V4OiBSRUdFWF9FTUFJTCwgaW5wdXRWYWx1ZVR5cGU6IGdldEZvcm1hdHRlZE1lc3NhZ2UoMTEyKSB9LFxuICAgIGlwdjQ6IHsgcmVnZXg6IFJFR0VYX0lQVjQsIGlucHV0VmFsdWVUeXBlOiBnZXRGb3JtYXR0ZWRNZXNzYWdlKDExMykgfSxcbiAgICBkYXRlOiB7IHJlZ2V4OiBSRUdFWF9EQVRFLCBpbnB1dFZhbHVlVHlwZTogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxMTQpIH0sXG59O1xuIiwiaW1wb3J0IHsgUFJFREVGSU5FRF9WQUxJREFUT1JTX0RJQ1QgfSBmcm9tICcuLi9jb25zdGFudHMvcHJlRGVmaW5lZFJlZ2V4JztcbmltcG9ydCB7IGdldEZvcm1hdHRlZE1lc3NhZ2UgfSBmcm9tICcuL21lc3NhZ2VVdGlsJztcbmltcG9ydCB7XG4gICAgcGFyc2VOdW1iZXJWYWxpZGF0b3IsXG4gICAgcGFyc2VSZWdleFJhd1N0cixcbiAgICBwYXJzZVN0cmluZ1ZhbGlkYXRvcixcbiAgICBwYXJzZUZ1bmN0aW9uUmF3U3RyLFxufSBmcm9tICcuL3VjY0NvbmZpZ3VyYXRpb25WYWxpZGF0b3JzJztcblxuLy8gVmFsaWRhdGUgcHJvdmlkZWQgc2F2ZVZhbGlkYXRvciBmdW5jdGlvblxuZXhwb3J0IGZ1bmN0aW9uIFNhdmVWYWxpZGF0b3IodmFsaWRhdG9yRnVuYywgZm9ybURhdGEpIHtcbiAgICBjb25zdCB7IGVycm9yLCByZXN1bHQgfSA9IHBhcnNlRnVuY3Rpb25SYXdTdHIodmFsaWRhdG9yRnVuYyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB7IGVycm9yTXNnOiBlcnJvciB9O1xuICAgIH1cbiAgICBjb25zdCByZXQgPSByZXN1bHQoZm9ybURhdGEpO1xuICAgIGlmICh0eXBlb2YgcmV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4geyBlcnJvck1zZzogcmV0IH07XG4gICAgfVxufVxuXG5jbGFzcyBWYWxpZGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGVudGl0aWVzKSB7XG4gICAgICAgIHRoaXMuZW50aXRpZXMgPSBlbnRpdGllcztcbiAgICAgICAgdGhpcy5pc05hbWUgPSBlbnRpdGllcy5maW5kKChlKSA9PiBlLmZpZWxkID09PSAnbmFtZScpO1xuICAgIH1cblxuICAgIGNoZWNrSXNGaWVsZEhhc0lucHV0ID0gKGF0dHJWYWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gYXR0clZhbHVlICE9PSB1bmRlZmluZWQgJiYgYXR0clZhbHVlICE9PSAnJyAmJiBhdHRyVmFsdWUgIT09IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSByZXF1aXJlZCBmaWVsZCBoYXMgdmFsdWVcbiAgICBSZXF1aXJlZFZhbGlkYXRvcihmaWVsZCwgbGFiZWwsIGRhdGEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXNGaWVsZEhhc0lucHV0KGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvckZpZWxkOiBmaWVsZCwgZXJyb3JNc2c6IGdldEZvcm1hdHRlZE1lc3NhZ2UoNiwgW2xhYmVsXSkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHN0cmluZyBsZW5ndGggb2YgZmllbGRcbiAgICBTdHJpbmdWYWxpZGF0b3IoZmllbGQsIGxhYmVsLCB2YWxpZGF0b3IsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcGFyc2VTdHJpbmdWYWxpZGF0b3IodmFsaWRhdG9yLm1pbkxlbmd0aCwgdmFsaWRhdG9yLm1heExlbmd0aCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3JGaWVsZDogZmllbGQsIGVycm9yTXNnOiBlcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSXNGaWVsZEhhc0lucHV0KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gdmFsaWRhdG9yLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvckZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBlcnJvck1zZzogdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgID8gdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxOCwgW2xhYmVsLCB2YWxpZGF0b3IubWF4TGVuZ3RoXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSXNGaWVsZEhhc0lucHV0KGRhdGEpICYmIGRhdGEubGVuZ3RoIDwgdmFsaWRhdG9yLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvckZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBlcnJvck1zZzogdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgID8gdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxNywgW2xhYmVsLCB2YWxpZGF0b3IubWluTGVuZ3RoXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZmllbGQgc2hvdWxkIG1hdGNoIHRoZSBwcm92aWRlZCBSZWdleFxuICAgIFJlZ2V4VmFsaWRhdG9yKGZpZWxkLCBsYWJlbCwgdmFsaWRhdG9yLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHsgZXJyb3IsIHJlc3VsdDogcmVnZXggfSA9IHBhcnNlUmVnZXhSYXdTdHIodmFsaWRhdG9yLnBhdHRlcm4pO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yRmllbGQ6IGZpZWxkLCBlcnJvck1zZzogZXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaGVja0lzRmllbGRIYXNJbnB1dChkYXRhKSAmJiAhcmVnZXgudGVzdChkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvckZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBlcnJvck1zZzogdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgID8gdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxNSwgW2xhYmVsLCB2YWxpZGF0b3IucGF0dGVybl0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGN1c3RvbSBjb21wb25lbnRcbiAgICBzdGF0aWMgQ3VzdG9tVmFsaWRhdG9yKHZhbGlkYXRvckZ1bmMsIGZpZWxkLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHZhbGlkYXRvckZ1bmMoZmllbGQsIGRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yRmllbGQ6IGZpZWxkLCBlcnJvck1zZzogcmV0IH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWVsZCBzaG91bGQgbWF0Y2ggcHJlZGVmaW5lZCBSZWdleGVzXG4gICAgUHJlRGVmaW5lZFJlZ2V4VmFsaWRhdG9yKGZpZWxkLCBsYWJlbCwgdmFsaWRhdG9yLCBkYXRhLCBwYXR0ZXJuLCBpbnB1dFZhbHVlVHlwZSkge1xuICAgICAgICBjb25zdCB7IGVycm9yLCByZXN1bHQ6IHJlZ2V4IH0gPSBwYXJzZVJlZ2V4UmF3U3RyKHBhdHRlcm4pO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yRmllbGQ6IGZpZWxkLCBlcnJvck1zZzogZXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaGVja0lzRmllbGRIYXNJbnB1dChkYXRhKSAmJiAhcmVnZXgudGVzdChkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvckZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBlcnJvck1zZzogdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgID8gdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxOSwgW2xhYmVsLCBpbnB1dFZhbHVlVHlwZV0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHJhbmdlIG9mIG51bWVyaWMgZmllbGRcbiAgICBOdW1iZXJWYWxpZGF0b3IoZmllbGQsIGxhYmVsLCB2YWxpZGF0b3IsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcGFyc2VOdW1iZXJWYWxpZGF0b3IodmFsaWRhdG9yLnJhbmdlKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvckZpZWxkOiBmaWVsZCwgZXJyb3JNc2c6IGVycm9yIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWwgPSBOdW1iZXIoZGF0YSk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvckZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBlcnJvck1zZzogdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgID8gdmFsaWRhdG9yLmVycm9yTXNnXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxNiwgW2xhYmVsXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICh0aGlzLmNoZWNrSXNGaWVsZEhhc0lucHV0KGRhdGEpICYmIHZhbCA+IHZhbGlkYXRvci5yYW5nZVsxXSkgfHxcbiAgICAgICAgICAgIHZhbCA8IHZhbGlkYXRvci5yYW5nZVswXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXJyb3JGaWVsZDogZmllbGQsXG4gICAgICAgICAgICAgICAgZXJyb3JNc2c6IHZhbGlkYXRvci5lcnJvck1zZ1xuICAgICAgICAgICAgICAgICAgICA/IHZhbGlkYXRvci5lcnJvck1zZ1xuICAgICAgICAgICAgICAgICAgICA6IGdldEZvcm1hdHRlZE1lc3NhZ2UoOCwgW2xhYmVsLCB2YWxpZGF0b3IucmFuZ2VbMF0sIHZhbGlkYXRvci5yYW5nZVsxXV0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZG9WYWxpZGF0aW9uKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IGRhdGEubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVGaWVsZExhYmVsID0gdGhpcy5pc05hbWUubGFiZWw7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0VmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHRhcmdldFZhbHVlID09PSAnJyB8fCB0YXJnZXRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3JGaWVsZDogJ25hbWUnLCBlcnJvck1zZzogZ2V0Rm9ybWF0dGVkTWVzc2FnZSgwLCBbbmFtZUZpZWxkTGFiZWxdKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJyB8fCB0YXJnZXRWYWx1ZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckZpZWxkOiAnbmFtZScsIGVycm9yTXNnOiBnZXRGb3JtYXR0ZWRNZXNzYWdlKDEsIFtuYW1lRmllbGRMYWJlbF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUuc3RhcnRzV2l0aCgnXycpIHx8XG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2RlZmF1bHQnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckZpZWxkOiAnbmFtZScsIGVycm9yTXNnOiBnZXRGb3JtYXR0ZWRNZXNzYWdlKDMsIFtuYW1lRmllbGRMYWJlbF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWdleE1ldGFDaGFyYWN0ZXJzID0gWycqJywgJ1xcXFwnLCAnWycsICddJywgJygnLCAnKScsICc/JywgJzonXTtcbiAgICAgICAgICAgIGlmIChyZWdleE1ldGFDaGFyYWN0ZXJzLnNvbWUoKGQpID0+IHRhcmdldFZhbHVlLmluZGV4T2YoZCkgPiAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvckZpZWxkOiAnbmFtZScsIGVycm9yTXNnOiBnZXRGb3JtYXR0ZWRNZXNzYWdlKDMsIFtuYW1lRmllbGRMYWJlbF0pIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZS5sZW5ndGggPj0gMTAyNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yRmllbGQ6ICduYW1lJywgZXJyb3JNc2c6IGdldEZvcm1hdHRlZE1lc3NhZ2UoMjIsIFtuYW1lRmllbGRMYWJlbF0pIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0O1xuICAgICAgICBsZXQgaTtcbiAgICAgICAgbGV0IGo7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZW50aXRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVudGl0aWVzW2ldLnJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5SZXF1aXJlZFZhbGlkYXRvcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVt0aGlzLmVudGl0aWVzW2ldLmZpZWxkXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhW3RoaXMuZW50aXRpZXNbaV0uZmllbGRdID09PSAnJyB8fCBkYXRhW3RoaXMuZW50aXRpZXNbaV0uZmllbGRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbnRpdGllc1tpXS52YWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuZW50aXRpZXNbaV0udmFsaWRhdG9ycy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZW50aXRpZXNbaV0udmFsaWRhdG9yc1tqXS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuU3RyaW5nVmFsaWRhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW2ldLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW2ldLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW2ldLnZhbGlkYXRvcnNbal0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbdGhpcy5lbnRpdGllc1tpXS5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWdleCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5SZWdleFZhbGlkYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS52YWxpZGF0b3JzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3RoaXMuZW50aXRpZXNbaV0uZmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzLk51bWJlclZhbGlkYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS52YWxpZGF0b3JzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3RoaXMuZW50aXRpZXNbaV0uZmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzLlByZURlZmluZWRSZWdleFZhbGlkYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS52YWxpZGF0b3JzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3RoaXMuZW50aXRpZXNbaV0uZmllbGRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVERUZJTkVEX1ZBTElEQVRPUlNfRElDVC51cmwucmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRURFRklORURfVkFMSURBVE9SU19ESUNULnVybC5pbnB1dFZhbHVlVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuUHJlRGVmaW5lZFJlZ2V4VmFsaWRhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW2ldLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW2ldLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzW2ldLnZhbGlkYXRvcnNbal0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbdGhpcy5lbnRpdGllc1tpXS5maWVsZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRURFRklORURfVkFMSURBVE9SU19ESUNULmRhdGUucmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRURFRklORURfVkFMSURBVE9SU19ESUNULmRhdGUuaW5wdXRWYWx1ZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5QcmVEZWZpbmVkUmVnZXhWYWxpZGF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0udmFsaWRhdG9yc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVt0aGlzLmVudGl0aWVzW2ldLmZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFREVGSU5FRF9WQUxJREFUT1JTX0RJQ1QuZW1haWwucmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRURFRklORURfVkFMSURBVE9SU19ESUNULmVtYWlsLmlucHV0VmFsdWVUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaXB2NCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5QcmVEZWZpbmVkUmVnZXhWYWxpZGF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0udmFsaWRhdG9yc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVt0aGlzLmVudGl0aWVzW2ldLmZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFREVGSU5FRF9WQUxJREFUT1JTX0RJQ1QuaXB2NC5yZWdleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFREVGSU5FRF9WQUxJREFUT1JTX0RJQ1QuaXB2NC5pbnB1dFZhbHVlVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gVmFsaWRhdG9yLkN1c3RvbVZhbGlkYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc1tpXS52YWxpZGF0b3JzW2pdLnZhbGlkYXRvckZ1bmMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNbaV0uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbdGhpcy5lbnRpdGllc1tpXS5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbGlkYXRvcjtcbiIsImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB1cGRhdGUgZnJvbSAnaW1tdXRhYmlsaXR5LWhlbHBlcic7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IENvbGxhcHNpYmxlUGFuZWwgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9Db2xsYXBzaWJsZVBhbmVsJztcbmltcG9ydCBNZXNzYWdlIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvTWVzc2FnZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IENvbnRyb2xXcmFwcGVyIGZyb20gJy4vQ29udHJvbFdyYXBwZXInO1xuaW1wb3J0IFZhbGlkYXRvciwgeyBTYXZlVmFsaWRhdG9yIH0gZnJvbSAnLi4vdXRpbC9WYWxpZGF0b3InO1xuaW1wb3J0IHsgZ2V0VW5pZmllZENvbmZpZ3MsIGdlbmVyYXRlVG9hc3QgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgTU9ERV9DTE9ORSwgTU9ERV9DUkVBVEUsIE1PREVfRURJVCwgTU9ERV9DT05GSUcgfSBmcm9tICcuLi9jb25zdGFudHMvbW9kZXMnO1xuaW1wb3J0IHsgUEFHRV9JTlBVVCwgUEFHRV9DT05GIH0gZnJvbSAnLi4vY29uc3RhbnRzL3BhZ2VzJztcbmltcG9ydCB7IGF4aW9zQ2FsbFdyYXBwZXIgfSBmcm9tICcuLi91dGlsL2F4aW9zQ2FsbFdyYXBwZXInO1xuaW1wb3J0IHsgcGFyc2VFcnJvck1zZywgZ2V0Rm9ybWF0dGVkTWVzc2FnZSB9IGZyb20gJy4uL3V0aWwvbWVzc2FnZVV0aWwnO1xuaW1wb3J0IHsgZ2V0QnVpbGREaXJQYXRoIH0gZnJvbSAnLi4vdXRpbC9zY3JpcHQnO1xuXG5pbXBvcnQge1xuICAgIEVSUk9SX1JFUVVFU1RfVElNRU9VVF9UUllfQUdBSU4sXG4gICAgRVJST1JfUkVRVUVTVF9USU1FT1VUX0FDQ0VTU19UT0tFTl9UUllfQUdBSU4sXG4gICAgRVJST1JfT0NDVVJSRURfVFJZX0FHQUlOLFxuICAgIEVSUk9SX0FVVEhfUFJPQ0VTU19URVJNSU5BVEVEX1RSWV9BR0FJTixcbiAgICBFUlJPUl9TVEFURV9NSVNTSU5HX1RSWV9BR0FJTixcbn0gZnJvbSAnLi4vY29uc3RhbnRzL29BdXRoRXJyb3JNZXNzYWdlJztcbmltcG9ydCBUYWJsZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9UYWJsZUNvbnRleHQnO1xuXG5jb25zdCBDb2xsYXBzaWJsZVBhbmVsV3JhcHBlciA9IHN0eWxlZChDb2xsYXBzaWJsZVBhbmVsKWBcbiAgICBzcGFuIHtcbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7XG5cbiAgICAgICAgICAgICY6aG92ZXI6bm90KFtkaXNhYmxlZF0pLFxuICAgICAgICAgICAgJjpmb2N1czpub3QoW2Rpc2FibGVkXSksXG4gICAgICAgICAgICAmOmFjdGl2ZTpub3QoW2Rpc2FibGVkXSkge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY29sbGFwc2libGUtZWxlbWVudCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICAgIH1cbmA7XG5cbmNvbnN0IEN1c3RvbUdyb3VwTGFiZWwgPSBzdHlsZWQuZGl2YFxuICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmY0ZjU7XG5gO1xuXG5jbGFzcyBCYXNlRm9ybVZpZXcgZXh0ZW5kcyBQdXJlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBUYWJsZUNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcywgY29udGV4dCkge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIC8vIGZsYWcgZm9yIHRvIHJlbmRlciBob29rIG1ldGhvZCBmb3Igb25jZVxuICAgICAgICB0aGlzLmZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXRlID0ge307XG4gICAgICAgIHRoaXMuY3VycmVudElucHV0ID0ge307XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgICAgIHRoaXMuYXBwTmFtZSA9IGdsb2JhbENvbmZpZy5tZXRhLm5hbWU7XG4gICAgICAgIHRoaXMuZW5kcG9pbnQgPVxuICAgICAgICAgICAgcHJvcHMubW9kZSA9PT0gTU9ERV9FRElUIHx8IHByb3BzLm1vZGUgPT09IE1PREVfQ09ORklHXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLnByb3BzLnNlcnZpY2VOYW1lfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnByb3BzLnN0YW56YU5hbWUpfWBcbiAgICAgICAgICAgICAgICA6IGAke3RoaXMucHJvcHMuc2VydmljZU5hbWV9YDtcblxuICAgICAgICB0aGlzLnV0aWwgPSB7XG4gICAgICAgICAgICBzZXRTdGF0ZTogKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNhdmVQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHByZXZpb3VzU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9LCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRFcnJvckZpZWxkTXNnOiB0aGlzLnNldEVycm9yRmllbGRNc2csXG4gICAgICAgICAgICBjbGVhckFsbEVycm9yTXNnOiB0aGlzLmNsZWFyQWxsRXJyb3JNc2csXG4gICAgICAgICAgICBzZXRFcnJvck1zZzogdGhpcy5zZXRFcnJvck1zZyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnV0aWxDb250cm9sV3JhcHBlciA9IHtcbiAgICAgICAgICAgIGhhbmRsZUNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgICBhZGRDdXN0b21WYWxpZGF0b3I6IHRoaXMuYWRkQ3VzdG9tVmFsaWRhdG9yLFxuICAgICAgICAgICAgdXRpbEN1c3RvbUZ1bmN0aW9uczogdGhpcy51dGlsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwcm9wcy5wYWdlID09PSBQQUdFX0lOUFVUKSB7XG4gICAgICAgICAgICBnbG9iYWxDb25maWcucGFnZXMuaW5wdXRzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5uYW1lID09PSBwcm9wcy5zZXJ2aWNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwcyA9IHNlcnZpY2UuZ3JvdXBzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzID0gc2VydmljZS5lbnRpdHk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRW50aXRpZXNGb3JHcm91cChzZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gc2VydmljZS5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5ob29rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2tEZWZlcnJlZCA9IHRoaXMubG9hZEhvb2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5ob29rLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLmhvb2sudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLm1vZGUgPT09IE1PREVfRURJVCB8fCBwcm9wcy5tb2RlID09PSBNT0RFX0NMT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnB1dCA9IGNvbnRleHQucm93RGF0YVtwcm9wcy5zZXJ2aWNlTmFtZV1bcHJvcHMuc3RhbnphTmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbENvbmZpZy5wYWdlcy5jb25maWd1cmF0aW9uLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhZyA9IHRhYi50YWJsZVxuICAgICAgICAgICAgICAgICAgICA/IHRhYi5uYW1lID09PSBwcm9wcy5zZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICA6IHRhYi5uYW1lID09PSBwcm9wcy5zdGFuemFOYW1lICYmIHByb3BzLnNlcnZpY2VOYW1lID09PSAnc2V0dGluZ3MnO1xuICAgICAgICAgICAgICAgIGlmIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXMgPSB0YWIuZW50aXR5O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0YWIub3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhYi5ob29rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2tEZWZlcnJlZCA9IHRoaXMubG9hZEhvb2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiLmhvb2suc3JjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYi5ob29rLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWIudGFibGUgJiYgKHByb3BzLm1vZGUgPT09IE1PREVfRURJVCB8fCBwcm9wcy5tb2RlID09PSBNT0RFX0NMT05FKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5wdXQgPSBjb250ZXh0LnJvd0RhdGFbcHJvcHMuc2VydmljZU5hbWVdW3Byb3BzLnN0YW56YU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLm1vZGUgPT09IE1PREVfQ09ORklHKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnB1dCA9IHByb3BzLmN1cnJlbnRTZXJ2aWNlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVfY29uZmlnX3RpdGxlID0gdGFiLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5wdXQgPSBjb250ZXh0LnJvd0RhdGFbcHJvcHMuc2VydmljZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5TWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmlzT0F1dGggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0F1dGhWYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRoTWFwID0ge307XG4gICAgICAgIGxldCB0ZW1TdGF0ZSA9IHt9O1xuICAgICAgICBjb25zdCB0ZW1FbnRpdGllcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuZW50aXRpZXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ29hdXRoJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPQXV0aCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLnBhZ2UgPT09IFBBR0VfQ09ORiAmJiBwcm9wcy5zZXJ2aWNlTmFtZSA9PT0gJ2FjY291bnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhUeXBlID0gZT8ub3B0aW9ucz8uYXV0aF90eXBlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzb2F1dGhTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZT8ub3B0aW9ucz8ub2F1dGhfc3RhdGVfZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGU/Lm9wdGlvbnM/Lm9hdXRoX3N0YXRlX2VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhUeXBlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBdXRoVmFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluaW5nIHN0YXRlIGZvciBhdXRoX3R5cGUgaW4gY2FzZSBvZiBtdWx0aXBsZSBBdXRoZW50aWNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcEVudGl0eSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuY3VycmVudElucHV0LmF1dGhfdHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmN1cnJlbnRJbnB1dC5hdXRoX3R5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhdXRoVHlwZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1TdGF0ZS5hdXRoX3R5cGUgPSB0ZW1wRW50aXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmluZyBFbnRpdHkgZm9yIGF1dGhfdHlwZSBpbiBlbnRpdHlsaXN0IG9mIGdsb2JhbENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkuZmllbGQgPSAnYXV0aF90eXBlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS50eXBlID0gJ3NpbmdsZVNlbGVjdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkubGFiZWwgPSAnQXV0aCBUeXBlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWM6ICdCYXNpYyBBdXRoZW50aWNhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGg6ICdPQXV0aCAyLjAgQXV0aGVudGljYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5vcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHkub3B0aW9ucy5oaWRlQ2xlYXJCdG4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5Lm9wdGlvbnMuYXV0b0NvbXBsZXRlRmllbGRzID0gYXV0aFR5cGUubWFwKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGNvbnRlbnRbdHlwZV0sIHZhbHVlOiB0eXBlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbUVudGl0aWVzLnB1c2goZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaW5nbGVPYXV0aCA9IGF1dGhUeXBlLmluY2x1ZGVzKCdvYXV0aCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIFN0YXRlIGFuZCBFbnRpdHkoaW4gZW50aXR5bGlzdCkgZm9yIGV2ZXJ5IEZpZWxkcyBvZiBcIm9hdXRoXCIgdHlwZVxuICAgICAgICAgICAgICAgICAgICAvLyBJdGVyYXRpbmcgb3ZlciBldmVyeXR5cGUgb2YgQXV0aGVudGljYXRpb24gdW5kZXIgXCJvYXV0aFwiIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgYXV0aFR5cGUuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0aGZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gZT8ub3B0aW9uc1t0eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgUGFydGljYXVsYXIgdHlwZSBpdGVyYXRpbmcgb3ZlciBmaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgZmllbGQgZm9yIGF1dGggdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRW50aXR5ID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLm1vZGUgPT09IE1PREVfQ1JFQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LnZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZmllbGQ/LmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmaWVsZC5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFbmNyeXB0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmaWVsZD8uZW5jcnlwdGVkICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZpZWxkPy5lbmNyeXB0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkudmFsdWUgPSBpc0VuY3J5cHRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY3VycmVudElucHV0W2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc3BsYXkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRlbVN0YXRlLmF1dGhfdHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHR5cGUgPT09IHRlbVN0YXRlLmF1dGhfdHlwZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS5lcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbVN0YXRlW2ZpZWxkLmZpZWxkXSA9IHRlbXBFbnRpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmaWVsZD8udHlwZSAhPT0gJ3VuZGVmaW5lZCcgPyBmaWVsZC50eXBlIDogJ3RleHQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZWQgc3BlY2lhbCBjYXNlIGZvciByZWRpcmVjdF91cmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkID09PSAncmVkaXJlY3RfdXJsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS52YWx1ZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCc/JylbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmFwcE5hbWUudG9Mb3dlckNhc2UoKX1fcmVkaXJlY3RgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbUVudGl0aWVzLnB1c2goZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZmllbGRzLnB1c2goZmllbGQuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hcFt0eXBlXSA9IGF1dGhmaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aFR5cGUuaW5jbHVkZXMoJ29hdXRoJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9hdXRoQ29uZkRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3JpbmcgTy1BdXRoIENvbmZpZ3VyYXRpb24gZGF0YSB0byBjbGFzcyB2YXJpYWJsZSB0byB1c2UgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9hdXRoQ29uZkRhdGEucG9wdXBXaWR0aCA9IGUub3B0aW9ucy5vYXV0aF9wb3B1cF93aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5vcHRpb25zLm9hdXRoX3BvcHVwX3dpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYXV0aENvbmZEYXRhLnBvcHVwSGVpZ2h0ID0gZS5vcHRpb25zLm9hdXRoX3BvcHVwX2hlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5vcHRpb25zLm9hdXRoX3BvcHVwX2hlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhDb25mRGF0YS5hdXRoVGltZW91dCA9IGUub3B0aW9ucy5vYXV0aF90aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLm9wdGlvbnMub2F1dGhfdGltZW91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2F1dGhDb25mRGF0YS5hdXRoQ29kZUVuZHBvaW50ID0gZS5vcHRpb25zLmF1dGhfY29kZV9lbmRwb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5vcHRpb25zLmF1dGhfY29kZV9lbmRwb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9hdXRoQ29uZkRhdGEuYWNjZXNzVG9rZW5FbmRwb2ludCA9IGUub3B0aW9ucy5hY2Nlc3NfdG9rZW5fZW5kcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUub3B0aW9ucy5hY2Nlc3NfdG9rZW5fZW5kcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2F1dGhDb25mID0gb2F1dGhDb25mRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEVudGl0eSA9IHt9O1xuICAgICAgICAgICAgICAgIGUuZW5jcnlwdGVkID0gdHlwZW9mIGUuZW5jcnlwdGVkICE9PSAndW5kZWZpbmVkJyA/IGUuZW5jcnlwdGVkIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMubW9kZSA9PT0gTU9ERV9DUkVBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZS5kZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnID8gZS5kZWZhdWx0VmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc3BsYXkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGU/Lm9wdGlvbnM/LmRpc3BsYXkgIT09ICd1bmRlZmluZWQnID8gZS5vcHRpb25zLmRpc3BsYXkgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGVtU3RhdGVbZS5maWVsZF0gPSB0ZW1wRW50aXR5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMubW9kZSA9PT0gTU9ERV9FRElUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkudmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuY3VycmVudElucHV0W2UuZmllbGRdICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jdXJyZW50SW5wdXRbZS5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkudmFsdWUgPSBlLmVuY3J5cHRlZCA/ICcnIDogdGVtcEVudGl0eS52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc3BsYXkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGU/Lm9wdGlvbnM/LmRpc3BsYXkgIT09ICd1bmRlZmluZWQnID8gZS5vcHRpb25zLmRpc3BsYXkgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZmllbGQgPT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGU/Lm9wdGlvbnM/LmRpc2FibGVvbkVkaXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc2FibGVkID0gZS5vcHRpb25zLmRpc2FibGVvbkVkaXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVtU3RhdGVbZS5maWVsZF0gPSB0ZW1wRW50aXR5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMubW9kZSA9PT0gTU9ERV9DTE9ORSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LnZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZmllbGQgPT09ICduYW1lJyB8fCBlLmVuY3J5cHRlZCA/ICcnIDogdGhpcy5jdXJyZW50SW5wdXRbZS5maWVsZF07XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzcGxheSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZT8ub3B0aW9ucz8uZGlzcGxheSAhPT0gJ3VuZGVmaW5lZCcgPyBlLm9wdGlvbnMuZGlzcGxheSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0ZW1TdGF0ZVtlLmZpZWxkXSA9IHRlbXBFbnRpdHk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5tb2RlID09PSBNT0RFX0NPTkZJRykge1xuICAgICAgICAgICAgICAgICAgICBlLmRlZmF1bHRWYWx1ZSA9IHR5cGVvZiBlLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBlLmRlZmF1bHRWYWx1ZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkudmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuY3VycmVudElucHV0W2UuZmllbGRdICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jdXJyZW50SW5wdXRbZS5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LnZhbHVlID0gZS5lbmNyeXB0ZWQgPyAnJyA6IHRlbXBFbnRpdHkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzcGxheSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZT8ub3B0aW9ucz8uZGlzcGxheSAhPT0gJ3VuZGVmaW5lZCcgPyBlLm9wdGlvbnMuZGlzcGxheSA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGVtcEVudGl0eS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5maWVsZCA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRW50aXR5LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZT8ub3B0aW9ucz8uZGlzYWJsZW9uRWRpdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBFbnRpdHkuZGlzYWJsZWQgPSBlLm9wdGlvbnMuZGlzYWJsZW9uRWRpdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZW1TdGF0ZVtlLmZpZWxkXSA9IHRlbXBFbnRpdHk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1vZGUgOicsIHByb3BzLm1vZGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBkZXBlbmRlbnQgZmllbGRzXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gZS5vcHRpb25zPy5kZXBlbmRlbmNpZXM7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZUZpZWxkcyA9IHRoaXMuZGVwZW5kZW5jeU1hcC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZUZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZpZWxkc1tlLmZpZWxkXSA9IGZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5TWFwLnNldChmaWVsZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5maWVsZF06IGZpZWxkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRlbUVudGl0aWVzLnB1c2goZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZW50aXRpZXMgPSB0ZW1FbnRpdGllcztcblxuICAgICAgICAvLyBmbGF0dGVuIHRoZSBkZXBlbmRlbmN5TWFwIHRvIHJlbW92ZSByZWR1bmRhbnQgaXRlcmF0aW9ucyBmb3IgcmVzb2x2aW5nIHRoZW1cbiAgICAgICAgLy8gb25lLWJ5LW9uZSBpbiBmb2xsb3dpbmcgbG9vcFxuICAgICAgICBsZXQgZmxhdHRlbmVkTWFwID0ge307XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jeU1hcC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgZmxhdHRlbmVkTWFwID0geyAuLi5mbGF0dGVuZWRNYXAsIC4uLnZhbHVlIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhdHRlbmVkTWFwKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gZmxhdHRlbmVkTWFwW2ZpZWxkXTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgIGxldCBsb2FkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlZCA9ICEhdGhpcy5lbnRpdGllcy5maW5kKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpZWxkID09PSBkZXBlbmRlbmN5O1xuICAgICAgICAgICAgICAgIH0pLnJlcXVpcmVkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGVtU3RhdGVbZGVwZW5kZW5jeV0udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkICYmICFjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2RlcGVuZGVuY3ldID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2RlcGVuZGVuY3ldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9hZCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZXNbZmllbGRdID0ge1xuICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5VmFsdWVzOiB7ICRzZXQ6IGRhdGEgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBhcHBseSBkZXBlbmRlbmN5IGZpZWxkIGNoYW5nZXMgaW4gc3RhdGVcbiAgICAgICAgdGVtU3RhdGUgPSB1cGRhdGUodGVtU3RhdGUsIGNoYW5nZXMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogdGVtU3RhdGUsXG4gICAgICAgICAgICBlcnJvck1zZzogJycsXG4gICAgICAgICAgICB3YXJuaW5nTXNnOiAnJyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBIb29rIG9uIGNyZWF0ZSBtZXRob2QgY2FsbFxuICAgICAgICBpZiAodGhpcy5ob29rRGVmZXJyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaG9va0RlZmVycmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob29rLm9uQ3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2sub25DcmVhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVFbnRpdGllc0Zvckdyb3VwID0gKHNlcnZpY2UpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgJiYgZ3JvdXAuZmllbGRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAuZmllbGRzLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZXJ2aWNlLmVudGl0eS5maW5kSW5kZXgoKGUpID0+IGUuZmllbGQgPT09IGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkT2JqID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZXJ2aWNlLmVudGl0eVtpbmRleF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkT2JqLmlzR3JvdXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXMuc3BsaWNlKGluZGV4LCAxLCB1cGRhdGVkT2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JNc2coKTtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVGb3JtU3VibWl0KC8qIGlzU3VibWl0dGluZyAqLyB0cnVlLCAvKiBjbG9zZUVudGl0eSAqLyBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5kYXRhZGljdCA9IHt9O1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhdGUuZGF0YSkuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWRpY3RbZmllbGRdID0gdGhpcy5zdGF0ZS5kYXRhW2ZpZWxkXS52YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9vayAmJiB0eXBlb2YgdGhpcy5ob29rLm9uU2F2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblBhc3MgPSB0aGlzLmhvb2sub25TYXZlKHRoaXMuZGF0YWRpY3QpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUGFzcykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlRm9ybVN1Ym1pdCgvKiBpc1N1Ym1pdHRpbmcgKi8gZmFsc2UsIC8qIGNsb3NlRW50aXR5ICovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhlY3V0ZVZhbGlkYXRpb25TdWJtaXQgPSAoKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN0YXRlLmRhdGEpLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhZGljdFtmaWVsZF0gPSB0aGlzLnN0YXRlLmRhdGFbZmllbGRdLnZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIHVuaXF1ZSBuYW1lXG4gICAgICAgICAgICBpZiAoW01PREVfQ1JFQVRFLCBNT0RFX0NMT05FXS5pbmNsdWRlcyh0aGlzLnByb3BzLm1vZGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdGluZ05hbWUgPSBCb29sZWFuKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udGV4dC5yb3dEYXRhKS5maW5kKCh2YWwpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWwpLmZpbmQoKG5hbWUpID0+IG5hbWUgPT09IHRoaXMuZGF0YWRpY3QubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNFeGlzdGluZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVudGl0aWVzLmZpbmRJbmRleCgoZSkgPT4gZS5maWVsZCA9PT0gJ25hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFcnJvckZpZWxkTXNnKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybWF0dGVkTWVzc2FnZSgyLCBbdGhpcy5lbnRpdGllc1tpbmRleF0ubGFiZWwsIHRoaXMuZGF0YWRpY3QubmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlRm9ybVN1Ym1pdCgvKiBpc1N1Ym1pdHRpbmcgKi8gZmFsc2UsIC8qIGNsb3NlRW50aXR5ICovIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBjb25kaXRpb24gb2YgcmVxdWlyZWQgZmllbGRzIGluIE8tQXV0aFxuICAgICAgICAgICAgbGV0IHRlbUVudGl0aWVzO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNPQXV0aCkge1xuICAgICAgICAgICAgICAgIGxldCByZXFGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmF1dGhNYXApLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYGlzQXV0aFZhbGAgaXMgcmVxdWlyZWQgaW4gYSBjYXNlIHdoZXJlIG9ubHkgc2luZ2xlIGF1dGggdHlwZSBpcyBwcm92aWRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gdGhpcy5kYXRhZGljdC5hdXRoX3R5cGUgfHwgIXRoaXMuaXNBdXRoVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXFGaWVsZHMgPSBbLi4ucmVxRmllbGRzLCAuLi50aGlzLmF1dGhNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGVtRW50aXRpZXMgPSB0aGlzLmVudGl0aWVzLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxRmllbGRzLmluY2x1ZGVzKGUuZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGwgb2F1dGggZmllbGRzIGFyZSByZXF1aXJlZCBleGNlcHQgaWYgZXhwbGljaXRlbHkgYHJlcXVpcmVkYCBpcyBzZXQgdG8gYGZhbHNlYFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUsIC4uLmUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGVtRW50aXRpZXMgPSB0aGlzLmVudGl0aWVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBWYWxpZGF0aW9uIG9mIGZvcm0gZmllbGRzIG9uIFN1Ym1pdFxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcih0ZW1FbnRpdGllcyk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSB2YWxpZGF0b3IuZG9WYWxpZGF0aW9uKHRoaXMuZGF0YWRpY3QpO1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFcnJvckZpZWxkTXNnKGVycm9yLmVycm9yRmllbGQsIGVycm9yLmVycm9yTXNnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zYXZlVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBTYXZlVmFsaWRhdG9yKHRoaXMub3B0aW9ucy5zYXZlVmFsaWRhdG9yLCB0aGlzLmRhdGFkaWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFcnJvck1zZyhlcnJvci5lcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZUZvcm1TdWJtaXQoLyogaXNTdWJtaXR0aW5nICovIGZhbHNlLCAvKiBjbG9zZUVudGl0eSAqLyBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPQXV0aCAmJlxuICAgICAgICAgICAgICAgICh0aGlzLmlzU2luZ2xlT2F1dGggfHwgKHRoaXMuaXNBdXRoVmFsICYmIHRoaXMuZGF0YWRpY3QuYXV0aF90eXBlID09PSAnb2F1dGgnKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBvYXV0aCBBdXRoZW50aWNhdGlvblxuICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHRoZSBwYXJhbWV0ZXIgc3RyaW5nIHdpdGggY2xpZW50X2lkLCByZWRpcmVjdF91cmwgYW5kIHJlc3BvbnNlX3R5cGVcbiAgICAgICAgICAgICAgICBsZXQgcGFyYW1ldGVycyA9IGA/cmVzcG9uc2VfdHlwZT1jb2RlJmNsaWVudF9pZD0ke3RoaXMuZGF0YWRpY3QuY2xpZW50X2lkfSZyZWRpcmVjdF91cmk9JHt0aGlzLmRhdGFkaWN0LnJlZGlyZWN0X3VybH1gO1xuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUgZm9yIHN0YXRlX2VuYWJsZWRcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZUVuYWJsZWQgPSB0aGlzLmlzb2F1dGhTdGF0ZSAhPSBudWxsID8gdGhpcy5pc29hdXRoU3RhdGUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVFbmFibGVkID09PSAndHJ1ZScgfHwgc3RhdGVFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVfZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRpbmcgYSBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcgc3RhdGUgcGFyYW1ldGVyLCB3aGljaCB3aWxsIGJlIHVzZWQgT05MWSBkdXJpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9hdXRoX3N0YXRlID0gdXVpZHY0KCkucmVwbGFjZSgvLS9nLCAnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kaW5nIHRoZSBzdGF0ZSBpbiB0aGUgaGVhZGVyc1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gYCR7cGFyYW1ldGVyc30mc3RhdGU9JHt0aGlzLm9hdXRoX3N0YXRlfWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaG9zdCA9IGBodHRwczovLyR7dGhpcy5kYXRhZGljdC5lbmRwb2ludH0ke3RoaXMub2F1dGhDb25mLmF1dGhDb2RlRW5kcG9pbnR9JHtwYXJhbWV0ZXJzfWA7XG4gICAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Jlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCBhdXRoX3R5cGUgZWxlbWVudCBmcm9tIGdsb2JhbCBjb25maWcganNvblxuXG4gICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gYSBwb3B1cCB0byBtYWtlIGF1dGggcmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkV2luID0gd2luZG93Lm9wZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5hcHBOYW1lfSBPQXV0aGAsXG4gICAgICAgICAgICAgICAgICAgICAgICBgd2lkdGg9JHt0aGlzLm9hdXRoQ29uZi5wb3B1cFdpZHRofSwgaGVpZ2h0PSR7dGhpcy5vYXV0aENvbmYucG9wdXBIZWlnaHR9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayB0byByZWNlaXZlIGRhdGEgZnJvbSByZWRpcmVjdCB1cmxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmdldE1lc3NhZ2UgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiBDYWxsIGJhY2sgd2l0aCBBdXRoIGNvZGUgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9hdXRoVG9rZW4obWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgdGlsbCB3ZSBnZXQgYXV0aF9jb2RlIGZyb20gY2FsbGluZyBzaXRlIHRocm91Z2ggcmVkaXJlY3QgdXJsLCB3ZSB3aWxsIHdhaXQgZm9yIDMgbWluc1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JBdXRoZW50aWNhdGlvbih0aGlzLm9hdXRoQ29uZi5hdXRoVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FsbGVkICYmIHRoaXMuY2hpbGRXaW4uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgZXJyb3IgbWVzc2FnZSBpZiB0aGUgdXNlciBoYXMgY2xvc2UgdGhlIGF1dGhlbnRpY2F0aW9uIHdpbmRvdyB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVycm9yTXNnKEVSUk9SX0FVVEhfUFJPQ0VTU19URVJNSU5BVEVEX1RSWV9BR0FJTik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZUZvcm1TdWJtaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXNTdWJtaXR0aW5nICovIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlRW50aXR5ICovIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGltZW91dCBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVycm9yTXNnKEVSUk9SX1JFUVVFU1RfVElNRU9VVF9UUllfQUdBSU4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVGb3JtU3VibWl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzU3VibWl0dGluZyAqLyBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZUVudGl0eSAqLyBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGNhbGxlZCBmbGFnIGFzIHdlIGhhdmUgdG8gd2FpdCB0aWxsIHdlIGdldCB0aGUgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuIGFuZCBpbnN0YW5jZV91cmxcbiAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCB0aWxsIHdlIGdldCB0aGUgcmVzcG9uc2UsIGhlcmUgd2UgaGF2ZSBhZGRlZCB3YWl0IGZvciAzMCBzZWNzXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckJhY2tlbmRSZXNwb25zZSgzMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVzcG9uc2UgJiYgIXRoaXMuaXNFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGVycm9yIG1lc3NhZ2UgdG8gcHJldmVudCBzYXZpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGltZW91dCBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVycm9yTXNnKEVSUk9SX1JFUVVFU1RfVElNRU9VVF9BQ0NFU1NfVE9LRU5fVFJZX0FHQUlOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlRm9ybVN1Ym1pdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc1N1Ym1pdHRpbmcgKi8gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2VFbnRpdHkgKi8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlRm9ybVN1Ym1pdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc1N1Ym1pdHRpbmcgKi8gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2VFbnRpdHkgKi8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmhvb2sgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmhvb2sub25TYXZlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5vblNhdmVQcm9taXNlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMub25TYXZlUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleGVjdXRlVmFsaWRhdGlvblN1Ym1pdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleGVjdXRlVmFsaWRhdGlvblN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNhdmVEYXRhID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGFkaWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFkaWN0W2tleV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKGtleSwgdGhpcy5kYXRhZGljdFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2xlYXIgb3V0IGZpZWxkcyBvZiBvdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHdoZW4gdXNpbmcgb25lXG4gICAgICAgIGlmICh0aGlzLmlzQXV0aFZhbCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5hdXRoTWFwKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YWRpY3QuYXV0aF90eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aE1hcFt0eXBlXS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5LnNldChlLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPQXV0aCkge1xuICAgICAgICAgICAgLy8gUHJldmVudCBwYXNzaW5nIHJlZGlyZWN0X3VybCBmaWVsZCB1c2VkIGluIE9BdXRoIHRvIGJhY2tlbmQgY29uZiBmaWxlXG4gICAgICAgICAgICBib2R5LmRlbGV0ZSgncmVkaXJlY3RfdXJsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvcHMubW9kZSA9PT0gTU9ERV9FRElUKSB7XG4gICAgICAgICAgICBib2R5LmRlbGV0ZSgnbmFtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXhpb3NDYWxsV3JhcHBlcih7XG4gICAgICAgICAgICBzZXJ2aWNlTmFtZTogdGhpcy5lbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBjdXN0b21IZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICBoYW5kbGVFcnJvcjogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSByZXNwb25zZT8uZGF0YT8uZW50cnlbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMubW9kZSAhPT0gTU9ERV9DT05GSUcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wT2JqID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgdG1wT2JqW3ZhbC5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFERE9OLTM4NTgxOiBgZGF0YWRpY3RgIHByb3ZpZGVzIGZhbGxiYWNrIHZhbHVlcyBpZiByaCBza2lwc1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5kYXRhZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHZhbC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHRoaXMucHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFJvd0RhdGEoXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUodGhpcy5jb250ZXh0LnJvd0RhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5wcm9wcy5zZXJ2aWNlTmFtZV06IHsgJG1lcmdlOiB0bXBPYmogfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvb2sgJiYgdHlwZW9mIHRoaXMuaG9vay5vblNhdmVTdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG9vay5vblNhdmVTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm1vZGUgPT09IE1PREVfRURJVCkge1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVRvYXN0KGBVcGRhdGVkIFwiJHt2YWwubmFtZX1cImAsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLm1vZGUgPT09IE1PREVfQ09ORklHKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlVG9hc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBgVXBkYXRlZCBcIiR7dGhpcy5tb2RlX2NvbmZpZ190aXRsZSA/IHRoaXMubW9kZV9jb25maWdfdGl0bGUgOiB2YWwubmFtZX1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVRvYXN0KGBDcmVhdGVkIFwiJHt2YWwubmFtZX1cImAsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlRm9ybVN1Ym1pdCgvKiBpc1N1Ym1pdHRpbmcgKi8gZmFsc2UsIC8qIGNsb3NlRW50aXR5ICovIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JTdWJtaXRNc2cgPSBwYXJzZUVycm9yTXNnKGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yTXNnOiBlcnJvclN1Ym1pdE1zZyB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob29rICYmIHR5cGVvZiB0aGlzLmhvb2sub25TYXZlRmFpbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2sub25TYXZlRmFpbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZUZvcm1TdWJtaXQoLyogaXNTdWJtaXR0aW5nICovIGZhbHNlLCAvKiBjbG9zZUVudGl0eSAqLyBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlQ2hhbmdlID0gKGZpZWxkLCB0YXJnZXRWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgICAgIGlmIChmaWVsZCA9PT0gJ2F1dGhfdHlwZScpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYXV0aE1hcCkuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSB0YXJnZXRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhNYXBbdHlwZV0uZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1tlXSA9IHsgZGlzcGxheTogeyAkc2V0OiB0cnVlIH0gfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoTWFwW3R5cGVdLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNbZV0gPSB7IGRpc3BsYXk6IHsgJHNldDogZmFsc2UgfSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRlcGVuZGVuY3lNYXAuaGFzKGZpZWxkKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRlcGVuZGVuY3lNYXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKChsb2FkRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgbGV0IGxvYWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdmFsdWVbbG9hZEZpZWxkXS5mb3JFYWNoKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gISF0aGlzLmVudGl0aWVzLmZpbmQoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpZWxkID09PSBkZXBlbmRlbmN5O1xuICAgICAgICAgICAgICAgICAgICB9KS5yZXF1aXJlZDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9PT0gZmllbGQgPyB0YXJnZXRWYWx1ZSA6IHRoaXMuc3RhdGUuZGF0YVtkZXBlbmRlbmN5XS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkICYmICFjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbZGVwZW5kZW5jeV0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gJ1JFU0VUX1ZBTFVFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2RlcGVuZGVuY3ldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzW2xvYWRGaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5VmFsdWVzOiB7ICRzZXQ6IGRhdGEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7ICRzZXQ6IG51bGwgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2VzW2ZpZWxkXSA9IHsgdmFsdWU6IHsgJHNldDogdGFyZ2V0VmFsdWUgfSB9O1xuXG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkcyA9IHVwZGF0ZSh0aGlzLnN0YXRlLCB7IGRhdGE6IGNoYW5nZXMgfSk7XG4gICAgICAgIGNvbnN0IHRlbXBTdGF0ZSA9IHRoaXMuY2xlYXJBbGxFcnJvck1zZyhuZXdGaWVsZHMpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHRlbXBTdGF0ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va0RlZmVycmVkKSB7XG4gICAgICAgICAgICB0aGlzLmhvb2tEZWZlcnJlZC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuaG9vay5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2sub25DaGFuZ2UoZmllbGQsIHRhcmdldFZhbHVlLCB0ZW1wU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGFkZEN1c3RvbVZhbGlkYXRvciA9IChmaWVsZCwgdmFsaWRhdG9yRnVuYykgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZW50aXRpZXMuZmluZEluZGV4KCh4KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IFt7IHR5cGU6ICdjdXN0b20nLCB2YWxpZGF0b3JGdW5jIH1dO1xuICAgICAgICB0aGlzLmVudGl0aWVzW2luZGV4XS52YWxpZGF0b3JzID0gdmFsaWRhdG9yO1xuICAgIH07XG5cbiAgICAvLyBTZXQgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IGFuZCBzZXQgZXJyb3IgaW4gcGVydGljdWxhciBmaWVsZFxuICAgIHNldEVycm9yRmllbGRNc2cgPSAoZmllbGQsIG1zZykgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKChwcmV2aW91c1N0YXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdGaWVsZHMgPSB1cGRhdGUocHJldmlvdXNTdGF0ZSwge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgW2ZpZWxkXTogeyBlcnJvcjogeyAkc2V0OiB0cnVlIH0gfSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuZXdGaWVsZHMuZXJyb3JNc2cgPSBtc2c7XG4gICAgICAgICAgICByZXR1cm4gbmV3RmllbGRzO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gU2V0IGVycm9yIGluIHBlcnRpY3VsYXIgZmllbGRcbiAgICBzZXRFcnJvckZpZWxkID0gKGZpZWxkKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZpb3VzU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGUocHJldmlvdXNTdGF0ZSwgeyBkYXRhOiB7IFtmaWVsZF06IHsgZXJyb3I6IHsgJHNldDogdHJ1ZSB9IH0gfSB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIENsZWFyIGVycm9yIG1lc3NhZ2VcbiAgICBjbGVhckVycm9yTXNnID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5lcnJvck1zZykge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZpb3VzU3RhdGUsIGVycm9yTXNnOiAnJyB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU2V0IGVycm9yIG1lc3NhZ2VcbiAgICBzZXRFcnJvck1zZyA9IChtc2cpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldmlvdXNTdGF0ZSwgZXJyb3JNc2c6IG1zZyB9O1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gQ2xlYXIgZXJyb3Ivd2FybmluZyBtZXNzYWdlIGFuZCBlcnJvcnMgZnJvbSBmaWVsZHNcbiAgICBjbGVhckFsbEVycm9yTXNnID0gKFN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkcyA9IFN0YXRlID8geyAuLi5TdGF0ZSB9IDogeyAuLi50aGlzLnN0YXRlIH07XG4gICAgICAgIG5ld0ZpZWxkcy5lcnJvck1zZyA9ICcnO1xuICAgICAgICBuZXdGaWVsZHMud2FybmluZ01zZyA9ICcnO1xuICAgICAgICBjb25zdCBuZXdEYXRhID0gU3RhdGUgPyB7IC4uLlN0YXRlLmRhdGEgfSA6IHsgLi4udGhpcy5zdGF0ZS5kYXRhIH07XG4gICAgICAgIGNvbnN0IHRlbURhdGEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMobmV3RGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3RGF0YVtrZXldLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGVtRGF0YVtrZXldID0geyAuLi5uZXdEYXRhW2tleV0sIGVycm9yOiBmYWxzZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1EYXRhW2tleV0gPSBuZXdEYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBuZXdGaWVsZHMuZGF0YSA9IHRlbURhdGE7XG4gICAgICAgIHJldHVybiBTdGF0ZSA/IG5ld0ZpZWxkcyA6IG51bGw7XG4gICAgfTtcblxuICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgIGdlbmVyYXRlRXJyb3JNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5lcnJvck1zZykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBhcHBlYXJhbmNlPVwiZmlsbFwiIHR5cGU9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvck1zZ31cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBnZW5lcmF0ZVdhcm5pbmdNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS53YXJuaW5nTXNnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIGFwcGVhcmFuY2U9XCJmaWxsXCIgdHlwZT1cIndhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUud2FybmluZ01zZ31cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICAvLyBnZW5lcmF0ZXN1Ym1pdE1lc3NhZ2VcbiAgICBsb2FkSG9vayA9IChtb2R1bGUsIHR5cGUsIGdsb2JhbENvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICAgICAgICAgICAgICBpbXBvcnQoLyogd2VicGFja0lnbm9yZTogdHJ1ZSAqLyBgJHtnZXRCdWlsZERpclBhdGgoKX0vY3VzdG9tLyR7bW9kdWxlfS5qc2ApLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIChleHRlcm5hbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSG9vayA9IGV4dGVybmFsLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2sgPSBuZXcgSG9vayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEhvb2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX19ub25fd2VicGFja19yZXF1aXJlX18oXG4gICAgICAgICAgICAgICAgICAgIFtgYXBwLyR7dGhpcy5hcHBOYW1lfS9qcy9idWlsZC9jdXN0b20vJHttb2R1bGV9YF0sXG4gICAgICAgICAgICAgICAgICAgIChIb29rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvb2sgPSBuZXcgSG9vayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEhvb2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBteVByb21pc2U7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogRnVuY3Rpb24gdG8gZ2V0IGFjY2VzcyB0b2tlbiwgcmVmcmVzaCB0b2tlbiBhbmQgaW5zdGFuY2UgdXJsXG4gICAgICogdXNpbmcgcmVzdCBjYWxsIG9uY2Ugb2F1dGggY29kZSByZWNlaXZlZCBmcm9tIGNoaWxkIHdpbmRvd1xuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIGhhbmRsZU9hdXRoVG9rZW4gPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICAvLyBDaGVjayBtZXNzYWdlIGZvciBlcnJvci4gSWYgZXJyb3Igc2hvdyBlcnJvciBtZXNzYWdlLlxuICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgKG1lc3NhZ2UgJiYgbWVzc2FnZS5lcnJvcikgfHwgbWVzc2FnZS5jb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyb3JNc2coRVJST1JfT0NDVVJSRURfVFJZX0FHQUlOKTtcbiAgICAgICAgICAgIHRoaXMuaXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlUmVzcG9uc2UgPSBtZXNzYWdlLnN0YXRlO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlX2VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vYXV0aF9zdGF0ZSAhPT0gc3RhdGVSZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJvck1zZyhFUlJPUl9TVEFURV9NSVNTSU5HX1RSWV9BR0FJTik7XG4gICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc1Jlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQobWVzc2FnZS5jb2RlKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly8ke3RoaXMuZGF0YWRpY3QuZW5kcG9pbnR9JHt0aGlzLm9hdXRoQ29uZi5hY2Nlc3NUb2tlbkVuZHBvaW50fWAsXG4gICAgICAgICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgICAgIGNsaWVudF9pZDogdGhpcy5kYXRhZGljdC5jbGllbnRfaWQsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmRhdGFkaWN0LmNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLmRhdGFkaWN0LnJlZGlyZWN0X3VybCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGJvZHkuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgT0F1dGhFbmRwb2ludCA9IGAke3RoaXMuYXBwTmFtZX1fb2F1dGgvb2F1dGhgO1xuICAgICAgICAvLyBJbnRlcm5hbCBoYW5kbGVyIGNhbGwgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gYW5kIG90aGVyIHZhbHVlc1xuICAgICAgICBheGlvc0NhbGxXcmFwcGVyKHtcbiAgICAgICAgICAgIGVuZHBvaW50VXJsOiBPQXV0aEVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIGN1c3RvbUhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgIGhhbmRsZUVycm9yOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmVudHJ5WzBdLmNvbnRlbnQuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHJlc3BvbnNlLmRhdGEuZW50cnlbMF0uY29udGVudC5hY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlVXJsID0gcmVzcG9uc2UuZGF0YS5lbnRyeVswXS5jb250ZW50Lmluc3RhbmNlX3VybDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gcmVzcG9uc2UuZGF0YS5lbnRyeVswXS5jb250ZW50LnJlZnJlc2hfdG9rZW47XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhZGljdC5pbnN0YW5jZV91cmwgPSBpbnN0YW5jZVVybDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhZGljdC5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaFRva2VuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFkaWN0LmFjY2Vzc190b2tlbiA9IGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFcnJvck1zZyhyZXNwb25zZS5kYXRhLmVudHJ5WzBdLmNvbnRlbnQuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Jlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEVycm9yTXNnKEVSUk9SX09DQ1VSUkVEX1RSWV9BR0FJTik7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVzcG9uc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBGdW5jdGlvbiB0byB3YWl0IGZvciBhdXRoZW50aWNhdGlvbiBjYWxsIGJhY2sgaW4gY2hpbGQgd2luZG93LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIHdhaXRGb3JBdXRoZW50aWNhdGlvbiA9IGFzeW5jIChjb3VudCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgY291bnQgLT0gMTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGlmIGNhbGxlZCB0aGVuIGV4aXQgZnJvbSB3YWl0XG4gICAgICAgIGlmICh0aGlzLmlzQ2FsbGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBjYWxsYmFjayBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGFuZCBjb3VudCBpcyBub3QgcmVhY2hlZCB0byAxODAgdGhlbiByZXR1cm4gZXJyb3IgZm9yIHRpbWVvdXRcbiAgICAgICAgaWYgKGNvdW50ID09PSAwIHx8IHRoaXMuY2hpbGRXaW4uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgY2FsbCBzbGVlcCBhbmQgcmVjYWxsIHRoZSBzYW1lIGZ1bmN0aW9uXG4gICAgICAgIGF3YWl0IHRoaXMuc2xlZXAodGhpcy53YWl0Rm9yQXV0aGVudGljYXRpb24sIGNvdW50KTtcbiAgICB9O1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gd2FpdCBmb3IgYmFja2VuZCBjYWxsIGdldCByZXNwb25zZSBmcm9tIGJhY2tlbmRcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIHdhaXRGb3JCYWNrZW5kUmVzcG9uc2UgPSBhc3luYyAoY291bnQpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGNvdW50ICs9IDE7XG4gICAgICAgIC8vIENoZWNrIGlmIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBpZiBjYWxsZWQgdGhlbiBleGl0IGZyb20gd2FpdFxuICAgICAgICBpZiAodGhpcy5pc1Jlc3BvbnNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBjYWxsYmFjayBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGFuZCBjb3VudCBpcyBub3QgcmVhY2hlZCB0byA2MCB0aGVuIHJldHVybiBlcnJvciBmb3IgdGltZW91dFxuICAgICAgICBpZiAoY291bnQgPT09IDYwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBjYWxsIHNsZWVwIGFuZCByZWNhbGwgdGhlIHNhbWUgZnVuY3Rpb25cbiAgICAgICAgYXdhaXQgdGhpcy5zbGVlcCh0aGlzLndhaXRGb3JCYWNrZW5kUmVzcG9uc2UsIGNvdW50KTtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGZpcnN0IGFkZCBzbGVlcCBmb3IgMSBzZWNzIGFuZCB0aGUgY2FsbCB0aGUgZnVuY3Rpb24gcGFzc2VkIGluIGFyZ3VtZW50XG4gICAgICovXG4gICAgc2xlZXAgPSBhc3luYyAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy50aW1lb3V0KDEwMDApO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc29sdmUgdGhlIHByb21pc2Ugb25jZSB0aGUgcHJvdmlkZWQgdGltZW91dCBvY2N1cnNcbiAgICAgKi9cbiAgICB0aW1lb3V0ID0gKG1zKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgIH07XG5cbiAgICByZW5kZXJHcm91cEVsZW1lbnRzID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWwgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbCA9IHRoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xscHNpYmxlRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcy5tYXAoKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50aXRpZXMubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZmllbGQgPT09IGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1TdGF0ZSA9IHRoaXMuc3RhdGUuZGF0YVtlLmZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb250cm9sV3JhcHBlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZS5maWVsZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5RnVuY3RzPXt0aGlzLnV0aWxDb250cm9sV3JhcHBlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGVtU3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheT17dGVtU3RhdGUuZGlzcGxheX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGVtU3RhdGUuZXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5PXtlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lPXt0aGlzLnByb3BzLnNlcnZpY2VOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9e3RoaXMucHJvcHMubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGVtU3RhdGUuZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Rvd25NZXNzYWdlPXt0ZW1TdGF0ZS5tYXJrZG93bk1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeVZhbHVlcz17dGVtU3RhdGUuZGVwZW5kZW5jeVZhbHVlcyB8fCBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXAub3B0aW9ucy5pc0V4cGFuZGFibGUgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxDb2xsYXBzaWJsZVBhbmVsV3JhcHBlciB0aXRsZT17Z3JvdXAubGFiZWx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2xsYXBzaWJsZS1lbGVtZW50XCI+e2NvbGxwc2libGVFbGVtZW50fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0NvbGxhcHNpYmxlUGFuZWxXcmFwcGVyPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q3VzdG9tR3JvdXBMYWJlbD57Z3JvdXAubGFiZWx9PC9DdXN0b21Hcm91cExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57Y29sbHBzaWJsZUVsZW1lbnR9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgLy8gb25SZW5kZXIgbWV0aG9kIG9mIEhvb2tcbiAgICAgICAgaWYgKHRoaXMuZmxhZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaG9va0RlZmVycmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob29rRGVmZXJyZWQudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5ob29rLm9uUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG9vay5vblJlbmRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMubW9kZSA9PT0gTU9ERV9FRElUKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaG9va0RlZmVycmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG9va0RlZmVycmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhvb2sub25FZGl0TG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG9vay5vbkVkaXRMb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmxhZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxmb3JtIHN0eWxlPXt0aGlzLnByb3BzLm1vZGUgPT09IE1PREVfQ09ORklHID8geyBtYXJnaW5Ub3A6ICcyNXB4JyB9IDoge319PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZW5lcmF0ZVdhcm5pbmdNZXNzYWdlKCl9XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmdlbmVyYXRlRXJyb3JNZXNzYWdlKCl9XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckdyb3VwRWxlbWVudHMoKX1cbiAgICAgICAgICAgICAgICAgICAge3RoaXMuZW50aXRpZXMubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gbnVsbCBpZiB3ZSBuZWVkIHRvIHNob3cgZWxlbWVudCBpbiBhIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc0dyb3VwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1TdGF0ZSA9IHRoaXMuc3RhdGUuZGF0YVtlLmZpZWxkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbVN0YXRlLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyAuLi5lLm9wdGlvbnMsIHBsYWNlaG9sZGVyOiB0ZW1TdGF0ZS5wbGFjZWhvbGRlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCAnb3B0aW9uYWwnIHBsYWNlaG9sZGVyIGZvciBvcHRpb25hbCBmaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogZm9yIG9hdXRoIGZpZWxkIGl0IGlzIHBvc3NpYmxlIHJlcXVpcmVkIGlzIGZhbHNlIGJ1dCB0aGUgZmllbGQgaXMgYWN0dWFsbHkgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2VkIG9uIHdoYXQgdHlwZSBvZiBhdXRoZW50aWNhdGlvbiBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCAnb2F1dGhfZmllbGQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFlLm9wdGlvbnM/LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmUub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdvcHRpb25hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29udHJvbFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtlLmZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5RnVuY3RzPXt0aGlzLnV0aWxDb250cm9sV3JhcHBlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RlbVN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PXt0ZW1TdGF0ZS5kaXNwbGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGVtU3RhdGUuZXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eT17ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU9e3RoaXMucHJvcHMuc2VydmljZU5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9e3RoaXMucHJvcHMubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RlbVN0YXRlLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZG93bk1lc3NhZ2U9e3RlbVN0YXRlLm1hcmtkb3duTWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeVZhbHVlcz17dGVtU3RhdGUuZGVwZW5kZW5jeVZhbHVlcyB8fCBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkJhc2VGb3JtVmlldy5wcm9wVHlwZXMgPSB7XG4gICAgcGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzdGFuemFOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGN1cnJlbnRTZXJ2aWNlU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYW5kbGVGb3JtU3VibWl0OiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VGb3JtVmlldztcbiIsImV4cG9ydCBjb25zdCBFUlJPUl9SRVFVRVNUX1RJTUVPVVRfVFJZX0FHQUlOID1cbiAgICAnUmVxdWVzdCB0aW1lIG91dCB3aGlsZSBhdXRoZW50aWNhdGluZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFUVVFU1RfVElNRU9VVF9BQ0NFU1NfVE9LRU5fVFJZX0FHQUlOID1cbiAgICAnUmVxdWVzdCB0aW1lIG91dCB3aGlsZSBnZXR0aW5nIGFjY2Vzc3Rva2VuLiBQbGVhc2UgdHJ5IGFnYWluLic7XG5leHBvcnQgY29uc3QgRVJST1JfT0NDVVJSRURfVFJZX0FHQUlOID1cbiAgICAnRXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGF1dGhlbnRpY2F0ZS4gUGxlYXNlIHRyeSBBZ2Fpbi4nO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FVVEhfUFJPQ0VTU19URVJNSU5BVEVEX1RSWV9BR0FJTiA9XG4gICAgJ0F1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaW50ZXJydXB0ZWQuIFBsZWFzZSB0cnkgYWdhaW4uJztcbmV4cG9ydCBjb25zdCBFUlJPUl9TVEFURV9NSVNTSU5HX1RSWV9BR0FJTiA9XG4gICAgJ1Jlc3BvbnNlIG5vdCByZWNlaXZlZCBmcm9tIHRoZSBleHBlY3RlZCBzZW5kZXIuIFBsZWFzZSB0cnkgYWdhaW4uJztcbiIsImV4cG9ydCBjb25zdCBTVFlMRV9QQUdFID0gJ3BhZ2UnO1xuZXhwb3J0IGNvbnN0IFNUWUxFX01PREFMID0gJ21vZGFsJztcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgXyB9IGZyb20gJ0BzcGx1bmsvdWktdXRpbHMvaTE4bic7XG5cbmltcG9ydCB7IGdldFVuaWZpZWRDb25maWdzIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IGdldEJ1aWxkRGlyUGF0aCB9IGZyb20gJy4uLy4uL3V0aWwvc2NyaXB0JztcblxuY2xhc3MgQ3VzdG9tVGFibGVDb250cm9sIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNob3VsZFJlbmRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLmxvYWRDdXN0b21Db250cm9sKCkudGhlbigoQ29udHJvbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21Db250cm9sID0gbmV3IENvbnRyb2woXG4gICAgICAgICAgICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgdGhpcy5lbCxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJvdyxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmZpZWxkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucm93ICE9PSBuZXh0UHJvcHMucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5leHRTdGF0ZS5sb2FkaW5nICYmIHRoaXMuc2hvdWxkUmVuZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNob3VsZFJlbmRlciA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxvYWRDdXN0b21Db250cm9sID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLnR5cGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICAgICAgICAgICAgICBpbXBvcnQoXG4gICAgICAgICAgICAgICAgICAgIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8gYCR7Z2V0QnVpbGREaXJQYXRoKCl9L2N1c3RvbS8ke1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5maWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICB9LmpzYFxuICAgICAgICAgICAgICAgICkudGhlbigoZXh0ZXJuYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udHJvbCA9IGV4dGVybmFsLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQ29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBwTmFtZSA9IGdsb2JhbENvbmZpZy5tZXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgX19ub25fd2VicGFja19yZXF1aXJlX18oXG4gICAgICAgICAgICAgICAgICAgIFtgYXBwLyR7YXBwTmFtZX0vanMvYnVpbGQvY3VzdG9tLyR7dGhpcy5wcm9wcy5maWxlTmFtZX1gXSxcbiAgICAgICAgICAgICAgICAgICAgKENvbnRyb2wpID0+IHJlc29sdmUoQ29udHJvbClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUubG9hZGluZykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUNvbnRyb2wucmVuZGVyKHRoaXMucHJvcHMucm93LCB0aGlzLnByb3BzLmZpZWxkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxvYWRpbmcgJiYgXygnTG9hZGluZy4uLicpfVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gLy8gbm9zZW1ncmVwOiB0eXBlc2NyaXB0LnJlYWN0LnNlY3VyaXR5LmF1ZGl0LnJlYWN0LW5vLXJlZnMucmVhY3Qtbm8tcmVmc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgdmlzaWJpbGl0eTogdGhpcy5zdGF0ZS5sb2FkaW5nID8gJ2hpZGRlbicgOiAndmlzaWJsZScgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkN1c3RvbVRhYmxlQ29udHJvbC5wcm9wVHlwZXMgPSB7XG4gICAgc2VydmljZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICByb3c6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaWxlTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21UYWJsZUNvbnRyb2w7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERMIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvRGVmaW5pdGlvbkxpc3QnO1xuaW1wb3J0IFRhYmxlIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvVGFibGUnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBfIH0gZnJvbSAnQHNwbHVuay91aS11dGlscy9pMThuJztcblxuaW1wb3J0IEN1c3RvbVRhYmxlQ29udHJvbCBmcm9tICcuL0N1c3RvbVRhYmxlQ29udHJvbCc7XG5pbXBvcnQgeyBnZXRVbmlmaWVkQ29uZmlncyB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmNvbnN0IFRhYmxlQ2VsbFdyYXBwZXIgPSBzdHlsZWQoVGFibGUuQ2VsbClgXG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbmA7XG5cbmZ1bmN0aW9uIGdldEV4cGFuc2lvblJvd0RhdGEocm93LCBtb3JlSW5mbykge1xuICAgIGNvbnN0IERlZmluaXRpb25MaXN0cyA9IFtdO1xuXG4gICAgaWYgKG1vcmVJbmZvPy5sZW5ndGgpIHtcbiAgICAgICAgbW9yZUluZm8uZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IF8odmFsLmxhYmVsKTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBleHRyYSByb3dzIHdoaWNoIGFyZSBlbXB0eSBpbiBtb3JlSW5mb1xuICAgICAgICAgICAgaWYgKHZhbC5maWVsZCBpbiByb3cgJiYgcm93W3ZhbC5maWVsZF0gIT09IG51bGwgJiYgcm93W3ZhbC5maWVsZF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgRGVmaW5pdGlvbkxpc3RzLnB1c2goPERMLlRlcm0ga2V5PXt2YWwuZmllbGR9PntsYWJlbH08L0RMLlRlcm0+KTtcbiAgICAgICAgICAgICAgICBEZWZpbml0aW9uTGlzdHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPERMLkRlc2NyaXB0aW9uIGtleT17YCR7dmFsLmZpZWxkfV9kZWNyYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dmFsLm1hcHBpbmcgJiYgdmFsLm1hcHBpbmdbcm93W3ZhbC5maWVsZF1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWwubWFwcGluZ1tyb3dbdmFsLmZpZWxkXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyhyb3dbdmFsLmZpZWxkXSl9XG4gICAgICAgICAgICAgICAgICAgIDwvREwuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBEZWZpbml0aW9uTGlzdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHBhbnNpb25Sb3coY29sU3Bhbiwgcm93LCBtb3JlSW5mbykge1xuICAgIGNvbnN0IHsgY3VzdG9tUm93IH0gPSBnZXRVbmlmaWVkQ29uZmlncygpLnBhZ2VzLmlucHV0cy50YWJsZTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxUYWJsZS5Sb3cga2V5PXtgJHtyb3cuaWR9LWV4cGFuc2lvbmB9PlxuICAgICAgICAgICAgPFRhYmxlQ2VsbFdyYXBwZXIgY29sU3Bhbj17Y29sU3Bhbn0+XG4gICAgICAgICAgICAgICAge2N1c3RvbVJvdyAmJiBjdXN0b21Sb3cuc3JjID8gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tVGFibGVDb250cm9sLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHJvdy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGN1c3RvbVJvdy5zcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY3VzdG9tUm93LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPERMIHRlcm1XaWR0aD17MjUwfT57Z2V0RXhwYW5zaW9uUm93RGF0YShyb3csIG1vcmVJbmZvKX08L0RMPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1RhYmxlQ2VsbFdyYXBwZXI+XG4gICAgICAgIDwvVGFibGUuUm93PlxuICAgICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgV2FpdFNwaW5uZXIgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9XYWl0U3Bpbm5lcic7XG5pbXBvcnQgU3dpdGNoIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvU3dpdGNoJztcbmltcG9ydCBUYWJsZSBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1RhYmxlJztcbmltcG9ydCBCdXR0b25Hcm91cCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0J1dHRvbkdyb3VwJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvVG9vbHRpcCc7XG5pbXBvcnQgUGVuY2lsIGZyb20gJ0BzcGx1bmsvcmVhY3QtaWNvbnMvUGVuY2lsJztcbmltcG9ydCBDbG9uZSBmcm9tICdAc3BsdW5rL3JlYWN0LWljb25zL0Nsb25lJztcbmltcG9ydCBUcmFzaCBmcm9tICdAc3BsdW5rL3JlYWN0LWljb25zL1RyYXNoJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgXyB9IGZyb20gJ0BzcGx1bmsvdWktdXRpbHMvaTE4bic7XG5cbmltcG9ydCBDdXN0b21UYWJsZUNvbnRyb2wgZnJvbSAnLi9DdXN0b21UYWJsZUNvbnRyb2wnO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9DdXN0b21UYWJsZVN0eWxlJztcblxuY29uc3QgVGFibGVDZWxsV3JhcHBlciA9IHN0eWxlZChUYWJsZS5DZWxsKWBcbiAgICBwYWRkaW5nOiAycHg7XG5gO1xuXG5jb25zdCBTd2l0Y2hXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLnRvZ2dsZV9zd2l0Y2gge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgfVxuYDtcblxuZnVuY3Rpb24gQ3VzdG9tVGFibGVSb3cocHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgaGVhZGVyTWFwcGluZyxcbiAgICAgICAgaGFuZGxlVG9nZ2xlQWN0aW9uQ2xpY2ssXG4gICAgICAgIGhhbmRsZUVkaXRBY3Rpb25DbGljayxcbiAgICAgICAgaGFuZGxlQ2xvbmVBY3Rpb25DbGljayxcbiAgICAgICAgaGFuZGxlRGVsZXRlQWN0aW9uQ2xpY2ssXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgZ2V0Q3VzdG9tQ2VsbCA9IChjdXN0b21Sb3csIGhlYWRlcikgPT4ge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDdXN0b21UYWJsZUNvbnRyb2wsIHtcbiAgICAgICAgICAgIHNlcnZpY2VOYW1lOiByb3cuc2VydmljZU5hbWUsXG4gICAgICAgICAgICBmaWVsZDogaGVhZGVyLmZpZWxkLFxuICAgICAgICAgICAgcm93OiBjdXN0b21Sb3csXG4gICAgICAgICAgICBmaWxlTmFtZTogaGVhZGVyLmN1c3RvbUNlbGwuc3JjLFxuICAgICAgICAgICAgdHlwZTogaGVhZGVyLmN1c3RvbUNlbGwudHlwZSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJvd0FjdGlvbnNQcmltYXJ5QnV0dG9uID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChzZWxlY3RlZFJvdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGVDZWxsV3JhcHBlciBkYXRhLWNvbHVtbj1cImFjdGlvbnNcIiBrZXk9e3NlbGVjdGVkUm93LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgY29udGVudD17XygnRWRpdCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWN0aW9uQnV0dG9uQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJmbGF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PFBlbmNpbCBzY3JlZW5SZWFkZXJUZXh0PXtudWxsfSBzaXplPXsxfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRWRpdEFjdGlvbkNsaWNrKHNlbGVjdGVkUm93KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZWRpdEJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwIGNvbnRlbnQ9e18oJ0Nsb25lJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBY3Rpb25CdXR0b25Db21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cImZsYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8Q2xvbmUgc2NyZWVuUmVhZGVyVGV4dD17bnVsbH0gc2l6ZT17MX0gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsb25lQWN0aW9uQ2xpY2soc2VsZWN0ZWRSb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjbG9uZUJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwIGNvbnRlbnQ9e18oJ0RlbGV0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWN0aW9uQnV0dG9uQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJkZXN0cnVjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxUcmFzaCBzY3JlZW5SZWFkZXJUZXh0PXtudWxsfSBzaXplPXsxfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQWN0aW9uQ2xpY2soc2VsZWN0ZWRSb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkZWxldGVCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uR3JvdXA+XG4gICAgICAgICAgICAgICAgPC9UYWJsZUNlbGxXcmFwcGVyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgW2hhbmRsZUVkaXRBY3Rpb25DbGljaywgaGFuZGxlQ2xvbmVBY3Rpb25DbGljaywgaGFuZGxlRGVsZXRlQWN0aW9uQ2xpY2tdXG4gICAgKTtcblxuICAgIGxldCBzdGF0dXNDb250ZW50ID0gJ0VuYWJsZWQnO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIGlmIChyb3cuX190b2dnbGVTaG93U3Bpbm5lcikge1xuICAgICAgICBzdGF0dXNDb250ZW50ID0gPFdhaXRTcGlubmVyIC8+O1xuICAgIH0gZWxzZSBpZiAocm93LmRpc2FibGVkKSB7XG4gICAgICAgIHN0YXR1c0NvbnRlbnQgPVxuICAgICAgICAgICAgaGVhZGVyTWFwcGluZz8uZGlzYWJsZWQgJiYgaGVhZGVyTWFwcGluZy5kaXNhYmxlZFtyb3cuZGlzYWJsZWRdXG4gICAgICAgICAgICAgICAgPyBoZWFkZXJNYXBwaW5nLmRpc2FibGVkW3Jvdy5kaXNhYmxlZF1cbiAgICAgICAgICAgICAgICA6ICdEaXNhYmxlZCc7XG4gICAgfVxuXG4gICAgLy8gRml4IHNldCBvZiBwcm9wcyBhcmUgcGFzc2VkIHRvIFRhYmxlLlJvdyBlbGVtZW50XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxUYWJsZS5Sb3cgLy8gbm9zZW1ncmVwOiB0eXBlc2NyaXB0LnJlYWN0LnNlY3VyaXR5LmF1ZGl0LnJlYWN0LXByb3BzLWluamVjdGlvbi5yZWFjdC1wcm9wcy1pbmplY3Rpb24sIHR5cGVzY3JpcHQucmVhY3QuYmVzdC1wcmFjdGljZS5yZWFjdC1wcm9wcy1zcHJlYWRpbmcucmVhY3QtcHJvcHMtc3ByZWFkaW5nXG4gICAgICAgICAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMubWFwKChoZWFkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsSFRNTCA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLmN1c3RvbUNlbGwgJiYgaGVhZGVyLmN1c3RvbUNlbGwuc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGRhdGEtY29sdW1uPXtoZWFkZXIuZmllbGR9IGtleT17aGVhZGVyLmZpZWxkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDdXN0b21DZWxsKHJvdywgaGVhZGVyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci5maWVsZCA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxIVE1MID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBkYXRhLWNvbHVtbj17aGVhZGVyLmZpZWxkfSBrZXk9e2hlYWRlci5maWVsZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cm93Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyb3cuZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZUFjdGlvbkNsaWNrKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXshcm93LmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Jvdy5fX3RvZ2dsZVNob3dTcGlubmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwidG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidG9nZ2xlX3N3aXRjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFiZWw9e18oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJNYXBwaW5nPy5kaXNhYmxlZD8uZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhlYWRlck1hcHBpbmcuZGlzYWJsZWQuZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdFbmFibGVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNlbGVjdGVkTGFiZWw9e18oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJNYXBwaW5nPy5kaXNhYmxlZD8udHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyTWFwcGluZy5kaXNhYmxlZC50cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnRGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRlc3Q9XCJzdGF0dXNcIj57c3RhdHVzQ29udGVudH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZWFkZXIuZmllbGQgPT09ICdhY3Rpb25zJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxIVE1MID0gcm93QWN0aW9uc1ByaW1hcnlCdXR0b24ocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEhUTUwgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGRhdGEtY29sdW1uPXtoZWFkZXIuZmllbGR9IGtleT17aGVhZGVyLmZpZWxkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoZWFkZXJNYXBwaW5nW2hlYWRlci5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJNYXBwaW5nW2hlYWRlci5maWVsZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2hlYWRlci5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhlYWRlck1hcHBpbmdbaGVhZGVyLmZpZWxkXVtyb3dbaGVhZGVyLmZpZWxkXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd1toZWFkZXIuZmllbGRdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjZWxsSFRNTDtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuQ3VzdG9tVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICAgIHJvdzogUHJvcFR5cGVzLmFueSxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgaGVhZGVyTWFwcGluZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBoYW5kbGVUb2dnbGVBY3Rpb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlRWRpdEFjdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVDbG9uZUFjdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVEZWxldGVBY3Rpb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKEN1c3RvbVRhYmxlUm93KTtcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0J1dHRvbic7XG5pbXBvcnQgTW9kYWwgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9Nb2RhbCc7XG5pbXBvcnQgTWVzc2FnZSBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL01lc3NhZ2UnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgV2FpdFNwaW5uZXIgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9XYWl0U3Bpbm5lcic7XG5pbXBvcnQgdXBkYXRlIGZyb20gJ2ltbXV0YWJpbGl0eS1oZWxwZXInO1xuaW1wb3J0IHsgXyB9IGZyb20gJ0BzcGx1bmsvdWktdXRpbHMvaTE4bic7XG5pbXBvcnQgeyBnZW5lcmF0ZVRvYXN0IH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHsgYXhpb3NDYWxsV3JhcHBlciB9IGZyb20gJy4uL3V0aWwvYXhpb3NDYWxsV3JhcHBlcic7XG5pbXBvcnQgVGFibGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvVGFibGVDb250ZXh0JztcbmltcG9ydCB7IHBhcnNlRXJyb3JNc2csIGdldEZvcm1hdHRlZE1lc3NhZ2UgfSBmcm9tICcuLi91dGlsL21lc3NhZ2VVdGlsJztcbmltcG9ydCB7IFBBR0VfSU5QVVQgfSBmcm9tICcuLi9jb25zdGFudHMvcGFnZXMnO1xuXG5jb25zdCBNb2RhbFdyYXBwZXIgPSBzdHlsZWQoTW9kYWwpYFxuICAgIHdpZHRoOiA4MDBweDtcbmA7XG5cbmNsYXNzIERlbGV0ZU1vZGFsIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBUYWJsZUNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGlzRGVsZXRpbmc6IGZhbHNlLCBFcnJvck1zZzogJycgfTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXF1ZXN0Q2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIC8vIHNldCBFcnJvck1zZyB0byBlbXB0eSBzdHJpbmcgb24gY2xvc2Ugb3IgY2FuY2VsXG4gICAgICAgIC8vIHNvIHRoYXQgb24gYWdhaW4gb3BlbiBvZiBtb2RhbCBpdCBkb2VzIG5vdCBzaG93IHRoZSBzYW1lIEVycm9yTXNnXG4gICAgICAgIHRoaXMuc3RhdGUuRXJyb3JNc2cgPSAnJztcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVSZXF1ZXN0Q2xvc2UoKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgaXNEZWxldGluZzogdHJ1ZSwgRXJyb3JNc2c6ICcnIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF4aW9zQ2FsbFdyYXBwZXIoe1xuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5wcm9wcy5zZXJ2aWNlTmFtZX0vJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnN0YW56YU5hbWVcbiAgICAgICAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yU3VibWl0TXNnID0gcGFyc2VFcnJvck1zZyhlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IEVycm9yTXNnOiBlcnJvclN1Ym1pdE1zZywgaXNEZWxldGluZzogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFJvd0RhdGEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKHRoaXMuY29udGV4dC5yb3dEYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLnByb3BzLnNlcnZpY2VOYW1lXTogeyAkdW5zZXQ6IFt0aGlzLnByb3BzLnN0YW56YU5hbWVdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaXNEZWxldGluZzogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVUb2FzdChgRGVsZXRlZCBcIiR7dGhpcy5wcm9wcy5zdGFuemFOYW1lfVwiYCwgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgIGdlbmVyYXRlRXJyb3JNZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5FcnJvck1zZykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZSBhcHBlYXJhbmNlPVwiZmlsbFwiIHR5cGU9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuRXJyb3JNc2d9XG4gICAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IGRlbGV0ZU1zZztcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucGFnZSA9PT0gUEFHRV9JTlBVVCkge1xuICAgICAgICAgICAgZGVsZXRlTXNnID0gZ2V0Rm9ybWF0dGVkTWVzc2FnZSgxMDMsIFt0aGlzLnByb3BzLnN0YW56YU5hbWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZU1zZyA9IGdldEZvcm1hdHRlZE1lc3NhZ2UoMTAyLCBbdGhpcy5wcm9wcy5zdGFuemFOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNb2RhbFdyYXBwZXIgb3Blbj17dGhpcy5wcm9wcy5vcGVufT5cbiAgICAgICAgICAgICAgICA8TW9kYWwuSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtnZXRGb3JtYXR0ZWRNZXNzYWdlKDEwMSl9XG4gICAgICAgICAgICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXt0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxNb2RhbC5Cb2R5IGNsYXNzTmFtZT1cImRlbGV0ZVByb21wdFwiPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZW5lcmF0ZUVycm9yTWVzc2FnZSgpfVxuICAgICAgICAgICAgICAgICAgICA8cD57ZGVsZXRlTXNnfTwvcD5cbiAgICAgICAgICAgICAgICA8L01vZGFsLkJvZHk+XG4gICAgICAgICAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVJlcXVlc3RDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfKCdDYW5jZWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzRGVsZXRpbmd9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXt0aGlzLnN0YXRlLmlzRGVsZXRpbmcgPyA8V2FpdFNwaW5uZXIgLz4gOiBfKCdEZWxldGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNEZWxldGluZ31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgIDwvTW9kYWxXcmFwcGVyPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuRGVsZXRlTW9kYWwucHJvcFR5cGVzID0ge1xuICAgIHBhZ2U6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoYW5kbGVSZXF1ZXN0Q2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlcnZpY2VOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHN0YW56YU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEZWxldGVNb2RhbDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCB1c2VTdGF0ZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBUYWJsZSBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1RhYmxlJztcbmltcG9ydCB7IF8gfSBmcm9tICdAc3BsdW5rL3VpLXV0aWxzL2kxOG4nO1xuXG5pbXBvcnQgdXNlUXVlcnkgZnJvbSAnLi4vLi4vaG9va3MvdXNlUXVlcnknO1xuaW1wb3J0IHsgTU9ERV9DTE9ORSwgTU9ERV9FRElUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL21vZGVzJztcbmltcG9ydCB7IFBBR0VfSU5QVVQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0IHsgZ2V0VW5pZmllZENvbmZpZ3MgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RXhwYW5zaW9uUm93IH0gZnJvbSAnLi9UYWJsZUV4cGFuc2lvblJvdyc7XG5pbXBvcnQgeyBTVFlMRV9NT0RBTCwgU1RZTEVfUEFHRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kaWFsb2dTdHlsZXMnO1xuaW1wb3J0IEN1c3RvbVRhYmxlUm93IGZyb20gJy4vQ3VzdG9tVGFibGVSb3cnO1xuaW1wb3J0IEVudGl0eU1vZGFsIGZyb20gJy4uL0VudGl0eU1vZGFsJztcbmltcG9ydCBEZWxldGVNb2RhbCBmcm9tICcuLi9EZWxldGVNb2RhbCc7XG5pbXBvcnQgVGFibGVDb250ZXh0IGZyb20gJy4uLy4uL2NvbnRleHQvVGFibGVDb250ZXh0JztcbmltcG9ydCB7IE5vUmVjb3Jkc0RpdiB9IGZyb20gJy4vQ3VzdG9tVGFibGVTdHlsZSc7XG5cbmZ1bmN0aW9uIEN1c3RvbVRhYmxlKHtcbiAgICBwYWdlLFxuICAgIHNlcnZpY2VOYW1lLFxuICAgIGRhdGEsXG4gICAgaGFuZGxlVG9nZ2xlQWN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlT3BlblBhZ2VTdHlsZURpYWxvZyxcbiAgICBoYW5kbGVTb3J0LFxuICAgIHNvcnREaXIsXG4gICAgc29ydEtleSxcbn0pIHtcbiAgICBjb25zdCB1bmlmaWVkQ29uZmlncyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgY29uc3QgW2VudGl0eU1vZGFsLCBzZXRFbnRpdHlNb2RhbF0gPSB1c2VTdGF0ZSh7IG9wZW46IGZhbHNlIH0pO1xuICAgIGNvbnN0IFtkZWxldGVNb2RhbCwgc2V0RGVsZXRlTW9kYWxdID0gdXNlU3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHsgcm93RGF0YSB9ID0gdXNlQ29udGV4dChUYWJsZUNvbnRleHQpO1xuXG4gICAgY29uc3QgdGFibGVDb25maWcgPVxuICAgICAgICBwYWdlID09PSBQQUdFX0lOUFVUXG4gICAgICAgICAgICA/IHVuaWZpZWRDb25maWdzLnBhZ2VzLmlucHV0cy50YWJsZVxuICAgICAgICAgICAgOiB1bmlmaWVkQ29uZmlncy5wYWdlcy5jb25maWd1cmF0aW9uLnRhYnMuZmlsdGVyKCh4KSA9PiB4Lm5hbWUgPT09IHNlcnZpY2VOYW1lKVswXVxuICAgICAgICAgICAgICAgICAgLnRhYmxlO1xuICAgIGNvbnN0IHsgbW9yZUluZm8sIGhlYWRlciB9ID0gdGFibGVDb25maWc7XG4gICAgY29uc3QgaGVhZGVycyA9IHRhYmxlQ29uZmlnLmhlYWRlcjtcblxuICAgIGNvbnN0IGhlYWRlck1hcHBpbmcgPSB7fTtcbiAgICBoZWFkZXIuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBoZWFkZXJNYXBwaW5nW3guZmllbGRdID0geC5tYXBwaW5nO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VydmljZVRvU3R5bGVNYXAgPSB7fTtcbiAgICBpZiAocGFnZSA9PT0gUEFHRV9JTlBVVCkge1xuICAgICAgICB1bmlmaWVkQ29uZmlncy5wYWdlcy5pbnB1dHMuc2VydmljZXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgc2VydmljZVRvU3R5bGVNYXBbeC5uYW1lXSA9IHguc3R5bGUgPT09IFNUWUxFX1BBR0UgPyBTVFlMRV9QQUdFIDogU1RZTEVfTU9EQUw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnkoKTtcblxuICAgIC8vIFJ1biBvbmx5IG9uY2Ugd2hlbiBjb21wb25lbnQgaXMgbW91bnRlZCB0byBsb2FkIGNvbXBvbmVudCBiYXNlZCBvbiBpbml0aWFsIHF1ZXJ5IHBhcmFtc1xuICAgIC8vIGFuZCB3aGVuIHF1ZXJ5IHBhcmFtcyBhcmUgdXBkYXRlZFxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgcnVuIHdoZW4gdGFiIG1hdGNoZXMgc2VydmljZU5hbWUgb3IgaWYgaW4gaW5wdXQgcGFnZSB3aGVyZSBzZXJ2aWNlTmFtZSBpcyB1bmRlZmluZWRcbiAgICAgICAgaWYgKHF1ZXJ5ICYmIChxdWVyeS5nZXQoJ3RhYicpID09PSBzZXJ2aWNlTmFtZSB8fCB0eXBlb2Ygc2VydmljZU5hbWUgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgICAgLy8gT3BlbiBtb2RhbCB3aGVuIHJlY29yZCBpcyBhdmFpbGFibGUgaW4gcXVlcnkgcGFyYW1zIGFuZCBtb2RhbCBpcyBub3Qgb3BlblxuICAgICAgICAgICAgaWYgKHF1ZXJ5LmdldCgncmVjb3JkJykgJiYgIWVudGl0eU1vZGFsLm9wZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlS2V5ID0gT2JqZWN0LmtleXMocm93RGF0YSkuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHgpID0+IHR5cGVvZiByb3dEYXRhW3hdW3F1ZXJ5LmdldCgncmVjb3JkJyldICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gcm93RGF0YVtzZXJ2aWNlS2V5XVtxdWVyeS5nZXQoJ3JlY29yZCcpXTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RW50aXR5TW9kYWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZW50aXR5TW9kYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHJvdy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YW56YU5hbWU6IHJvdy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogTU9ERV9FRElULFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFxdWVyeS5nZXQoJ3JlY29yZCcpICYmIGVudGl0eU1vZGFsLm9wZW4pIHtcbiAgICAgICAgICAgICAgICAvLyBDbG9zZSBtb2RhbCBpZiByZWNvcmQgcXVlcnkgcGFyYW0gaXMgbm90IGF2YWlsYWJsZSBhbmQgbW9kYWwgaXMgb3BlblxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaW4gY2FzZSBvZiBNT0RFX0VESVQgd2hpY2ggaXMgaGFuZGxlZCBieVxuICAgICAgICAgICAgICAgIC8vIHVzZUVmZmVjdCBkZXBlbmRlbmN5IHdoaWNoIHdpbGwgb25seSBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YgZWRpdGluZyBlbnRpdHlcbiAgICAgICAgICAgICAgICBzZXRFbnRpdHlNb2RhbCh7IC4uLmVudGl0eU1vZGFsLCBvcGVuOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgaGFuZGxlRW50aXR5Q2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIHNldEVudGl0eU1vZGFsKHsgLi4uZW50aXR5TW9kYWwsIG9wZW46IGZhbHNlIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVFZGl0QWN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHNlbGVjdGVkUm93KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VydmljZVRvU3R5bGVNYXBbc2VsZWN0ZWRSb3cuc2VydmljZU5hbWVdID09PSAncGFnZScpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVPcGVuUGFnZVN0eWxlRGlhbG9nKHNlbGVjdGVkUm93LCBNT0RFX0VESVQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRFbnRpdHlNb2RhbCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudGl0eU1vZGFsLFxuICAgICAgICAgICAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZTogc2VsZWN0ZWRSb3cuc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YW56YU5hbWU6IHNlbGVjdGVkUm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IE1PREVfRURJVCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgICAgICBbZW50aXR5TW9kYWxdXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZURlbGV0ZUNsb3NlID0gKCkgPT4ge1xuICAgICAgICBzZXREZWxldGVNb2RhbCh7IC4uLmRlbGV0ZU1vZGFsLCBvcGVuOiBmYWxzZSB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvbmVBY3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAoc2VsZWN0ZWRSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlVG9TdHlsZU1hcFtzZWxlY3RlZFJvdy5zZXJ2aWNlTmFtZV0gPT09ICdwYWdlJykge1xuICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5QYWdlU3R5bGVEaWFsb2coc2VsZWN0ZWRSb3csIE1PREVfQ0xPTkUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRFbnRpdHlNb2RhbCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudGl0eU1vZGFsLFxuICAgICAgICAgICAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZTogc2VsZWN0ZWRSb3cuc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YW56YU5hbWU6IHNlbGVjdGVkUm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IE1PREVfQ0xPTkUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICAgICAgW2VudGl0eU1vZGFsXVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVEZWxldGVBY3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAoc2VsZWN0ZWRSb3cpID0+IHtcbiAgICAgICAgICAgIHNldERlbGV0ZU1vZGFsKHtcbiAgICAgICAgICAgICAgICAuLi5kZWxldGVNb2RhbCxcbiAgICAgICAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN0YW56YU5hbWU6IHNlbGVjdGVkUm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHNlbGVjdGVkUm93LnNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtkZWxldGVNb2RhbF1cbiAgICApO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVNb2RhbERpYWxvZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eU1vZGFsLm9wZW4pIHtcbiAgICAgICAgICAgIGxldCBsYWJlbDtcbiAgICAgICAgICAgIGlmIChwYWdlID09PSAnaW5wdXRzJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VydmljZXMgfSA9IHVuaWZpZWRDb25maWdzLnBhZ2VzPy5pbnB1dHM7XG4gICAgICAgICAgICAgICAgbGFiZWwgPSBzZXJ2aWNlcy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IGVudGl0eU1vZGFsLnNlcnZpY2VOYW1lKT8udGl0bGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGFicyB9ID0gdW5pZmllZENvbmZpZ3MucGFnZXM/LmNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgICAgICAgbGFiZWwgPSB0YWJzLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gZW50aXR5TW9kYWwuc2VydmljZU5hbWUpPy50aXRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEVudGl0eU1vZGFsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9wZW49e2VudGl0eU1vZGFsLm9wZW59XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3RDbG9zZT17aGFuZGxlRW50aXR5Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lPXtlbnRpdHlNb2RhbC5zZXJ2aWNlTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgc3RhbnphTmFtZT17ZW50aXR5TW9kYWwuc3RhbnphTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgbW9kZT17ZW50aXR5TW9kYWwubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgZm9ybUxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU1vZGFsLm1vZGUgPT09IE1PREVfQ0xPTkUgPyBfKGBDbG9uZSBgKSArIGxhYmVsIDogXyhgVXBkYXRlIGApICsgbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZURlbGV0ZURpYWxvZyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxEZWxldGVNb2RhbFxuICAgICAgICAgICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgICAgICAgICAgb3Blbj17ZGVsZXRlTW9kYWwub3Blbn1cbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0Q2xvc2U9e2hhbmRsZURlbGV0ZUNsb3NlfVxuICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lPXtkZWxldGVNb2RhbC5zZXJ2aWNlTmFtZX1cbiAgICAgICAgICAgICAgICBzdGFuemFOYW1lPXtkZWxldGVNb2RhbC5zdGFuemFOYW1lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2VuZXJhdGVDb2x1bW5zID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBbXTtcbiAgICAgICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbHVtbi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgc29ydEtleTogaXRlbS5maWVsZCB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbU1hcHBpbmc6IGl0ZW0ubWFwcGluZyA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uLnB1c2goeyBsYWJlbDogJ0FjdGlvbnMnLCBmaWVsZDogJ2FjdGlvbnMnLCBzb3J0S2V5OiAnJyB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1ucyA9IGdlbmVyYXRlQ29sdW1ucygpO1xuXG4gICAgY29uc3QgZ2V0VGFibGVIZWFkZXJDZWxsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRhYmxlLkhlYWQ+XG4gICAgICAgICAgICAgICAge2NvbHVtbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5tYXAoKGhlYWREYXRhKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZENlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2hlYWREYXRhLmZpZWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU29ydD17KGUpID0+IGhlYWREYXRhLnNvcnRLZXkgPyBoYW5kbGVTb3J0KGUsIGhlYWREYXRhKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEtleT17aGVhZERhdGEuc29ydEtleSA/IGhlYWREYXRhLnNvcnRLZXkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkRGF0YS5zb3J0S2V5ICYmIGhlYWREYXRhLnNvcnRLZXkgPT09IHNvcnRLZXkgPyBzb3J0RGlyIDogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoZWFkRGF0YS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuSGVhZENlbGw+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9UYWJsZS5IZWFkPlxuICAgICAgICApO1xuICAgIH0sIFtjb2x1bW5zLCBoYW5kbGVTb3J0LCBzb3J0RGlyLCBzb3J0S2V5XSk7XG5cbiAgICBjb25zdCBnZXRUYWJsZUJvZHkgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICB7ZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDdXN0b21UYWJsZVJvdyAvLyBub3NlbWdyZXA6IHR5cGVzY3JpcHQucmVhY3QuYmVzdC1wcmFjdGljZS5yZWFjdC1wcm9wcy1zcHJlYWRpbmcucmVhY3QtcHJvcHMtc3ByZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTWFwcGluZz17aGVhZGVyTWFwcGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUVkaXRBY3Rpb25DbGljayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb25lQWN0aW9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZWxldGVBY3Rpb25DbGljayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlQWN0aW9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUFjdGlvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4uKG1vcmVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuc2lvblJvdzogZ2V0RXhwYW5zaW9uUm93KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2NvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICAgIDxUYWJsZSAvLyBub3NlbWdyZXA6IHR5cGVzY3JpcHQucmVhY3QuYmVzdC1wcmFjdGljZS5yZWFjdC1wcm9wcy1zcHJlYWRpbmcucmVhY3QtcHJvcHMtc3ByZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgIHN0cmlwZVJvd3NcbiAgICAgICAgICAgICAgICAgICAgey4uLihtb3JlSW5mbyA/IHsgcm93RXhwYW5zaW9uOiAnc2luZ2xlJyB9IDoge30pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2dldFRhYmxlSGVhZGVyQ2VsbCgpfVxuICAgICAgICAgICAgICAgICAgICB7Z2V0VGFibGVCb2R5KCl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWRhdGEubGVuZ3RoID8gPE5vUmVjb3Jkc0Rpdj5ObyByZWNvcmRzIGZvdW5kPC9Ob1JlY29yZHNEaXY+IDogbnVsbH1cbiAgICAgICAgICAgIHtnZW5lcmF0ZU1vZGFsRGlhbG9nKCl9XG4gICAgICAgICAgICB7Z2VuZXJhdGVEZWxldGVEaWFsb2coKX1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuQ3VzdG9tVGFibGUucHJvcFR5cGVzID0ge1xuICAgIHBhZ2U6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXJ2aWNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBoYW5kbGVUb2dnbGVBY3Rpb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlT3BlblBhZ2VTdHlsZURpYWxvZzogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc29ydERpcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3J0S2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhDdXN0b21UYWJsZSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRleHQgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9UZXh0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmZ1bmN0aW9uIFRhYmxlRmlsdGVyKHByb3BzKSB7XG4gICAgY29uc3QgZGVib3VuY2UgPSAoZnVuYywgd2FpdCkgPT4ge1xuICAgICAgICBsZXQgdGltZW91dDtcblxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIHJldHVybmVkIGFuZCB3aWxsIGJlIGV4ZWN1dGVkIG1hbnkgdGltZXNcbiAgICAgICAgLy8gV2Ugc3ByZWFkICguLi5hcmdzKSB0byBjYXB0dXJlIGFueSBudW1iZXIgb2YgcGFyYW1ldGVycyB3ZSB3YW50IHRvIHBhc3NcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyXG4gICAgICAgICAgICAvLyB0aGUgZGVib3VuY2UgdGltZSBoYXMgZWxhcHNlZFxuICAgICAgICAgICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbnVsbCB0aW1lb3V0IHRvIGluZGljYXRlIHRoZSBkZWJvdW5jZSBlbmRlZFxuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBmdW5jKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCByZXNldCB0aGUgd2FpdGluZyBldmVyeSBmdW5jdGlvbiBleGVjdXRpb24uXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGVwIHRoYXQgcHJldmVudHMgdGhlIGZ1bmN0aW9uIGZyb21cbiAgICAgICAgICAgIC8vIGJlaW5nIGV4ZWN1dGVkIGJlY2F1c2UgaXQgd2lsbCBuZXZlciByZWFjaCB0aGVcbiAgICAgICAgICAgIC8vIGluc2lkZSBvZiB0aGUgcHJldmlvdXMgc2V0VGltZW91dFxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXG4gICAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBkZWJvdW5jZSB3YWl0aW5nIHBlcmlvZC5cbiAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgcmV0dXJucyBhIHRydXRoeSB2YWx1ZVxuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dFxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlYXJjaFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlclwiXG4gICAgICAgICAgICBvbkNoYW5nZT17ZGVib3VuY2UocHJvcHMuaGFuZGxlQ2hhbmdlLCAyMDApfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cblRhYmxlRmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgICBoYW5kbGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVGaWx0ZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvU2VsZWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnQHNwbHVuay9yZWFjdC11aS9CdXR0b24nO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1BhZ2luYXRvcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IF8gfSBmcm9tICdAc3BsdW5rL3VpLXV0aWxzL2kxOG4nO1xuXG5pbXBvcnQgVGFibGVGaWx0ZXIgZnJvbSAnLi9UYWJsZUZpbHRlcic7XG5pbXBvcnQgVGFibGVDb250ZXh0IGZyb20gJy4uLy4uL2NvbnRleHQvVGFibGVDb250ZXh0JztcbmltcG9ydCB7IFRhYmxlU2VsZWN0Qm94V3JhcHBlciB9IGZyb20gJy4vQ3VzdG9tVGFibGVTdHlsZSc7XG5pbXBvcnQgeyBQQUdFX0lOUFVUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BhZ2VzJztcblxuY29uc3QgVGFibGVIZWFkZXJXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYztcbiAgICBwYWRkaW5nLXRvcDogNXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbmA7XG5cbmNvbnN0IFRhYmxlRmlsdGVyV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICB3aWR0aDogMTAwJTtcbmA7XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyKHsgcGFnZSwgc2VydmljZXMsIHRvdGFsRWxlbWVudCwgaGFuZGxlUmVxdWVzdE1vZGFsT3BlbiB9KSB7XG4gICAgY29uc3Qge1xuICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgIHNldEN1cnJlbnRQYWdlLFxuICAgICAgICBzZXRQYWdlU2l6ZSxcbiAgICAgICAgc2VhcmNoVHlwZSxcbiAgICAgICAgc2V0U2VhcmNoVHlwZSxcbiAgICAgICAgc2V0U2VhcmNoVGV4dCxcbiAgICB9ID0gdXNlQ29udGV4dChUYWJsZUNvbnRleHQpO1xuXG4gICAgY29uc3QgaXRlbUxhYmVsID0gcGFnZSA9PT0gUEFHRV9JTlBVVCA/ICdJbnB1dCcgOiAnSXRlbSc7XG5cbiAgICBjb25zdCBnZXRTZWFyY2hUeXBlRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXJ2aWNlcy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXJyID0gW107XG4gICAgICAgIGFyciA9IHNlcnZpY2VzLm1hcCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxTZWxlY3QuT3B0aW9uIGtleT17c2VydmljZS5uYW1lfSBsYWJlbD17c2VydmljZS50aXRsZX0gdmFsdWU9e3NlcnZpY2UubmFtZX0gLz47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFyci51bnNoaWZ0KDxTZWxlY3QuT3B0aW9uIGtleT1cImFsbFwiIGxhYmVsPXtfKCdBbGwnKX0gdmFsdWU9XCJhbGxcIiAvPik7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFR5cGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZHJvcGRvd25JbnB1dFwiXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBhZ2UoMCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlYXJjaFR5cGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2Fycn1cbiAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVIZWFkZXJXcmFwcGVyPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbnB1dE51bWJlclwiPlxuICAgICAgICAgICAgICAgICAgICB7dG90YWxFbGVtZW50fVxuICAgICAgICAgICAgICAgICAgICB7dG90YWxFbGVtZW50ID4gMSA/IF8oYCAke2l0ZW1MYWJlbH1zYCkgOiBfKGAgJHtpdGVtTGFiZWx9YCl9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHtwYWdlID09PSBQQUdFX0lOUFVUID8gKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGVTZWxlY3RCb3hXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwYWdlU2l6ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkcm9wZG93blBhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRQYWdlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlU2l6ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lk9wdGlvbiBrZXk9XCIxMFwiIGxhYmVsPXtfKCcxMCBQZXIgUGFnZScpfSB2YWx1ZT17MTB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5PcHRpb24ga2V5PVwiMjVcIiBsYWJlbD17XygnMjUgUGVyIFBhZ2UnKX0gdmFsdWU9ezI1fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuT3B0aW9uIGtleT1cIjUwXCIgbGFiZWw9e18oJzUwIFBlciBQYWdlJyl9IHZhbHVlPXs1MH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldFNlYXJjaFR5cGVEcm9wZG93bigpfVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlU2VsZWN0Qm94V3JhcHBlcj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPFRhYmxlRmlsdGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8VGFibGVGaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50UGFnZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlYXJjaFRleHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1RhYmxlRmlsdGVyV3JhcHBlcj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPFBhZ2luYXRvclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgcGFnZTogcGFnZU51bWJlciB9KSA9PiBzZXRDdXJyZW50UGFnZShwYWdlTnVtYmVyIC0gMSl9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ9e2N1cnJlbnRQYWdlICsgMX1cbiAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2hvd0xhc3RQYWdlTGlua1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzPXtNYXRoLmNlaWwodG90YWxFbGVtZW50IC8gcGFnZVNpemUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge3BhZ2UgPT09IFBBR0VfSU5QVVQgPyBudWxsIDogKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17XygnQWRkJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZXF1ZXN0TW9kYWxPcGVufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9UYWJsZUhlYWRlcldyYXBwZXI+XG4gICAgKTtcbn1cblxuVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICAgIHBhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VydmljZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgICB0b3RhbEVsZW1lbnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgaGFuZGxlUmVxdWVzdE1vZGFsT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVwZGF0ZSBmcm9tICdpbW11dGFiaWxpdHktaGVscGVyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5pbXBvcnQgeyBXYWl0U3Bpbm5lcldyYXBwZXIgfSBmcm9tICcuL0N1c3RvbVRhYmxlU3R5bGUnO1xuaW1wb3J0IHsgYXhpb3NDYWxsV3JhcHBlciB9IGZyb20gJy4uLy4uL3V0aWwvYXhpb3NDYWxsV3JhcHBlcic7XG5pbXBvcnQgeyBnZXRVbmlmaWVkQ29uZmlncywgZ2VuZXJhdGVUb2FzdCwgaXNUcnVlIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBDdXN0b21UYWJsZSBmcm9tICcuL0N1c3RvbVRhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tICcuL1RhYmxlSGVhZGVyJztcbmltcG9ydCBUYWJsZUNvbnRleHQgZnJvbSAnLi4vLi4vY29udGV4dC9UYWJsZUNvbnRleHQnO1xuaW1wb3J0IHsgUEFHRV9JTlBVVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wYWdlcyc7XG5cbmZ1bmN0aW9uIFRhYmxlV3JhcHBlcih7IHBhZ2UsIHNlcnZpY2VOYW1lLCBoYW5kbGVSZXF1ZXN0TW9kYWxPcGVuLCBoYW5kbGVPcGVuUGFnZVN0eWxlRGlhbG9nIH0pIHtcbiAgICBjb25zdCBbc29ydEtleSwgc2V0U29ydEtleV0gPSB1c2VTdGF0ZSgnbmFtZScpO1xuICAgIGNvbnN0IFtzb3J0RGlyLCBzZXRTb3J0RGlyXSA9IHVzZVN0YXRlKCdhc2MnKTtcbiAgICBjb25zdCBbaXNDdXN0b21NYXBwaW5nLCBzZXRDdXN0b21NYXBwaW5nU3RhdHVzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3QgeyByb3dEYXRhLCBzZXRSb3dEYXRhLCBwYWdlU2l6ZSwgY3VycmVudFBhZ2UsIHNlYXJjaFRleHQsIHNlYXJjaFR5cGUgfSA9IHVzZUNvbnRleHQoXG4gICAgICAgIFRhYmxlQ29udGV4dFxuICAgICk7XG5cbiAgICBjb25zdCB1bmlmaWVkQ29uZmlncyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgY29uc3QgdGFibGVDb25maWcgPVxuICAgICAgICBwYWdlID09PSBQQUdFX0lOUFVUXG4gICAgICAgICAgICA/IHVuaWZpZWRDb25maWdzLnBhZ2VzLmlucHV0cy50YWJsZVxuICAgICAgICAgICAgOiB1bmlmaWVkQ29uZmlncy5wYWdlcy5jb25maWd1cmF0aW9uLnRhYnMuZmlsdGVyKCh4KSA9PiB4Lm5hbWUgPT09IHNlcnZpY2VOYW1lKVswXVxuICAgICAgICAgICAgICAgICAgLnRhYmxlO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0YWJsZUNvbmZpZy5oZWFkZXI7XG4gICAgY29uc3QgeyBtb3JlSW5mbyB9ID0gdGFibGVDb25maWc7XG4gICAgY29uc3Qgc2VydmljZXMgPVxuICAgICAgICBwYWdlID09PSBQQUdFX0lOUFVUXG4gICAgICAgICAgICA/IHVuaWZpZWRDb25maWdzLnBhZ2VzLmlucHV0cy5zZXJ2aWNlc1xuICAgICAgICAgICAgOiB1bmlmaWVkQ29uZmlncy5wYWdlcy5jb25maWd1cmF0aW9uLnRhYnMuZmlsdGVyKCh4KSA9PiB4Lm5hbWUgPT09IHNlcnZpY2VOYW1lKTtcblxuICAgIGNvbnN0IG1vZGlmeUFQSVJlc3BvbnNlID0gKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIHNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VydmljZSAmJiBzZXJ2aWNlLm5hbWUgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcE9iaiA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGFbaW5kZXhdLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0bXBPYmpbdmFsLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFsLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdmFsLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdmFsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZTogc2VydmljZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZVRpdGxlOiBzZXJ2aWNlLnRpdGxlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JqW3NlcnZpY2UubmFtZV0gPSB0bXBPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRSb3dEYXRhKG9iaik7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBmZXRjaElucHV0cyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdHMucHVzaChcbiAgICAgICAgICAgICAgICBheGlvc0NhbGxXcmFwcGVyKHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU6IHNlcnZpY2UubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IGNvdW50OiAtMSB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5hbGwocmVxdWVzdHMpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JDb2RlID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBFcnJvciByZWNlaXZlZCBmcm9tIHNlcnZlcjogJHtlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2VzWzBdLnRleHR9YDtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gcGFnZSA9PT0gUEFHRV9JTlBVVCA/ICdFUlIwMDAxJyA6ICdFUlIwMDAyJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYE5vIHJlc3BvbnNlIHJlY2VpdmVkIHdoaWxlIG1ha2luZyByZXF1ZXN0IHRvICR7cGFnZX0gc2VydmljZXNgO1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAnRVJSMDAwMyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIGhhcHBlbmVkIGluIHNldHRpbmcgdXAgdGhlIHJlcXVlc3QgdGhhdCB0cmlnZ2VyZWQgYW4gRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBFcnJvciBtYWtpbmcgcmVxdWVzdCB0byAke3BhZ2V9IHNlcnZpY2VzYDtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gJ0VSUjAwMDQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBlcnJvci51Y2NFcnJvckNvZGUgPSBlcnJvckNvZGU7XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVUb2FzdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBtb2RpZnlBUElSZXNwb25zZShyZXNwb25zZS5tYXAoKHJlcykgPT4gcmVzLmRhdGEuZW50cnkpKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBmZXRjaElucHV0cygpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW10pO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93IHtPYmplY3R9IHJvd1xuICAgICAqL1xuICAgIGNvbnN0IGNoYW5nZVRvZ2dsZVN0YXR1cyA9IChyb3cpID0+IHtcbiAgICAgICAgc2V0Um93RGF0YSgoY3VycmVudFJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGUoY3VycmVudFJvd0RhdGEsIHtcbiAgICAgICAgICAgICAgICBbcm93LnNlcnZpY2VOYW1lXToge1xuICAgICAgICAgICAgICAgICAgICBbcm93Lm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX3RvZ2dsZVNob3dTcGlubmVyOiB7ICRzZXQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBib2R5LmFwcGVuZCgnZGlzYWJsZWQnLCAhcm93LmRpc2FibGVkKTtcbiAgICAgICAgYXhpb3NDYWxsV3JhcHBlcih7XG4gICAgICAgICAgICBzZXJ2aWNlTmFtZTogYCR7cm93LnNlcnZpY2VOYW1lfS8ke3Jvdy5uYW1lfWAsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgY3VzdG9tSGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFja09uRXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRSb3dEYXRhKChjdXJyZW50Um93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlKGN1cnJlbnRSb3dEYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93LnNlcnZpY2VOYW1lXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3cubmFtZV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190b2dnbGVTaG93U3Bpbm5lcjogeyAkc2V0OiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBzZXRSb3dEYXRhKChjdXJyZW50Um93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGUoY3VycmVudFJvd0RhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgW3Jvdy5zZXJ2aWNlTmFtZV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3cubmFtZV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBRERPTi0zOTEyNTogaXNUcnVlIHJlcXVpcmVkIGlmIHNwbHVua3RhdWNjbGliIHJlc3RoYW5kbGVycycgc3VwZXIoKSBpcyBub3QgaW52b2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB7ICRzZXQ6IGlzVHJ1ZShyZXNwb25zZS5kYXRhLmVudHJ5WzBdLmNvbnRlbnQuZGlzYWJsZWQpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX190b2dnbGVTaG93U3Bpbm5lcjogeyAkc2V0OiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlU29ydCA9IChlLCB2YWwpID0+IHtcbiAgICAgICAgY29uc3QgcHJldlNvcnRLZXkgPSBzb3J0S2V5O1xuICAgICAgICBjb25zdCBwcmV2U29ydERpciA9IHByZXZTb3J0S2V5ID09PSB2YWwuc29ydEtleSA/IHNvcnREaXIgOiAnbm9uZSc7XG4gICAgICAgIGNvbnN0IG5leHRTb3J0RGlyID0gcHJldlNvcnREaXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgICAgIHNldFNvcnREaXIobmV4dFNvcnREaXIpO1xuICAgICAgICBzZXRTb3J0S2V5KHZhbC5zb3J0S2V5KTtcbiAgICAgICAgc2V0Q3VzdG9tTWFwcGluZ1N0YXR1cyh2YWwuaXNDdXN0b21NYXBwaW5nKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUgYW4gYXJycmF5IGFuZCBtYXRjaCBlYWNoIGtleS12YWx1ZSB3aXRoIHRoZSBzZWFyY2hUZXh0XG4gICAgICogSXQgd2lsbCByZXR1cm4gYSBuZXcgYXJyYXkgd2hpY2ggd2lsbCBtYXRjaCB3aXRoIHNlYXJjaFRleHRcbiAgICAgKi9cbiAgICBjb25zdCBmaW5kQnlNYXRjaGluZ1ZhbHVlID0gKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGNvbnN0IHRhYmxlRmllbGRzID0gW107XG5cbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKChoZWFkRGF0YSkgPT4ge1xuICAgICAgICAgICAgdGFibGVGaWVsZHMucHVzaChoZWFkRGF0YS5maWVsZCk7XG4gICAgICAgIH0pO1xuICAgICAgICBtb3JlSW5mbz8uZm9yRWFjaCgobW9yZUluZm9EYXRhKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUZpZWxkcy5wdXNoKG1vcmVJbmZvRGF0YS5maWVsZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YVt2XSkuZm9yRWFjaCgodnYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRmllbGRzLmluY2x1ZGVzKHZ2KSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YVt2XVt2dl0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGFbdl1bdnZdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGRhdGFbdl0pO1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRSb3dEYXRhID0gKCkgPT4ge1xuICAgICAgICBsZXQgYXJyID0gW107XG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSAnYWxsJykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocm93RGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0FyciA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHNlYXJjaFRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0FyciA9IGZpbmRCeU1hdGNoaW5nVmFsdWUocm93RGF0YVtrZXldKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdBcnIgPSBPYmplY3Qua2V5cyhyb3dEYXRhW2tleV0pLm1hcCgodmFsKSA9PiByb3dEYXRhW2tleV1bdmFsXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyciA9IGFyci5jb25jYXQobmV3QXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyID0gZmluZEJ5TWF0Y2hpbmdWYWx1ZShyb3dEYXRhW3NlYXJjaFR5cGVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9zb3J0S2V5ID0gaXNDdXN0b21NYXBwaW5nID8gJ3NlcnZpY2VUaXRsZScgOiBzb3J0S2V5O1xuXG4gICAgICAgIC8vIFNvcnQgdGhlIGFycmF5IGJhc2VkIG9uIHRoZSBzb3J0IHZhbHVlXG4gICAgICAgIGNvbnN0IHNvcnRlZEFyciA9IGFyci5zb3J0KChyb3dBLCByb3dCKSA9PiB7XG4gICAgICAgICAgICBpZiAoc29ydERpciA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dBVmFsdWUgPSByb3dBW19zb3J0S2V5XSA9PT0gdW5kZWZpbmVkID8gJycgOiByb3dBW19zb3J0S2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dCVmFsdWUgPSByb3dCW19zb3J0S2V5XSA9PT0gdW5kZWZpbmVkID8gJycgOiByb3dCW19zb3J0S2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93QVZhbHVlID4gcm93QlZhbHVlID8gMSA6IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvcnREaXIgPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FWYWx1ZSA9IHJvd0FbX3NvcnRLZXldID09PSB1bmRlZmluZWQgPyAnJyA6IHJvd0FbX3NvcnRLZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0JWYWx1ZSA9IHJvd0JbX3NvcnRLZXldID09PSB1bmRlZmluZWQgPyAnJyA6IHJvd0JbX3NvcnRLZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dCVmFsdWUgPiByb3dBVmFsdWUgPyAxIDogLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRBcnIgPSBzb3J0ZWRBcnIuc2xpY2UoY3VycmVudFBhZ2UgKiBwYWdlU2l6ZSwgKGN1cnJlbnRQYWdlICsgMSkgKiBwYWdlU2l6ZSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlID4gMCAmJiAhdXBkYXRlZEFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRBcnIgPSBzb3J0ZWRBcnIuc2xpY2UoKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZSwgcGFnZVNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt1cGRhdGVkQXJyLCBhcnIubGVuZ3RoXTtcbiAgICB9O1xuXG4gICAgaWYgKGVycm9yPy51Y2NFcnJvckNvZGUpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIDxXYWl0U3Bpbm5lcldyYXBwZXIgLz47XG4gICAgfVxuXG4gICAgY29uc3QgW2ZpbHRlcmVkRGF0YSwgdG90YWxFbGVtZW50XSA9IGdldFJvd0RhdGEoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgICBwYWdlPXtwYWdlfVxuICAgICAgICAgICAgICAgIHNlcnZpY2VzPXtzZXJ2aWNlc31cbiAgICAgICAgICAgICAgICB0b3RhbEVsZW1lbnQ9e3RvdGFsRWxlbWVudH1cbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0TW9kYWxPcGVuPXtoYW5kbGVSZXF1ZXN0TW9kYWxPcGVufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxDdXN0b21UYWJsZVxuICAgICAgICAgICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgICAgICAgICAgc2VydmljZU5hbWU9e3NlcnZpY2VOYW1lfVxuICAgICAgICAgICAgICAgIGRhdGE9e2ZpbHRlcmVkRGF0YX1cbiAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVBY3Rpb25DbGljaz17KHJvdykgPT4gY2hhbmdlVG9nZ2xlU3RhdHVzKHJvdyl9XG4gICAgICAgICAgICAgICAgaGFuZGxlU29ydD17aGFuZGxlU29ydH1cbiAgICAgICAgICAgICAgICBzb3J0RGlyPXtzb3J0RGlyfVxuICAgICAgICAgICAgICAgIHNvcnRLZXk9e3NvcnRLZXl9XG4gICAgICAgICAgICAgICAgaGFuZGxlT3BlblBhZ2VTdHlsZURpYWxvZz17aGFuZGxlT3BlblBhZ2VTdHlsZURpYWxvZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cblRhYmxlV3JhcHBlci5wcm9wVHlwZXMgPSB7XG4gICAgcGFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYW5kbGVSZXF1ZXN0TW9kYWxPcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVPcGVuUGFnZVN0eWxlRGlhbG9nOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oVGFibGVXcmFwcGVyKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTGluayBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0xpbmsnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgRVJSMDAwMTogKFxuICAgICAgICA8PlxuICAgICAgICAgICAgVGhpcyBpcyBub3JtYWwgb24gU3BsdW5rIHNlYXJjaCBoZWFkcyBhcyB0aGV5IGRvIG5vdCByZXF1aXJlIGFuIElucHV0IHBhZ2UuIENoZWNrIHlvdXJcbiAgICAgICAgICAgIGluc3RhbGxhdGlvbiBvciByZXR1cm4gdG8gdGhlIDxMaW5rIHRvPVwiY29uZmlndXJhdGlvblwiPmNvbmZpZ3VyYXRpb24gcGFnZTwvTGluaz4uXG4gICAgICAgIDwvPlxuICAgICksXG4gICAgRVJSMDAwMjpcbiAgICAgICAgJ0NvbmZpZ3VyYXRpb24gcGFnZSBmYWlsZWQgdG8gbG9hZCwgdGhlIHNlcnZlciByZXBvcnRlZCBpbnRlcm5hbCBlcnJvcnMgd2hpY2ggbWF5IGluZGljYXRlIHlvdSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBwYWdlLicsXG4gICAgRVJSMDAwMzogJ0ZhaWxlZCB0byBsb2FkIGNvbnRlbnQgZHVlIHRvIG5vIHJlc3BvbnNlIGZyb20gc2VydmVyIScsXG4gICAgRVJSMDAwNDogJ0ZhaWxlZCB0byBsb2FkIGNvbnRlbnQgZHVlIHRvIGZhaWxlZCByZXF1ZXN0IHByb2Nlc3NpbmchJyxcbiAgICBFUlIwMDA1OiAnRmFpbGVkIHRvIGxvYWQgY3VycmVudCBzdGF0ZSBmb3Igc2VsZWN0ZWQgZW50aXR5IGluIGZvcm0hJyxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IEhlYWRpbmcgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9IZWFkaW5nJztcbmltcG9ydCB7IF8gfSBmcm9tICdAc3BsdW5rL3VpLXV0aWxzL2kxOG4nO1xuaW1wb3J0IENhcmQgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9DYXJkJztcbmltcG9ydCBXYXJuaW5nSWNvbiBmcm9tICdAc3BsdW5rL3JlYWN0LWljb25zL1dhcm5pbmcnO1xuaW1wb3J0IGVycm9yQ29kZXMgZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yQ29kZXMnO1xuXG5jbGFzcyBFcnJvckJvdW5kYXJ5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IGVycm9yQ29kZTogbnVsbCwgZXJyb3I6IG51bGwsIGVycm9ySW5mbzogbnVsbCB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgLy8gVXBkYXRlIHN0YXRlIHNvIHRoZSBuZXh0IHJlbmRlciB3aWxsIHNob3cgdGhlIGZhbGxiYWNrIFVJLlxuICAgICAgICByZXR1cm4geyBlcnJvckNvZGU6IGVycm9yLnVjY0Vycm9yQ29kZSB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pIHtcbiAgICAgICAgLy8gQ2F0Y2ggZXJyb3JzIGluIGFueSBjb21wb25lbnRzIGJlbG93IGFuZCByZS1yZW5kZXIgd2l0aCBlcnJvciBtZXNzYWdlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBlcnJvckluZm8sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBZb3UgY2FuIGFsc28gbG9nIGVycm9yIG1lc3NhZ2VzIHRvIGFuIGVycm9yIHJlcG9ydGluZyBzZXJ2aWNlIGhlcmVcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBwYXRoXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgYWxpZ249XCJjZW50ZXJcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxMCUnIH19PlxuICAgICAgICAgICAgICAgICAgICA8Q2FyZCBzdHlsZT17eyBib3hTaGFkb3c6ICcxMHB4IDEwcHggNXB4ICNhYWFhYWEnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPENhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIZWFkaW5nIHN0eWxlPXt7IHRleHRBbGlnbjogJ2NlbnRlcicgfX0gbGV2ZWw9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8V2FybmluZ0ljb24gc3R5bGU9e3sgZm9udFNpemU6ICcxMjBweCcsIGNvbG9yOiAnI2ZmOTkwMCcgfX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvckNvZGUgPT09ICdFUlIwMDAxJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfKCdGYWlsZWQgdG8gbG9hZCBJbnB1dHMgUGFnZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF8oJ1NvbWV0aGluZyB3ZW50IHdyb25nIScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZC5Cb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmVycm9yQ29kZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfKGVycm9yQ29kZXNbdGhpcy5zdGF0ZS5lcnJvckNvZGVdKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmVycm9yPy50b1N0cmluZygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ2FyZC5Cb2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPENhcmQuRm9vdGVyIHNob3dCb3JkZXI9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvckNvZGUgPyB0aGlzLnN0YXRlLmVycm9yQ29kZSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NhcmQuRm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vcm1hbGx5LCBqdXN0IHJlbmRlciBjaGlsZHJlblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG59XG5cbkVycm9yQm91bmRhcnkucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVycm9yQm91bmRhcnk7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/package/appserver/static/js/build/1.licenses.txt b/package/appserver/static/js/build/1.licenses.txt deleted file mode 100644 index ef2919c..0000000 --- a/package/appserver/static/js/build/1.licenses.txt +++ /dev/null @@ -1,1281 +0,0 @@ -@babel/runtime -MIT -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@splunk/react-icons -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/react-toast-notifications -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/react-ui -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/themes -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/ui-utils -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -immutability-helper -MIT -MIT License - -Copyright (c) 2017 Moshe Kolodny - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -lodash -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -lodash-es -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -react-flip-move -MIT -The MIT License (MIT) - -Copyright (c) 2016-present Joshua Comeau - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -react-resize-detector -MIT -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -regenerator-runtime -MIT -MIT License - -Copyright (c) 2014-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -resize-observer-polyfill -MIT -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -uuid -MIT -The MIT License (MIT) - -Copyright (c) 2010-2020 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package/appserver/static/js/build/3.js b/package/appserver/static/js/build/3.js deleted file mode 100644 index ead3894..0000000 --- a/package/appserver/static/js/build/3.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{496:function(e,t,n){e.exports=function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=122)}({0:function(e,t){e.exports=n(12)},1:function(e,t){e.exports=n(3)},10:function(e,t){e.exports=n(71)},11:function(e,t){e.exports=n(48)},12:function(e,t,n){"use strict";function o(e,t){e&&("function"==typeof e?e(t):e.current=t)}n.d(t,"a",(function(){return o}))},122:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return F})),n.d(t,"Tab",(function(){return A}));var o=n(2),r=n.n(o),i=n(1),a=n.n(i),c=n(9),l=n(3),s=n.n(l),p=n(0),b=s.a.div.withConfig({displayName:"TabBarStyles__Styled",componentId:"sc-1t85fen-0"})([""," position:relative;&::before{content:'';display:block;position:absolute;left:0;top:0;right:0;bottom:0;border:0 solid ",";}",";"],p.mixins.reset("flex"),Object(p.pick)({enterprise:p.variables.borderLightColor,prisma:p.variables.neutral200}),Object(p.pickVariant)("$layout",{horizontal:{prisma:Object(p.pickVariant)("$withUnderline",{true:Object(l.css)(["&::before{border-bottom-width:1px;}"])}),enterprise:Object(l.css)(["&::before{border-bottom-width:1px;}"])},vertical:{enterprise:Object(l.css)(["display:inline-block;&::before{border-right-width:1px;}"]),prisma:Object(l.css)(["&::before{border-bottom-width:1px;}"])}})),u=n(10),d=n(18),f=n.n(d),h=n(14),y=n.n(h),v=n(11),m=n.n(v),O=s()(m.a).withConfig({displayName:"TabStyles__StyledClickable",componentId:"sc-1ry8mzj-0"})(["flex:0 1 auto;display:block;position:relative;line-height:",";text-align:center;white-space:nowrap;color:",";",";&[aria-selected='true']{cursor:default;","}&[aria-selected='false']{box-shadow:none;font-weight:",";"," &:hover:not([disabled]){","}}&:focus{box-shadow:",";","}"],Object(p.pick)({enterprise:"24px",prisma:"20px"}),p.variables.contentColorDefault,Object(p.pickVariant)("$layout",{horizontal:Object(l.css)(["padding:",";margin-bottom:1px;"],Object(p.pick)({enterprise:"3px 20px",prisma:{comfortable:"0 20px",compact:"0 16px"}})),vertical:{enterprise:Object(l.css)(["width:100%;text-align:left;right:1px;padding:10px 20px;",""],(function(e){return e.$icon&&Object(l.css)(["text-align:center;"])})),prisma:Object(l.css)(["padding:",";margin-bottom:1px;"],Object(p.pick)({enterprise:"3px 20px",prisma:{comfortable:"0 20px",compact:"0 16px"}}))}}),Object(p.pick)({enterprise:Object(l.css)(["font-weight:",";"],p.variables.fontWeightBold),prisma:Object(l.css)(["color:",";font-weight:",";"],p.variables.contentColorActive,p.variables.fontWeightBold)}),Object(p.pick)({enterprise:"normal",prisma:p.variables.fontWeightSemiBold}),Object(p.pick)({prisma:Object(l.css)(["&::after{display:block;content:attr(title);font-weight:",";height:0;color:transparent;overflow:hidden;visibility:hidden;}"],p.variables.fontWeightSemiBold)}),Object(p.pick)({prisma:Object(l.css)(["color:",";"],p.variables.contentColorActive)}),p.variables.focusShadowInset,Object(p.pick)({prisma:Object(l.css)(["color:",";"],p.variables.contentColorActive)})),g=s.a.div.withConfig({displayName:"TabStyles__StyledUnderline",componentId:"sc-1ry8mzj-1"})(["position:absolute;"," ",";[aria-selected='true'] > &{background-color:",";",";}",":hover:not([disabled]) > &{",";}"],Object(p.pick)({enterprise:Object(l.css)(["background:",";"],p.variables.borderLightColor)}),Object(p.pickVariant)("$layout",{horizontal:Object(l.css)(["height:0;box-sizing:border-box;width:",";"," transition:height 0.2s;"],Object(p.pick)({enterprise:Object(l.css)(["calc(100% - 20px * 2)"]),prisma:{comfortable:Object(l.css)(["calc(100% - 20px * 2)"]),compact:Object(l.css)(["calc(100% - 16px * 2)"])}}),Object(p.pick)({enterprise:Object(l.css)(["bottom:-1px;"])})),vertical:{enterprise:Object(l.css)(["width:0;height:calc(100% - 10px * 2);top:10px;right:-1px;transition:width 0.2s;"]),prisma:Object(l.css)(["height:0;box-sizing:border-box;width:",";transition:height 0.2s;"],Object(p.pick)({comfortable:Object(l.css)(["calc(100% - 20px * 2)"]),compact:Object(l.css)(["calc(100% - 16px * 2)"])}))}}),Object(p.pick)({enterprise:p.variables.accentColor,prisma:p.variables.contentColorActive}),Object(p.pickVariant)("$layout",{horizontal:{enterprise:Object(l.css)(["height:3px;"]),prisma:Object(p.pickVariant)("$withUnderline",{true:Object(l.css)(["height:1px;"])})},vertical:{enterprise:Object(l.css)(["width:3px;"]),prisma:Object(l.css)(["height:1px;"])}}),O,Object(p.pickVariant)("$layout",{horizontal:{enterprise:Object(l.css)(["height:3px;"])},vertical:{enterprise:Object(l.css)(["width:3px;"])}})),j=s.a.span.withConfig({displayName:"TabStyles__StyledIcon",componentId:"sc-1ry8mzj-2"})(["",";"],Object(p.pickVariant)("$iconSize",{inline:Object(l.css)([""," text-align:left;padding-right:",";> svg{transform:translateY(-1px);}"],Object(p.pick)({prisma:Object(l.css)(["display:inline-block;width:16px;height:16px;"])}),Object(p.pick)({enterprise:"0.4em",prisma:"8px"})),small:Object(l.css)(["font-size:24px;height:24px;text-align:center;display:block;padding:4px 0;"]),large:Object(l.css)(["font-size:48px;height:48px;text-align:center;display:block;padding:8px 0 0;"])})),x=s.a.div.withConfig({displayName:"TabStyles__StyledLabel",componentId:"sc-1ry8mzj-3"})(["overflow:hidden;text-overflow:ellipsis;min-width:10px;margin:",";"],Object(p.pick)({enterprise:"0",prisma:{comfortable:"16px 0",compact:"10px 0"}})),w=s.a.div.withConfig({displayName:"TabStyles__StyledCount",componentId:"sc-1ry8mzj-4"})([""," display:inline-block;background:",";border-radius:18px;color:",";font-size:",";line-height:10px;padding:4px 6px;margin-left:",";"," &[disabled]{background:",";color:",";}"],p.mixins.reset("inlne-block"),p.variables.interactiveColorBackground,p.variables.contentColorDefault,Object(p.pick)({enterprise:"inherit",prisma:"10px"}),Object(p.pick)({enterprise:"0",prisma:"8px"}),Object(p.pick)({enterprise:Object(l.css)(["&::before{content:'(';}&::after{content:')';}"])}),p.variables.interactiveColorBackgroundDisabled,p.variables.contentColorDisabled),k=s.a.div.withConfig({displayName:"TabStyles__StyledTooltipContent",componentId:"sc-1ry8mzj-5"})(["padding:8px;font-size:",";"],p.variables.fontSizeSmall),S=n(12);function C(e){return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function z(){return(z=Object.assign||function(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function T(e,t){for(var n=0;n=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var N={autoActivate:a.a.bool,activeTabId:a.a.string,appearance:a.a.oneOf(["navigation","context"]),children:a.a.node,disabled:a.a.bool,elementRef:a.a.oneOfType([a.a.func,a.a.object]),iconSize:a.a.oneOf(["inline","small","large"]),layout:a.a.oneOf(["horizontal","vertical"]),onChange:a.a.func,tabWidth:a.a.number};function W(e){var t=e.activeTabId,n=e.autoActivate,i=e.appearance,a=void 0===i?"navigation":i,l=e.children,s=e.disabled,p=void 0!==s&&s,u=e.elementRef,d=e.iconSize,f=void 0===d?"inline":d,h=e.layout,y=void 0===h?"horizontal":h,v=e.onChange,m=e.tabWidth,O=K(e,["activeTabId","autoActivate","appearance","children","disabled","elementRef","iconSize","layout","onChange","tabWidth"]),g=Object(o.useRef)(0),j=[],x=Object(o.useMemo)((function(){return"vertical"===y?"down":"right"}),[y]),w=Object(o.useMemo)((function(){return"vertical"===y?"up":"left"}),[y]),k=0,S=o.Children.toArray(l).filter(o.isValidElement).map((function(e){var i={active:t===e.props.tabId,appearance:a,disabled:p||e.props.disabled,iconSize:f,layout:y,onClick:function(e,t){null==v||v(e,{selectedTabId:t.tabId})},onFocus:function(e,t){var o=t.tabKey;null!=o&&(g.current=o),n&&(null==v||v(e,{selectedTabId:t.tabId}))},style:m&&m>50?{width:m}:e.props.style};if("string"!=typeof e.type&&e.type.name===A.name){var c=r.a.createRef();i.ref=c,j.push(c),i.tabKey=k,k+=1}return Object(o.cloneElement)(e,i)}));return r.a.createElement(b,B({"data-tab-layout":y,"data-test-active-tab-id":t,"data-test":"tab-bar",role:"tablist",ref:u,$layout:y,$withUnderline:"navigation"===a,onKeyDown:function(e){var t,n,o=Object(c.keycode)(e.nativeEvent);(o===x?t=j[g.current+1]||j[0]:o===w?t=j[g.current-1]||j[j.length-1]:"home"===o?t=j[0]:"end"===o&&(t=j[j.length-1]),null!=t)&&(null===(n=t.current)||void 0===n||n.focus(),e.preventDefault())}},O),S)}W.propTypes=N,W.Tab=A;var F=W},14:function(e,t){e.exports=n(74)},18:function(e,t){e.exports=n(132)},2:function(e,t){e.exports=n(0)},3:function(e,t){e.exports=n(1)},9:function(e,t){e.exports=n(73)}})}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHNwbHVuay9yZWFjdC11aS9UYWJCYXIuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCIwIiwiMSIsIjEwIiwiMTEiLCIxMiIsIl9fd2VicGFja19leHBvcnRzX18iLCJ1cGRhdGVSZWFjdFJlZiIsInJlZiIsImN1cnJlbnQiLCIxMjIiLCJUYWJCYXJfVGFiQmFyIiwiVGFiQmFyX1RhYiIsImV4dGVybmFsX3JlYWN0XyIsImV4dGVybmFsX3JlYWN0X2RlZmF1bHQiLCJleHRlcm5hbF9wcm9wX3R5cGVzXyIsImV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCIsImtleWJvYXJkXyIsImV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyIsImV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQiLCJ0aGVtZXNfIiwiU3R5bGVkIiwiYSIsImRpdiIsIndpdGhDb25maWciLCJkaXNwbGF5TmFtZSIsImNvbXBvbmVudElkIiwicmVzZXQiLCJlbnRlcnByaXNlIiwiYm9yZGVyTGlnaHRDb2xvciIsInByaXNtYSIsIm5ldXRyYWwyMDAiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJpZF8iLCJQb3BvdmVyXyIsIlBvcG92ZXJfZGVmYXVsdCIsIlNjcmVlblJlYWRlckNvbnRlbnRfIiwiU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0IiwiQ2xpY2thYmxlXyIsIkNsaWNrYWJsZV9kZWZhdWx0IiwiU3R5bGVkQ2xpY2thYmxlIiwiY29udGVudENvbG9yRGVmYXVsdCIsImNvbWZvcnRhYmxlIiwiY29tcGFjdCIsIl9yZWYiLCIkaWNvbiIsImZvbnRXZWlnaHRCb2xkIiwiY29udGVudENvbG9yQWN0aXZlIiwiZm9udFdlaWdodFNlbWlCb2xkIiwiZm9jdXNTaGFkb3dJbnNldCIsIlN0eWxlZFVuZGVybGluZSIsImFjY2VudENvbG9yIiwiU3R5bGVkSWNvbiIsInNwYW4iLCJpbmxpbmUiLCJzbWFsbCIsImxhcmdlIiwiU3R5bGVkTGFiZWwiLCJTdHlsZWRDb3VudCIsImludGVyYWN0aXZlQ29sb3JCYWNrZ3JvdW5kIiwiaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmREaXNhYmxlZCIsImNvbnRlbnRDb2xvckRpc2FibGVkIiwiU3R5bGVkVG9vbHRpcENvbnRlbnQiLCJmb250U2l6ZVNtYWxsIiwiX3R5cGVvZiIsIm9iaiIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJfZXh0ZW5kcyIsImFzc2lnbiIsInRhcmdldCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImFwcGx5IiwidGhpcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImtleXMiLCJpbmRleE9mIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzb3VyY2VTeW1ib2xLZXlzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfY3JlYXRlU3VwZXIiLCJEZXJpdmVkIiwiaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJEYXRlIiwidG9TdHJpbmciLCJlIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsInJlc3VsdCIsIlN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiTmV3VGFyZ2V0IiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiZ2V0UHJvdG90eXBlT2YiLCJfZGVmaW5lUHJvcGVydHkiLCJwcm9wVHlwZXMiLCJhY3RpdmUiLCJib29sIiwiYXBwZWFyYW5jZSIsIm9uZU9mIiwiYXJpYUNvbnRyb2xzIiwic3RyaW5nIiwiY291bnQiLCJudW1iZXIiLCJkaXNhYmxlZCIsImVsZW1lbnRSZWYiLCJvbmVPZlR5cGUiLCJmdW5jIiwiaWNvbiIsIm5vZGUiLCJpY29uU2l6ZSIsImlkIiwibGFiZWwiLCJlbGVtZW50IiwibGF5b3V0Iiwib25DbGljayIsIm9uRm9jdXMiLCJ0YWJJZCIsInRhYktleSIsInRvIiwidG9vbHRpcCIsIlRhYl9UYWIiLCJfQ29tcG9uZW50Iiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiVHlwZUVycm9yIiwiX2luaGVyaXRzIiwiVGFiIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfc3VwZXIiLCJfdGhpcyIsImluc3RhbmNlIiwiX2NsYXNzQ2FsbENoZWNrIiwiZWwiLCJzZXRTdGF0ZSIsImFuY2hvciIsIm9wZW4iLCJfdGhpcyRwcm9wcyIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlVG9vbHRpcE9wZW4iLCJfdGhpcyRwcm9wczIiLCJwb3BvdmVySWQiLCJzdGF0ZSIsIl90aGlzJHN0YXRlJGFuY2hvciIsImZvY3VzIiwiX3RoaXMkcHJvcHMzIiwib3RoZXJQcm9wcyIsIl90aGlzJHN0YXRlIiwiY3JlYXRlRWxlbWVudCIsInVuZGVmaW5lZCIsIiRsYXlvdXQiLCJoYW5kbGVNb3VudCIsImhhbmRsZUNsaWNrIiwiaGFuZGxlRm9jdXMiLCJvbk1vdXNlRW50ZXIiLCJvbkJsdXIiLCJoYW5kbGVUb29sdGlwQ2xvc2UiLCJvbk1vdXNlTGVhdmUiLCJyb2xlIiwidGFiSW5kZXgiLCJ0aXRsZSIsIiR3aXRoVW5kZXJsaW5lIiwiJGljb25TaXplIiwiY2xvc2VSZWFzb25zIiwiZGVmYXVsdFBsYWNlbWVudCIsIlRhYkJhcl9leHRlbmRzIiwiVGFiQmFyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiVGFiQmFyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJUYWJCYXJfcHJvcFR5cGVzIiwiYXV0b0FjdGl2YXRlIiwiYWN0aXZlVGFiSWQiLCJjaGlsZHJlbiIsIm9uQ2hhbmdlIiwidGFiV2lkdGgiLCJUYWJCYXIiLCJfcmVmJGFwcGVhcmFuY2UiLCJfcmVmJGRpc2FibGVkIiwiX3JlZiRpY29uU2l6ZSIsIl9yZWYkbGF5b3V0IiwiZm9jdXNlZFRhYktleSIsInRhYlJlZnMiLCJuZXh0VGFiS2V5IiwicHJldmlvdXNUYWJLZXkiLCJ0YWJLZXlDb3VudGVyIiwiY2xvbmVkQ2hpbGRyZW4iLCJ0b0FycmF5IiwiZmlsdGVyIiwibWFwIiwiY2hpbGQiLCJjaGlsZFByb3BzIiwiZGF0YSIsInNlbGVjdGVkVGFiSWQiLCJzdHlsZSIsIndpZHRoIiwidHlwZSIsImNyZWF0ZVJlZiIsInB1c2giLCJvbktleURvd24iLCJ0YWJUb0ZvY3VzUmVmIiwiX3RhYlRvRm9jdXNSZWYkY3VycmVuIiwibmF0aXZlRXZlbnQiLCIxNCIsIjE4IiwiMiIsIjMiLCI5Il0sIm1hcHBpbmdzIjoiNkVBQUFBLEVBQU9DLFFBQ0UsU0FBVUMsR0FFVCxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVSixRQUduQyxJQUFJRCxFQUFTRyxFQUFpQkUsR0FBWSxDQUN6Q0MsRUFBR0QsRUFDSEUsR0FBRyxFQUNITixRQUFTLElBVVYs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QUExQm9OLEdBQTRDQSxFQUFzQnZELFFBQzlIL0QsRUFBRXlELG9CQUdMUSxHQUFhc0MsR0FHbEJWLEVBQU9qRixVQUFZMkUsRUFDbkJNLEVBQU9qRCxJQUFNdkksRUFDZ0IsSUFBSUQsRUFBZ0IsR0FRM0NvTixHQUNBLFNBQVVuUSxFQUFRQyxHQUV4QkQsRUFBT0MsUUFBVSxFQUFRLEtBSW5CbVEsR0FDQSxTQUFVcFEsRUFBUUMsR0FFeEJELEVBQU9DLFFBQVUsRUFBUSxNQUluQm9RLEVBQ0EsU0FBVXJRLEVBQVFDLEdBRXhCRCxFQUFPQyxRQUFVLEVBQVEsSUFJbkJxUSxFQUNBLFNBQVV0USxFQUFRQyxHQUV4QkQsRUFBT0MsUUFBVSxFQUFRLElBSW5Cc1EsRUFDQSxTQUFVdlEsRUFBUUMsR0FFeEJELEVBQU9DLFFBQVUsRUFBUSIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMjIpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3RoZW1lc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9pZFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDExOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL0NsaWNrYWJsZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXBkYXRlUmVhY3RSZWY7IH0pO1xuLyoqXG4gKiBVcGRhdGVzIGEgUmVhY3QgcmVmLiBDYWxsYmFjayByZWZzIGFuZCBvYmplY3QgcmVmcyAoZnJvbSBgY3JlYXRlUmVmYCBhbmQgYHVzZVJlZmApIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHJlZiAtIFRoZSBSZWFjdCBjYWxsYmFjayBvciBvYmplY3QgcmVmLiBDYW4gYmUgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICogQHBhcmFtIGN1cnJlbnQgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSByZWYuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVJlYWN0UmVmKHJlZiwgY3VycmVudCkge1xuICBpZiAocmVmKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihjdXJyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIHB1YmxpYyBzaWduYXR1cmUgb2YgdGhpcyB1dGlsIHVzZXMgUmVhY3QuUmVmPFQ+IHRvIG1pcnJvciB0aGUgd2F5IFJlYWN0IHR5cGVzIHJlZnMuXG4gICAgICAvLyB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gc2lnbmFsIFwid2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyAnY3VycmVudCcsIG5vdCB5b3VcIi5cbiAgICAgIHJlZi5jdXJyZW50ID0gY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEyMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBFU00gQ09NUEFUIEZMQUdcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiZGVmYXVsdFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIHJlZXhwb3J0ICovIFRhYkJhcl9UYWJCYXI7IH0pO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiVGFiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogcmVleHBvcnQgKi8gVGFiQmFyX1RhYjsgfSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJyZWFjdFwiXG52YXIgZXh0ZXJuYWxfcmVhY3RfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbnZhciBleHRlcm5hbF9yZWFjdF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9yZWFjdF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwicHJvcC10eXBlc1wiXG52YXIgZXh0ZXJuYWxfcHJvcF90eXBlc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xudmFyIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfcHJvcF90eXBlc18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay91aS11dGlscy9rZXlib2FyZFwiXG52YXIga2V5Ym9hcmRfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInN0eWxlZC1jb21wb25lbnRzXCJcbnZhciBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJAc3BsdW5rL3RoZW1lc1wiXG52YXIgdGhlbWVzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYkJhci9UYWJCYXJTdHlsZXMudHNcblxuXG52YXIgU3R5bGVkID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGFiQmFyU3R5bGVzX19TdHlsZWRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXQ4NWZlbi0wXCJcbn0pKFtcIlwiLCBcIiBwb3NpdGlvbjpyZWxhdGl2ZTsmOjpiZWZvcmV7Y29udGVudDonJztkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2JvcmRlcjowIHNvbGlkIFwiLCBcIjt9XCIsIFwiO1wiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnZmxleCcpLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJMaWdodENvbG9yLFxuICBwcmlzbWE6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0ubmV1dHJhbDIwMFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckbGF5b3V0Jywge1xuICBob3Jpem9udGFsOiB7XG4gICAgcHJpc21hOiBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJHdpdGhVbmRlcmxpbmUnLCB7XG4gICAgICAvKiBjb250ZXh0IGFwcGVhcmFuY2UgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFByaXNtYSAqL1xuICAgICAgXCJ0cnVlXCI6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6OmJlZm9yZXtib3JkZXItYm90dG9tLXdpZHRoOjFweDt9XCJdKVxuICAgIH0pLFxuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6OmJlZm9yZXtib3JkZXItYm90dG9tLXdpZHRoOjFweDt9XCJdKVxuICB9LFxuICB2ZXJ0aWNhbDoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImRpc3BsYXk6aW5saW5lLWJsb2NrOyY6OmJlZm9yZXtib3JkZXItcmlnaHQtd2lkdGg6MXB4O31cIl0pLFxuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjo6YmVmb3Jle2JvcmRlci1ib3R0b20td2lkdGg6MXB4O31cIl0pXG4gIH1cbn0pKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIkBzcGx1bmsvdWktdXRpbHMvaWRcIlxudmFyIGlkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9Qb3BvdmVyXCJcbnZhciBQb3BvdmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIFBvcG92ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oUG9wb3Zlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9TY3JlZW5SZWFkZXJDb250ZW50XCJcbnZhciBTY3JlZW5SZWFkZXJDb250ZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIFNjcmVlblJlYWRlckNvbnRlbnRfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oU2NyZWVuUmVhZGVyQ29udGVudF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiQHNwbHVuay9yZWFjdC11aS9DbGlja2FibGVcIlxudmFyIENsaWNrYWJsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBDbGlja2FibGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oQ2xpY2thYmxlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYkJhci9UYWJTdHlsZXMudHNcblxuXG5cbnZhciBTdHlsZWRDbGlja2FibGUgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0KCkoQ2xpY2thYmxlX2RlZmF1bHQuYSkud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlRhYlN0eWxlc19fU3R5bGVkQ2xpY2thYmxlXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFyeThtemotMFwiXG59KShbXCJmbGV4OjAgMSBhdXRvO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6XCIsIFwiO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjpcIiwgXCI7XCIsIFwiOyZbYXJpYS1zZWxlY3RlZD0ndHJ1ZSdde2N1cnNvcjpkZWZhdWx0O1wiLCBcIn0mW2FyaWEtc2VsZWN0ZWQ9J2ZhbHNlJ117Ym94LXNoYWRvdzpub25lO2ZvbnQtd2VpZ2h0OlwiLCBcIjtcIiwgXCIgJjpob3Zlcjpub3QoW2Rpc2FibGVkXSl7XCIsIFwifX0mOmZvY3Vze2JveC1zaGFkb3c6XCIsIFwiO1wiLCBcIn1cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMjRweCcsXG4gIHByaXNtYTogJzIwcHgnXG59KSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0LCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGxheW91dCcsIHtcbiAgaG9yaXpvbnRhbDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wicGFkZGluZzpcIiwgXCI7bWFyZ2luLWJvdHRvbToxcHg7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiAnM3B4IDIwcHgnLFxuICAgIHByaXNtYToge1xuICAgICAgY29tZm9ydGFibGU6ICcwIDIwcHgnLFxuICAgICAgY29tcGFjdDogJzAgMTZweCdcbiAgICB9XG4gIH0pKSxcbiAgdmVydGljYWw6IHtcbiAgICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ3aWR0aDoxMDAlO3RleHQtYWxpZ246bGVmdDtyaWdodDoxcHg7cGFkZGluZzoxMHB4IDIwcHg7XCIsIFwiXCJdLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyICRpY29uID0gX3JlZi4kaWNvbjtcbiAgICAgIHJldHVybiAkaWNvbiAmJiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ0ZXh0LWFsaWduOmNlbnRlcjtcIl0pO1xuICAgIH0pLFxuICAgIC8vIHByaXNtYSBmYWxscyBiYWNrIHRvIGhvcml6b250YWwgbGF5b3V0XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJwYWRkaW5nOlwiLCBcIjttYXJnaW4tYm90dG9tOjFweDtcIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgICAgZW50ZXJwcmlzZTogJzNweCAyMHB4JyxcbiAgICAgIHByaXNtYToge1xuICAgICAgICBjb21mb3J0YWJsZTogJzAgMjBweCcsXG4gICAgICAgIGNvbXBhY3Q6ICcwIDE2cHgnXG4gICAgICB9XG4gICAgfSkpXG4gIH1cbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZm9udC13ZWlnaHQ6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250V2VpZ2h0Qm9sZCksXG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiO2ZvbnQtd2VpZ2h0OlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlLCB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvbnRXZWlnaHRCb2xkKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnbm9ybWFsJyxcbiAgcHJpc21hOiB0aGVtZXNfW1widmFyaWFibGVzXCJdLmZvbnRXZWlnaHRTZW1pQm9sZFxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIiY6OmFmdGVye2Rpc3BsYXk6YmxvY2s7Y29udGVudDphdHRyKHRpdGxlKTtmb250LXdlaWdodDpcIiwgXCI7aGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3c6aGlkZGVuO3Zpc2liaWxpdHk6aGlkZGVuO31cIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9udFdlaWdodFNlbWlCb2xkKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImNvbG9yOlwiLCBcIjtcIl0sIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uY29udGVudENvbG9yQWN0aXZlKVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uZm9jdXNTaGFkb3dJbnNldCwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY29sb3I6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmUpXG59KSk7XG52YXIgU3R5bGVkVW5kZXJsaW5lID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLmRpdi53aXRoQ29uZmlnKHtcbiAgZGlzcGxheU5hbWU6IFwiVGFiU3R5bGVzX19TdHlsZWRVbmRlcmxpbmVcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXJ5OG16ai0xXCJcbn0pKFtcInBvc2l0aW9uOmFic29sdXRlO1wiLCBcIiBcIiwgXCI7W2FyaWEtc2VsZWN0ZWQ9J3RydWUnXSA+ICZ7YmFja2dyb3VuZC1jb2xvcjpcIiwgXCI7XCIsIFwiO31cIiwgXCI6aG92ZXI6bm90KFtkaXNhYmxlZF0pID4gJntcIiwgXCI7fVwiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJhY2tncm91bmQ6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5ib3JkZXJMaWdodENvbG9yKVxufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckbGF5b3V0Jywge1xuICBob3Jpem9udGFsOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJoZWlnaHQ6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6XCIsIFwiO1wiLCBcIiB0cmFuc2l0aW9uOmhlaWdodCAwLjJzO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gICAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYygxMDAlIC0gMjBweCAqIDIpXCJdKSxcbiAgICBwcmlzbWE6IHtcbiAgICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjYWxjKDEwMCUgLSAyMHB4ICogMilcIl0pLFxuICAgICAgY29tcGFjdDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYygxMDAlIC0gMTZweCAqIDIpXCJdKVxuICAgIH1cbiAgfSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImJvdHRvbTotMXB4O1wiXSlcbiAgfSkpLFxuICB2ZXJ0aWNhbDoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIndpZHRoOjA7aGVpZ2h0OmNhbGMoMTAwJSAtIDEwcHggKiAyKTt0b3A6MTBweDtyaWdodDotMXB4O3RyYW5zaXRpb246d2lkdGggMC4ycztcIl0pLFxuICAgIC8vIHByaXNtYSBmYWxscyBiYWNrIHRvIGhvcml6b250YWwgbGF5b3V0XG4gICAgcHJpc21hOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJoZWlnaHQ6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6XCIsIFwiO3RyYW5zaXRpb246aGVpZ2h0IDAuMnM7XCJdLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICAgIGNvbWZvcnRhYmxlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJjYWxjKDEwMCUgLSAyMHB4ICogMilcIl0pLFxuICAgICAgY29tcGFjdDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiY2FsYygxMDAlIC0gMTZweCAqIDIpXCJdKVxuICAgIH0pKVxuICB9XG59KSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6IHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uYWNjZW50Q29sb3IsXG4gIHByaXNtYTogdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JBY3RpdmVcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGxheW91dCcsIHtcbiAgaG9yaXpvbnRhbDoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImhlaWdodDozcHg7XCJdKSxcbiAgICBwcmlzbWE6IE9iamVjdCh0aGVtZXNfW1wicGlja1ZhcmlhbnRcIl0pKCckd2l0aFVuZGVybGluZScsIHtcbiAgICAgIC8vIGNvbnRleHQgYXBwZWFyYW5jZSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgUHJpc21hXG4gICAgICBcInRydWVcIjogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiaGVpZ2h0OjFweDtcIl0pXG4gICAgfSlcbiAgfSxcbiAgdmVydGljYWw6IHtcbiAgICBlbnRlcnByaXNlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJ3aWR0aDozcHg7XCJdKSxcbiAgICAvLyBwcmlzbWEgZmFsbHMgYmFjayB0byBob3Jpem9udGFsICRsYXlvdXRcbiAgICBwcmlzbWE6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImhlaWdodDoxcHg7XCJdKVxuICB9XG59KSwgU3R5bGVkQ2xpY2thYmxlLCBPYmplY3QodGhlbWVzX1tcInBpY2tWYXJpYW50XCJdKSgnJGxheW91dCcsIHtcbiAgaG9yaXpvbnRhbDoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcImhlaWdodDozcHg7XCJdKVxuICB9LFxuICB2ZXJ0aWNhbDoge1xuICAgIGVudGVycHJpc2U6IE9iamVjdChleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19bXCJjc3NcIl0pKFtcIndpZHRoOjNweDtcIl0pXG4gIH1cbn0pKTtcbnZhciBTdHlsZWRJY29uID0gZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfZGVmYXVsdC5hLnNwYW4ud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlRhYlN0eWxlc19fU3R5bGVkSWNvblwiLFxuICBjb21wb25lbnRJZDogXCJzYy0xcnk4bXpqLTJcIlxufSkoW1wiXCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrVmFyaWFudFwiXSkoJyRpY29uU2l6ZScsIHtcbiAgaW5saW5lOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJcIiwgXCIgdGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmctcmlnaHQ6XCIsIFwiOz4gc3Zne3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO31cIl0sIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICAgIHByaXNtYTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtcIl0pXG4gIH0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgICBlbnRlcnByaXNlOiAnMC40ZW0nLFxuICAgIHByaXNtYTogJzhweCdcbiAgfSkpLFxuICBzbWFsbDogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiZm9udC1zaXplOjI0cHg7aGVpZ2h0OjI0cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweCAwO1wiXSksXG4gIGxhcmdlOiBPYmplY3QoZXh0ZXJuYWxfc3R5bGVkX2NvbXBvbmVudHNfW1wiY3NzXCJdKShbXCJmb250LXNpemU6NDhweDtoZWlnaHQ6NDhweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OHB4IDAgMDtcIl0pXG59KSk7XG52YXIgU3R5bGVkTGFiZWwgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUYWJTdHlsZXNfX1N0eWxlZExhYmVsXCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFyeThtemotM1wiXG59KShbXCJvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttaW4td2lkdGg6MTBweDttYXJnaW46XCIsIFwiO1wiXSwgT2JqZWN0KHRoZW1lc19bXCJwaWNrXCJdKSh7XG4gIGVudGVycHJpc2U6ICcwJyxcbiAgcHJpc21hOiB7XG4gICAgY29tZm9ydGFibGU6ICcxNnB4IDAnLFxuICAgIGNvbXBhY3Q6ICcxMHB4IDAnXG4gIH1cbn0pKTtcbnZhciBTdHlsZWRDb3VudCA9IGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX2RlZmF1bHQuYS5kaXYud2l0aENvbmZpZyh7XG4gIGRpc3BsYXlOYW1lOiBcIlRhYlN0eWxlc19fU3R5bGVkQ291bnRcIixcbiAgY29tcG9uZW50SWQ6IFwic2MtMXJ5OG16ai00XCJcbn0pKFtcIlwiLCBcIiBkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kOlwiLCBcIjtib3JkZXItcmFkaXVzOjE4cHg7Y29sb3I6XCIsIFwiO2ZvbnQtc2l6ZTpcIiwgXCI7bGluZS1oZWlnaHQ6MTBweDtwYWRkaW5nOjRweCA2cHg7bWFyZ2luLWxlZnQ6XCIsIFwiO1wiLCBcIiAmW2Rpc2FibGVkXXtiYWNrZ3JvdW5kOlwiLCBcIjtjb2xvcjpcIiwgXCI7fVwiXSwgdGhlbWVzX1tcIm1peGluc1wiXS5yZXNldCgnaW5sbmUtYmxvY2snKSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5pbnRlcmFjdGl2ZUNvbG9yQmFja2dyb3VuZCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEZWZhdWx0LCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogJ2luaGVyaXQnLFxuICBwcmlzbWE6ICcxMHB4J1xufSksIE9iamVjdCh0aGVtZXNfW1wicGlja1wiXSkoe1xuICBlbnRlcnByaXNlOiAnMCcsXG4gIHByaXNtYTogJzhweCdcbn0pLCBPYmplY3QodGhlbWVzX1tcInBpY2tcIl0pKHtcbiAgZW50ZXJwcmlzZTogT2JqZWN0KGV4dGVybmFsX3N0eWxlZF9jb21wb25lbnRzX1tcImNzc1wiXSkoW1wiJjo6YmVmb3Jle2NvbnRlbnQ6JygnO30mOjphZnRlcntjb250ZW50OicpJzt9XCJdKVxufSksIHRoZW1lc19bXCJ2YXJpYWJsZXNcIl0uaW50ZXJhY3RpdmVDb2xvckJhY2tncm91bmREaXNhYmxlZCwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5jb250ZW50Q29sb3JEaXNhYmxlZCk7XG52YXIgU3R5bGVkVG9vbHRpcENvbnRlbnQgPSBleHRlcm5hbF9zdHlsZWRfY29tcG9uZW50c19kZWZhdWx0LmEuZGl2LndpdGhDb25maWcoe1xuICBkaXNwbGF5TmFtZTogXCJUYWJTdHlsZXNfX1N0eWxlZFRvb2x0aXBDb250ZW50XCIsXG4gIGNvbXBvbmVudElkOiBcInNjLTFyeThtemotNVwiXG59KShbXCJwYWRkaW5nOjhweDtmb250LXNpemU6XCIsIFwiO1wiXSwgdGhlbWVzX1tcInZhcmlhYmxlc1wiXS5mb250U2l6ZVNtYWxsKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy91cGRhdGVSZWFjdFJlZi50c1xudmFyIHVwZGF0ZVJlYWN0UmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL1RhYkJhci9UYWIudHN4XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxudmFyIHByb3BUeXBlcyA9IHtcbiAgLyoqIEBwcml2YXRlLiBJcyB0aGUgdGFiIGFjdGl2ZS4gKi9cbiAgYWN0aXZlOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ib29sLFxuXG4gIC8qKiBAcHJpdmF0ZS4gU2V0dGluZyB0aGlzIHByb3AgdG8gJ2NvbnRleHQnIGNyZWF0ZXMgYW4gYXBwZWFyYW5jZSB3aXRob3V0IGFuIHVuZGVybGluZS4gKi9cbiAgYXBwZWFyYW5jZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWyduYXZpZ2F0aW9uJywgJ2NvbnRleHQnXSksXG4gIGFyaWFDb250cm9sczogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBjb3VudDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubnVtYmVyLFxuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgaWNvbjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZSxcblxuICAvKiogQHByaXZhdGUuIFNpemUgb2YgaWNvbi4gKi9cbiAgaWNvblNpemU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnaW5saW5lJywgJ3NtYWxsJywgJ2xhcmdlJ10pLFxuICBpZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuc3RyaW5nLFxuICBsYWJlbDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5zdHJpbmcsIGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmVsZW1lbnRdKSxcblxuICAvKiogQHByaXZhdGUuIFRoZSBsYXlvdXQgb2YgdGFicyAqL1xuICBsYXlvdXQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddKSxcblxuICAvKiogQHByaXZhdGUuIENhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYWN0aXZhdGVkICovXG4gIG9uQ2xpY2s6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG5cbiAgLyoqIEBwcml2YXRlLiBDYWxsYmFjayBmdW5jdGlvbiB3aGVuIGZvY3VzZWQgKi9cbiAgb25Gb2N1czogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuZnVuYyxcbiAgdGFiSWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcblxuICAvKiogQHByaXZhdGUuIFRoZSBpbnRlcm5hbCBrZXkgb2YgdGhlIHRhYiAqL1xuICB0YWJLZXk6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm51bWJlcixcbiAgdG86IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgdG9vbHRpcDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEubm9kZVxufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGl2ZTogZmFsc2UsXG4gIGxheW91dDogJ2hvcml6b250YWwnLFxuICBpY29uU2l6ZTogJ2lubGluZScsXG4gIGRpc2FibGVkOiBmYWxzZVxufTtcblxudmFyIFRhYl9UYWIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFRhYiwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUYWIpO1xuXG4gIC8vIEBkb2NzLXByb3BzLXR5cGUgVGFiUHJvcHNCYXNlXG4gIGZ1bmN0aW9uIFRhYihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUYWIpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlcklkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTW91bnRcIiwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFuY2hvcjogZWxcbiAgICAgIH0pO1xuXG4gICAgICBPYmplY3QodXBkYXRlUmVhY3RSZWZbXCJhXCIgLyogdXBkYXRlUmVhY3RSZWYgKi9dKShfdGhpcy5wcm9wcy5lbGVtZW50UmVmLCBlbCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlVG9vbHRpcE9wZW5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBvcGVuOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVUb29sdGlwQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBvcGVuOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlQ2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGl2ZSA9IF90aGlzJHByb3BzLmFjdGl2ZSxcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMub25DbGljayxcbiAgICAgICAgICB0YWJJZCA9IF90aGlzJHByb3BzLnRhYklkLFxuICAgICAgICAgIHRhYktleSA9IF90aGlzJHByb3BzLnRhYktleSxcbiAgICAgICAgICB0byA9IF90aGlzJHByb3BzLnRvOyAvLyBwcmVzZXJ2ZSB0aGUgcHJldmlvdXMgYmVoYXZpb3VyIGZyb20gMmFkOGU3ZWFmNDcgdG8gYXZvaWQgZmlyaW5nIHVubmVjZXNzYXJ5IG9uQ2hhbmdlIGV2ZW50c1xuICAgICAgLy8gd2hpbGUgcHJldmVudGluZyB0aGUgXCJ0b1wiIHByb3AgZnJvbSBpbmNvcnJlY3RseSB0cmlnZ2VyaW5nIDxDbGlja2FibGU+J3MgcHJvdmlkZWRPbkNsaWNrIG9uIHRoZSBhY3RpdmUgdGFiXG5cbiAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljayhlLCB7XG4gICAgICAgICAgdGFiSWQ6IHRhYklkLFxuICAgICAgICAgIHRhYktleTogdGFiS2V5XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodG8gPT0gbnVsbCB8fCB0byAhPSBudWxsICYmIGFjdGl2ZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlRm9jdXNcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzLmhhbmRsZVRvb2x0aXBPcGVuKCk7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHMyLm9uRm9jdXMsXG4gICAgICAgICAgdGFiSWQgPSBfdGhpcyRwcm9wczIudGFiSWQsXG4gICAgICAgICAgdGFiS2V5ID0gX3RoaXMkcHJvcHMyLnRhYktleTtcbiAgICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cyhlLCB7XG4gICAgICAgIHRhYklkOiB0YWJJZCxcbiAgICAgICAgdGFiS2V5OiB0YWJLZXlcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMucG9wb3ZlcklkID0gT2JqZWN0KGlkX1tcImNyZWF0ZURPTUlEXCJdKSgncG9wb3ZlcicpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgb3BlbjogZmFsc2UsXG4gICAgICBhbmNob3I6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUYWIsIFt7XG4gICAga2V5OiBcImZvY3VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJGFuY2hvcjtcblxuICAgICAgKF90aGlzJHN0YXRlJGFuY2hvciA9IHRoaXMuc3RhdGUuYW5jaG9yKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRhbmNob3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0YXRlJGFuY2hvci5mb2N1cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aXZlID0gX3RoaXMkcHJvcHMzLmFjdGl2ZSxcbiAgICAgICAgICBhcHBlYXJhbmNlID0gX3RoaXMkcHJvcHMzLmFwcGVhcmFuY2UsXG4gICAgICAgICAgYXJpYUNvbnRyb2xzID0gX3RoaXMkcHJvcHMzLmFyaWFDb250cm9scyxcbiAgICAgICAgICBjb3VudCA9IF90aGlzJHByb3BzMy5jb3VudCxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzMy5kaXNhYmxlZCxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMzLmljb24sXG4gICAgICAgICAgaWNvblNpemUgPSBfdGhpcyRwcm9wczMuaWNvblNpemUsXG4gICAgICAgICAgbGFiZWwgPSBfdGhpcyRwcm9wczMubGFiZWwsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMzLmxheW91dCxcbiAgICAgICAgICB0YWJJZCA9IF90aGlzJHByb3BzMy50YWJJZCxcbiAgICAgICAgICB0byA9IF90aGlzJHByb3BzMy50byxcbiAgICAgICAgICB0b29sdGlwID0gX3RoaXMkcHJvcHMzLnRvb2x0aXAsXG4gICAgICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIFtcImFjdGl2ZVwiLCBcImFwcGVhcmFuY2VcIiwgXCJhcmlhQ29udHJvbHNcIiwgXCJjb3VudFwiLCBcImRpc2FibGVkXCIsIFwiaWNvblwiLCBcImljb25TaXplXCIsIFwibGFiZWxcIiwgXCJsYXlvdXRcIiwgXCJ0YWJJZFwiLCBcInRvXCIsIFwidG9vbHRpcFwiXSk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgYW5jaG9yID0gX3RoaXMkc3RhdGUuYW5jaG9yLFxuICAgICAgICAgIG9wZW4gPSBfdGhpcyRzdGF0ZS5vcGVuO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChTdHlsZWRDbGlja2FibGUsIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGFjdGl2ZSxcbiAgICAgICAgXCJkYXRhLXRlc3RcIjogXCJ0YWJcIixcbiAgICAgICAgXCJkYXRhLXRlc3QtdGFiLWlkXCI6IHRhYklkLFxuICAgICAgICBcImRhdGEtdGVzdC1wb3BvdmVyLWlkXCI6IHRvb2x0aXAgPyB0aGlzLnBvcG92ZXJJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgJGxheW91dDogbGF5b3V0LFxuICAgICAgICAkaWNvbjogaWNvbiAmJiBpY29uU2l6ZSAhPT0gJ2lubGluZScgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIGVsZW1lbnRSZWY6IHRoaXMuaGFuZGxlTW91bnRcbiAgICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVDbGljayxcbiAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1cyxcbiAgICAgICAgb25Nb3VzZUVudGVyOiB0aGlzLmhhbmRsZVRvb2x0aXBPcGVuLFxuICAgICAgICBvbkJsdXI6IHRoaXMuaGFuZGxlVG9vbHRpcENsb3NlLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IHRoaXMuaGFuZGxlVG9vbHRpcENsb3NlLFxuICAgICAgICByb2xlOiBcInRhYlwiLFxuICAgICAgICB0YWJJbmRleDogYWN0aXZlID8gdW5kZWZpbmVkIDogLTEgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHRoaXMgaXMgcHJvYmxlbWF0aWMsIHNpbmNlIHRoZSBsYWJlbFxuICAgICAgICAvLyBwcm9wIGlzIG9mIHR5cGUgUmVhY3QuUmVhY3ROb2RlLCB3aGljaCBtZWFucyB0aXRsZVxuICAgICAgICAvLyBjYW4gZW5kIHVwIHNob3dpbmcgYXMgXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAgICAsXG4gICAgICAgIHRpdGxlOiBsYWJlbCxcbiAgICAgICAgdG86IHRvXG4gICAgICB9KSwgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsLCB7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwibGFiZWxcIixcbiAgICAgICAgJHdpdGhVbmRlcmxpbmU6IGFwcGVhcmFuY2UgPT09ICduYXZpZ2F0aW9uJ1xuICAgICAgfSwgaWNvbiAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwge1xuICAgICAgICAkaWNvblNpemU6IGljb25TaXplXG4gICAgICB9LCBpY29uKSwgbGFiZWwsIChjb3VudCA9PT0gMCB8fCBjb3VudCkgJiYgLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZENvdW50LCB7XG4gICAgICAgIFwiZGF0YS10ZXN0XCI6IFwiY291bnRcIixcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgICB9LCBjb3VudCkpLCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVW5kZXJsaW5lLCB7XG4gICAgICAgICRsYXlvdXQ6IGxheW91dCxcbiAgICAgICAgJHdpdGhVbmRlcmxpbmU6IGFwcGVhcmFuY2UgPT09ICduYXZpZ2F0aW9uJ1xuICAgICAgfSksICFkaXNhYmxlZCAmJiB0b29sdGlwICYmIC8qI19fUFVSRV9fKi9leHRlcm5hbF9yZWFjdF9kZWZhdWx0LmEuY3JlYXRlRWxlbWVudChQb3BvdmVyX2RlZmF1bHQuYSwge1xuICAgICAgICBhbmNob3I6IGFuY2hvcixcbiAgICAgICAgYXBwZWFyYW5jZTogXCJpbnZlcnRlZFwiLFxuICAgICAgICBjbG9zZVJlYXNvbnM6IFtdLFxuICAgICAgICBkZWZhdWx0UGxhY2VtZW50OiBsYXlvdXQgPT09ICd2ZXJ0aWNhbCcgPyAncmlnaHQnIDogJ2Fib3ZlJyxcbiAgICAgICAgaWQ6IHRoaXMucG9wb3ZlcklkLFxuICAgICAgICBvcGVuOiAhIWFuY2hvciAmJiBvcGVuXG4gICAgICB9LCAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU3R5bGVkVG9vbHRpcENvbnRlbnQsIG51bGwsIHRvb2x0aXApKSwgdG9vbHRpcCAmJiAvKiNfX1BVUkVfXyovZXh0ZXJuYWxfcmVhY3RfZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoU2NyZWVuUmVhZGVyQ29udGVudF9kZWZhdWx0LmEsIG51bGwsIHRvb2x0aXApKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVGFiO1xufShleHRlcm5hbF9yZWFjdF9bXCJDb21wb25lbnRcIl0pO1xuXG5fZGVmaW5lUHJvcGVydHkoVGFiX1RhYiwgXCJwcm9wVHlwZXNcIiwgcHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KFRhYl9UYWIsIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRhYkJhcl9UYWIgPSAoVGFiX1RhYik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9UYWJCYXIvVGFiQmFyLnRzeFxuZnVuY3Rpb24gVGFiQmFyX2V4dGVuZHMoKSB7IFRhYkJhcl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIFRhYkJhcl9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gVGFiQmFyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBUYWJCYXJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIFRhYkJhcl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuXG5cblxuXG5cbnZhciBtaW5UYWJXaWR0aCA9IDUwO1xuLyoqIEBwdWJsaWMgKi9cblxudmFyIFRhYkJhcl9wcm9wVHlwZXMgPSB7XG4gIGF1dG9BY3RpdmF0ZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgYWN0aXZlVGFiSWQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLnN0cmluZyxcbiAgYXBwZWFyYW5jZTogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2YoWyduYXZpZ2F0aW9uJywgJ2NvbnRleHQnXSksXG4gIGNoaWxkcmVuOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5ub2RlLFxuXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBkaXNhYmxlZDogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEuYm9vbCxcbiAgZWxlbWVudFJlZjogZXh0ZXJuYWxfcHJvcF90eXBlc19kZWZhdWx0LmEub25lT2ZUeXBlKFtleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5mdW5jLCBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5vYmplY3RdKSxcbiAgaWNvblNpemU6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnaW5saW5lJywgJ3NtYWxsJywgJ2xhcmdlJ10pLFxuICBsYXlvdXQ6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLm9uZU9mKFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddKSxcbiAgb25DaGFuZ2U6IGV4dGVybmFsX3Byb3BfdHlwZXNfZGVmYXVsdC5hLmZ1bmMsXG4gIHRhYldpZHRoOiBleHRlcm5hbF9wcm9wX3R5cGVzX2RlZmF1bHQuYS5udW1iZXJcbn07XG5cbmZ1bmN0aW9uIFRhYkJhcihfcmVmKSB7XG4gIHZhciBhY3RpdmVUYWJJZCA9IF9yZWYuYWN0aXZlVGFiSWQsXG4gICAgICBhdXRvQWN0aXZhdGUgPSBfcmVmLmF1dG9BY3RpdmF0ZSxcbiAgICAgIF9yZWYkYXBwZWFyYW5jZSA9IF9yZWYuYXBwZWFyYW5jZSxcbiAgICAgIGFwcGVhcmFuY2UgPSBfcmVmJGFwcGVhcmFuY2UgPT09IHZvaWQgMCA/ICduYXZpZ2F0aW9uJyA6IF9yZWYkYXBwZWFyYW5jZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmJGRpc2FibGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZGlzYWJsZWQsXG4gICAgICBlbGVtZW50UmVmID0gX3JlZi5lbGVtZW50UmVmLFxuICAgICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdpbmxpbmUnIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkbGF5b3V0ID0gX3JlZi5sYXlvdXQsXG4gICAgICBsYXlvdXQgPSBfcmVmJGxheW91dCA9PT0gdm9pZCAwID8gJ2hvcml6b250YWwnIDogX3JlZiRsYXlvdXQsXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG4gICAgICB0YWJXaWR0aCA9IF9yZWYudGFiV2lkdGgsXG4gICAgICBvdGhlclByb3BzID0gVGFiQmFyX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImFjdGl2ZVRhYklkXCIsIFwiYXV0b0FjdGl2YXRlXCIsIFwiYXBwZWFyYW5jZVwiLCBcImNoaWxkcmVuXCIsIFwiZGlzYWJsZWRcIiwgXCJlbGVtZW50UmVmXCIsIFwiaWNvblNpemVcIiwgXCJsYXlvdXRcIiwgXCJvbkNoYW5nZVwiLCBcInRhYldpZHRoXCJdKTtcblxuICAvLyBAZG9jcy1wcm9wcy10eXBlIFRhYkJhclByb3BzQmFzZVxuICB2YXIgZm9jdXNlZFRhYktleSA9IE9iamVjdChleHRlcm5hbF9yZWFjdF9bXCJ1c2VSZWZcIl0pKDApO1xuICB2YXIgdGFiUmVmcyA9IFtdO1xuICB2YXIgbmV4dFRhYktleSA9IE9iamVjdChleHRlcm5hbF9yZWFjdF9bXCJ1c2VNZW1vXCJdKShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxheW91dCA9PT0gJ3ZlcnRpY2FsJyA/ICdkb3duJyA6ICdyaWdodCc7XG4gIH0sIFtsYXlvdXRdKTtcbiAgdmFyIHByZXZpb3VzVGFiS2V5ID0gT2JqZWN0KGV4dGVybmFsX3JlYWN0X1tcInVzZU1lbW9cIl0pKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbGF5b3V0ID09PSAndmVydGljYWwnID8gJ3VwJyA6ICdsZWZ0JztcbiAgfSwgW2xheW91dF0pO1xuICB2YXIgdGFiS2V5Q291bnRlciA9IDA7XG4gIHZhciBjbG9uZWRDaGlsZHJlbiA9IGV4dGVybmFsX3JlYWN0X1tcIkNoaWxkcmVuXCJdLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihleHRlcm5hbF9yZWFjdF9bXCJpc1ZhbGlkRWxlbWVudFwiXSkubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHZhciB0YWJPbkNsaWNrID0gZnVuY3Rpb24gdGFiT25DbGljayhlLCBkYXRhKSB7XG4gICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UoZSwge1xuICAgICAgICBzZWxlY3RlZFRhYklkOiBkYXRhLnRhYklkXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIHRhYk9uRm9jdXMgPSBmdW5jdGlvbiB0YWJPbkZvY3VzKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0YWJLZXkgPSBkYXRhLnRhYktleTtcblxuICAgICAgaWYgKHRhYktleSAhPSBudWxsKSB7XG4gICAgICAgIGZvY3VzZWRUYWJLZXkuY3VycmVudCA9IHRhYktleTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF1dG9BY3RpdmF0ZSkge1xuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UoZSwge1xuICAgICAgICAgIHNlbGVjdGVkVGFiSWQ6IGRhdGEudGFiSWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBjaGlsZFByb3BzID0ge1xuICAgICAgYWN0aXZlOiBhY3RpdmVUYWJJZCA9PT0gY2hpbGQucHJvcHMudGFiSWQsXG4gICAgICBhcHBlYXJhbmNlOiBhcHBlYXJhbmNlLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkIHx8IGNoaWxkLnByb3BzLmRpc2FibGVkLFxuICAgICAgaWNvblNpemU6IGljb25TaXplLFxuICAgICAgbGF5b3V0OiBsYXlvdXQsXG4gICAgICBvbkNsaWNrOiB0YWJPbkNsaWNrLFxuICAgICAgb25Gb2N1czogdGFiT25Gb2N1cyxcbiAgICAgIHN0eWxlOiB0YWJXaWR0aCAmJiB0YWJXaWR0aCA+IG1pblRhYldpZHRoID8ge1xuICAgICAgICB3aWR0aDogdGFiV2lkdGhcbiAgICAgIH0gOiBjaGlsZC5wcm9wcy5zdHlsZVxuICAgIH07IC8vIDxUYWJCYXI+IGFsbG93cyBub24tPFRhYj4gY2hpbGRyZW4sIHNvIHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSB0YWJLZXkgaXMgb25seSBhcHBsaWVkIHRvIGFjdHVhbCB0YWJzXG5cbiAgICBpZiAodHlwZW9mIGNoaWxkLnR5cGUgIT09ICdzdHJpbmcnICYmIGNoaWxkLnR5cGUubmFtZSA9PT0gVGFiQmFyX1RhYi5uYW1lKSB7XG4gICAgICB2YXIgcmVmID0gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVSZWYoKTtcbiAgICAgIGNoaWxkUHJvcHMucmVmID0gcmVmO1xuICAgICAgdGFiUmVmcy5wdXNoKHJlZik7XG4gICAgICBjaGlsZFByb3BzLnRhYktleSA9IHRhYktleUNvdW50ZXI7XG4gICAgICB0YWJLZXlDb3VudGVyICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9PYmplY3QoZXh0ZXJuYWxfcmVhY3RfW1wiY2xvbmVFbGVtZW50XCJdKShjaGlsZCwgY2hpbGRQcm9wcyk7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2V4dGVybmFsX3JlYWN0X2RlZmF1bHQuYS5jcmVhdGVFbGVtZW50KFN0eWxlZCwgVGFiQmFyX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10YWItbGF5b3V0XCI6IGxheW91dCxcbiAgICBcImRhdGEtdGVzdC1hY3RpdmUtdGFiLWlkXCI6IGFjdGl2ZVRhYklkLFxuICAgIFwiZGF0YS10ZXN0XCI6IFwidGFiLWJhclwiLFxuICAgIHJvbGU6IFwidGFibGlzdFwiLFxuICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAkbGF5b3V0OiBsYXlvdXQsXG4gICAgJHdpdGhVbmRlcmxpbmU6IGFwcGVhcmFuY2UgPT09ICduYXZpZ2F0aW9uJyxcbiAgICBvbktleURvd246IGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gICAgICB2YXIga2V5ID0gT2JqZWN0KGtleWJvYXJkX1tcImtleWNvZGVcIl0pKGUubmF0aXZlRXZlbnQpO1xuICAgICAgdmFyIHRhYlRvRm9jdXNSZWY7XG5cbiAgICAgIGlmIChrZXkgPT09IG5leHRUYWJLZXkpIHtcbiAgICAgICAgdGFiVG9Gb2N1c1JlZiA9IHRhYlJlZnNbZm9jdXNlZFRhYktleS5jdXJyZW50ICsgMV0gfHwgdGFiUmVmc1swXTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBwcmV2aW91c1RhYktleSkge1xuICAgICAgICB0YWJUb0ZvY3VzUmVmID0gdGFiUmVmc1tmb2N1c2VkVGFiS2V5LmN1cnJlbnQgLSAxXSB8fCB0YWJSZWZzW3RhYlJlZnMubGVuZ3RoIC0gMV07XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2hvbWUnKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB0YWJUb0ZvY3VzUmVmID0gdGFiUmVmc1swXTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW5kJykge1xuICAgICAgICB0YWJUb0ZvY3VzUmVmID0gdGFiUmVmc1t0YWJSZWZzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFiVG9Gb2N1c1JlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBfdGFiVG9Gb2N1c1JlZiRjdXJyZW47XG5cbiAgICAgICAgKF90YWJUb0ZvY3VzUmVmJGN1cnJlbiA9IHRhYlRvRm9jdXNSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RhYlRvRm9jdXNSZWYkY3VycmVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGFiVG9Gb2N1c1JlZiRjdXJyZW4uZm9jdXMoKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgb3RoZXJQcm9wcyksIGNsb25lZENoaWxkcmVuKTtcbn1cblxuVGFiQmFyLnByb3BUeXBlcyA9IFRhYkJhcl9wcm9wVHlwZXM7XG5UYWJCYXIuVGFiID0gVGFiQmFyX1RhYjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIFRhYkJhcl9UYWJCYXIgPSAoVGFiQmFyKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvVGFiQmFyL2luZGV4LnRzXG5cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzcGx1bmsvcmVhY3QtdWkvU2NyZWVuUmVhZGVyQ29udGVudFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc3BsdW5rL3JlYWN0LXVpL1BvcG92ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0eWxlZC1jb21wb25lbnRzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHNwbHVuay91aS11dGlscy9rZXlib2FyZFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/package/appserver/static/js/build/3.licenses.txt b/package/appserver/static/js/build/3.licenses.txt deleted file mode 100644 index ef2919c..0000000 --- a/package/appserver/static/js/build/3.licenses.txt +++ /dev/null @@ -1,1281 +0,0 @@ -@babel/runtime -MIT -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@splunk/react-icons -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/react-toast-notifications -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/react-ui -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/themes -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@splunk/ui-utils -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -immutability-helper -MIT -MIT License - -Copyright (c) 2017 Moshe Kolodny - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -lodash -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -lodash-es -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -react-flip-move -MIT -The MIT License (MIT) - -Copyright (c) 2016-present Joshua Comeau - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -react-resize-detector -MIT -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -regenerator-runtime -MIT -MIT License - -Copyright (c) 2014-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -resize-observer-polyfill -MIT -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -uuid -MIT -The MIT License (MIT) - -Copyright (c) 2010-2020 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package/appserver/static/js/build/4.js b/package/appserver/static/js/build/4.js deleted file mode 100644 index 6a6933a..0000000 --- a/package/appserver/static/js/build/4.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{501:function(e,a,t){"use strict";t.r(a);var n,c=t(72),r=t.n(c),l=t(14),i=t.n(l),u=t(0),m=t.n(u),s=t(7),o=t(496),d=t.n(o),b=t(345),p=t.n(b),v=t(301),f=t.n(v),E=t(1),g=t(321),O=t(47),j=t(317),h=t(361),y=t(3),k=t.n(y),N=t(35),w=t.n(N),S=t(76),T=t.n(S),R=t(325),x=t(294),C=t(293),_=t(77),q=t(50),F=E.default.div(n||(n=i()(["\n margin-left: 270px !important;\n width: 150px;\n\n .save_btn {\n width: 100%;\n }\n"])));function I(e){var a=e.serviceName,t=Object(u.useRef)(),n=Object(u.useState)(null),c=r()(n,2),l=c[0],i=c[1],o=Object(u.useState)(!1),d=r()(o,2),b=d[0],p=d[1],v=Object(u.useState)({}),f=r()(v,2),E=f[0],g=f[1];Object(u.useEffect)((function(){Object(x.a)({serviceName:"settings/".concat(a),handleError:!0,callbackOnError:function(e){e.uccErrorCode="ERR0005",i(e)}}).then((function(e){g(e.data.entry[0].content)}))}),[a]);if(null!=l&&l.uccErrorCode)throw l;return Object.keys(E).length?m.a.createElement(m.a.Fragment,null,m.a.createElement(R.a,{ref:t,page:q.a,stanzaName:a,serviceName:"settings",mode:C.b,currentServiceState:E,handleFormSubmit:function(e){p(e)}}),m.a.createElement(F,null,m.a.createElement(w.a,{className:"saveBtn",appearance:"primary",label:b?m.a.createElement(T.a,null):Object(s._)("Save"),onClick:function(){t.current.handleSubmit()},disabled:b}))):m.a.createElement(_.d,null)}I.propTypes={serviceName:k.a.string.isRequired};var J=I,z=t(292),A=t(360),B=t(322);function D(e){var a=e.serviceName,t=e.serviceTitle,n=Object(u.useState)(!1),c=r()(n,2),l=c[0],i=c[1],s="Add ".concat(t),o=function(){i(!1)};return m.a.createElement(m.a.Fragment,null,m.a.createElement(z.a,{value:null},m.a.createElement(A.a,{page:q.a,serviceName:a,handleRequestModalOpen:function(){i(!0)}}),l?m.a.createElement(B.a,{page:q.a,open:l,handleRequestClose:o,handleSaveData:function(){},serviceName:a,mode:C.c,formLabel:s}):null))}D.propTypes={serviceName:k.a.string.isRequired,serviceTitle:k.a.string.isRequired};var L,M=Object(u.memo)(D),G=Object(E.default)(f.a.Row)(L||(L=i()(["\n padding: 5px 0px;\n\n .dropdown {\n text-align: right;\n }\n\n .input_button {\n text-align: right;\n margin-right: 0px;\n }\n"])));a.default=function(){var e=Object(O.d)().pages.configuration,a=e.title,t=e.description,n=e.tabs,c=n.map((function(e){return e.name})),l=Object(u.useState)(n[0].name),i=r()(l,2),o=i[0],b=i[1],v=Object(g.a)();Object(u.useEffect)((function(){v&&c.includes(v.get("tab"))&&v.get("tab")!==o&&b(v.get("tab"))}),[]);var E=Object(u.useCallback)((function(e,a){var t=a.selectedTabId;b(t)}),[o]);return m.a.createElement(h.a,null,m.a.createElement(f.a,{gutter:8},m.a.createElement(G,null,m.a.createElement(f.a.Column,{span:9},m.a.createElement(j.b,null,Object(s._)(a)),m.a.createElement(j.a,null,Object(s._)(t||""))))),m.a.createElement(d.a,{activeTabId:o,onChange:E},n.map((function(e){return m.a.createElement(d.a.Tab,{key:e.name,label:Object(s._)(e.title),tabId:e.name})}))),n.map((function(e){return e.table?m.a.createElement("div",{key:e.name,style:e.name!==o?{display:"none"}:{display:"block"},id:"".concat(e.name,"Tab")},m.a.createElement(M,{key:e.name,serviceName:e.name,serviceTitle:e.title})):m.a.createElement("div",{key:e.name,style:e.name!==o?{display:"none"}:{display:"block"},id:"".concat(e.name,"Tab")},m.a.createElement(J,{key:e.name,serviceName:e.name}))})),m.a.createElement(p.a,{position:"top-right"}))}}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9Db25maWd1cmF0aW9uRm9ybVZpZXcuanN4Iiwid2VicGFjazovLy8uL3NyYy9tYWluL3dlYmFwcC9jb21wb25lbnRzL0NvbmZpZ3VyYXRpb25UYWJsZS5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4vd2ViYXBwL3BhZ2VzL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblBhZ2UuanN4Il0sIm5hbWVzIjpbIkJ1dHRvbldyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJDb25maWd1cmF0aW9uRm9ybVZpZXciLCJzZXJ2aWNlTmFtZSIsImZvcm0iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImVycm9yIiwic2V0RXJyb3IiLCJpc1N1Ym1pdHRpbmciLCJzZXRJc1N1Ym1pdHRpbmciLCJjdXJyZW50U2VydmljZVN0YXRlIiwic2V0Q3VycmVudFNlcnZpY2VTdGF0ZSIsInVzZUVmZmVjdCIsImF4aW9zQ2FsbFdyYXBwZXIiLCJoYW5kbGVFcnJvciIsImNhbGxiYWNrT25FcnJvciIsImVyciIsInVjY0Vycm9yQ29kZSIsInRoZW4iLCJyZXNwb25zZSIsImRhdGEiLCJlbnRyeSIsImNvbnRlbnQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiQmFzZUZvcm1WaWV3IiwicmVmIiwicGFnZSIsIlBBR0VfQ09ORiIsInN0YW56YU5hbWUiLCJtb2RlIiwiTU9ERV9DT05GSUciLCJoYW5kbGVGb3JtU3VibWl0Iiwic2V0IiwiY2xhc3NOYW1lIiwiYXBwZWFyYW5jZSIsImxhYmVsIiwiXyIsIm9uQ2xpY2siLCJjdXJyZW50IiwiaGFuZGxlU3VibWl0IiwiZGlzYWJsZWQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiQ29uZmlndXJhdGlvblRhYmxlIiwic2VydmljZVRpdGxlIiwib3BlbiIsInNldE9wZW4iLCJzZXJ2aWNlTGFiZWwiLCJoYW5kbGVSZXF1ZXN0Q2xvc2UiLCJUYWJsZUNvbnRleHQiLCJ2YWx1ZSIsIlRhYmxlV3JhcHBlciIsImhhbmRsZVJlcXVlc3RNb2RhbE9wZW4iLCJFbnRpdHlNb2RhbCIsImhhbmRsZVNhdmVEYXRhIiwiTU9ERV9DUkVBVEUiLCJmb3JtTGFiZWwiLCJtZW1vIiwiUm93IiwiQ29sdW1uTGF5b3V0IiwiQ29uZmlndXJhdGlvblBhZ2UiLCJnZXRVbmlmaWVkQ29uZmlncyIsInBhZ2VzIiwiY29uZmlndXJhdGlvbiIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJ0YWJzIiwicGVybWl0dGVkVGFiTmFtZXMiLCJtYXAiLCJ0YWIiLCJuYW1lIiwiYWN0aXZlVGFiSWQiLCJzZXRBY3RpdmVUYWJJZCIsInF1ZXJ5IiwidXNlUXVlcnkiLCJpbmNsdWRlcyIsImdldCIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInNlbGVjdGVkVGFiSWQiLCJFcnJvckJvdW5kYXJ5IiwiZ3V0dGVyIiwiQ29sdW1uIiwic3BhbiIsIm9uQ2hhbmdlIiwiVGFiIiwia2V5IiwidGFiSWQiLCJ0YWJsZSIsInN0eWxlIiwiZGlzcGxheSIsImlkIiwicG9zaXRpb24iXSwibWFwcGluZ3MiOiI2VkFjTUEsRUFBZ0JDLFVBQU9DLElBQVYsMkhBU25CLFNBQVNDLEVBQVQsR0FBZ0QsSUFBZkMsRUFBZSxFQUFmQSxZQUN2QkMsRUFBT0MsbUJBRCtCLEVBRWxCQyxtQkFBUyxNQUZTLFdBRXJDQyxFQUZxQyxLQUU5QkMsRUFGOEIsT0FHSkYsb0JBQVMsR0FITCxXQUdyQ0csRUFIcUMsS0FHdkJDLEVBSHVCLE9BSVVKLG1CQUFTLElBSm5CLFdBSXJDSyxFQUpxQyxLQUloQkMsRUFKZ0IsS0FNNUNDLHFCQUFVLFdBQ05DLFlBQWlCLENBQ2JYLFlBQWEsWUFBRixPQUFjQSxHQUN6QlksYUFBYSxFQUNiQyxnQkFBaUIsU0FBQ0MsR0FFZEEsRUFBSUMsYUFBZSxVQUNuQlYsRUFBU1MsTUFFZEUsTUFBSyxTQUFDQyxHQUNMUixFQUF1QlEsRUFBU0MsS0FBS0MsTUFBTSxH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RUFBSUMsS0FDVG9CLE1BQ0lyQixFQUFJQyxPQUFTQyxFQUFjLENBQUVvQixRQUFTLFFBQVcsQ0FBRUEsUUFBUyxTQUVoRUMsR0FBRSxVQUFLdkIsRUFBSUMsS0FBVCxRQUVGLGtCQUFDLEVBQUQsQ0FDSWlCLElBQUtsQixFQUFJQyxLQUNUeEUsWUFBYXVFLEVBQUlDLEtBQ2pCMUIsYUFBY3lCLEVBQUlMLFNBSTFCLHlCQUNJdUIsSUFBS2xCLEVBQUlDLEtBQ1RvQixNQUNJckIsRUFBSUMsT0FBU0MsRUFBYyxDQUFFb0IsUUFBUyxRQUFXLENBQUVBLFFBQVMsU0FFaEVDLEdBQUUsVUFBS3ZCLEVBQUlDLEtBQVQsUUFFRixrQkFBQyxFQUFELENBQXVCaUIsSUFBS2xCLEVBQUlDLEtBQU14RSxZQUFhdUUsRUFBSUMsV0FJbkUsa0JBQUMsSUFBRCxDQUFldUIsU0FBUyIsImZpbGUiOiI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7IF8gfSBmcm9tICdAc3BsdW5rL3VpLXV0aWxzL2kxOG4nO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0J1dHRvbic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBXYWl0U3Bpbm5lciBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL1dhaXRTcGlubmVyJztcblxuaW1wb3J0IEJhc2VGb3JtVmlldyBmcm9tICcuL0Jhc2VGb3JtVmlldyc7XG5pbXBvcnQgeyBheGlvc0NhbGxXcmFwcGVyIH0gZnJvbSAnLi4vdXRpbC9heGlvc0NhbGxXcmFwcGVyJztcbmltcG9ydCB7IE1PREVfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzL21vZGVzJztcbmltcG9ydCB7IFdhaXRTcGlubmVyV3JhcHBlciB9IGZyb20gJy4vdGFibGUvQ3VzdG9tVGFibGVTdHlsZSc7XG5pbXBvcnQgeyBQQUdFX0NPTkYgfSBmcm9tICcuLi9jb25zdGFudHMvcGFnZXMnO1xuXG5jb25zdCBCdXR0b25XcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgICBtYXJnaW4tbGVmdDogMjcwcHggIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTUwcHg7XG5cbiAgICAuc2F2ZV9idG4ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5gO1xuXG5mdW5jdGlvbiBDb25maWd1cmF0aW9uRm9ybVZpZXcoeyBzZXJ2aWNlTmFtZSB9KSB7XG4gICAgY29uc3QgZm9ybSA9IHVzZVJlZigpOyAvLyBub3NlbWdyZXA6IHR5cGVzY3JpcHQucmVhY3Quc2VjdXJpdHkuYXVkaXQucmVhY3Qtbm8tcmVmcy5yZWFjdC1uby1yZWZzXG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaXNTdWJtaXR0aW5nLCBzZXRJc1N1Ym1pdHRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtjdXJyZW50U2VydmljZVN0YXRlLCBzZXRDdXJyZW50U2VydmljZVN0YXRlXSA9IHVzZVN0YXRlKHt9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGF4aW9zQ2FsbFdyYXBwZXIoe1xuICAgICAgICAgICAgc2VydmljZU5hbWU6IGBzZXR0aW5ncy8ke3NlcnZpY2VOYW1lfWAsXG4gICAgICAgICAgICBoYW5kbGVFcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIGNhbGxiYWNrT25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGVyci51Y2NFcnJvckNvZGUgPSAnRVJSMDAwNSc7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBzZXRDdXJyZW50U2VydmljZVN0YXRlKHJlc3BvbnNlLmRhdGEuZW50cnlbMF0uY29udGVudCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtzZXJ2aWNlTmFtZV0pO1xuXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgICAgICBmb3JtLmN1cnJlbnQuaGFuZGxlU3VibWl0KCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUZvcm1TdWJtaXQgPSAoc2V0KSA9PiB7XG4gICAgICAgIHNldElzU3VibWl0dGluZyhzZXQpO1xuICAgIH07XG5cbiAgICBpZiAoZXJyb3I/LnVjY0Vycm9yQ29kZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICAvLyBSZWYgaXMgdXNlZCBoZXJlIHRvIGNhbGwgc3VibWl0IG1ldGhvZCBvZiBmb3JtIG9ubHlcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY3VycmVudFNlcnZpY2VTdGF0ZSkubGVuZ3RoID8gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPEJhc2VGb3JtVmlldyAvLyBub3NlbWdyZXA6IHR5cGVzY3JpcHQucmVhY3Quc2VjdXJpdHkuYXVkaXQucmVhY3Qtbm8tcmVmcy5yZWFjdC1uby1yZWZzXG4gICAgICAgICAgICAgICAgcmVmPXtmb3JtfVxuICAgICAgICAgICAgICAgIHBhZ2U9e1BBR0VfQ09ORn1cbiAgICAgICAgICAgICAgICBzdGFuemFOYW1lPXtzZXJ2aWNlTmFtZX1cbiAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT1cInNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICBtb2RlPXtNT0RFX0NPTkZJR31cbiAgICAgICAgICAgICAgICBjdXJyZW50U2VydmljZVN0YXRlPXtjdXJyZW50U2VydmljZVN0YXRlfVxuICAgICAgICAgICAgICAgIGhhbmRsZUZvcm1TdWJtaXQ9e2hhbmRsZUZvcm1TdWJtaXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEJ1dHRvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzYXZlQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17aXNTdWJtaXR0aW5nID8gPFdhaXRTcGlubmVyIC8+IDogXygnU2F2ZScpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uV3JhcHBlcj5cbiAgICAgICAgPC8+XG4gICAgKSA6IChcbiAgICAgICAgPFdhaXRTcGlubmVyV3JhcHBlciAvPlxuICAgICk7XG59XG5cbkNvbmZpZ3VyYXRpb25Gb3JtVmlldy5wcm9wVHlwZXMgPSB7XG4gICAgc2VydmljZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpZ3VyYXRpb25Gb3JtVmlldztcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB7IFRhYmxlQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnLi4vY29udGV4dC9UYWJsZUNvbnRleHQnO1xuaW1wb3J0IFRhYmxlV3JhcHBlciBmcm9tICcuL3RhYmxlL1RhYmxlV3JhcHBlcic7XG5pbXBvcnQgRW50aXR5TW9kYWwgZnJvbSAnLi9FbnRpdHlNb2RhbCc7XG5pbXBvcnQgeyBNT0RFX0NSRUFURSB9IGZyb20gJy4uL2NvbnN0YW50cy9tb2Rlcyc7XG5pbXBvcnQgeyBQQUdFX0NPTkYgfSBmcm9tICcuLi9jb25zdGFudHMvcGFnZXMnO1xuXG5mdW5jdGlvbiBDb25maWd1cmF0aW9uVGFibGUoeyBzZXJ2aWNlTmFtZSwgc2VydmljZVRpdGxlIH0pIHtcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3Qgc2VydmljZUxhYmVsID0gYEFkZCAke3NlcnZpY2VUaXRsZX1gO1xuXG4gICAgY29uc3QgaGFuZGxlUmVxdWVzdE9wZW4gPSAoKSA9PiB7XG4gICAgICAgIHNldE9wZW4odHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVJlcXVlc3RDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZU1vZGFsRGlhbG9nID0gKCkgPT4ge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RW50aXR5TW9kYWxcbiAgICAgICAgICAgICAgICAgICAgcGFnZT17UEFHRV9DT05GfVxuICAgICAgICAgICAgICAgICAgICBvcGVuPXtvcGVufVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0Q2xvc2U9e2hhbmRsZVJlcXVlc3RDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2F2ZURhdGE9eygpID0+IHt9fVxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT17c2VydmljZU5hbWV9XG4gICAgICAgICAgICAgICAgICAgIG1vZGU9e01PREVfQ1JFQVRFfVxuICAgICAgICAgICAgICAgICAgICBmb3JtTGFiZWw9e3NlcnZpY2VMYWJlbH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8VGFibGVDb250ZXh0UHJvdmlkZXIgdmFsdWU9e251bGx9PlxuICAgICAgICAgICAgICAgIDxUYWJsZVdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgcGFnZT17UEFHRV9DT05GfVxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT17c2VydmljZU5hbWV9XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3RNb2RhbE9wZW49eygpID0+IGhhbmRsZVJlcXVlc3RPcGVuKCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7Z2VuZXJhdGVNb2RhbERpYWxvZygpfVxuICAgICAgICAgICAgPC9UYWJsZUNvbnRleHRQcm92aWRlcj5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuQ29uZmlndXJhdGlvblRhYmxlLnByb3BUeXBlcyA9IHtcbiAgICBzZXJ2aWNlTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNlcnZpY2VUaXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhDb25maWd1cmF0aW9uVGFibGUpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBfIH0gZnJvbSAnQHNwbHVuay91aS11dGlscy9pMThuJztcbmltcG9ydCBUYWJCYXIgZnJvbSAnQHNwbHVuay9yZWFjdC11aS9UYWJCYXInO1xuaW1wb3J0IFRvYXN0TWVzc2FnZXMgZnJvbSAnQHNwbHVuay9yZWFjdC10b2FzdC1ub3RpZmljYXRpb25zL1RvYXN0TWVzc2FnZXMnO1xuaW1wb3J0IENvbHVtbkxheW91dCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0NvbHVtbkxheW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHVzZVF1ZXJ5IGZyb20gJy4uLy4uL2hvb2tzL3VzZVF1ZXJ5JztcbmltcG9ydCB7IGdldFVuaWZpZWRDb25maWdzIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50LCBTdWJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uL0lucHV0L0lucHV0UGFnZVN0eWxlJztcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRXJyb3JCb3VuZGFyeSc7XG5pbXBvcnQgQ29uZmlndXJhdGlvbkZvcm1WaWV3IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uZmlndXJhdGlvbkZvcm1WaWV3JztcbmltcG9ydCBDb25maWd1cmF0aW9uVGFibGUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25maWd1cmF0aW9uVGFibGUnO1xuXG5jb25zdCBSb3cgPSBzdHlsZWQoQ29sdW1uTGF5b3V0LlJvdylgXG4gICAgcGFkZGluZzogNXB4IDBweDtcblxuICAgIC5kcm9wZG93biB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cblxuICAgIC5pbnB1dF9idXR0b24ge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgfVxuYDtcblxuZnVuY3Rpb24gQ29uZmlndXJhdGlvblBhZ2UoKSB7XG4gICAgY29uc3QgdW5pZmllZENvbmZpZ3MgPSBnZXRVbmlmaWVkQ29uZmlncygpO1xuICAgIGNvbnN0IHsgdGl0bGUsIGRlc2NyaXB0aW9uLCB0YWJzIH0gPSB1bmlmaWVkQ29uZmlncy5wYWdlcy5jb25maWd1cmF0aW9uO1xuICAgIGNvbnN0IHBlcm1pdHRlZFRhYk5hbWVzID0gdGFicy5tYXAoKHRhYikgPT4ge1xuICAgICAgICByZXR1cm4gdGFiLm5hbWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBbYWN0aXZlVGFiSWQsIHNldEFjdGl2ZVRhYklkXSA9IHVzZVN0YXRlKHRhYnNbMF0ubmFtZSk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHVzZVF1ZXJ5KCk7XG5cbiAgICAvLyBSdW4gaW5pdGlhbGx5IGFuZCB3aGVuIHF1ZXJ5IGlzIHVwZGF0ZWQgdG8gc2V0IGFjdGl2ZSB0YWIgYmFzZWQgb24gaW5pdGlhbCBVUkxcbiAgICAvLyBvciB3aGlsZSBuYXZpZ2F0aW5nIGJyb3dzZXIgaGlzdG9yeVxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgY2hhbmdlIGFjdGl2ZSB0YWIgd2hlbiBwcm92aWRlZCB0YWIgaW4gcXVlcnkgaXMgc3BlY2lmaWVkIGluIGdsb2JhbENvbmZpZ1xuICAgICAgICAvLyBhbmQgaWYgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYiBpcyBub3Qgc2FtZSBhcyBwcm92aWRlZCBpbiBxdWVyeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBxdWVyeSAmJlxuICAgICAgICAgICAgcGVybWl0dGVkVGFiTmFtZXMuaW5jbHVkZXMocXVlcnkuZ2V0KCd0YWInKSkgJiZcbiAgICAgICAgICAgIHF1ZXJ5LmdldCgndGFiJykgIT09IGFjdGl2ZVRhYklkXG4gICAgICAgICkge1xuICAgICAgICAgICAgc2V0QWN0aXZlVGFiSWQocXVlcnkuZ2V0KCd0YWInKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAoZSwgeyBzZWxlY3RlZFRhYklkIH0pID0+IHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVRhYklkKHNlbGVjdGVkVGFiSWQpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgICAgIFthY3RpdmVUYWJJZF1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAgICA8Q29sdW1uTGF5b3V0IGd1dHRlcj17OH0+XG4gICAgICAgICAgICAgICAgPFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPENvbHVtbkxheW91dC5Db2x1bW4gc3Bhbj17OX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVDb21wb25lbnQ+e18odGl0bGUpfTwvVGl0bGVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ViVGl0bGVDb21wb25lbnQ+e18oZGVzY3JpcHRpb24gfHwgJycpfTwvU3ViVGl0bGVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvQ29sdW1uTGF5b3V0LkNvbHVtbj5cbiAgICAgICAgICAgICAgICA8L1Jvdz5cbiAgICAgICAgICAgIDwvQ29sdW1uTGF5b3V0PlxuICAgICAgICAgICAgPFRhYkJhciBhY3RpdmVUYWJJZD17YWN0aXZlVGFiSWR9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9PlxuICAgICAgICAgICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJCYXIuVGFiIGtleT17dGFiLm5hbWV9IGxhYmVsPXtfKHRhYi50aXRsZSl9IHRhYklkPXt0YWIubmFtZX0gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvVGFiQmFyPlxuICAgICAgICAgICAge3RhYnMubWFwKCh0YWIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFiLnRhYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3RhYi5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYi5uYW1lICE9PSBhY3RpdmVUYWJJZCA/IHsgZGlzcGxheTogJ25vbmUnIH0gOiB7IGRpc3BsYXk6ICdibG9jaycgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3RhYi5uYW1lfVRhYmB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb25maWd1cmF0aW9uVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3RhYi5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lPXt0YWIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVGl0bGU9e3RhYi50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dGFiLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiLm5hbWUgIT09IGFjdGl2ZVRhYklkID8geyBkaXNwbGF5OiAnbm9uZScgfSA6IHsgZGlzcGxheTogJ2Jsb2NrJyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7dGFiLm5hbWV9VGFiYH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyYXRpb25Gb3JtVmlldyBrZXk9e3RhYi5uYW1lfSBzZXJ2aWNlTmFtZT17dGFiLm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDxUb2FzdE1lc3NhZ2VzIHBvc2l0aW9uPVwidG9wLXJpZ2h0XCIgLz5cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpZ3VyYXRpb25QYWdlO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/package/appserver/static/js/build/5.js b/package/appserver/static/js/build/5.js deleted file mode 100644 index 9af06d5..0000000 --- a/package/appserver/static/js/build/5.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{500:function(e,t,n){"use strict";n.r(t);var a=n(288),r=n.n(a),c=n(72),l=n.n(c),o=n(14),i=n.n(o),s=n(0),u=n.n(s),m=n(4),p=n(301),d=n.n(p),f=n(35),b=n.n(f),g=n(51),h=n.n(g),v=n(295),y=n.n(v),O=n(1),E=n(345),j=n.n(E),C=n(7),N=n(8),S=n(47),w=n(317),P=n(292),R=n(293),k=n(50),I=n(353),x=n(33),_=n.n(x),L=n(34),z=n.n(L),q=n(129),D=n.n(q),T=n(36),B=n.n(T),M=n(37),A=n.n(M),U=n(21),F=n.n(U),J=n(3),V=n.n(J),G=n(39);function H(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=F()(e);if(t){var r=F()(this).constructor;n=Reflect.construct(a,arguments,r)}else n=a.apply(this,arguments);return A()(this,n)}}var K=function(e){B()(n,e);var t=H(n);function n(e){var a;return _()(this,n),a=t.call(this,e),r()(D()(a),"setValue",(function(e){a.props.handleChange(e)})),r()(D()(a),"loadCustomMenu",(function(){return new Promise((function(e){if("external"===a.props.type)import("".concat(Object(G.a)(),"/custom/").concat(a.props.fileName,".js")).then((function(t){var n=t.default;e(n)}));else{var t=Object(S.d)().meta.name;require(["app/".concat(t,"/js/build/custom/").concat(a.props.fileName)],(function(t){return e(t)}))}}))})),a.state={loading:!0},a.shouldRender=!0,a}return z()(n,[{key:"componentDidMount",value:function(){var e=this,t=Object(S.d)();this.setState({loading:!0}),this.loadCustomMenu().then((function(n){new n(t,e.el,e.setValue).render(),e.setState({loading:!1})}))}},{key:"shouldComponentUpdate",value:function(e,t){return!(t.loading||!this.shouldRender)&&(this.shouldRender=!1,!0)}},{key:"render",value:function(){var e=this;return u.a.createElement(u.a.Fragment,null,this.state.loading&&Object(C._)("Loading..."),u.a.createElement("span",{ref:function(t){e.el=t},style:{visibility:this.state.loading?"hidden":"visible"}}))}}]),n}(s.Component);K.propTypes={fileName:V.a.string.isRequired,type:V.a.string,handleChange:V.a.func};var Q=K,W=n(360),X=n(322),Y=n(361),Z=n(130),$=n.n(Z),ee=n(76),te=n.n(ee),ne=n(15),ae=n(325);function re(e){var t=e.handleRequestClose,n=e.serviceName,a=e.mode,r=e.stanzaName,c=e.formLabel,o=Object(s.useRef)(),i=Object(s.useState)(!1),m=l()(i,2),p=m[0],f=m[1],g=Object(C._)("Submit");a===R.c?g=Object(C._)("Add"):a===R.a?g=Object(C._)("Clone Input"):a===R.d&&(g=Object(C._)("Update"));var h={boxShadow:Object(ne.useSplunkTheme)().embossShadow,padding:"1%",backgroundColor:"white"};return u.a.createElement(d.a,{gutter:8},u.a.createElement(d.a.Row,{style:{padding:"5px 0px"}},u.a.createElement(d.a.Column,null,u.a.createElement(w.a,null,u.a.createElement($.a,{onClick:t},Object(C._)("Inputs"))," > ",Object(C._)(c)))),u.a.createElement(d.a.Row,null,u.a.createElement(d.a.Column,{span:2}),u.a.createElement(d.a.Column,{span:8,style:h},u.a.createElement(ae.a,{ref:o,page:k.b,serviceName:n,mode:a,stanzaName:r,handleFormSubmit:function(e,n){f(e),n&&t()}})),u.a.createElement(d.a.Column,{span:2})),u.a.createElement(d.a.Row,null,u.a.createElement(d.a.Column,{span:7}),u.a.createElement(d.a.Column,{span:3,style:{textAlign:"right"}},u.a.createElement(b.a,{appearance:"secondary",onClick:t,label:Object(C._)("Cancel"),disabled:p}),u.a.createElement(b.a,{appearance:"primary",label:p?u.a.createElement(te.a,null):g,onClick:function(){o.current.handleSubmit()&&t()},disabled:p})),u.a.createElement(d.a.Column,{span:2})))}re.propTypes={handleRequestClose:V.a.func,serviceName:V.a.string,mode:V.a.string,stanzaName:V.a.string,formLabel:V.a.string};var ce,le=Object(s.memo)(re),oe=n(321);function ie(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function se(e){for(var t=1;t1&&!(null!=p&&p.src)&&u.a.createElement(d.a.Column,{className:"dropdown",span:3},u.a.createElement(h.a,{toggle:f},u.a.createElement(y.a,{onClick:function(e){var t=c[c.findIndex((function(t){return t.title===e.target.innerText}))].name;E(t,e.target.innerText)}},c.map((function(e){return u.a.createElement(y.a.Item,{key:e.name},e.title)}))))),c&&1===c.length&&!(null!=p&&p.src)&&u.a.createElement(d.a.Column,{span:3,className:"input_button"},u.a.createElement(b.a,{label:Object(N.a)(100),appearance:"primary",id:"addInputBtn",onClick:function(){E(c[0].name,c[0].title)}})),(null==p?void 0:p.src)&&u.a.createElement(d.a.Column,{span:3,className:"input_button"},u.a.createElement(Q,{fileName:p.src,type:p.type,handleChange:function(e){Object.keys(e).forEach((function(t){O.set(t,e[t])})),v.push({search:O.toString()})}})))),u.a.createElement(W.a,{page:k.b,handleOpenPageStyleDialog:function(e,t){var r,l=null===(r=c.find((function(t){return t.name===e.serviceName})))||void 0===r?void 0:r.title;a(se(se({},n),{},{open:!0,isInputPageStyle:!0,serviceName:e.serviceName,stanzaName:e.name,formLabel:t===R.a?"Clone ".concat(l):"Update ".concat(l),mode:t})),O.set("service",e.serviceName),O.set("action",t),v.push({search:O.toString()})}}),u.a.createElement(j.a,{position:"top-right"}),!n.isInputPageStyle&&n.open?u.a.createElement(X.a,{page:k.b,open:n.open,handleRequestClose:x,serviceName:n.serviceName,mode:R.c,formLabel:n.formLabel}):null)))}}}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9DdXN0b21NZW51LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvY29tcG9uZW50cy9FbnRpdHlQYWdlLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi93ZWJhcHAvcGFnZXMvSW5wdXQvSW5wdXRQYWdlLmpzeCJdLCJuYW1lcyI6WyJDdXN0b21NZW51IiwicHJvcHMiLCJuZXdWYWx1ZSIsImhhbmRsZUNoYW5nZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHlwZSIsImltcG9ydCIsImdldEJ1aWxkRGlyUGF0aCIsImZpbGVOYW1lIiwidGhlbiIsImV4dGVybmFsIiwiQ29udHJvbCIsImFwcE5hbWUiLCJnZXRVbmlmaWVkQ29uZmlncyIsIm1ldGEiLCJuYW1lIiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJzdGF0ZSIsImxvYWRpbmciLCJzaG91bGRSZW5kZXIiLCJnbG9iYWxDb25maWciLCJ0aGlzIiwic2V0U3RhdGUiLCJsb2FkQ3VzdG9tTWVudSIsImVsIiwic2V0VmFsdWUiLCJyZW5kZXIiLCJuZXh0UHJvcHMiLCJuZXh0U3RhdGUiLCJfIiwicmVmIiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJFbnRpdHlQYWdlIiwiaGFuZGxlUmVxdWVzdENsb3NlIiwic2VydmljZU5hbWUiLCJtb2RlIiwic3RhbnphTmFtZSIsImZvcm1MYWJlbCIsImZvcm0iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImlzU3VibWl0dGluZyIsInNldElzU3VibWl0dGluZyIsImJ1dHRvblRleHQiLCJNT0RFX0NSRUFURSIsIk1PREVfQ0xPTkUiLCJNT0RFX0VESVQiLCJjb2xTdHlsZSIsImJveFNoYWRvdyIsInVzZVNwbHVua1RoZW1lIiwiZW1ib3NzU2hhZG93IiwicGFkZGluZyIsImJhY2tncm91bmRDb2xvciIsImd1dHRlciIsIlJvdyIsIkNvbHVtbiIsIm9uQ2xpY2siLCJzcGFuIiwiQmFzZUZvcm1WaWV3IiwicGFnZSIsIlBBR0VfSU5QVVQiLCJoYW5kbGVGb3JtU3VibWl0Iiwic2V0IiwiY2xvc2UiLCJ0ZXh0QWxpZ24iLCJhcHBlYXJhbmNlIiwibGFiZWwiLCJkaXNhYmxlZCIsImN1cnJlbnQiLCJoYW5kbGVTdWJtaXQiLCJtZW1vIiwic3R5bGVkIiwiQ29sdW1uTGF5b3V0IiwiSW5wdXRQYWdlIiwib3BlbiIsImVudGl0eSIsInNldEVudGl0eSIsInBhZ2VzIiwiaW5wdXRzIiwic2VydmljZXMiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiY3VzdG9tTWVudUZpZWxkIiwibWVudSIsInRvZ2dsZSIsImlkIiwiaXNNZW51IiwiUEVSTUlUVEVEX01PREVTIiwiaGlzdG9yeSIsInVzZUhpc3RvcnkiLCJxdWVyeSIsInVzZVF1ZXJ5IiwiaGFuZGxlUmVxdWVzdE9wZW4iLCJzZXJ2aWNlVGl0bGUiLCJpc0lucHV0UGFnZVN0eWxlIiwiZmluZCIsIngiLCJTVFlMRV9QQUdFIiwicHVzaCIsInNlYXJjaCIsInRvU3RyaW5nIiwiaGFuZGxlTW9kYWxEaWFsb2dDbG9zZSIsImhhbmRsZVBhZ2VEaWFsb2dDbG9zZSIsInVzZUVmZmVjdCIsInNlcnZpY2UiLCJnZXQiLCJpbmNsdWRlcyIsImxvY2F0aW9uIiwiRXJyb3JCb3VuZGFyeSIsIlRhYmxlQ29udGV4dCIsInZhbHVlIiwiZGlzcGxheSIsImxlbmd0aCIsInNyYyIsImNsYXNzTmFtZSIsImV2ZW50IiwiZmluZG5hbWUiLCJmaW5kSW5kZXgiLCJ0YXJnZXQiLCJpbm5lclRleHQiLCJtYXAiLCJJdGVtIiwia2V5IiwiZ2V0Rm9ybWF0dGVkTWVzc2FnZSIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsInZhbCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiVGFibGVXcmFwcGVyIiwiaGFuZGxlT3BlblBhZ2VTdHlsZURpYWxvZyIsInJv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QW9CbkIsRUFBT0QsS0EvSjVDLGtCQUFDNEQsRUFBQSxFQUFELENBQ0kzRSxLQUFNQyxJQUNOYyxLQUFNQyxFQUFPRCxLQUNiekMsbUJBQW9Cb0UsRUFDcEJuRSxZQUFheUMsRUFBT3pDLFlBQ3BCQyxLQUFNUyxJQUNOUCxVQUFXc0MsRUFBT3RDLFlBeUpxRCIsImZpbGUiOiI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBfIH0gZnJvbSAnQHNwbHVuay91aS11dGlscy9pMThuJztcbmltcG9ydCB7IGdldFVuaWZpZWRDb25maWdzIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IGdldEJ1aWxkRGlyUGF0aCB9IGZyb20gJy4uL3V0aWwvc2NyaXB0JztcblxuY2xhc3MgQ3VzdG9tTWVudSBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zaG91bGRSZW5kZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRVbmlmaWVkQ29uZmlncygpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5sb2FkQ3VzdG9tTWVudSgpLnRoZW4oKENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUNvbnRyb2wgPSBuZXcgQ29udHJvbChnbG9iYWxDb25maWcsIHRoaXMuZWwsIHRoaXMuc2V0VmFsdWUpO1xuICAgICAgICAgICAgY3VzdG9tQ29udHJvbC5yZW5kZXIoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgICAgIGlmICghbmV4dFN0YXRlLmxvYWRpbmcgJiYgdGhpcy5zaG91bGRSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkUmVuZGVyID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVDaGFuZ2UobmV3VmFsdWUpO1xuICAgIH07XG5cbiAgICBsb2FkQ3VzdG9tTWVudSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy50eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgICAgICAgICAgICAgaW1wb3J0KFxuICAgICAgICAgICAgICAgICAgICAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovIGAke2dldEJ1aWxkRGlyUGF0aCgpfS9jdXN0b20vJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZmlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgfS5qc2BcbiAgICAgICAgICAgICAgICApLnRoZW4oKGV4dGVybmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRyb2wgPSBleHRlcm5hbC5kZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKENvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxDb25maWcgPSBnZXRVbmlmaWVkQ29uZmlncygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSBnbG9iYWxDb25maWcubWV0YS5uYW1lO1xuICAgICAgICAgICAgICAgIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKFxuICAgICAgICAgICAgICAgICAgICBbYGFwcC8ke2FwcE5hbWV9L2pzL2J1aWxkL2N1c3RvbS8ke3RoaXMucHJvcHMuZmlsZU5hbWV9YF0sXG4gICAgICAgICAgICAgICAgICAgIChDb250cm9sKSA9PiByZXNvbHZlKENvbnRyb2wpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUubG9hZGluZyAmJiBfKCdMb2FkaW5nLi4uJyl9XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgdmlzaWJpbGl0eTogdGhpcy5zdGF0ZS5sb2FkaW5nID8gJ2hpZGRlbicgOiAndmlzaWJsZScgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkN1c3RvbU1lbnUucHJvcFR5cGVzID0ge1xuICAgIGZpbGVOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoYW5kbGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tTWVudTtcbiIsImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IEJ1dHRvbiBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0J1dHRvbic7XG5pbXBvcnQgTGluayBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0xpbmsnO1xuaW1wb3J0IFdhaXRTcGlubmVyIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvV2FpdFNwaW5uZXInO1xuaW1wb3J0IENvbHVtbkxheW91dCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0NvbHVtbkxheW91dCc7XG5pbXBvcnQgeyBfIH0gZnJvbSAnQHNwbHVuay91aS11dGlscy9pMThuJztcbmltcG9ydCB7IHVzZVNwbHVua1RoZW1lIH0gZnJvbSAnQHNwbHVuay90aGVtZXMnO1xuXG5pbXBvcnQgeyBNT0RFX0NMT05FLCBNT0RFX0NSRUFURSwgTU9ERV9FRElUIH0gZnJvbSAnLi4vY29uc3RhbnRzL21vZGVzJztcbmltcG9ydCB7IFBBR0VfSU5QVVQgfSBmcm9tICcuLi9jb25zdGFudHMvcGFnZXMnO1xuaW1wb3J0IEJhc2VGb3JtVmlldyBmcm9tICcuL0Jhc2VGb3JtVmlldyc7XG5pbXBvcnQgeyBTdWJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2VzL0lucHV0L0lucHV0UGFnZVN0eWxlJztcblxuZnVuY3Rpb24gRW50aXR5UGFnZSh7IGhhbmRsZVJlcXVlc3RDbG9zZSwgc2VydmljZU5hbWUsIG1vZGUsIHN0YW56YU5hbWUsIGZvcm1MYWJlbCB9KSB7XG4gICAgLy8gUmVmIGlzIHVzZWQgaGVyZSB0byBjYWxsIHN1Ym1pdCBtZXRob2Qgb2YgZm9ybSBvbmx5XG4gICAgY29uc3QgZm9ybSA9IHVzZVJlZigpOyAvLyBub3NlbWdyZXA6IHR5cGVzY3JpcHQucmVhY3Quc2VjdXJpdHkuYXVkaXQucmVhY3Qtbm8tcmVmcy5yZWFjdC1uby1yZWZzXG4gICAgY29uc3QgW2lzU3VibWl0dGluZywgc2V0SXNTdWJtaXR0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBsZXQgYnV0dG9uVGV4dCA9IF8oJ1N1Ym1pdCcpO1xuXG4gICAgaWYgKG1vZGUgPT09IE1PREVfQ1JFQVRFKSB7XG4gICAgICAgIGJ1dHRvblRleHQgPSBfKCdBZGQnKTtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09IE1PREVfQ0xPTkUpIHtcbiAgICAgICAgYnV0dG9uVGV4dCA9IF8oJ0Nsb25lIElucHV0Jyk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBNT0RFX0VESVQpIHtcbiAgICAgICAgYnV0dG9uVGV4dCA9IF8oJ1VwZGF0ZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW1ib3NzU2hhZG93IH0gPSB1c2VTcGx1bmtUaGVtZSgpO1xuICAgIGNvbnN0IGNvbFN0eWxlID0ge1xuICAgICAgICBib3hTaGFkb3c6IGVtYm9zc1NoYWRvdyxcbiAgICAgICAgcGFkZGluZzogJzElJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm0uY3VycmVudC5oYW5kbGVTdWJtaXQoKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgaGFuZGxlUmVxdWVzdENsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRm9ybVN1Ym1pdCA9IChzZXQsIGNsb3NlKSA9PiB7XG4gICAgICAgIHNldElzU3VibWl0dGluZyhzZXQpO1xuICAgICAgICBpZiAoY2xvc2UpIHtcbiAgICAgICAgICAgIGhhbmRsZVJlcXVlc3RDbG9zZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29sdW1uTGF5b3V0IGd1dHRlcj17OH0+XG4gICAgICAgICAgICA8Q29sdW1uTGF5b3V0LlJvdyBzdHlsZT17eyBwYWRkaW5nOiAnNXB4IDBweCcgfX0+XG4gICAgICAgICAgICAgICAgPENvbHVtbkxheW91dC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUNvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIG9uQ2xpY2s9e2hhbmRsZVJlcXVlc3RDbG9zZX0+e18oJ0lucHV0cycpfTwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsnID4gJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfKGZvcm1MYWJlbCl9XG4gICAgICAgICAgICAgICAgICAgIDwvU3ViVGl0bGVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgPC9Db2x1bW5MYXlvdXQuQ29sdW1uPlxuICAgICAgICAgICAgPC9Db2x1bW5MYXlvdXQuUm93PlxuICAgICAgICAgICAgPENvbHVtbkxheW91dC5Sb3c+XG4gICAgICAgICAgICAgICAgPENvbHVtbkxheW91dC5Db2x1bW4gc3Bhbj17Mn0gLz5cbiAgICAgICAgICAgICAgICA8Q29sdW1uTGF5b3V0LkNvbHVtbiBzcGFuPXs4fSBzdHlsZT17Y29sU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8QmFzZUZvcm1WaWV3IC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1uby1yZWZzLnJlYWN0LW5vLXJlZnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17Zm9ybX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U9e1BBR0VfSU5QVVR9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT17c2VydmljZU5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlPXttb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhbnphTmFtZT17c3RhbnphTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUZvcm1TdWJtaXQ9e2hhbmRsZUZvcm1TdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Db2x1bW5MYXlvdXQuQ29sdW1uPlxuICAgICAgICAgICAgICAgIDxDb2x1bW5MYXlvdXQuQ29sdW1uIHNwYW49ezJ9IC8+XG4gICAgICAgICAgICA8L0NvbHVtbkxheW91dC5Sb3c+XG4gICAgICAgICAgICA8Q29sdW1uTGF5b3V0LlJvdz5cbiAgICAgICAgICAgICAgICA8Q29sdW1uTGF5b3V0LkNvbHVtbiBzcGFuPXs3fSAvPlxuICAgICAgICAgICAgICAgIDxDb2x1bW5MYXlvdXQuQ29sdW1uIHNwYW49ezN9IHN0eWxlPXt7IHRleHRBbGlnbjogJ3JpZ2h0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZXF1ZXN0Q2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17XygnQ2FuY2VsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17aXNTdWJtaXR0aW5nID8gPFdhaXRTcGlubmVyIC8+IDogYnV0dG9uVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Db2x1bW5MYXlvdXQuQ29sdW1uPlxuICAgICAgICAgICAgICAgIDxDb2x1bW5MYXlvdXQuQ29sdW1uIHNwYW49ezJ9IC8+XG4gICAgICAgICAgICA8L0NvbHVtbkxheW91dC5Sb3c+XG4gICAgICAgIDwvQ29sdW1uTGF5b3V0PlxuICAgICk7XG59XG5cbkVudGl0eVBhZ2UucHJvcFR5cGVzID0ge1xuICAgIGhhbmRsZVJlcXVlc3RDbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2VydmljZU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzdGFuemFOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvcm1MYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oRW50aXR5UGFnZSk7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhpc3RvcnkgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuaW1wb3J0IENvbHVtbkxheW91dCBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0NvbHVtbkxheW91dCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvQnV0dG9uJztcbmltcG9ydCBEcm9wZG93biBmcm9tICdAc3BsdW5rL3JlYWN0LXVpL0Ryb3Bkb3duJztcbmltcG9ydCBNZW51IGZyb20gJ0BzcGx1bmsvcmVhY3QtdWkvTWVudSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBUb2FzdE1lc3NhZ2VzIGZyb20gJ0BzcGx1bmsvcmVhY3QtdG9hc3Qtbm90aWZpY2F0aW9ucy9Ub2FzdE1lc3NhZ2VzJztcbmltcG9ydCB7IF8gfSBmcm9tICdAc3BsdW5rL3VpLXV0aWxzL2kxOG4nO1xuaW1wb3J0IHsgZ2V0Rm9ybWF0dGVkTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwvbWVzc2FnZVV0aWwnO1xuaW1wb3J0IHsgZ2V0VW5pZmllZENvbmZpZ3MgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQsIFN1YlRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi9JbnB1dFBhZ2VTdHlsZSc7XG5pbXBvcnQgeyBUYWJsZUNvbnRleHRQcm92aWRlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvVGFibGVDb250ZXh0JztcbmltcG9ydCB7IE1PREVfQ1JFQVRFLCBNT0RFX0NMT05FLCBNT0RFX0VESVQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbW9kZXMnO1xuaW1wb3J0IHsgUEFHRV9JTlBVVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wYWdlcyc7XG5pbXBvcnQgeyBTVFlMRV9QQUdFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpYWxvZ1N0eWxlcyc7XG5pbXBvcnQgQ3VzdG9tTWVudSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0N1c3RvbU1lbnUnO1xuaW1wb3J0IFRhYmxlV3JhcHBlciBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RhYmxlL1RhYmxlV3JhcHBlcic7XG5pbXBvcnQgRW50aXR5TW9kYWwgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9FbnRpdHlNb2RhbCc7XG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0Vycm9yQm91bmRhcnknO1xuaW1wb3J0IEVudGl0eVBhZ2UgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9FbnRpdHlQYWdlJztcbmltcG9ydCB1c2VRdWVyeSBmcm9tICcuLi8uLi9ob29rcy91c2VRdWVyeSc7XG5cbmNvbnN0IFJvdyA9IHN0eWxlZChDb2x1bW5MYXlvdXQuUm93KWBcbiAgICBwYWRkaW5nOiA1cHggMHB4O1xuXG4gICAgLmRyb3Bkb3duIHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuXG4gICAgLmlucHV0X2J1dHRvbiB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweDtcbiAgICB9XG5gO1xuXG5mdW5jdGlvbiBJbnB1dFBhZ2UoKSB7XG4gICAgY29uc3QgW2VudGl0eSwgc2V0RW50aXR5XSA9IHVzZVN0YXRlKHsgb3BlbjogZmFsc2UgfSk7XG5cbiAgICBjb25zdCB1bmlmaWVkQ29uZmlncyA9IGdldFVuaWZpZWRDb25maWdzKCk7XG4gICAgY29uc3QgeyBzZXJ2aWNlcywgdGl0bGUsIGRlc2NyaXB0aW9uLCBtZW51OiBjdXN0b21NZW51RmllbGQgfSA9IHVuaWZpZWRDb25maWdzLnBhZ2VzLmlucHV0cztcbiAgICBjb25zdCB0b2dnbGUgPSAoXG4gICAgICAgIDxCdXR0b24gYXBwZWFyYW5jZT1cInByaW1hcnlcIiBpZD1cImFkZElucHV0QnRuXCIgbGFiZWw9e18oJ0NyZWF0ZSBOZXcgSW5wdXQnKX0gaXNNZW51IC8+XG4gICAgKTtcbiAgICBjb25zdCBQRVJNSVRURURfTU9ERVMgPSBbTU9ERV9DTE9ORSwgTU9ERV9DUkVBVEUsIE1PREVfRURJVF07XG5cbiAgICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnkoKTtcblxuICAgIGNvbnN0IGdldElucHV0TWVudSA9ICgpID0+IHtcbiAgICAgICAgbGV0IGFyciA9IFtdO1xuICAgICAgICBhcnIgPSBzZXJ2aWNlcy5tYXAoKHNlcnZpY2UpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8TWVudS5JdGVtIGtleT17c2VydmljZS5uYW1lfT57c2VydmljZS50aXRsZX08L01lbnUuSXRlbT47XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgICAvLyBoYW5kbGUgbW9kYWwvcGFnZSBvcGVuIHJlcXVlc3Qgb24gY3JlYXRlL2FkZCBlbnRpdHkgYnV0dG9uXG4gICAgY29uc3QgaGFuZGxlUmVxdWVzdE9wZW4gPSAoc2VydmljZU5hbWUsIHNlcnZpY2VUaXRsZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0lucHV0UGFnZVN0eWxlID0gc2VydmljZXMuZmluZCgoeCkgPT4geC5uYW1lID09PSBzZXJ2aWNlTmFtZSkuc3R5bGUgPT09IFNUWUxFX1BBR0U7XG5cbiAgICAgICAgc2V0RW50aXR5KHtcbiAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgIG1vZGU6IE1PREVfQ1JFQVRFLFxuICAgICAgICAgICAgZm9ybUxhYmVsOiBgQWRkICR7c2VydmljZVRpdGxlfWAsXG4gICAgICAgICAgICBpc0lucHV0UGFnZVN0eWxlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzSW5wdXRQYWdlU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIHNldCBxdWVyeSBhbmQgcHVzaCB0byBoaXN0b3J5XG4gICAgICAgICAgICBxdWVyeS5zZXQoJ3NlcnZpY2UnLCBzZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgICBxdWVyeS5zZXQoJ2FjdGlvbicsIE1PREVfQ1JFQVRFKTtcbiAgICAgICAgICAgIGhpc3RvcnkucHVzaCh7IHNlYXJjaDogcXVlcnkudG9TdHJpbmcoKSB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBoYW5kbGUgY2xvc2UvY2FuY2VsL2JhY2sgcmVxdWVzdCBpbiBhZGQvY3JlYXRlIG1vZGFsIGNvbXBvbmVudFxuICAgIGNvbnN0IGhhbmRsZU1vZGFsRGlhbG9nQ2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIHNldEVudGl0eSh7IC4uLmVudGl0eSwgb3BlbjogZmFsc2UgfSk7XG4gICAgfTtcblxuICAgIC8vIGdlbmVyYXRlIG1vZGFsIHN0eWxlIGRpYWxvZ1xuICAgIGNvbnN0IGdlbmVyYXRlTW9kYWxEaWFsb2cgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RW50aXR5TW9kYWxcbiAgICAgICAgICAgICAgICBwYWdlPXtQQUdFX0lOUFVUfVxuICAgICAgICAgICAgICAgIG9wZW49e2VudGl0eS5vcGVufVxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3RDbG9zZT17aGFuZGxlTW9kYWxEaWFsb2dDbG9zZX1cbiAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT17ZW50aXR5LnNlcnZpY2VOYW1lfVxuICAgICAgICAgICAgICAgIG1vZGU9e01PREVfQ1JFQVRFfVxuICAgICAgICAgICAgICAgIGZvcm1MYWJlbD17ZW50aXR5LmZvcm1MYWJlbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIGhhbmRsZSBjbG9uZS9lZGl0IHJlcXVlc3QgcGVyIHJvdyBmcm9tIHRhYmxlIGZvciBwYWdlIHN0eWxlIGRpYWxvZ1xuICAgIGNvbnN0IGhhbmRsZU9wZW5QYWdlU3R5bGVEaWFsb2cgPSAocm93LCBtb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2VydmljZXMuZmluZCgoeCkgPT4geC5uYW1lID09PSByb3cuc2VydmljZU5hbWUpPy50aXRsZTtcbiAgICAgICAgc2V0RW50aXR5KHtcbiAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgICAgICBpc0lucHV0UGFnZVN0eWxlOiB0cnVlLFxuICAgICAgICAgICAgc2VydmljZU5hbWU6IHJvdy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgIHN0YW56YU5hbWU6IHJvdy5uYW1lLFxuICAgICAgICAgICAgZm9ybUxhYmVsOiBtb2RlID09PSBNT0RFX0NMT05FID8gYENsb25lICR7bGFiZWx9YCA6IGBVcGRhdGUgJHtsYWJlbH1gLFxuICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNldCBxdWVyeSBhbmQgcHVzaCB0byBoaXN0b3J5XG4gICAgICAgIHF1ZXJ5LnNldCgnc2VydmljZScsIHJvdy5zZXJ2aWNlTmFtZSk7XG4gICAgICAgIHF1ZXJ5LnNldCgnYWN0aW9uJywgbW9kZSk7XG4gICAgICAgIGhpc3RvcnkucHVzaCh7IHNlYXJjaDogcXVlcnkudG9TdHJpbmcoKSB9KTtcbiAgICB9O1xuXG4gICAgLy8gaGFuZGxlIGNsb3NlIHJlcXVlc3QgZm9yIHBhZ2Ugc3R5bGUgZGlhbG9nXG4gICAgY29uc3QgaGFuZGxlUGFnZURpYWxvZ0Nsb3NlID0gKCkgPT4ge1xuICAgICAgICBzZXRFbnRpdHkoeyAuLi5lbnRpdHksIG9wZW46IGZhbHNlIH0pO1xuICAgICAgICBxdWVyeS5kZWxldGUoJ3NlcnZpY2UnKTtcbiAgICAgICAgcXVlcnkuZGVsZXRlKCdhY3Rpb24nKTtcbiAgICAgICAgaGlzdG9yeS5wdXNoKHsgc2VhcmNoOiBxdWVyeS50b1N0cmluZygpIH0pO1xuICAgIH07XG5cbiAgICAvLyBnZW5lcmF0ZSBwYWdlIHN0eWxlIGRpYWxvZ1xuICAgIGNvbnN0IGdlbmVyYXRlUGFnZURpYWxvZyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFbnRpdHlQYWdlXG4gICAgICAgICAgICAgICAgb3Blbj17ZW50aXR5Lm9wZW59XG4gICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdENsb3NlPXtoYW5kbGVQYWdlRGlhbG9nQ2xvc2V9XG4gICAgICAgICAgICAgICAgc2VydmljZU5hbWU9e2VudGl0eS5zZXJ2aWNlTmFtZX1cbiAgICAgICAgICAgICAgICBzdGFuemFOYW1lPXtlbnRpdHkuc3RhbnphTmFtZX1cbiAgICAgICAgICAgICAgICBtb2RlPXtlbnRpdHkubW9kZX1cbiAgICAgICAgICAgICAgICBmb3JtTGFiZWw9e2VudGl0eS5mb3JtTGFiZWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXJ2aWNlID0gc2VydmljZXMuZmluZCgoeCkgPT4geC5uYW1lID09PSBxdWVyeS5nZXQoJ3NlcnZpY2UnKSk7XG4gICAgICAgIC8vIFJ1biBvbmx5IHdoZW4gc2VydmljZSBhbmQgYWN0aW9uL21vZGUgaXMgdmFsaWQgYW5kIG1vZGFsL3BhZ2UgaXMgbm90IG9wZW5cbiAgICAgICAgaWYgKHF1ZXJ5ICYmIHNlcnZpY2UgJiYgUEVSTUlUVEVEX01PREVTLmluY2x1ZGVzKHF1ZXJ5LmdldCgnYWN0aW9uJykpICYmICFlbnRpdHkub3Blbikge1xuICAgICAgICAgICAgLy8gcnVuIHdoZW4gbW9kZSBpcyBub3QgY3JlYXRlIGFuZCBwcmV2aW91cyBzdGF0ZSBpbmZvIGlzIGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKHF1ZXJ5LmdldCgnYWN0aW9uJykgIT09IE1PREVfQ1JFQVRFICYmIGVudGl0eS5zdGFuemFOYW1lKSB7XG4gICAgICAgICAgICAgICAgc2V0RW50aXR5KHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpc0lucHV0UGFnZVN0eWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZTogcXVlcnkuZ2V0KCdzZXJ2aWNlJyksXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IHF1ZXJ5LmdldCgnYWN0aW9uJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlmIHByZXZpb3VzIHN0YXRlIGluZm8gaXMgbm90IGF2YWlsYWJsZSB0aGVuIGRlZmF1bHQgdG8gY3JlYXRlIG1vZGVcbiAgICAgICAgICAgICAgICBzZXRFbnRpdHkoe1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5wdXRQYWdlU3R5bGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lOiBxdWVyeS5nZXQoJ3NlcnZpY2UnKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUxhYmVsOiBgQ3JlYXRlICR7c2VydmljZT8udGl0bGV9YCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogTU9ERV9DUkVBVEUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAoIXF1ZXJ5LmdldCgnc2VydmljZScpIHx8ICFxdWVyeS5nZXQoJ2FjdGlvbicpKSAmJlxuICAgICAgICAgICAgZW50aXR5Lm9wZW4gJiZcbiAgICAgICAgICAgIGVudGl0eS5pc0lucHV0UGFnZVN0eWxlXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gQ2xvc2UgcGFnZSB3aGVuIGFueSBvZiB0aGUgcmVxdWlyZWQgcXVlcnkgcGFyYW1zIGFyZSBub3QgcHJvdmlkZWRcbiAgICAgICAgICAgIHNldEVudGl0eSh7IC4uLmVudGl0eSwgb3BlbjogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaF0pO1xuXG4gICAgY29uc3QgY2hhbmdlUm91dGUgPSAodmFsKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBxdWVyeS5zZXQoa2V5LCB2YWxba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5LnB1c2goeyBzZWFyY2g6IHF1ZXJ5LnRvU3RyaW5nKCkgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgICAgPFRhYmxlQ29udGV4dFByb3ZpZGVyIHZhbHVlPXtudWxsfT5cbiAgICAgICAgICAgICAgICB7ZW50aXR5LmlzSW5wdXRQYWdlU3R5bGUgJiYgZW50aXR5Lm9wZW4gPyBnZW5lcmF0ZVBhZ2VEaWFsb2coKSA6IG51bGx9eycgJ31cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5pc0lucHV0UGFnZVN0eWxlICYmIGVudGl0eS5vcGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGRpc3BsYXk6ICdub25lJyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGRpc3BsYXk6ICdibG9jaycgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q29sdW1uTGF5b3V0IGd1dHRlcj17OH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Um93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb2x1bW5MYXlvdXQuQ29sdW1uIHNwYW49ezl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVDb21wb25lbnQ+e18odGl0bGUpfTwvVGl0bGVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUNvbXBvbmVudD57XyhkZXNjcmlwdGlvbiB8fCAnJyl9PC9TdWJUaXRsZUNvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbHVtbkxheW91dC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlcnZpY2VzICYmIHNlcnZpY2VzLmxlbmd0aCA+IDEgJiYgIWN1c3RvbU1lbnVGaWVsZD8uc3JjICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbHVtbkxheW91dC5Db2x1bW4gY2xhc3NOYW1lPVwiZHJvcGRvd25cIiBzcGFuPXszfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biB0b2dnbGU9e3RvZ2dsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kbmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgudGl0bGUgPT09IGV2ZW50LnRhcmdldC5pbm5lclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3RPcGVuKGZpbmRuYW1lLCBldmVudC50YXJnZXQuaW5uZXJUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRJbnB1dE1lbnUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L01lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbHVtbkxheW91dC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VydmljZXMgJiYgc2VydmljZXMubGVuZ3RoID09PSAxICYmICFjdXN0b21NZW51RmllbGQ/LnNyYyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb2x1bW5MYXlvdXQuQ29sdW1uIHNwYW49ezN9IGNsYXNzTmFtZT1cImlucHV0X2J1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtnZXRGb3JtYXR0ZWRNZXNzYWdlKDEwMCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWRkSW5wdXRCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdE9wZW4oc2VydmljZXNbMF0ubmFtZSwgc2VydmljZXNbMF0udGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbHVtbkxheW91dC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VzdG9tTWVudUZpZWxkPy5zcmMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29sdW1uTGF5b3V0LkNvbHVtbiBzcGFuPXszfSBjbGFzc05hbWU9XCJpbnB1dF9idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbU1lbnUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogY3VzdG9tTWVudUZpZWxkLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjdXN0b21NZW51RmllbGQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IGNoYW5nZVJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29sdW1uTGF5b3V0LkNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvQ29sdW1uTGF5b3V0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U9e1BBR0VfSU5QVVR9XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuUGFnZVN0eWxlRGlhbG9nPXtoYW5kbGVPcGVuUGFnZVN0eWxlRGlhbG9nfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8VG9hc3RNZXNzYWdlcyBwb3NpdGlvbj1cInRvcC1yaWdodFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIHshZW50aXR5LmlzSW5wdXRQYWdlU3R5bGUgJiYgZW50aXR5Lm9wZW4gPyBnZW5lcmF0ZU1vZGFsRGlhbG9nKCkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9UYWJsZUNvbnRleHRQcm92aWRlcj5cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0UGFnZTtcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/package/appserver/static/js/build/entry_page.js b/package/appserver/static/js/build/entry_page.js deleted file mode 100644 index 005b25e..0000000 --- a/package/appserver/static/js/build/entry_page.js +++ /dev/null @@ -1,57 +0,0 @@ -!function(e){function t(t){for(var r,a,s=t[0],u=t[1],l=t[3]||[],f=0,p=[];f1?t-1:0),n=1;n0?" Args: "+r.join(", "):""))}var A=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}var t=e.prototype;return t.indexOfGroup=function(e){for(var t=0,r=0;r=this.groupSizes.length){for(var r=this.groupSizes,n=r.length,o=n;e>=o;)(o<<=1)<0&&k(16,""+e);this.groupSizes=new Uint32Array(o),this.groupSizes.set(r),this.length=o;for(var i=n;i=this.length||0===this.groupSizes[e])return t;for(var r=this.groupSizes[e],n=this.indexOfGroup(e),o=n+r,i=n;i=0;r--){var n=t[r];if(n&&1===n.nodeType&&n.hasAttribute(w))return n}}(r),i=void 0!==o?o.nextSibling:null;n.setAttribute(w,"active"),n.setAttribute("data-styled-version","5.2.1");var a=N();return a&&n.setAttribute("nonce",a),r.insertBefore(n,i),n},z=function(){function e(e){var t=this.element=B(e);t.appendChild(document.createTextNode("")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,r=0,n=t.length;r=0){var r=document.createTextNode(t),n=this.nodes[e];return this.element.insertBefore(r,n||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e0&&(c+=e+",")})),n+=""+s+u+'{content:"'+c+'"}/*!sc*/\n'}}}return n}(this)},e}(),X=/(a)(d)/gi,q=function(e){return String.fromCharCode(e+(e>25?39:97))};function K(e){var t,r="";for(t=Math.abs(e);t>52;t=t/52|0)r=q(t%52)+r;return(q(t%52)+r).replace(X,"$1-$2")}var J=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},Y=function(e){return J(5381,e)};function G(e){for(var t=0;t>>0);if(!t.hasNameForId(n,a)){var s=r(i,"."+a,void 0,n);t.insertRules(n,a,s)}o.push(a),this.staticRulesId=a}else{for(var u=this.rules.length,c=J(this.baseHash,r.hash),l="",f=0;f>>0);if(!t.hasNameForId(n,m)){var y=r(l,"."+m,void 0,n);t.insertRules(n,m,y)}o.push(m)}}return o.join(" ")},e}(),ee=/^\s*\/\/.*$/gm,te=[":","[",".","#"];function re(e){var t,r,n,o,i=void 0===e?v:e,a=i.options,s=void 0===a?v:a,c=i.plugins,l=void 0===c?y:c,f=new u.a(s),p=[],d=function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return function(r,n,o,i,a,s,u,c,l,f){switch(r){case 1:if(0===l&&64===n.charCodeAt(0))return e(n+";"),"";break;case 2:if(0===c)return n+"/*|*/";break;case 3:switch(c){case 102:case 112:return e(o[0]+n),"";default:return n+(0===f?"/*|*/":"")}case-2:n.split("/*|*/}").forEach(t)}}}((function(e){p.push(e)})),h=function(e,n,i){return 0===n&&te.includes(i[r.length])||i.match(o)?e:"."+t};function m(e,i,a,s){void 0===s&&(s="&");var u=e.replace(ee,""),c=i&&a?a+" "+i+" { "+u+" }":u;return t=s,r=i,n=new RegExp("\\"+r+"\\b","g"),o=new RegExp("(\\"+r+"\\b){2,}"),f(a||!i?"":i,c)}return f.use([].concat(l,[function(e,t,o){2===e&&o.length&&o[0].lastIndexOf(r)>0&&(o[0]=o[0].replace(n,h))},d,function(e){if(-2===e){var t=p;return p=[],t}}])),m.hash=l.length?l.reduce((function(e,t){return t.name||k(15),J(e,t.name)}),5381).toString():"",m}var ne=i.a.createContext(),oe=ne.Consumer,ie=i.a.createContext(),ae=(ie.Consumer,new V),se=re();function ue(){return Object(o.useContext)(ne)||ae}function ce(){return Object(o.useContext)(ie)||se}function le(e){var t=Object(o.useState)(e.stylisPlugins),r=t[0],n=t[1],a=ue(),u=Object(o.useMemo)((function(){var t=a;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),c=Object(o.useMemo)((function(){return re({options:{prefix:!e.disableVendorPrefixes},plugins:r})}),[e.disableVendorPrefixes,r]);return Object(o.useEffect)((function(){s()(r,e.stylisPlugins)||n(e.stylisPlugins)}),[e.stylisPlugins]),i.a.createElement(ne.Provider,{value:u},i.a.createElement(ie.Provider,{value:c},e.children))}var fe=function(){function e(e,t){var r=this;this.inject=function(e,t){void 0===t&&(t=se);var n=r.name+t.hash;e.hasNameForId(r.id,n)||e.insertRules(r.id,n,t(r.rules,n,"@keyframes"))},this.toString=function(){return k(12,String(r.name))},this.name=e,this.id="sc-keyframes-"+e,this.rules=t}return e.prototype.getName=function(e){return void 0===e&&(e=se),this.name+e.hash},e}(),pe=/([A-Z])/,de=/([A-Z])/g,he=/^ms-/,me=function(e){return"-"+e.toLowerCase()};function ye(e){return pe.test(e)?e.replace(de,me).replace(he,"-ms-"):e}var ve=function(e){return null==e||!1===e||""===e};function ge(e,t,r,n){if(Array.isArray(e)){for(var o,i=[],a=0,s=e.length;a1?t-1:0),n=1;n?@[\\\]^`{|}~-]+/g,Ce=/(^-|-$)/g;function Oe(e){return e.replace(we,"-").replace(Ce,"")}var Se=function(e){return K(Y(e)>>>0)};function Ee(e){return"string"==typeof e&&!0}var ke=function(e){return"function"==typeof e||"object"==typeof e&&null!==e&&!Array.isArray(e)},Ae=function(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e};function _e(e,t,r){var n=e[r];ke(t)&&ke(n)?De(n,t):e[r]=t}function De(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=0||(o[r]=e[r]);return o}(t,["componentId"]),i=n&&n+"-"+(Ee(e)?e:Oe(b(e)));return Me(e,d({},o,{attrs:C,componentId:i}),r)},Object.defineProperty(S,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=n?De({},e.defaultProps,t):t}}),S.toString=function(){return"."+S.styledComponentId},a&&p()(S,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0,withComponent:!0}),S}var Ie=function(e){return function e(t,r,o){if(void 0===o&&(o=v),!Object(n.isValidElementType)(r))return k(1,String(r));var i=function(){return t(r,o,be.apply(void 0,arguments))};return i.withConfig=function(n){return e(t,r,d({},o,{},n))},i.attrs=function(n){return e(t,r,d({},o,{attrs:Array.prototype.concat(o.attrs,n).filter(Boolean)}))},i}(Me,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){Ie[e]=Ie(e)}));var Re=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=G(e),V.registerId(this.componentId+1)}var t=e.prototype;return t.createStyles=function(e,t,r,n){var o=n(ge(this.rules,t,r,n).join(""),""),i=this.componentId+e;r.insertRules(i,i,o)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,r,n){e>2&&V.registerId(this.componentId+e),this.removeStyles(e,r),this.createStyles(e,t,r,n)},e}();function Le(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n"+t+""},this.getStyleTags=function(){return e.sealed?k(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return k(2);var r=((t={})[w]="",t["data-styled-version"]="5.2.1",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),n=N();return n&&(r.nonce=n),[i.a.createElement("style",d({},r,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new V({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?k(2):i.a.createElement(le,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return k(3)},e}(),ze=function(e){var t=i.a.forwardRef((function(t,r){var n=Object(o.useContext)(je),a=e.defaultProps,s=xe(t,n,a);return i.a.createElement(e,d({},t,{theme:s,ref:r}))}));return p()(t,e),t.displayName="WithTheme("+b(e)+")",t},Ue=function(){return Object(o.useContext)(je)},$e={StyleSheet:V,masterSheet:ae};t.default=Ie}.call(this,r(86))},function(e,t,r){(function(e,r){(function(){var n="Expected a function",o="__lodash_placeholder__",i=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],a="[object Arguments]",s="[object Array]",u="[object Boolean]",c="[object Date]",l="[object Error]",f="[object Function]",p="[object GeneratorFunction]",d="[object Map]",h="[object Number]",m="[object Object]",y="[object RegExp]",v="[object Set]",g="[object String]",b="[object Symbol]",x="[object WeakMap]",w="[object ArrayBuffer]",C="[object DataView]",O="[object Float32Array]",S="[object Float64Array]",E="[object Int8Array]",k="[object Int16Array]",A="[object Int32Array]",_="[object Uint8Array]",D="[object Uint16Array]",j="[object Uint32Array]",P=/\b__p \+= '';/g,T=/\b(__p \+=) '' \+/g,F=/(__e\(.*?\)|\b__t\)) \+\n'';/g,M=/&(?:amp|lt|gt|quot|#39);/g,I=/[&<>"']/g,R=RegExp(M.source),L=RegExp(I.source),N=/<%-([\s\S]+?)%>/g,B=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,U=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$=/^\w*$/,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,V=RegExp(H.source),X=/^\s+/,q=/\s/,K=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,J=/\{\n\/\* \[wrapped with (.+)\] \*/,Y=/,? & /,G=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Z=/[()=,{}\[\]\/\s]/,Q=/\\(\\)?/g,ee=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,te=/\w*$/,re=/^[-+]0x[0-9a-f]+$/i,ne=/^0b[01]+$/i,oe=/^\[object .+?Constructor\]$/,ie=/^0o[0-7]+$/i,ae=/^(?:0|[1-9]\d*)$/,se=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ue=/($^)/,ce=/['\n\r\u2028\u2029\\]/g,le="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",fe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pe="[\\ud800-\\udfff]",de="["+fe+"]",he="["+le+"]",me="\\d+",ye="[\\u2700-\\u27bf]",ve="[a-z\\xdf-\\xf6\\xf8-\\xff]",ge="[^\\ud800-\\udfff"+fe+me+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",be="\\ud83c[\\udffb-\\udfff]",xe="[^\\ud800-\\udfff]",we="(?:\\ud83c[\\udde6-\\uddff]){2}",Ce="[\\ud800-\\udbff][\\udc00-\\udfff]",Oe="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Se="(?:"+ve+"|"+ge+")",Ee="(?:"+Oe+"|"+ge+")",ke="(?:"+he+"|"+be+")"+"?",Ae="[\\ufe0e\\ufe0f]?"+ke+("(?:\\u200d(?:"+[xe,we,Ce].join("|")+")[\\ufe0e\\ufe0f]?"+ke+")*"),_e="(?:"+[ye,we,Ce].join("|")+")"+Ae,De="(?:"+[xe+he+"?",he,we,Ce,pe].join("|")+")",je=RegExp("['’]","g"),Pe=RegExp(he,"g"),Te=RegExp(be+"(?="+be+")|"+De+Ae,"g"),Fe=RegExp([Oe+"?"+ve+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[de,Oe,"$"].join("|")+")",Ee+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[de,Oe+Se,"$"].join("|")+")",Oe+"?"+Se+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Oe+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",me,_e].join("|"),"g"),Me=RegExp("[\\u200d\\ud800-\\udfff"+le+"\\ufe0e\\ufe0f]"),Ie=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Re=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Le=-1,Ne={};Ne[O]=Ne[S]=Ne[E]=Ne[k]=Ne[A]=Ne[_]=Ne["[object Uint8ClampedArray]"]=Ne[D]=Ne[j]=!0,Ne[a]=Ne[s]=Ne[w]=Ne[u]=Ne[C]=Ne[c]=Ne[l]=Ne[f]=Ne[d]=Ne[h]=Ne[m]=Ne[y]=Ne[v]=Ne[g]=Ne[x]=!1;var Be={};Be[a]=Be[s]=Be[w]=Be[C]=Be[u]=Be[c]=Be[O]=Be[S]=Be[E]=Be[k]=Be[A]=Be[d]=Be[h]=Be[m]=Be[y]=Be[v]=Be[g]=Be[b]=Be[_]=Be["[object Uint8ClampedArray]"]=Be[D]=Be[j]=!0,Be[l]=Be[f]=Be[x]=!1;var ze={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ue=parseFloat,$e=parseInt,We="object"==typeof e&&e&&e.Object===Object&&e,He="object"==typeof self&&self&&self.Object===Object&&self,Ve=We||He||Function("return this")(),Xe=t&&!t.nodeType&&t,qe=Xe&&"object"==typeof r&&r&&!r.nodeType&&r,Ke=qe&&qe.exports===Xe,Je=Ke&&We.process,Ye=function(){try{var e=qe&&qe.require&&qe.require("util").types;return e||Je&&Je.binding&&Je.binding("util")}catch(e){}}(),Ge=Ye&&Ye.isArrayBuffer,Ze=Ye&&Ye.isDate,Qe=Ye&&Ye.isMap,et=Ye&&Ye.isRegExp,tt=Ye&&Ye.isSet,rt=Ye&&Ye.isTypedArray;function nt(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function ot(e,t,r,n){for(var o=-1,i=null==e?0:e.length;++o-1}function lt(e,t,r){for(var n=-1,o=null==e?0:e.length;++n-1;);return r}function Ft(e,t){for(var r=e.length;r--&&bt(t,e[r],0)>-1;);return r}function Mt(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}var It=St({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Rt=St({"&":"&","<":"<",">":">",'"':""","'":"'"});function Lt(e){return"\\"+ze[e]}function Nt(e){return Me.test(e)}function Bt(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function zt(e,t){return function(r){return e(t(r))}}function Ut(e,t){for(var r=-1,n=e.length,i=0,a=[];++r",""":'"',"'":"'"});var Kt=function e(t){var r,q=(t=null==t?Ve:Kt.defaults(Ve.Object(),t,Kt.pick(Ve,Re))).Array,le=t.Date,fe=t.Error,pe=t.Function,de=t.Math,he=t.Object,me=t.RegExp,ye=t.String,ve=t.TypeError,ge=q.prototype,be=pe.prototype,xe=he.prototype,we=t["__core-js_shared__"],Ce=be.toString,Oe=xe.hasOwnProperty,Se=0,Ee=(r=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",ke=xe.toString,Ae=Ce.call(he),_e=Ve._,De=me("^"+Ce.call(Oe).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Te=Ke?t.Buffer:void 0,Me=t.Symbol,ze=t.Uint8Array,We=Te?Te.allocUnsafe:void 0,He=zt(he.getPrototypeOf,he),Xe=he.create,qe=xe.propertyIsEnumerable,Je=ge.splice,Ye=Me?Me.isConcatSpreadable:void 0,yt=Me?Me.iterator:void 0,St=Me?Me.toStringTag:void 0,Jt=function(){try{var e=ti(he,"defineProperty");return e({},"",{}),e}catch(e){}}(),Yt=t.clearTimeout!==Ve.clearTimeout&&t.clearTimeout,Gt=le&&le.now!==Ve.Date.now&&le.now,Zt=t.setTimeout!==Ve.setTimeout&&t.setTimeout,Qt=de.ceil,er=de.floor,tr=he.getOwnPropertySymbols,rr=Te?Te.isBuffer:void 0,nr=t.isFinite,or=ge.join,ir=zt(he.keys,he),ar=de.max,sr=de.min,ur=le.now,cr=t.parseInt,lr=de.random,fr=ge.reverse,pr=ti(t,"DataView"),dr=ti(t,"Map"),hr=ti(t,"Promise"),mr=ti(t,"Set"),yr=ti(t,"WeakMap"),vr=ti(he,"create"),gr=yr&&new yr,br={},xr=_i(pr),wr=_i(dr),Cr=_i(hr),Or=_i(mr),Sr=_i(yr),Er=Me?Me.prototype:void 0,kr=Er?Er.valueOf:void 0,Ar=Er?Er.toString:void 0;function _r(e){if(Va(e)&&!Ma(e)&&!(e instanceof Tr)){if(e instanceof Pr)return e;if(Oe.call(e,"__wrapped__"))return Di(e)}return new Pr(e)}var Dr=function(){function e(){}return function(t){if(!Ha(t))return{};if(Xe)return Xe(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();function jr(){}function Pr(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Tr(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Fr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Yr(e,t,r,n,o,i){var s,l=1&t,x=2&t,P=4&t;if(r&&(s=o?r(e,n,o,i):r(e)),void 0!==s)return s;if(!Ha(e))return e;var T=Ma(e);if(T){if(s=function(e){var t=e.length,r=new e.constructor(t);t&&"string"==typeof e[0]&&Oe.call(e,"index")&&(r.index=e.index,r.input=e.input);return r}(e),!l)return bo(e,s)}else{var F=oi(e),M=F==f||F==p;if(Na(e))return po(e,l);if(F==m||F==a||M&&!o){if(s=x||M?{}:ai(e),!l)return x?function(e,t){return xo(e,ni(e),t)}(e,function(e,t){return e&&xo(t,Cs(t),e)}(s,e)):function(e,t){return xo(e,ri(e),t)}(e,Xr(s,e))}else{if(!Be[F])return o?e:{};s=function(e,t,r){var n=e.constructor;switch(t){case w:return ho(e);case u:case c:return new n(+e);case C:return function(e,t){var r=t?ho(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}(e,r);case O:case S:case E:case k:case A:case _:case"[object Uint8ClampedArray]":case D:case j:return mo(e,r);case d:return new n;case h:case g:return new n(e);case y:return function(e){var t=new e.constructor(e.source,te.exec(e));return t.lastIndex=e.lastIndex,t}(e);case v:return new n;case b:return o=e,kr?he(kr.call(o)):{}}var o}(e,F,l)}}i||(i=new Lr);var I=i.get(e);if(I)return I;i.set(e,s),Ya(e)?e.forEach((function(n){s.add(Yr(n,t,r,n,e,i))})):Xa(e)&&e.forEach((function(n,o){s.set(o,Yr(n,t,r,o,e,i))}));var R=T?void 0:(P?x?Ko:qo:x?Cs:ws)(e);return it(R||e,(function(n,o){R&&(n=e[o=n]),Wr(s,o,Yr(n,t,r,o,e,i))})),s}function Gr(e,t,r){var n=r.length;if(null==e)return!n;for(e=he(e);n--;){var o=r[n],i=t[o],a=e[o];if(void 0===a&&!(o in e)||!i(a))return!1}return!0}function Zr(e,t,r){if("function"!=typeof e)throw new ve(n);return wi((function(){e.apply(void 0,r)}),t)}function Qr(e,t,r,n){var o=-1,i=ct,a=!0,s=e.length,u=[],c=t.length;if(!s)return u;r&&(t=ft(t,Dt(r))),n?(i=lt,a=!1):t.length>=200&&(i=Pt,a=!1,t=new Rr(t));e:for(;++o-1},Mr.prototype.set=function(e,t){var r=this.__data__,n=Hr(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},Ir.prototype.clear=function(){this.size=0,this.__data__={hash:new Fr,map:new(dr||Mr),string:new Fr}},Ir.prototype.delete=function(e){var t=Qo(this,e).delete(e);return this.size-=t?1:0,t},Ir.prototype.get=function(e){return Qo(this,e).get(e)},Ir.prototype.has=function(e){return Qo(this,e).has(e)},Ir.prototype.set=function(e,t){var r=Qo(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},Rr.prototype.add=Rr.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Rr.prototype.has=function(e){return this.__data__.has(e)},Lr.prototype.clear=function(){this.__data__=new Mr,this.size=0},Lr.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},Lr.prototype.get=function(e){return this.__data__.get(e)},Lr.prototype.has=function(e){return this.__data__.has(e)},Lr.prototype.set=function(e,t){var r=this.__data__;if(r instanceof Mr){var n=r.__data__;if(!dr||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Ir(n)}return r.set(e,t),this.size=r.size,this};var en=Oo(cn),tn=Oo(ln,!0);function rn(e,t){var r=!0;return en(e,(function(e,n,o){return r=!!t(e,n,o)})),r}function nn(e,t,r){for(var n=-1,o=e.length;++n0&&r(s)?t>1?an(s,t-1,r,n,o):pt(o,s):n||(o[o.length]=s)}return o}var sn=So(),un=So(!0);function cn(e,t){return e&&sn(e,t,ws)}function ln(e,t){return e&&un(e,t,ws)}function fn(e,t){return ut(t,(function(t){return Ua(e[t])}))}function pn(e,t){for(var r=0,n=(t=uo(t,e)).length;null!=e&&rt}function yn(e,t){return null!=e&&Oe.call(e,t)}function vn(e,t){return null!=e&&t in he(e)}function gn(e,t,r){for(var n=r?lt:ct,o=e[0].length,i=e.length,a=i,s=q(i),u=1/0,c=[];a--;){var l=e[a];a&&t&&(l=ft(l,Dt(t))),u=sr(l.length,u),s[a]=!r&&(t||o>=120&&l.length>=120)?new Rr(a&&l):void 0}l=e[0];var f=-1,p=s[0];e:for(;++f=s)return u;var c=r[n];return u*("desc"==c?-1:1)}}return e.index-t.index}(e,t,r)}))}function Mn(e,t,r){for(var n=-1,o=t.length,i={};++n-1;)s!==e&&Je.call(s,u,1),Je.call(e,u,1);return e}function Rn(e,t){for(var r=e?t.length:0,n=r-1;r--;){var o=t[r];if(r==n||o!==i){var i=o;ui(o)?Je.call(e,o,1):eo(e,o)}}return e}function Ln(e,t){return e+er(lr()*(t-e+1))}function Nn(e,t){var r="";if(!e||t<1||t>9007199254740991)return r;do{t%2&&(r+=e),(t=er(t/2))&&(e+=e)}while(t);return r}function Bn(e,t){return Ci(yi(e,t,qs),e+"")}function zn(e){return Br(js(e))}function Un(e,t){var r=js(e);return Ei(r,Jr(t,0,r.length))}function $n(e,t,r,n){if(!Ha(e))return e;for(var o=-1,i=(t=uo(t,e)).length,a=i-1,s=e;null!=s&&++oo?0:o+t),(r=r>o?o:r)<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=q(o);++n>>1,a=e[i];null!==a&&!Za(a)&&(r?a<=t:a=200){var c=t?null:Bo(e);if(c)return $t(c);a=!1,o=Pt,u=new Rr}else u=t?[]:s;e:for(;++n=n?e:Xn(e,t,r)}var fo=Yt||function(e){return Ve.clearTimeout(e)};function po(e,t){if(t)return e.slice();var r=e.length,n=We?We(r):new e.constructor(r);return e.copy(n),n}function ho(e){var t=new e.constructor(e.byteLength);return new ze(t).set(new ze(e)),t}function mo(e,t){var r=t?ho(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function yo(e,t){if(e!==t){var r=void 0!==e,n=null===e,o=e==e,i=Za(e),a=void 0!==t,s=null===t,u=t==t,c=Za(t);if(!s&&!c&&!i&&e>t||i&&a&&u&&!s&&!c||n&&a&&u||!r&&u||!o)return 1;if(!n&&!i&&!c&&e1?r[o-1]:void 0,a=o>2?r[2]:void 0;for(i=e.length>3&&"function"==typeof i?(o--,i):void 0,a&&ci(r[0],r[1],a)&&(i=o<3?void 0:i,o=1),t=he(t);++n-1?o[i?t[a]:a]:void 0}}function Do(e){return Xo((function(t){var r=t.length,o=r,i=Pr.prototype.thru;for(e&&t.reverse();o--;){var a=t[o];if("function"!=typeof a)throw new ve(n);if(i&&!s&&"wrapper"==Yo(a))var s=new Pr([],!0)}for(o=s?o:r;++o1&&g.reverse(),l&&us))return!1;var c=i.get(e),l=i.get(t);if(c&&l)return c==t&&l==e;var f=-1,p=!0,d=2&r?new Rr:void 0;for(i.set(e,t),i.set(t,e);++f-1&&e%1==0&&e1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace(K,"{\n/* [wrapped with "+t+"] */\n")}(n,function(e,t){return it(i,(function(r){var n="_."+r[0];t&r[1]&&!ct(e,n)&&e.push(n)})),e.sort()}(function(e){var t=e.match(J);return t?t[1].split(Y):[]}(n),r)))}function Si(e){var t=0,r=0;return function(){var n=ur(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Ei(e,t){var r=-1,n=e.length,o=n-1;for(t=void 0===t?n:t;++r1?e[t-1]:void 0;return r="function"==typeof r?(e.pop(),r):void 0,Ji(e,r)}));function ra(e){var t=_r(e);return t.__chain__=!0,t}function na(e,t){return t(e)}var oa=Xo((function(e){var t=e.length,r=t?e[0]:0,n=this.__wrapped__,o=function(t){return Kr(t,e)};return!(t>1||this.__actions__.length)&&n instanceof Tr&&ui(r)?((n=n.slice(r,+r+(t?1:0))).__actions__.push({func:na,args:[o],thisArg:void 0}),new Pr(n,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(o)}));var ia=wo((function(e,t,r){Oe.call(e,r)?++e[r]:qr(e,r,1)}));var aa=_o(Fi),sa=_o(Mi);function ua(e,t){return(Ma(e)?it:en)(e,Zo(t,3))}function ca(e,t){return(Ma(e)?at:tn)(e,Zo(t,3))}var la=wo((function(e,t,r){Oe.call(e,r)?e[r].push(t):qr(e,r,[t])}));var fa=Bn((function(e,t,r){var n=-1,o="function"==typeof t,i=Ra(e)?q(e.length):[];return en(e,(function(e){i[++n]=o?nt(t,e,r):bn(e,t,r)})),i})),pa=wo((function(e,t,r){qr(e,r,t)}));function da(e,t){return(Ma(e)?ft:_n)(e,Zo(t,3))}var ha=wo((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]}));var ma=Bn((function(e,t){if(null==e)return[];var r=t.length;return r>1&&ci(e,t[0],t[1])?t=[]:r>2&&ci(t[0],t[1],t[2])&&(t=[t[0]]),Fn(e,an(t,1),[])})),ya=Gt||function(){return Ve.Date.now()};function va(e,t,r){return t=r?void 0:t,Uo(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function ga(e,t){var r;if("function"!=typeof t)throw new ve(n);return e=os(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=void 0),r}}var ba=Bn((function(e,t,r){var n=1;if(r.length){var o=Ut(r,Go(ba));n|=32}return Uo(e,n,t,r,o)})),xa=Bn((function(e,t,r){var n=3;if(r.length){var o=Ut(r,Go(xa));n|=32}return Uo(t,n,e,r,o)}));function wa(e,t,r){var o,i,a,s,u,c,l=0,f=!1,p=!1,d=!0;if("function"!=typeof e)throw new ve(n);function h(t){var r=o,n=i;return o=i=void 0,l=t,s=e.apply(n,r)}function m(e){return l=e,u=wi(v,t),f?h(e):s}function y(e){var r=e-c;return void 0===c||r>=t||r<0||p&&e-l>=a}function v(){var e=ya();if(y(e))return g(e);u=wi(v,function(e){var r=t-(e-c);return p?sr(r,a-(e-l)):r}(e))}function g(e){return u=void 0,d&&o?h(e):(o=i=void 0,s)}function b(){var e=ya(),r=y(e);if(o=arguments,i=this,c=e,r){if(void 0===u)return m(c);if(p)return fo(u),u=wi(v,t),h(c)}return void 0===u&&(u=wi(v,t)),s}return t=as(t)||0,Ha(r)&&(f=!!r.leading,a=(p="maxWait"in r)?ar(as(r.maxWait)||0,t):a,d="trailing"in r?!!r.trailing:d),b.cancel=function(){void 0!==u&&fo(u),l=0,o=c=i=u=void 0},b.flush=function(){return void 0===u?s:g(ya())},b}var Ca=Bn((function(e,t){return Zr(e,1,t)})),Oa=Bn((function(e,t,r){return Zr(e,as(t)||0,r)}));function Sa(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ve(n);var r=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=e.apply(this,n);return r.cache=i.set(o,a)||i,a};return r.cache=new(Sa.Cache||Ir),r}function Ea(e){if("function"!=typeof e)throw new ve(n);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Sa.Cache=Ir;var ka=co((function(e,t){var r=(t=1==t.length&&Ma(t[0])?ft(t[0],Dt(Zo())):ft(an(t,1),Dt(Zo()))).length;return Bn((function(n){for(var o=-1,i=sr(n.length,r);++o=t})),Fa=xn(function(){return arguments}())?xn:function(e){return Va(e)&&Oe.call(e,"callee")&&!qe.call(e,"callee")},Ma=q.isArray,Ia=Ge?Dt(Ge):function(e){return Va(e)&&hn(e)==w};function Ra(e){return null!=e&&Wa(e.length)&&!Ua(e)}function La(e){return Va(e)&&Ra(e)}var Na=rr||au,Ba=Ze?Dt(Ze):function(e){return Va(e)&&hn(e)==c};function za(e){if(!Va(e))return!1;var t=hn(e);return t==l||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Ka(e)}function Ua(e){if(!Ha(e))return!1;var t=hn(e);return t==f||t==p||"[object AsyncFunction]"==t||"[object Proxy]"==t}function $a(e){return"number"==typeof e&&e==os(e)}function Wa(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Ha(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Va(e){return null!=e&&"object"==typeof e}var Xa=Qe?Dt(Qe):function(e){return Va(e)&&oi(e)==d};function qa(e){return"number"==typeof e||Va(e)&&hn(e)==h}function Ka(e){if(!Va(e)||hn(e)!=m)return!1;var t=He(e);if(null===t)return!0;var r=Oe.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Ce.call(r)==Ae}var Ja=et?Dt(et):function(e){return Va(e)&&hn(e)==y};var Ya=tt?Dt(tt):function(e){return Va(e)&&oi(e)==v};function Ga(e){return"string"==typeof e||!Ma(e)&&Va(e)&&hn(e)==g}function Za(e){return"symbol"==typeof e||Va(e)&&hn(e)==b}var Qa=rt?Dt(rt):function(e){return Va(e)&&Wa(e.length)&&!!Ne[hn(e)]};var es=Ro(An),ts=Ro((function(e,t){return e<=t}));function rs(e){if(!e)return[];if(Ra(e))return Ga(e)?Vt(e):bo(e);if(yt&&e[yt])return function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}(e[yt]());var t=oi(e);return(t==d?Bt:t==v?$t:js)(e)}function ns(e){return e?(e=as(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function os(e){var t=ns(e),r=t%1;return t==t?r?t-r:t:0}function is(e){return e?Jr(os(e),0,4294967295):0}function as(e){if("number"==typeof e)return e;if(Za(e))return NaN;if(Ha(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Ha(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=_t(e);var r=ne.test(e);return r||ie.test(e)?$e(e.slice(2),r?2:8):re.test(e)?NaN:+e}function ss(e){return xo(e,Cs(e))}function us(e){return null==e?"":Zn(e)}var cs=Co((function(e,t){if(di(t)||Ra(t))xo(t,ws(t),e);else for(var r in t)Oe.call(t,r)&&Wr(e,r,t[r])})),ls=Co((function(e,t){xo(t,Cs(t),e)})),fs=Co((function(e,t,r,n){xo(t,Cs(t),e,n)})),ps=Co((function(e,t,r,n){xo(t,ws(t),e,n)})),ds=Xo(Kr);var hs=Bn((function(e,t){e=he(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&ci(t[0],t[1],o)&&(n=1);++r1),t})),xo(e,Ko(e),r),n&&(r=Yr(r,7,Ho));for(var o=t.length;o--;)eo(r,t[o]);return r}));var ks=Xo((function(e,t){return null==e?{}:function(e,t){return Mn(e,t,(function(t,r){return vs(e,r)}))}(e,t)}));function As(e,t){if(null==e)return{};var r=ft(Ko(e),(function(e){return[e]}));return t=Zo(t),Mn(e,r,(function(e,r){return t(e,r[0])}))}var _s=zo(ws),Ds=zo(Cs);function js(e){return null==e?[]:jt(e,ws(e))}var Ps=ko((function(e,t,r){return t=t.toLowerCase(),e+(r?Ts(t):t)}));function Ts(e){return zs(us(e).toLowerCase())}function Fs(e){return(e=us(e))&&e.replace(se,It).replace(Pe,"")}var Ms=ko((function(e,t,r){return e+(r?"-":"")+t.toLowerCase()})),Is=ko((function(e,t,r){return e+(r?" ":"")+t.toLowerCase()})),Rs=Eo("toLowerCase");var Ls=ko((function(e,t,r){return e+(r?"_":"")+t.toLowerCase()}));var Ns=ko((function(e,t,r){return e+(r?" ":"")+zs(t)}));var Bs=ko((function(e,t,r){return e+(r?" ":"")+t.toUpperCase()})),zs=Eo("toUpperCase");function Us(e,t,r){return e=us(e),void 0===(t=r?void 0:t)?function(e){return Ie.test(e)}(e)?function(e){return e.match(Fe)||[]}(e):function(e){return e.match(G)||[]}(e):e.match(t)||[]}var $s=Bn((function(e,t){try{return nt(e,void 0,t)}catch(e){return za(e)?e:new fe(e)}})),Ws=Xo((function(e,t){return it(t,(function(t){t=Ai(t),qr(e,t,ba(e[t],e))})),e}));function Hs(e){return function(){return e}}var Vs=Do(),Xs=Do(!0);function qs(e){return e}function Ks(e){return Sn("function"==typeof e?e:Yr(e,1))}var Js=Bn((function(e,t){return function(r){return bn(r,e,t)}})),Ys=Bn((function(e,t){return function(r){return bn(e,r,t)}}));function Gs(e,t,r){var n=ws(t),o=fn(t,n);null!=r||Ha(t)&&(o.length||!n.length)||(r=t,t=e,e=this,o=fn(t,ws(t)));var i=!(Ha(r)&&"chain"in r&&!r.chain),a=Ua(e);return it(o,(function(r){var n=t[r];e[r]=n,a&&(e.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=e(this.__wrapped__),o=r.__actions__=bo(this.__actions__);return o.push({func:n,args:arguments,thisArg:e}),r.__chain__=t,r}return n.apply(e,pt([this.value()],arguments))})})),e}function Zs(){}var Qs=Fo(ft),eu=Fo(st),tu=Fo(mt);function ru(e){return li(e)?Ot(Ai(e)):function(e){return function(t){return pn(t,e)}}(e)}var nu=Io(),ou=Io(!0);function iu(){return[]}function au(){return!1}var su=To((function(e,t){return e+t}),0),uu=No("ceil"),cu=To((function(e,t){return e/t}),1),lu=No("floor");var fu,pu=To((function(e,t){return e*t}),1),du=No("round"),hu=To((function(e,t){return e-t}),0);return _r.after=function(e,t){if("function"!=typeof t)throw new ve(n);return e=os(e),function(){if(--e<1)return t.apply(this,arguments)}},_r.ary=va,_r.assign=cs,_r.assignIn=ls,_r.assignInWith=fs,_r.assignWith=ps,_r.at=ds,_r.before=ga,_r.bind=ba,_r.bindAll=Ws,_r.bindKey=xa,_r.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Ma(e)?e:[e]},_r.chain=ra,_r.chunk=function(e,t,r){t=(r?ci(e,t,r):void 0===t)?1:ar(os(t),0);var n=null==e?0:e.length;if(!n||t<1)return[];for(var o=0,i=0,a=q(Qt(n/t));oo?0:o+r),(n=void 0===n||n>o?o:os(n))<0&&(n+=o),n=r>n?0:is(n);r>>0)?(e=us(e))&&("string"==typeof t||null!=t&&!Ja(t))&&!(t=Zn(t))&&Nt(e)?lo(Vt(e),0,r):e.split(t,r):[]},_r.spread=function(e,t){if("function"!=typeof e)throw new ve(n);return t=null==t?0:ar(os(t),0),Bn((function(r){var n=r[t],o=lo(r,0,t);return n&&pt(o,n),nt(e,this,o)}))},_r.tail=function(e){var t=null==e?0:e.length;return t?Xn(e,1,t):[]},_r.take=function(e,t,r){return e&&e.length?Xn(e,0,(t=r||void 0===t?1:os(t))<0?0:t):[]},_r.takeRight=function(e,t,r){var n=null==e?0:e.length;return n?Xn(e,(t=n-(t=r||void 0===t?1:os(t)))<0?0:t,n):[]},_r.takeRightWhile=function(e,t){return e&&e.length?ro(e,Zo(t,3),!1,!0):[]},_r.takeWhile=function(e,t){return e&&e.length?ro(e,Zo(t,3)):[]},_r.tap=function(e,t){return t(e),e},_r.throttle=function(e,t,r){var o=!0,i=!0;if("function"!=typeof e)throw new ve(n);return Ha(r)&&(o="leading"in r?!!r.leading:o,i="trailing"in r?!!r.trailing:i),wa(e,t,{leading:o,maxWait:t,trailing:i})},_r.thru=na,_r.toArray=rs,_r.toPairs=_s,_r.toPairsIn=Ds,_r.toPath=function(e){return Ma(e)?ft(e,Ai):Za(e)?[e]:bo(ki(us(e)))},_r.toPlainObject=ss,_r.transform=function(e,t,r){var n=Ma(e),o=n||Na(e)||Qa(e);if(t=Zo(t,4),null==r){var i=e&&e.constructor;r=o?n?new i:[]:Ha(e)&&Ua(i)?Dr(He(e)):{}}return(o?it:cn)(e,(function(e,n,o){return t(r,e,n,o)})),r},_r.unary=function(e){return va(e,1)},_r.union=Vi,_r.unionBy=Xi,_r.unionWith=qi,_r.uniq=function(e){return e&&e.length?Qn(e):[]},_r.uniqBy=function(e,t){return e&&e.length?Qn(e,Zo(t,2)):[]},_r.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Qn(e,void 0,t):[]},_r.unset=function(e,t){return null==e||eo(e,t)},_r.unzip=Ki,_r.unzipWith=Ji,_r.update=function(e,t,r){return null==e?e:to(e,t,so(r))},_r.updateWith=function(e,t,r,n){return n="function"==typeof n?n:void 0,null==e?e:to(e,t,so(r),n)},_r.values=js,_r.valuesIn=function(e){return null==e?[]:jt(e,Cs(e))},_r.without=Yi,_r.words=Us,_r.wrap=function(e,t){return Aa(so(t),e)},_r.xor=Gi,_r.xorBy=Zi,_r.xorWith=Qi,_r.zip=ea,_r.zipObject=function(e,t){return io(e||[],t||[],Wr)},_r.zipObjectDeep=function(e,t){return io(e||[],t||[],$n)},_r.zipWith=ta,_r.entries=_s,_r.entriesIn=Ds,_r.extend=ls,_r.extendWith=fs,Gs(_r,_r),_r.add=su,_r.attempt=$s,_r.camelCase=Ps,_r.capitalize=Ts,_r.ceil=uu,_r.clamp=function(e,t,r){return void 0===r&&(r=t,t=void 0),void 0!==r&&(r=(r=as(r))==r?r:0),void 0!==t&&(t=(t=as(t))==t?t:0),Jr(as(e),t,r)},_r.clone=function(e){return Yr(e,4)},_r.cloneDeep=function(e){return Yr(e,5)},_r.cloneDeepWith=function(e,t){return Yr(e,5,t="function"==typeof t?t:void 0)},_r.cloneWith=function(e,t){return Yr(e,4,t="function"==typeof t?t:void 0)},_r.conformsTo=function(e,t){return null==t||Gr(e,t,ws(t))},_r.deburr=Fs,_r.defaultTo=function(e,t){return null==e||e!=e?t:e},_r.divide=cu,_r.endsWith=function(e,t,r){e=us(e),t=Zn(t);var n=e.length,o=r=void 0===r?n:Jr(os(r),0,n);return(r-=t.length)>=0&&e.slice(r,o)==t},_r.eq=ja,_r.escape=function(e){return(e=us(e))&&L.test(e)?e.replace(I,Rt):e},_r.escapeRegExp=function(e){return(e=us(e))&&V.test(e)?e.replace(H,"\\$&"):e},_r.every=function(e,t,r){var n=Ma(e)?st:rn;return r&&ci(e,t,r)&&(t=void 0),n(e,Zo(t,3))},_r.find=aa,_r.findIndex=Fi,_r.findKey=function(e,t){return vt(e,Zo(t,3),cn)},_r.findLast=sa,_r.findLastIndex=Mi,_r.findLastKey=function(e,t){return vt(e,Zo(t,3),ln)},_r.floor=lu,_r.forEach=ua,_r.forEachRight=ca,_r.forIn=function(e,t){return null==e?e:sn(e,Zo(t,3),Cs)},_r.forInRight=function(e,t){return null==e?e:un(e,Zo(t,3),Cs)},_r.forOwn=function(e,t){return e&&cn(e,Zo(t,3))},_r.forOwnRight=function(e,t){return e&&ln(e,Zo(t,3))},_r.get=ys,_r.gt=Pa,_r.gte=Ta,_r.has=function(e,t){return null!=e&&ii(e,t,yn)},_r.hasIn=vs,_r.head=Ri,_r.identity=qs,_r.includes=function(e,t,r,n){e=Ra(e)?e:js(e),r=r&&!n?os(r):0;var o=e.length;return r<0&&(r=ar(o+r,0)),Ga(e)?r<=o&&e.indexOf(t,r)>-1:!!o&&bt(e,t,r)>-1},_r.indexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var o=null==r?0:os(r);return o<0&&(o=ar(n+o,0)),bt(e,t,o)},_r.inRange=function(e,t,r){return t=ns(t),void 0===r?(r=t,t=0):r=ns(r),function(e,t,r){return e>=sr(t,r)&&e=-9007199254740991&&e<=9007199254740991},_r.isSet=Ya,_r.isString=Ga,_r.isSymbol=Za,_r.isTypedArray=Qa,_r.isUndefined=function(e){return void 0===e},_r.isWeakMap=function(e){return Va(e)&&oi(e)==x},_r.isWeakSet=function(e){return Va(e)&&"[object WeakSet]"==hn(e)},_r.join=function(e,t){return null==e?"":or.call(e,t)},_r.kebabCase=Ms,_r.last=zi,_r.lastIndexOf=function(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var o=n;return void 0!==r&&(o=(o=os(r))<0?ar(n+o,0):sr(o,n-1)),t==t?function(e,t,r){for(var n=r+1;n--;)if(e[n]===t)return n;return n}(e,t,o):gt(e,wt,o,!0)},_r.lowerCase=Is,_r.lowerFirst=Rs,_r.lt=es,_r.lte=ts,_r.max=function(e){return e&&e.length?nn(e,qs,mn):void 0},_r.maxBy=function(e,t){return e&&e.length?nn(e,Zo(t,2),mn):void 0},_r.mean=function(e){return Ct(e,qs)},_r.meanBy=function(e,t){return Ct(e,Zo(t,2))},_r.min=function(e){return e&&e.length?nn(e,qs,An):void 0},_r.minBy=function(e,t){return e&&e.length?nn(e,Zo(t,2),An):void 0},_r.stubArray=iu,_r.stubFalse=au,_r.stubObject=function(){return{}},_r.stubString=function(){return""},_r.stubTrue=function(){return!0},_r.multiply=pu,_r.nth=function(e,t){return e&&e.length?Tn(e,os(t)):void 0},_r.noConflict=function(){return Ve._===this&&(Ve._=_e),this},_r.noop=Zs,_r.now=ya,_r.pad=function(e,t,r){e=us(e);var n=(t=os(t))?Ht(e):0;if(!t||n>=t)return e;var o=(t-n)/2;return Mo(er(o),r)+e+Mo(Qt(o),r)},_r.padEnd=function(e,t,r){e=us(e);var n=(t=os(t))?Ht(e):0;return t&&nt){var n=e;e=t,t=n}if(r||e%1||t%1){var o=lr();return sr(e+o*(t-e+Ue("1e-"+((o+"").length-1))),t)}return Ln(e,t)},_r.reduce=function(e,t,r){var n=Ma(e)?dt:Et,o=arguments.length<3;return n(e,Zo(t,4),r,o,en)},_r.reduceRight=function(e,t,r){var n=Ma(e)?ht:Et,o=arguments.length<3;return n(e,Zo(t,4),r,o,tn)},_r.repeat=function(e,t,r){return t=(r?ci(e,t,r):void 0===t)?1:os(t),Nn(us(e),t)},_r.replace=function(){var e=arguments,t=us(e[0]);return e.length<3?t:t.replace(e[1],e[2])},_r.result=function(e,t,r){var n=-1,o=(t=uo(t,e)).length;for(o||(o=1,e=void 0);++n9007199254740991)return[];var r=4294967295,n=sr(e,4294967295);e-=4294967295;for(var o=At(n,t=Zo(t));++r=i)return e;var s=r-Ht(n);if(s<1)return n;var u=a?lo(a,0,s).join(""):e.slice(0,s);if(void 0===o)return u+n;if(a&&(s+=u.length-s),Ja(o)){if(e.slice(s).search(o)){var c,l=u;for(o.global||(o=me(o.source,us(te.exec(o))+"g")),o.lastIndex=0;c=o.exec(l);)var f=c.index;u=u.slice(0,void 0===f?s:f)}}else if(e.indexOf(Zn(o),s)!=s){var p=u.lastIndexOf(o);p>-1&&(u=u.slice(0,p))}return u+n},_r.unescape=function(e){return(e=us(e))&&R.test(e)?e.replace(M,qt):e},_r.uniqueId=function(e){var t=++Se;return us(e)+t},_r.upperCase=Bs,_r.upperFirst=zs,_r.each=ua,_r.eachRight=ca,_r.first=Ri,Gs(_r,(fu={},cn(_r,(function(e,t){Oe.call(_r.prototype,t)||(fu[t]=e)})),fu),{chain:!1}),_r.VERSION="4.17.21",it(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){_r[e].placeholder=_r})),it(["drop","take"],(function(e,t){Tr.prototype[e]=function(r){r=void 0===r?1:ar(os(r),0);var n=this.__filtered__&&!t?new Tr(this):this.clone();return n.__filtered__?n.__takeCount__=sr(r,n.__takeCount__):n.__views__.push({size:sr(r,4294967295),type:e+(n.__dir__<0?"Right":"")}),n},Tr.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),it(["filter","map","takeWhile"],(function(e,t){var r=t+1,n=1==r||3==r;Tr.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Zo(e,3),type:r}),t.__filtered__=t.__filtered__||n,t}})),it(["head","last"],(function(e,t){var r="take"+(t?"Right":"");Tr.prototype[e]=function(){return this[r](1).value()[0]}})),it(["initial","tail"],(function(e,t){var r="drop"+(t?"":"Right");Tr.prototype[e]=function(){return this.__filtered__?new Tr(this):this[r](1)}})),Tr.prototype.compact=function(){return this.filter(qs)},Tr.prototype.find=function(e){return this.filter(e).head()},Tr.prototype.findLast=function(e){return this.reverse().find(e)},Tr.prototype.invokeMap=Bn((function(e,t){return"function"==typeof e?new Tr(this):this.map((function(r){return bn(r,e,t)}))})),Tr.prototype.reject=function(e){return this.filter(Ea(Zo(e)))},Tr.prototype.slice=function(e,t){e=os(e);var r=this;return r.__filtered__&&(e>0||t<0)?new Tr(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),void 0!==t&&(r=(t=os(t))<0?r.dropRight(-t):r.take(t-e)),r)},Tr.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Tr.prototype.toArray=function(){return this.take(4294967295)},cn(Tr.prototype,(function(e,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),n=/^(?:head|last)$/.test(t),o=_r[n?"take"+("last"==t?"Right":""):t],i=n||/^find/.test(t);o&&(_r.prototype[t]=function(){var t=this.__wrapped__,a=n?[1]:arguments,s=t instanceof Tr,u=a[0],c=s||Ma(t),l=function(e){var t=o.apply(_r,pt([e],a));return n&&f?t[0]:t};c&&r&&"function"==typeof u&&1!=u.length&&(s=c=!1);var f=this.__chain__,p=!!this.__actions__.length,d=i&&!f,h=s&&!p;if(!i&&c){t=h?t:new Tr(this);var m=e.apply(t,a);return m.__actions__.push({func:na,args:[l],thisArg:void 0}),new Pr(m,f)}return d&&h?e.apply(this,a):(m=this.thru(l),d?n?m.value()[0]:m.value():m)})})),it(["pop","push","shift","sort","splice","unshift"],(function(e){var t=ge[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);_r.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var o=this.value();return t.apply(Ma(o)?o:[],e)}return this[r]((function(r){return t.apply(Ma(r)?r:[],e)}))}})),cn(Tr.prototype,(function(e,t){var r=_r[t];if(r){var n=r.name+"";Oe.call(br,n)||(br[n]=[]),br[n].push({name:t,func:r})}})),br[jo(void 0,2).name]=[{name:"wrapper",func:void 0}],Tr.prototype.clone=function(){var e=new Tr(this.__wrapped__);return e.__actions__=bo(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=bo(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=bo(this.__views__),e},Tr.prototype.reverse=function(){if(this.__filtered__){var e=new Tr(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Tr.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,r=Ma(e),n=t<0,o=r?e.length:0,i=function(e,t,r){var n=-1,o=r.length;for(;++n=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},_r.prototype.plant=function(e){for(var t,r=this;r instanceof jr;){var n=Di(r);n.__index__=0,n.__values__=void 0,t?o.__wrapped__=n:t=n;var o=n;r=r.__wrapped__}return o.__wrapped__=e,t},_r.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Tr){var t=e;return this.__actions__.length&&(t=new Tr(this)),(t=t.reverse()).__actions__.push({func:na,args:[Hi],thisArg:void 0}),new Pr(t,this.__chain__)}return this.thru(Hi)},_r.prototype.toJSON=_r.prototype.valueOf=_r.prototype.value=function(){return no(this.__wrapped__,this.__actions__)},_r.prototype.first=_r.prototype.head,yt&&(_r.prototype[yt]=function(){return this}),_r}();qe?((qe.exports=Kt)._=Kt,Xe._=Kt):Ve._=Kt}).call(this)}).call(this,r(23),r(79)(e))},function(e,t,r){e.exports=r(159)()},function(e,t,r){"use strict";r.d(t,"a",(function(){return m})),r.d(t,"b",(function(){return h})),r.d(t,"c",(function(){return g})),r.d(t,"d",(function(){return E})),r.d(t,"e",(function(){return k}));var n=r(11),o=r(0),i=r.n(o),a=(r(3),r(13)),s=r(67),u=r(10),c=r(5),l=r(68),f=r.n(l),p=(r(29),r(20)),d=(r(31),function(e){var t=Object(s.a)();return t.displayName=e,t}("Router-History")),h=function(e){var t=Object(s.a)();return t.displayName=e,t}("Router"),m=function(e){function t(t){var r;return(r=e.call(this,t)||this).state={location:t.history.location},r._isMounted=!1,r._pendingLocation=null,t.staticContext||(r.unlisten=t.history.listen((function(e){r._isMounted?r.setState({location:e}):r._pendingLocation=e}))),r}Object(n.a)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var r=t.prototype;return r.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},r.componentWillUnmount=function(){this.unlisten&&this.unlisten()},r.render=function(){return i.a.createElement(h.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},i.a.createElement(d.Provider,{children:this.props.children||null,value:this.props.history}))},t}(i.a.Component);i.a.Component;i.a.Component;var y={},v=0;function g(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var r=t,n=r.path,o=r.exact,i=void 0!==o&&o,a=r.strict,s=void 0!==a&&a,u=r.sensitive,c=void 0!==u&&u;return[].concat(n).reduce((function(t,r){if(!r&&""!==r)return null;if(t)return t;var n=function(e,t){var r=""+t.end+t.strict+t.sensitive,n=y[r]||(y[r]={});if(n[e])return n[e];var o=[],i={regexp:f()(e,o,t),keys:o};return v<1e4&&(n[e]=i,v++),i}(r,{end:i,strict:s,sensitive:c}),o=n.regexp,a=n.keys,u=o.exec(e);if(!u)return null;var l=u[0],p=u.slice(1),d=e===l;return i&&!d?null:{path:r,url:"/"===r&&""===l?"/":l,isExact:d,params:a.reduce((function(e,t,r){return e[t.name]=p[r],e}),{})}}),null)}i.a.Component;function b(e){return"/"===e.charAt(0)?e:"/"+e}function x(e,t){if(!e)return t;var r=b(e);return 0!==t.pathname.indexOf(r)?t:Object(c.a)({},t,{pathname:t.pathname.substr(r.length)})}function w(e){return"string"==typeof e?e:Object(a.e)(e)}function C(e){return function(){Object(u.a)(!1)}}function O(){}i.a.Component;i.a.Component;var S=i.a.useContext;function E(){return S(d)}function k(){return S(h).location}},function(e,t,r){"use strict";function n(){return(n=Object.assign||function(e){for(var t=1;t=0;p--){var d=a[p];"."===d?i(a,p):".."===d?(i(a,p),f++):f&&(i(a,p),f--)}if(!c)for(;f--;f)a.unshift("..");!c||""===a[0]||a[0]&&o(a[0])||a.unshift("");var h=a.join("/");return r&&"/"!==h.substr(-1)&&(h+="/"),h};function s(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var u=function e(t,r){if(t===r)return!0;if(null==t||null==r)return!1;if(Array.isArray(t))return Array.isArray(r)&&t.length===r.length&&t.every((function(t,n){return e(t,r[n])}));if("object"==typeof t||"object"==typeof r){var n=s(t),o=s(r);return n!==t||o!==r?e(n,o):Object.keys(Object.assign({},t,r)).every((function(n){return e(t[n],r[n])}))}return!1},c=r(10);function l(e){return"/"===e.charAt(0)?e:"/"+e}function f(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,r=e.search,n=e.hash,o=t||"/";return r&&"?"!==r&&(o+="?"===r.charAt(0)?r:"?"+r),n&&"#"!==n&&(o+="#"===n.charAt(0)?n:"#"+n),o}function m(e,t,r,o){var i;"string"==typeof e?(i=function(e){var t=e||"/",r="",n="",o=t.indexOf("#");-1!==o&&(n=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(r=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===r?"":r,hash:"#"===n?"":n}}(e)).state=t:(void 0===(i=Object(n.a)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return r&&(i.key=r),o?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,o.pathname)):i.pathname=o.pathname:i.pathname||(i.pathname="/"),i}function y(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&u(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,r,n,o){if(null!=e){var i="function"==typeof e?e(t,r):e;"string"==typeof i?"function"==typeof n?n(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var r=!0;function n(){r&&e.apply(void 0,arguments)}return t.push(n),function(){r=!1,t=t.filter((function(e){return e!==n}))}},notifyListeners:function(){for(var e=arguments.length,r=new Array(e),n=0;nt?r.splice(t,r.length-t,n):r.push(n),f({action:"PUSH",location:n,index:t,entries:r})}}))},replace:function(e,t){var n=m(e,t,p(),x.location);l.confirmTransitionTo(n,"REPLACE",r,(function(e){e&&(x.entries[x.index]=n,f({action:"REPLACE",location:n}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=x.index+e;return t>=0&&t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var d=u()(l.a).withConfig({displayName:"SVGInternal__StyledSVG",componentId:"ksy9g7-0"})(["circle,ellipse,path,polygon,rect{fill:currentColor;}"]),h={viewBox:a.a.string};function m(e){var t=e.viewBox,r=void 0===t?"0 0 1500 1500":t,n=p(e,["viewBox"]);return o.a.createElement(d,f({viewBox:r},n))}m.propTypes=h,t.default=m},3:function(e,t){e.exports=r(3)},5:function(e,t){e.exports=r(1)}})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getCustomizedTheme=t.addThemeDefaults=void 0;var n,o=r(2),i=(n=r(55))&&n.__esModule?n:{default:n};t.addThemeDefaults=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,r=void 0===t?"prisma":t,n=e.colorScheme,o=void 0===n?"dark":n,i=e.density,a=void 0===i?"comfortable":i;return{family:r,colorScheme:o,density:a}};var a=(0,o.memoize)((function(e,t){var r=(0,i.default)(e);return t?t(r):r}),(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,r=e.colorScheme,n=e.density,o=arguments.length>1?arguments[1]:void 0;return"".concat(t,"-").concat(r,"-").concat(n,"-").concat(!!o)}));t.getCustomizedTheme=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getCustomizedTheme=t.addThemeDefaults=void 0;var n,o=r(2),i=(n=r(44))&&n.__esModule?n:{default:n};t.addThemeDefaults=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,r=void 0===t?"prisma":t,n=e.colorScheme,o=void 0===n?"dark":n,i=e.density,a=void 0===i?"comfortable":i;return{family:r,colorScheme:o,density:a}};var a=(0,o.memoize)((function(e,t){var r=(0,i.default)(e);return t?t(r):r}),(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,r=e.colorScheme,n=e.density,o=arguments.length>1?arguments[1]:void 0;return"".concat(t,"-").concat(r,"-").concat(n,"-").concat(!!o)}));t.getCustomizedTheme=a},function(e,t,r){"use strict";var n=r(60),o=t.ValidationError=function(e,t,r,n,o,i){if(Array.isArray(n)?(this.path=n,this.property=n.reduce((function(e,t){return e+f(t)}),"instance")):void 0!==n&&(this.property=n),e&&(this.message=e),r){var a=r.$id||r.id;this.schema=a||r}void 0!==t&&(this.instance=t),this.name=o,this.argument=i,this.stack=this.toString()};o.prototype.toString=function(){return this.property+" "+this.message};var i=t.ValidatorResult=function(e,t,r,n){this.instance=e,this.schema=t,this.options=r,this.path=n.path,this.propertyPath=n.propertyPath,this.errors=[],this.throwError=r&&r.throwError,this.throwFirst=r&&r.throwFirst,this.throwAll=r&&r.throwAll,this.disableFormat=r&&!0===r.disableFormat};function a(e,t){return t+": "+e.toString()+"\n"}function s(e){Error.captureStackTrace&&Error.captureStackTrace(this,s),this.instance=e.instance,this.schema=e.schema,this.options=e.options,this.errors=e.errors}i.prototype.addError=function(e){var t;if("string"==typeof e)t=new o(e,this.instance,this.schema,this.path);else{if(!e)throw new Error("Missing error detail");if(!e.message)throw new Error("Missing error message");if(!e.name)throw new Error("Missing validator type");t=new o(e.message,this.instance,this.schema,this.path,e.name,e.argument)}if(this.errors.push(t),this.throwFirst)throw new s(this);if(this.throwError)throw t;return t},i.prototype.importErrors=function(e){"string"==typeof e||e&&e.validatorType?this.addError(e):e&&e.errors&&Array.prototype.push.apply(this.errors,e.errors)},i.prototype.toString=function(e){return this.errors.map(a).join("")},Object.defineProperty(i.prototype,"valid",{get:function(){return!this.errors.length}}),e.exports.ValidatorResultError=s,s.prototype=new Error,s.prototype.constructor=s,s.prototype.name="Validation Error";var u=t.SchemaError=function e(t,r){this.message=t,this.schema=r,Error.call(this,t),Error.captureStackTrace(this,e)};u.prototype=Object.create(Error.prototype,{constructor:{value:u,enumerable:!1},name:{value:"SchemaError",enumerable:!1}});var c=t.SchemaContext=function(e,t,r,n,o){this.schema=e,this.options=t,Array.isArray(r)?(this.path=r,this.propertyPath=r.reduce((function(e,t){return e+f(t)}),"instance")):this.propertyPath=r,this.base=n,this.schemas=o};c.prototype.resolve=function(e){return n.resolve(this.base,e)},c.prototype.makeChild=function(e,t){var r=void 0===t?this.path:this.path.concat([t]),o=e.$id||e.id,i=n.resolve(this.base,o||""),a=new c(e,this.options,r,i,Object.create(this.schemas));return o&&!a.schemas[i]&&(a.schemas[i]=e),a};var l=t.FORMAT_REGEXPS={"date-time":/^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])[tT ](2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])(\.\d+)?([zZ]|[+-]([0-5][0-9]):(60|[0-5][0-9]))$/,date:/^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])$/,time:/^(2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])$/,email:/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/,"ip-address":/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,ipv6:/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,uri:/^[a-zA-Z][a-zA-Z0-9+-.]*:[^\s]*$/,"uri-reference":/^(((([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\-.0-9A-Za-z]*:?)?)|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?)?))#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(([A-Za-z][+\-.0-9A-Za-z]*)?%[0-9A-Fa-f]{2}|[!$&-.0-9;=@_~]|[A-Za-z][+\-.0-9A-Za-z]*[!$&-*,;=@_~])(%[0-9A-Fa-f]{2}|[!$&-.0-9;=@-Z_a-z~])*((([/?](%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?#|[/?])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\d*)?|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?:\d*|\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)?|[A-Za-z][+\-.0-9A-Za-z]*:?)?$/,color:/^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,hostname:/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,"host-name":/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/,alpha:/^[a-zA-Z]+$/,alphanumeric:/^[a-zA-Z0-9]+$/,"utc-millisec":function(e){return"string"==typeof e&&parseFloat(e)===parseInt(e,10)&&!isNaN(e)},regex:function(e){var t=!0;try{new RegExp(e)}catch(e){t=!1}return t},style:/\s*(.+?):\s*([^;]+);?/,phone:/^\+(?:[0-9] ?){6,14}[0-9]$/};l.regexp=l.regex,l.pattern=l.regex,l.ipv4=l["ip-address"],t.isFormat=function(e,t,r){if("string"==typeof e&&void 0!==l[t]){if(l[t]instanceof RegExp)return l[t].test(e);if("function"==typeof l[t])return l[t](e)}else if(r&&r.customFormats&&"function"==typeof r.customFormats[t])return r.customFormats[t](e);return!0};var f=t.makeSuffix=function(e){return(e=e.toString()).match(/[.\s\[\]]/)||e.match(/^[\d]/)?e.match(/^\d+$/)?"["+e+"]":"["+JSON.stringify(e)+"]":"."+e};function p(e,t,r,n){"object"==typeof r?t[n]=m(e[n],r):-1===e.indexOf(r)&&t.push(r)}function d(e,t,r){t[r]=e[r]}function h(e,t,r,n){"object"==typeof t[n]&&t[n]&&e[n]?r[n]=m(e[n],t[n]):r[n]=t[n]}function m(e,t){var r=Array.isArray(t),n=r&&[]||{};return r?(e=e||[],n=n.concat(e),t.forEach(p.bind(null,e,n))):(e&&"object"==typeof e&&Object.keys(e).forEach(d.bind(null,e,n)),Object.keys(t).forEach(h.bind(null,e,t,n))),n}function y(e){return"/"+encodeURIComponent(e).replace(/~/g,"%7E")}t.deepCompareStrict=function e(t,r){if(typeof t!=typeof r)return!1;if(Array.isArray(t))return!!Array.isArray(r)&&(t.length===r.length&&t.every((function(n,o){return e(t[o],r[o])})));if("object"==typeof t){if(!t||!r)return t===r;var n=Object.keys(t),o=Object.keys(r);return n.length===o.length&&n.every((function(n){return e(t[n],r[n])}))}return t===r},e.exports.deepMerge=m,t.objectGetPath=function(e,t){for(var r,n=t.split("/").slice(1);"string"==typeof(r=n.shift());){var o=decodeURIComponent(r.replace(/~0/,"~").replace(/~1/g,"/"));if(!(o in e))return;e=e[o]}return e},t.encodePath=function(e){return e.map(y).join("")},t.getDecimalPlaces=function(e){var t=0;if(isNaN(e))return t;"number"!=typeof e&&(e=Number(e));var r=e.toString().split("e");if(2===r.length){if("-"!==r[1][0])return t;t=Number(r[1].slice(1))}var n=r[0].split(".");return 2===n.length&&(t+=n[1].length),t},t.isSchema=function(e){return"object"==typeof e&&e||"boolean"==typeof e}},function(e,t,r){"use strict";function n(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}r.d(t,"a",(function(){return n}))},function(e,t){function r(t){return e.exports=r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.default=e.exports,e.exports.__esModule=!0,r(t)}e.exports=r,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,r){var n;!function(o){var i=/^\s+/,a=/\s+$/,s=0,u=o.round,c=o.min,l=o.max,f=o.random;function p(e,t){if(t=t||{},(e=e||"")instanceof p)return e;if(!(this instanceof p))return new p(e,t);var r=function(e){var t={r:0,g:0,b:0},r=1,n=null,s=null,u=null,f=!1,p=!1;"string"==typeof e&&(e=function(e){e=e.replace(i,"").replace(a,"").toLowerCase();var t,r=!1;if(j[e])e=j[e],r=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=W.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=W.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=W.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=W.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=W.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=W.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=W.hex8.exec(e))return{r:I(t[1]),g:I(t[2]),b:I(t[3]),a:B(t[4]),format:r?"name":"hex8"};if(t=W.hex6.exec(e))return{r:I(t[1]),g:I(t[2]),b:I(t[3]),format:r?"name":"hex"};if(t=W.hex4.exec(e))return{r:I(t[1]+""+t[1]),g:I(t[2]+""+t[2]),b:I(t[3]+""+t[3]),a:B(t[4]+""+t[4]),format:r?"name":"hex8"};if(t=W.hex3.exec(e))return{r:I(t[1]+""+t[1]),g:I(t[2]+""+t[2]),b:I(t[3]+""+t[3]),format:r?"name":"hex"};return!1}(e));"object"==typeof e&&(H(e.r)&&H(e.g)&&H(e.b)?(d=e.r,h=e.g,m=e.b,t={r:255*F(d,255),g:255*F(h,255),b:255*F(m,255)},f=!0,p="%"===String(e.r).substr(-1)?"prgb":"rgb"):H(e.h)&&H(e.s)&&H(e.v)?(n=L(e.s),s=L(e.v),t=function(e,t,r){e=6*F(e,360),t=F(t,100),r=F(r,100);var n=o.floor(e),i=e-n,a=r*(1-t),s=r*(1-i*t),u=r*(1-(1-i)*t),c=n%6;return{r:255*[r,s,a,a,u,r][c],g:255*[u,r,r,s,a,a][c],b:255*[a,a,u,r,r,s][c]}}(e.h,n,s),f=!0,p="hsv"):H(e.h)&&H(e.s)&&H(e.l)&&(n=L(e.s),u=L(e.l),t=function(e,t,r){var n,o,i;function a(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+6*(t-e)*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e}if(e=F(e,360),t=F(t,100),r=F(r,100),0===t)n=o=i=r;else{var s=r<.5?r*(1+t):r+t-r*t,u=2*r-s;n=a(u,s,e+1/3),o=a(u,s,e),i=a(u,s,e-1/3)}return{r:255*n,g:255*o,b:255*i}}(e.h,n,u),f=!0,p="hsl"),e.hasOwnProperty("a")&&(r=e.a));var d,h,m;return r=T(r),{ok:f,format:e.format||p,r:c(255,l(t.r,0)),g:c(255,l(t.g,0)),b:c(255,l(t.b,0)),a:r}}(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=u(100*this._a)/100,this._format=t.format||r.format,this._gradientType=t.gradientType,this._r<1&&(this._r=u(this._r)),this._g<1&&(this._g=u(this._g)),this._b<1&&(this._b=u(this._b)),this._ok=r.ok,this._tc_id=s++}function d(e,t,r){e=F(e,255),t=F(t,255),r=F(r,255);var n,o,i=l(e,t,r),a=c(e,t,r),s=(i+a)/2;if(i==a)n=o=0;else{var u=i-a;switch(o=s>.5?u/(2-i-a):u/(i+a),i){case e:n=(t-r)/u+(t>1)+720)%360;--t;)n.h=(n.h+o)%360,i.push(p(n));return i}function D(e,t){t=t||6;for(var r=p(e).toHsv(),n=r.h,o=r.s,i=r.v,a=[],s=1/t;t--;)a.push(p({h:n,s:o,v:i})),i=(i+s)%1;return a}p.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,r,n=this.toRgb();return e=n.r/255,t=n.g/255,r=n.b/255,.2126*(e<=.03928?e/12.92:o.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:o.pow((t+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:o.pow((r+.055)/1.055,2.4))},setAlpha:function(e){return this._a=T(e),this._roundA=u(100*this._a)/100,this},toHsv:function(){var e=h(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=h(this._r,this._g,this._b),t=u(360*e.h),r=u(100*e.s),n=u(100*e.v);return 1==this._a?"hsv("+t+", "+r+"%, "+n+"%)":"hsva("+t+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var e=d(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=d(this._r,this._g,this._b),t=u(360*e.h),r=u(100*e.s),n=u(100*e.l);return 1==this._a?"hsl("+t+", "+r+"%, "+n+"%)":"hsla("+t+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(e){return m(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,r,n,o){var i=[R(u(e).toString(16)),R(u(t).toString(16)),R(u(r).toString(16)),R(N(n))];if(o&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)&&i[3].charAt(0)==i[3].charAt(1))return i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0)+i[3].charAt(0);return i.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:u(this._r),g:u(this._g),b:u(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+u(this._r)+", "+u(this._g)+", "+u(this._b)+")":"rgba("+u(this._r)+", "+u(this._g)+", "+u(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:u(100*F(this._r,255))+"%",g:u(100*F(this._g,255))+"%",b:u(100*F(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+u(100*F(this._r,255))+"%, "+u(100*F(this._g,255))+"%, "+u(100*F(this._b,255))+"%)":"rgba("+u(100*F(this._r,255))+"%, "+u(100*F(this._g,255))+"%, "+u(100*F(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(P[m(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+y(this._r,this._g,this._b,this._a),r=t,n=this._gradientType?"GradientType = 1, ":"";if(e){var o=p(e);r="#"+y(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+t+",endColorstr="+r+")"},toString:function(e){var t=!!e;e=e||this._format;var r=!1,n=this._a<1&&this._a>=0;return t||!n||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(r=this.toRgbString()),"prgb"===e&&(r=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(r=this.toHexString()),"hex3"===e&&(r=this.toHexString(!0)),"hex4"===e&&(r=this.toHex8String(!0)),"hex8"===e&&(r=this.toHex8String()),"name"===e&&(r=this.toName()),"hsl"===e&&(r=this.toHslString()),"hsv"===e&&(r=this.toHsvString()),r||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return p(this.toString())},_applyModification:function(e,t){var r=e.apply(null,[this].concat([].slice.call(t)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(x,arguments)},brighten:function(){return this._applyModification(w,arguments)},darken:function(){return this._applyModification(C,arguments)},desaturate:function(){return this._applyModification(v,arguments)},saturate:function(){return this._applyModification(g,arguments)},greyscale:function(){return this._applyModification(b,arguments)},spin:function(){return this._applyModification(O,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(_,arguments)},complement:function(){return this._applyCombination(S,arguments)},monochromatic:function(){return this._applyCombination(D,arguments)},splitcomplement:function(){return this._applyCombination(A,arguments)},triad:function(){return this._applyCombination(E,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},p.fromRatio=function(e,t){if("object"==typeof e){var r={};for(var n in e)e.hasOwnProperty(n)&&(r[n]="a"===n?e[n]:L(e[n]));e=r}return p(e,t)},p.equals=function(e,t){return!(!e||!t)&&p(e).toRgbString()==p(t).toRgbString()},p.random=function(){return p.fromRatio({r:f(),g:f(),b:f()})},p.mix=function(e,t,r){r=0===r?0:r||50;var n=p(e).toRgb(),o=p(t).toRgb(),i=r/100;return p({r:(o.r-n.r)*i+n.r,g:(o.g-n.g)*i+n.g,b:(o.b-n.b)*i+n.b,a:(o.a-n.a)*i+n.a})},p.readability=function(e,t){var r=p(e),n=p(t);return(o.max(r.getLuminance(),n.getLuminance())+.05)/(o.min(r.getLuminance(),n.getLuminance())+.05)},p.isReadable=function(e,t,r){var n,o,i=p.readability(e,t);switch(o=!1,(n=function(e){var t,r;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),r=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==r&&"large"!==r&&(r="small");return{level:t,size:r}}(r)).level+n.size){case"AAsmall":case"AAAlarge":o=i>=4.5;break;case"AAlarge":o=i>=3;break;case"AAAsmall":o=i>=7}return o},p.mostReadable=function(e,t,r){var n,o,i,a,s=null,u=0;o=(r=r||{}).includeFallbackColors,i=r.level,a=r.size;for(var c=0;cu&&(u=n,s=p(t[c]));return p.isReadable(e,s,{level:i,size:a})||!o?s:(r.includeFallbackColors=!1,p.mostReadable(e,["#fff","#000"],r))};var j=p.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},P=p.hexNames=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}(j);function T(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function F(e,t){(function(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)})(e)&&(e="100%");var r=function(e){return"string"==typeof e&&-1!=e.indexOf("%")}(e);return e=c(t,l(0,parseFloat(e))),r&&(e=parseInt(e*t,10)/100),o.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function M(e){return c(1,l(0,e))}function I(e){return parseInt(e,16)}function R(e){return 1==e.length?"0"+e:""+e}function L(e){return e<=1&&(e=100*e+"%"),e}function N(e){return o.round(255*parseFloat(e)).toString(16)}function B(e){return I(e)/255}var z,U,$,W=(U="[\\s|\\(]+("+(z="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+z+")[,|\\s]+("+z+")\\s*\\)?",$="[\\s|\\(]+("+z+")[,|\\s]+("+z+")[,|\\s]+("+z+")[,|\\s]+("+z+")\\s*\\)?",{CSS_UNIT:new RegExp(z),rgb:new RegExp("rgb"+U),rgba:new RegExp("rgba"+$),hsl:new RegExp("hsl"+U),hsla:new RegExp("hsla"+$),hsv:new RegExp("hsv"+U),hsva:new RegExp("hsva"+$),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function H(e){return!!W.CSS_UNIT.exec(e)}e.exports?e.exports=p:void 0===(n=function(){return p}.call(t,r,t,e))||(e.exports=n)}(Math)},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";function n(e){return null==e}e.exports.isNothing=n,e.exports.isObject=function(e){return"object"==typeof e&&null!==e},e.exports.toArray=function(e){return Array.isArray(e)?e:n(e)?[]:[e]},e.exports.repeat=function(e,t){var r,n="";for(r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var C={children:a.a.node};function O(e){var t=e.children,r=w(e,["children"]),i=b(Object(n.useState)(),2),a=i[0],s=i[1],u=Object(n.useCallback)((function(e){s(e)}),[]);return o.a.createElement(v,g({"data-test":"body"},r,{elementRef:u}),o.a.createElement(f.ScrollContainerProvider,{value:a},t))}O.propTypes=C;var S=O,E=d()(m.a).withConfig({displayName:"FooterStyles__StyledBox",componentId:"yszcmv-0"})(["flex:0 0 auto;text-align:right;padding:",";"," & > button{min-width:80px;}"],Object(y.pick)({enterprise:y.variables.spacing,prisma:{comfortable:"24px",compact:"18px 24px"}}),Object(y.pick)({enterprise:Object(p.css)(["background-color:",";border-top:1px solid ",";"],y.variables.backgroundColor,y.variables.borderColor),prisma:Object(p.css)(["background-color:",";"],y.variables.backgroundColorDialog)}));function k(){return(k=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var _={children:a.a.node};function D(e){var t=e.children,r=A(e,["children"]);return o.a.createElement(E,k({"data-test":"footer"},r),t)}D.propTypes=_;var j=D,P=r(57),T=r.n(P),F=d()(m.a).withConfig({displayName:"HeaderStyles__StyledBox",componentId:"sc-1y722ut-0"})(["flex:0 0 auto;display:flex;"," position:relative;min-height:",";background-color:",";padding:",";align-items:center;padding-right:",";"],Object(y.pick)({enterprise:Object(p.css)(["border-bottom:1px solid ",";"],y.variables.borderColor)}),Object(y.pick)({enterprise:"30px",prisma:{comfortable:"60px",compact:"52px"}}),Object(y.pick)({enterprise:y.variables.backgroundColor,prisma:y.variables.backgroundColorDialog}),Object(y.pick)({enterprise:"25px 28px",prisma:{comfortable:"18px 24px",compact:"14px 24px"}}),(function(e){return e.$close&&Object(y.pick)({enterprise:"54px",prisma:{comfortable:"64px",compact:"56px"}})})),M=d.a.div.withConfig({displayName:"HeaderStyles__StyledTitleWrapper",componentId:"sc-1y722ut-1"})(["",";flex-direction:column;"],y.mixins.reset("flex")),I=d.a.svg.withConfig({displayName:"HeaderStyles__StyledIcon",componentId:"sc-1y722ut-2"})(["margin-right:16px;"," width:",";height:",";padding:2px;border-radius:4px;flex-shrink:0;"],Object(y.pick)({prisma:Object(p.css)(["background-color:",";"],y.variables.transparent)}),Object(y.pick)({comfortable:"40px",compact:"32px"}),Object(y.pick)({comfortable:"40px",compact:"32px"})),R=d.a.div.withConfig({displayName:"HeaderStyles__StyledTitle",componentId:"sc-1y722ut-3"})(["",";font-size:20px;margin:0;overflow-wrap:break-word;font-weight:",";",""],y.mixins.reset("block"),y.variables.fontWeightSemiBold,Object(y.pick)({enterprise:Object(p.css)(["line-height:22px;"]),prisma:Object(p.css)(["color:",";line-height:24px;"],y.variables.contentColorActive)})),L=d.a.div.withConfig({displayName:"HeaderStyles__StyledSubtitle",componentId:"sc-1y722ut-4"})(["",";font-size:14px;overflow-wrap:break-word;line-height:",";"],y.mixins.reset("block"),Object(y.pick)({enterprise:y.variables.lineHeight,prisma:"20px"})),N=d.a.div.withConfig({displayName:"HeaderStyles__StyledButtonsWrapper",componentId:"sc-1y722ut-5"})(["",";position:absolute;top:",";right:",";bottom:50%;"," max-height:35px;transform-origin:bottom right;transform:rotate(-90deg) translateX(100%);"],y.mixins.reset("block"),Object(y.pick)({enterprise:0,prisma:{comfortable:"-2px",compact:"-6px"}}),Object(y.pick)({enterprise:0,prisma:{comfortable:"-2px",compact:"-6px"}}),Object(y.pick)({prisma:{comfortable:Object(p.css)(["min-height:35px;"]),compact:Object(p.css)(["min-height:30px;"])}})),B=d.a.div.withConfig({displayName:"HeaderStyles__StyledClose",componentId:"sc-1y722ut-6"})(["",";position:absolute;right:0;top:0;transform:rotate(90deg) translate(-50%,-50%);"],y.mixins.reset("block"));function z(){return(z=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var $={children:a.a.node,icon:a.a.node,onRequestClose:a.a.func,subtitle:a.a.node,title:a.a.string};function W(e){var t=e.children,r=e.icon,n=e.onRequestClose,i=e.subtitle,a=e.title,s=U(e,["children","icon","onRequestClose","subtitle","title"]);return o.a.createElement(F,z({$close:!!n,"data-test":"header"},s),r&&o.a.createElement(I,null,r),a?o.a.createElement(M,null,a&&o.a.createElement(R,{"data-test":"title"},a),i&&o.a.createElement(L,{"data-test":"subtitle"},i)):t,n&&o.a.createElement(N,null,n&&o.a.createElement(B,null,o.a.createElement(T.a,{onClick:n,"data-test":"close"}))))}W.propTypes=$;var H=W,V=d.a.div.withConfig({displayName:"ModalStyles__Styled",componentId:"sc-5fn8ds-0"})(["",";flex-direction:column;position:fixed;left:50%;transform:translateX(-50%);z-index:",";",""],y.mixins.reset("flex"),y.variables.zindexModal,Object(y.pick)({enterprise:Object(p.css)(["box-shadow:0 1px 5px ",";max-height:calc(100vh - "," * 4);max-width:calc(100vw - "," * 4);"],y.variables.black,y.variables.spacing,y.variables.spacing),prisma:Object(p.css)(["box-shadow:",";max-height:calc(100vh - "," * 4);max-width:calc(100vw - "," * 4);"],y.variables.modalShadow,y.variables.spacingXLarge,y.variables.spacingXLarge)}));function X(e){return(X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function q(){return(q=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r * > &,",":active > * > &,{color:",";}"],O.variables.contentColorDefault,E,E,O.variables.contentColorDefault)})}}));function D(e){return(D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function j(){return(j=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},h={Enterprise:a.a.func,enterpriseSize:a.a.oneOfType([a.a.number,a.a.string]),enterpriseWidth:a.a.oneOfType([a.a.number,a.a.string]),enterpriseHeight:a.a.oneOfType([a.a.number,a.a.string]),Prisma24:a.a.func.isRequired,Prisma20:a.a.func,Prisma16:a.a.func,prismaSize:a.a.oneOf(["medium","small"]),inline:a.a.bool,screenReaderText:a.a.string};function m(e){var t=e.Enterprise,r=e.Prisma24,n=e.Prisma20,i=e.Prisma16,a=e.prismaSize,h=e.inline,m=e.enterpriseSize,y=e.enterpriseWidth,v=e.enterpriseHeight,g=e.screenReaderText,b=f(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),x=Object(s.useSplunkTheme)(),w=x.family,C=x.density;if("enterprise"===w)return o.a.createElement(t,l({size:m,width:y,height:v,screenReaderText:g||null,hideDefaultTooltip:!0,inline:h},b));var O=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.addThemeDefaults)(e),r=t.family,n=t.colorScheme,s=t.density;return Object.freeze(c({colorScheme:n,density:s,family:r},"enterprise"===r?(0,o.default)({colorScheme:n,density:s}):(0,i.default)({colorScheme:n,density:s})))}),(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,r=e.colorScheme,n=e.density;return"".concat(t).concat(r).concat(n)}));t.clearGetThemeCache=function(){var e,t;return null===(e=(t=f.cache).clear)||void 0===e?void 0:e.call(t)};var p=f;t.default=p},function(e,t,r){"use strict";var n=r(25);e.exports=n.DEFAULT=new n({include:[r(28)],explicit:[r(276),r(277),r(278)]})},function(e,t){function r(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=r=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),r(t)}e.exports=r,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,r){"use strict";r.d(t,"g",(function(){return s})),r.d(t,"e",(function(){return u})),r.d(t,"f",(function(){return c})),r.d(t,"b",(function(){return l})),r.d(t,"h",(function(){return f})),r.d(t,"d",(function(){return p})),r.d(t,"c",(function(){return h})),r.d(t,"a",(function(){return m}));var n=r(32),o=r(64),i=r.n(o),a=null;function s(e){e}function u(e){return["0","FALSE","F","N","NO","NONE",""].includes(e.toString().toUpperCase())}function c(e){return["1","TRUE","T","Y","YES"].includes(e.toString().toUpperCase())}function l(e){return"".concat(a.meta.restRoot,"_").concat(e)}function f(e){a=e}function p(){return a}var d=Object(o.makeCreateToast)(i.a),h=function(e,t){var r,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;switch(t){case"success":r=n.TOAST_TYPES.SUCCESS;break;case"error":case"warning":r=n.TOAST_TYPES.ERROR;break;default:r=n.TOAST_TYPES.INFO}d({type:r,message:e,autoDismiss:!0,dismissOnActionClick:!0,showAction:Boolean(o),action:o||void 0})};function m(e,t,r,n){var o=e.map((function(e){var r;return{label:t?null===(r=e.content)||void 0===r?void 0:r[t]:e.name,value:e.name}}));return r&&(o=function(e,t){var r=new RegExp(t);return e.filter((function(e){return r.test(e.value)}))}(o,r)),n&&(o=function(e,t){var r=new RegExp(t);return e.filter((function(e){return!r.test(e.value)}))}(o,n)),o}},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=129)}({0:function(e,t){e.exports=r(12)},1:function(e,t){e.exports=r(3)},12:function(e,t,r){"use strict";function n(e,t){e&&("function"==typeof e?e(t):e.current=t)}r.d(t,"a",(function(){return n}))},129:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return F})),r.d(t,"isInternalLink",(function(){return D})),r.d(t,"NavigationContext",(function(){return h})),r.d(t,"NavigationProvider",(function(){return m}));var n=r(2),o=r.n(n),i=r(1),a=r.n(i),s=r(4),u=r(16),c=r(3),l=r.n(c),f=r(0),p=l.a.a.withConfig({displayName:"ClickableStyles__StyledA",componentId:"sc-7al1vw-0"})([""," cursor:pointer;&[disabled]{cursor:not-allowed;color:",";}&::-moz-focus-inner{border:0;padding:0;}"],f.mixins.reset("inline"),f.variables.contentColorDisabled),d={children:a.a.node,onClick:a.a.func},h=o.a.createContext(void 0);function m(e){var t=e.children,r=e.onClick;return o.a.createElement(h.Provider,{value:r},t)}m.propTypes=d;var y=r(12);function v(e){return(v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function g(){return(g=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function x(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.addThemeDefaults)(e),r=t.family,n=t.colorScheme,s=t.density;return Object.freeze(c({colorScheme:n,density:s,family:r},"enterprise"===r?(0,o.default)({colorScheme:n,density:s}):(0,i.default)({colorScheme:n,density:s})))}),(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.family,r=e.colorScheme,n=e.density;return"".concat(t).concat(r).concat(n)}));t.clearGetThemeCache=function(){var e,t;return null===(e=(t=f.cache).clear)||void 0===e?void 0:e.call(t)};var p=f;t.default=p},function(e,t,r){"use strict";function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(c),f=["%","/","?",";","#"].concat(l),p=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},y={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=r(95);function b(e,t,r){if(e&&o.isObject(e)&&e instanceof i)return e;var n=new i;return n.parse(e,t,r),n}i.prototype.parse=function(e,t,r){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),s=-1!==i&&i127?F+="x":F+=T[M];if(!F.match(d)){var R=j.slice(0,A),L=j.slice(A+1),N=T.match(h);N&&(R.push(N[1]),L.unshift(N[2])),L.length&&(b="/"+L.join(".")+b),this.hostname=R.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),D||(this.hostname=n.toASCII(this.hostname));var B=this.port?":"+this.port:"",z=this.hostname||"";this.host=z+B,this.href+=this.host,D&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!m[C])for(A=0,P=l.length;A0)&&r.host.split("@"))&&(r.auth=D.shift(),r.host=r.hostname=D.shift());return r.search=e.search,r.query=e.query,o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!O.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var E=O.slice(-1)[0],k=(r.host||e.host||O.length>1)&&("."===E||".."===E)||""===E,A=0,_=O.length;_>=0;_--)"."===(E=O[_])?O.splice(_,1):".."===E?(O.splice(_,1),A++):A&&(O.splice(_,1),A--);if(!w&&!C)for(;A--;A)O.unshift("..");!w||""===O[0]||O[0]&&"/"===O[0].charAt(0)||O.unshift(""),k&&"/"!==O.join("/").substr(-1)&&O.push("");var D,j=""===O[0]||O[0]&&"/"===O[0].charAt(0);S&&(r.hostname=r.host=j?"":O.length?O.shift():"",(D=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=D.shift(),r.host=r.hostname=D.shift()));return(w=w||r.host&&O.length)&&!j&&O.unshift(""),O.length?r.pathname=O.join("/"):(r.pathname=null,r.path=null),o.isNull(r.pathname)&&o.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,r){"use strict";var n=r(60),o=r(19);function i(e,t){this.id=e,this.ref=t}e.exports.SchemaScanResult=i,e.exports.scan=function(e,t){function r(e,t){if(t&&"object"==typeof t)if(t.$ref){var i=n.resolve(e,t.$ref);c[i]=c[i]?c[i]+1:0}else{var l=t.$id||t.id,f=l?n.resolve(e,l):e;if(f){if(f.indexOf("#")<0&&(f+="#"),u[f]){if(!o.deepCompareStrict(u[f],t))throw new Error("Schema <"+f+"> already exists with different definition");return u[f]}u[f]=t,"#"==f[f.length-1]&&(u[f.substring(0,f.length-1)]=t)}a(f+"/items",Array.isArray(t.items)?t.items:[t.items]),a(f+"/extends",Array.isArray(t.extends)?t.extends:[t.extends]),r(f+"/additionalItems",t.additionalItems),s(f+"/properties",t.properties),r(f+"/additionalProperties",t.additionalProperties),s(f+"/definitions",t.definitions),s(f+"/patternProperties",t.patternProperties),s(f+"/dependencies",t.dependencies),a(f+"/disallow",t.disallow),a(f+"/allOf",t.allOf),a(f+"/anyOf",t.anyOf),a(f+"/oneOf",t.oneOf),r(f+"/not",t.not)}}function a(e,t){if(Array.isArray(t))for(var n=0;n=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},n.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){c.headers[e]=n.merge(a)})),e.exports=c}).call(this,r(86))},function(e,t,r){"use strict";var n=r(25);e.exports=new n({explicit:[r(259),r(260),r(261)]})},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=19)}({17:function(e,t){e.exports=r(71)},18:function(e,t){e.exports=r(236)},19:function(e,t,r){"use strict";r.r(t),r.d(t,"makeCreateToast",(function(){return g}));var n=r(17),o=r(18);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function R(e){var t=Object(c.createStaticURL)("build/api/layout.js");window.requirejs?window.requirejs([t],e):s()(t,(function(){e(window.__splunk_layout__)}))}t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.useGlobalLayerStack,n=void 0===r||r,a=t.pageTitle,s=I(t,["useGlobalLayerStack","pageTitle"]),c=document.createElement("div");a&&(document.title=a),document.body.appendChild(c),Object(i.render)(o.a.createElement(M,s),c),R((function(t){var r;t?(r=t.create(s).getContainerElement(),"fixed"===s.layout&&(r.style.flex&&"1 0 0px"!==r.style.flex||(r.style.flex="1 0 0%"),r.style.overflow||(r.style.overflow="hidden"),r.style.width||(r.style.width="100vw"))):(console.error("Unable to load layout."),r=document.createElement("div"),document.body.appendChild(r)),setTimeout((function(){Object(i.unmountComponentAtNode)(c),c.parentNode.removeChild(c);var t=n?o.a.createElement(u.LayerStackGlobalProvider,null,e):e;Object(i.render)(t,r)}),30)}))}}])},function(e,t,r){"use strict";var n=r(127),o=r.n(n),i=r(128),a=r.n(i)()(o.a);a.push([e.i,'/*\n * Copyright 2021 Splunk Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nbody {\n min-width: 960px;\n}\n',"",{version:3,sources:["webpack://./src/main/webapp/pages/style.css"],names:[],mappings:"AAAA;;;;;;;;;;;;;;;EAeE;AACF;IACI,gBAAgB;AACpB",sourcesContent:['/*\n * Copyright 2021 Splunk Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nbody {\n min-width: 960px;\n}\n'],sourceRoot:""}]),t.a=a},function(e,t,r){"use strict";(function(e){var n=r(0),o=r.n(n),i=r(11),a=r(3),s=r.n(a),u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==e?e:{};function c(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(r,n){e=r,t.forEach((function(t){return t(e,n)}))}}}var l=o.a.createContext||function(e,t){var r,o,a,l="__create-react-context-"+((u[a="__global_unique_id__"]=(u[a]||0)+1)+"__"),f=function(e){function r(){var t;return(t=e.apply(this,arguments)||this).emitter=c(t.props.value),t}Object(i.a)(r,e);var n=r.prototype;return n.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},n.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var r,n=this.props.value,o=e.value;((i=n)===(a=o)?0!==i||1/i==1/a:i!=i&&a!=a)?r=0:(r="function"==typeof t?t(n,o):1073741823,0!==(r|=0)&&this.emitter.set(e.value,r))}var i,a},n.render=function(){return this.props.children},r}(n.Component);f.childContextTypes=((r={})[l]=s.a.object.isRequired,r);var p=function(t){function r(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,r){0!=((0|e.observedBits)&r)&&e.setState({value:e.getValue()})},e}Object(i.a)(r,t);var n=r.prototype;return n.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?1073741823:t},n.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?1073741823:e},n.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},n.getValue=function(){return this.context[l]?this.context[l].get():e},n.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},r}(n.Component);return p.contextTypes=((o={})[l]=s.a.object,o),{Provider:f,Consumer:p}};t.a=l}).call(this,r(23))},function(e,t,r){var n=r(286);e.exports=d,e.exports.parse=i,e.exports.compile=function(e,t){return s(i(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var r,n=[],i=0,a=0,s="",l=t&&t.delimiter||"/";null!=(r=o.exec(e));){var f=r[0],p=r[1],d=r.index;if(s+=e.slice(a,d),a=d+f.length,p)s+=p[1];else{var h=e[a],m=r[2],y=r[3],v=r[4],g=r[5],b=r[6],x=r[7];s&&(n.push(s),s="");var w=null!=m&&null!=h&&h!==m,C="+"===b||"*"===b,O="?"===b||"*"===b,S=r[2]||l,E=v||g;n.push({name:y||i++,prefix:m||"",delimiter:S,optional:O,repeat:C,partial:w,asterisk:!!x,pattern:E?c(E):x?".*":"[^"+u(S)+"]+?"})}}return a=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var d={children:a.a.node,elementRef:a.a.oneOfType([a.a.func,a.a.object]),flex:a.a.bool,inline:a.a.bool};function h(e){var t=e.children,r=e.elementRef,n=e.flex,i=void 0!==n&&n,a=e.inline,s=void 0!==a&&a,u=p(e,["children","elementRef","flex","inline"]);return o.a.createElement(l,f({ref:r},u,{"data-inline":s||void 0,"data-flex":i||void 0}),t)}h.propTypes=d;var m=h},2:function(e,t){e.exports=r(0)},3:function(e,t){e.exports=r(1)}})},function(e,t,r){"use strict";function n(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=Math.floor(16*Math.random());return("x"===e?t:t%4+8).toString(16)}))}Object.defineProperty(t,"__esModule",{value:!0}),t.createGUID=n,t.createDOMID=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id";if(e.match(/^[a-zA-Z][\w-]*$/))return"".concat(e,"-").concat(n());throw new Error("createDOMID: Prefix must start with a letter and may only contain letters, digits, hyphens and underscores")}},function(e,t,r){var n=r(281),o=r(282),i=r(147),a=r(283);e.exports=function(e,t){return n(e)||o(e,t)||i(e,t)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNumber=u,t.isDecimal=c,t.isMinus=l,t.isNumeric=function(e,t){return u(e)||c(e,t)||l(e)},t.addsCharacter=function(e){var t=e.key;if(s(t)){return 1===t.length||["Add","Decimal","Divide","Multiply","Spacebar","Subtract"].indexOf(t)>=0}return},t.keycode=void 0;var n,o=(n=r(173))&&n.__esModule?n:{default:n},i=r(2);var a=o.default;function s(e){return!(0,i.isUndefined)(e)&&"Unidentified"!==e}function u(e){var t=e.key,r=e.keyCode;if(s(t)){return["1","2","3","4","5","6","7","8","9","0"].indexOf(t)>=0}return r>=48&&r<=57||r>=96&&r<=105}function c(e){var t=e.key,r=e.keyCode,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.locale,i=void 0===o?"en-US":o,u=new Intl.NumberFormat(i.replace("_","-")).format(1.2),c=u.indexOf(",")>-1?",":".";return s(t)?t===c||"Decimal"===t:"."===c&&r===a("numpad .")||r===a(c)}function l(e){var t=e.key,r=e.keyCode;return s(t)?"-"===t||"Subtract"===t:r===a("numpad -")||r===a("-")}t.keycode=a},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=159)}({0:function(e,t){e.exports=r(12)},1:function(e,t){e.exports=r(3)},159:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return m}));var n=r(2),o=r.n(n),i=r(1),a=r.n(i),s=r(3),u=r.n(s),c=r(0),l=u.a.span.withConfig({displayName:"ScreenReaderContentStyles__Styled",componentId:"sc-1lnohwp-0"})(["",";"],c.mixins.screenReaderContent());function f(){return(f=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var d={children:a.a.node.isRequired,elementRef:a.a.oneOfType([a.a.func,a.a.object])};function h(e){var t=e.children,r=e.elementRef,n=p(e,["children","elementRef"]);return o.a.createElement(l,f({"data-test":"screen-reader-content",ref:r},n),t)}h.propTypes=d;var m=h},2:function(e,t){e.exports=r(0)},3:function(e,t){e.exports=r(1)}})},function(e,t,r){var n=r(181),o=r(186);e.exports=function(e,t){var r=o(e,t);return n(r)?r:void 0}},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=150)}({0:function(e,t){e.exports=r(12)},1:function(e,t){e.exports=r(3)},150:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return E}));var n=r(2),o=r.n(n),i=r(1),a=r.n(i),s=r(31),u=r(0),c=r(5),l=r(3),f=r.n(l),p=f.a.div.withConfig({displayName:"WaitSpinnerStyles__Styled",componentId:"sc-1nu971z-0"})(["",";"],u.mixins.reset("inline")),d=Object(l.keyframes)(["100%{transform:rotate(360deg);}"]),h=Object(l.keyframes)(["0%{transform:scale(0);opacity:0;}100%{transform:scale(1);opacity:1;}"]),m=f.a.svg.withConfig({displayName:"WaitSpinnerStyles__StyledSvg",componentId:"sc-1nu971z-1"})([""," ",""],Object(u.pickVariant)("$size",{small:{enterprise:Object(l.css)(["width:14px;height:14px;"]),prisma:Object(l.css)(["width:16px;height:16px;"])},medium:{enterprise:Object(l.css)(["width:19px;height:19px;"]),prisma:Object(l.css)(["width:24px;height:24px;"])},large:{enterprise:Object(l.css)(["width:19px;height:19px;"]),prisma:Object(l.css)(["width:40px;height:40px;"])}}),(function(e){return e.$animated&&Object(u.pick)({enterprise:Object(l.css)(["transform-origin:center;animation:"," 1.2s steps(64) infinite;"],d),prisma:Object(l.css)(["animation:"," "," infinite linear,"," 500ms cubic-bezier(0.01,0,0,1);"],d,"2.07s",h)})})),y=Object(l.keyframes)(["0%{stroke-dasharray:110 10;stroke-dashoffset:-5.5;animation-timing-function:cubic-bezier(0.8,0,0.83,1);}50%{stroke-dasharray:26 94;stroke-dashoffset:-152;}100%{stroke-dasharray:110 10;stroke-dashoffset:-246.5;animation-timing-function:cubic-bezier(0.33,0,0.67,1);}"]),v=Object(l.keyframes)(["0%{stroke-dasharray:7 113;stroke-dashoffset:3;animation-timing-function:cubic-bezier(0.8,0,0.83,1);}50%{stroke-dasharray:90 30;stroke-dashoffset:-60;}100%{stroke-dasharray:7 113;stroke-dashoffset:-238;animation-timing-function:cubic-bezier(0.33,0,0.67,1);}"]),g=f.a.circle.withConfig({displayName:"WaitSpinnerStyles__StyledPrismaBasePath",componentId:"sc-1nu971z-2"})(["stroke:",";stroke-width:2;fill:transparent;"," stroke-dasharray:110 10;stroke-dashoffset:-5.5;"],u.variables.contentColorDisabled,(function(e){return e.$animated&&Object(l.css)(["animation:"," "," infinite;animation-fill-mode:backwards;"],y,"2.07s")})),b=f.a.circle.withConfig({displayName:"WaitSpinnerStyles__StyledPrismaFillPath",componentId:"sc-1nu971z-3"})(["fill:transparent;stroke-width:2;stroke:",";stroke-dasharray:7 113;stroke-dashoffset:3;",""],Object(u.pickVariant)("$size",{small:u.variables.contentColorDefault,medium:u.variables.contentColorDefault,large:u.variables.interactiveColorPrimary}),(function(e){return e.$animated&&Object(l.css)(["animation:"," "," infinite;"],v,"2.07s")})),x=f.a.circle.withConfig({displayName:"WaitSpinnerStyles__StyledEnterpriseCircle",componentId:"sc-1nu971z-4"})(["fill:transparent;stroke:",";stroke-width:2px;",""],Object(u.pick)({enterprise:{dark:u.variables.white,light:u.variables.gray60},prisma:u.variables.contentColorMuted}),Object(u.pick)({enterprise:Object(l.css)(["stroke-dasharray:34 19;"])}));function w(){return(w=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var O={elementRef:a.a.oneOfType([a.a.func,a.a.object]),screenReaderText:a.a.string,size:a.a.oneOf(["small","medium","large"])};function S(e){var t=e.elementRef,r=e.screenReaderText,n=void 0===r?Object(c._)("Waiting"):r,i=e.size,a=void 0===i?"small":i,l=C(e,["elementRef","screenReaderText","size"]),f="on"===Object(s.useAnimationToggle)(),d="prisma"===Object(u.useSplunkTheme)().family,h=d?"0 0 40 40":"0 0 19 19";return o.a.createElement(p,w({"data-test":"wait-spinner"},l),o.a.createElement(m,{viewBox:h,version:"1.1",xmlns:"http://www.w3.org/2000/svg",ref:t,$animated:f,$size:a},n&&o.a.createElement("title",null,n),o.a.createElement("g",null,d?o.a.createElement(o.a.Fragment,null,o.a.createElement(g,{r:"19",cx:"20",cy:"20",$animated:f,$size:a}),o.a.createElement(b,{r:"19",cx:"20",cy:"20",$animated:f,$size:a})):o.a.createElement(x,{cx:"9.5",cy:"9.5",r:"8.5"}))))}S.propTypes=O;var E=S},2:function(e,t){e.exports=r(0)},3:function(e,t){e.exports=r(1)},31:function(e,t){e.exports=r(88)},5:function(e,t){e.exports=r(7)}})},function(e,t,r){"use strict";r.d(t,"a",(function(){return y})),r.d(t,"d",(function(){return v})),r.d(t,"c",(function(){return g})),r.d(t,"b",(function(){return b}));var n,o,i,a,s,u=r(14),c=r.n(u),l=r(1),f=r(35),p=r.n(f),d=r(15),h=r(76),m=r.n(h),y=Object(l.default)(p.a)(n||(n=c()(["\n margin: 0px 1px;\n border: none;\n"]))),v=Object(l.default)(m.a)(o||(o=c()(["\n position: fixed;\n top: 50%;\n left: 50%;\n"]))),g=(l.default.div(i||(i=c()(["\n text-align: left;\n"]))),l.default.span(a||(a=c()(["\n button {\n margin-left: 80px;\n min-width: 100px;\n }\n"])))),b=l.default.div(s||(s=c()(["\n font-size: ",";\n text-align: center;\n"])),d.variables.fontSize)},function(e,t,r){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(t,"__esModule",{value:!0});var o=n(r(162)),i=n(r(163)),a=n(r(164)),s=n(r(166)),u=n(r(167)),c=n(r(94)),l=n(r(169)),f=n(r(171)),p=n(r(0));n(r(3)),n(r(172));var d,h=(d=null,function(){if(null!==d)return d;var e,t,r,n=!1;try{window.addEventListener("test",null,(e={},t="passive",r={get:function(){n=!0}},Object.defineProperty(e,t,r)))}catch(e){}return d=n,n}()),m={capture:!1,passive:!1};function y(e){return f({},m,e)}function v(e,t,r){var n=[e,t];return n.push(h?r:r.capture),n}function g(e,t,r,n){e.addEventListener.apply(e,v(t,r,n))}function b(e,t,r,n){e.removeEventListener.apply(e,v(t,r,n))}function x(e,t){e.children,e.target;var r=l(e,["children","target"]);Object.keys(r).forEach((function(e){if("on"===e.substring(0,2)){var n=r[e],o=c(n),i="object"===o;if(i||"function"===o){var a="capture"===e.substr(-7).toLowerCase(),s=e.substring(2).toLowerCase();s=a?s.substring(0,s.length-7):s,i?t(s,n.handler,n.options):t(s,n,y({capture:a}))}}}))}var w=function(e){function t(){return o(this,t),a(this,s(t).apply(this,arguments))}return u(t,e),i(t,[{key:"componentDidMount",value:function(){this.applyListeners(g)}},{key:"componentDidUpdate",value:function(e){this.applyListeners(b,e),this.applyListeners(g)}},{key:"componentWillUnmount",value:function(){this.applyListeners(b)}},{key:"applyListeners",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.props,r=t.target;if(r){var n=r;"string"==typeof r&&(n=window[r]),x(t,e.bind(null,n))}}},{key:"render",value:function(){return this.props.children||null}}]),t}(p.PureComponent);w.propTypes={},t.withOptions=function(e,t){return{handler:e,options:y(t)}},t.default=w},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){var n=r(49).Symbol;e.exports=n},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSortedTabbableElements=i,t.handleTab=function(e,t){if(!e.contains(document.activeElement))return null;if("tab"!==(0,n.keycode)(t)||t.metaKey||t.altKey||t.controlKey)return null;var r=i(e);if(0===r.length)return document.activeElement===e?(t.preventDefault(),e):null;var o=t&&t.target||e.querySelector(":focus"),a=r.indexOf(o);-1===a&&(a=t.shiftKey?0:r.length-1);t.shiftKey?r.unshift(r.pop()):r.push(r.shift());return t.preventDefault(),r[a].focus(),r[a]},t.takeFocus=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"first",r=e.querySelector(":focus");if(r)return r;if("first"===t){var n=i(e)[0];if(n)return(0,o.defer)((function(){return n.focus()})),n}if(e.hasAttribute("tabIndex"))return(0,o.defer)((function(){return e.focus()})),e;return null};var n=r(73),o=r(2);function i(e){var t=e.querySelectorAll("a[href], input:not([disabled]), select:not([disabled]),\n textarea:not([disabled]), button:not([disabled]), [tabindex], [contenteditable]"),r=(0,o.filter)(t,(function(e){return!(!((t=e).offsetWidth||t.offsetHeight||t.getClientRects().length>0)||"hidden"===getComputedStyle(t).visibility)&&e.tabIndex>=0||e===document.activeElement;var t})).reduce((function(e,t){var r=e[e.length-1],n="radio"===(null==r?void 0:r.getAttribute("type")),o="radio"===t.getAttribute("type"),i=t.getAttribute("name")===(null==r?void 0:r.getAttribute("name"));return n&&o&&i?t.checked&&(e.pop(),e.push(t)):e.push(t),e}),[]);return(0,o.sortBy)(r,(function(e){return e.tabIndex>0?-1/e.tabIndex:0}))}},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=54)}({0:function(e,t){e.exports=r(0)},1:function(e,t){e.exports=r(7)},4:function(e,t){e.exports=r(149)},54:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return c}));var n=r(0),o=r.n(n),i=r(1),a=r(4),s=r.n(a);function u(){return(u=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function c(e){var t=e.immediate,r=u(e,["immediate"]),n=Object(a.useAnimationToggle)();return o.a.createElement(i.Spring,s({},r,{immediate:t||"on"!==n}))}function l(e){var t=e.immediate,r=u(e,["immediate"]),n=Object(a.useAnimationToggle)();return o.a.createElement(i.Transition,s({},r,{immediate:t||"on"!==n}))}},2:function(e,t){e.exports=r(0)},31:function(e,t){e.exports=r(88)},38:function(e,t){e.exports=r(89)}})},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=163)}({163:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return a})),r.d(t,"ScrollContainerContext",(function(){return o})),r.d(t,"ScrollContainerProvider",(function(){return i}));var n=r(2),o=r.n(n).a.createContext("window"),i=o.Provider,a=o},2:function(e,t){e.exports=r(0)}})},function(e,t){var r,n,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===i||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:i}catch(e){r=i}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var u,c=[],l=!1,f=-1;function p(){l&&u&&(l=!1,u.length?c=u.concat(c):f=-1,c.length&&d())}function d(){if(!l){var e=s(p);l=!0;for(var t=c.length;t;){for(u=c,c=[];++f1)for(var r=1;r1&&(r=u(r),n=u(n),o=u(o)),{r:r,g:n,b:o}}({r:e.r+r,g:e.g+r,b:e.b+r})}function k(e){return Math.max(e.r,e.g,e.b)-Math.min(e.r,e.g,e.b)}function A(e,t){var r=["r","g","b"].sort((function(t,r){return e[t]-e[r]})),n=r[0],o=r[1],i=r[2],a={r:e.r,g:e.g,b:e.b};return a[i]>a[n]?(a[o]=(a[o]-a[n])*t/(a[i]-a[n]),a[i]=t):a[o]=a[i]=0,a[n]=0,a}function _(e,t){return E(A(t,k(e)),S(e))}function D(e,t){return E(A(e,k(t)),S(e))}function j(e,t){return E(t,S(e))}function P(e,t){return E(e,S(t))}function T(e,t){return C(e,t,n,o)}function F(e,t){return C(e,t,n,i)}function M(e,t){return C(e,t,n,a)}function I(e,t){return C(e,t,n,s)}function R(e,t){return C(e,t,n,u)}function L(e,t){return C(e,t,n,c)}function N(e,t){return C(e,t,n,l)}function B(e,t){return C(e,t,n,f)}function z(e,t){return C(e,t,n,p)}function U(e,t){return C(e,t,n,d)}function $(e,t){return C(e,t,n,h)}function W(e,t){return C(e,t,n,m)}function H(e,t){return C(e,t,O,_)}function V(e,t){return C(e,t,O,D)}function X(e,t){return C(e,t,O,j)}function q(e,t){return C(e,t,O,P)}r.r(t),r.d(t,"normal",(function(){return T})),r.d(t,"multiply",(function(){return F})),r.d(t,"screen",(function(){return M})),r.d(t,"overlay",(function(){return I})),r.d(t,"darken",(function(){return R})),r.d(t,"lighten",(function(){return L})),r.d(t,"colorDodge",(function(){return N})),r.d(t,"colorBurn",(function(){return B})),r.d(t,"hardLight",(function(){return z})),r.d(t,"softLight",(function(){return U})),r.d(t,"difference",(function(){return $})),r.d(t,"exclusion",(function(){return W})),r.d(t,"hue",(function(){return H})),r.d(t,"saturation",(function(){return V})),r.d(t,"color",(function(){return X})),r.d(t,"luminosity",(function(){return q}))},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=123)}({1:function(e,t){e.exports=r(3)},123:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return h})),r.d(t,"AnimationToggleContext",(function(){return s})),r.d(t,"AnimationToggleProvider",(function(){return y})),r.d(t,"useAnimationToggle",(function(){return l}));var n=r(2),o=r.n(n),i=r(1),a=r.n(i),s=o.a.createContext(!0);function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return c(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e);++r);return r-1}(e,i);return function(e,t,r,n,o,i,a,s,u){var c=u?u(e):e;if(cr){if("identity"===s)return c;"clamp"===s&&(c=r)}if(n===o)return n;if(t===r)return e<=t?n:o;t===-1/0?c=-c:r===1/0?c-=t:c=(c-t)/(r-t);c=i(c),n===-1/0?c=-c:o===1/0?c+=n:c=c*(o-n)+n;return c}(e,i[t],i[t+1],o[t],o[t+1],a,s,c,u)}},e}();var M="[-+]?\\d*\\.?\\d+";function I(){return"\\(\\s*("+Array.prototype.slice.call(arguments).join(")\\s*,\\s*(")+")\\s*\\)"}var R=new RegExp("rgb"+I(M,M,M)),L=new RegExp("rgba"+I(M,M,M,M)),N=new RegExp("hsl"+I(M,"[-+]?\\d*\\.?\\d+%","[-+]?\\d*\\.?\\d+%")),B=new RegExp("hsla"+I(M,"[-+]?\\d*\\.?\\d+%","[-+]?\\d*\\.?\\d+%",M)),z=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,U=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,$=/^#([0-9a-fA-F]{6})$/,W=/^#([0-9a-fA-F]{8})$/;function H(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+6*(t-e)*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function V(e,t,r){var n=r<.5?r*(1+t):r+t-r*t,o=2*r-n,i=H(o,n,e+1/3),a=H(o,n,e),s=H(o,n,e-1/3);return Math.round(255*i)<<24|Math.round(255*a)<<16|Math.round(255*s)<<8}function X(e){var t=parseInt(e,10);return t<0?0:t>255?255:t}function q(e){return(parseFloat(e)%360+360)%360/360}function K(e){var t=parseFloat(e);return t<0?0:t>1?255:Math.round(255*t)}function J(e){var t=parseFloat(e);return t<0?0:t>100?1:t/100}function Y(e){var t,r,n="number"==typeof(t=e)?t>>>0===t&&t>=0&&t<=4294967295?t:null:(r=$.exec(t))?parseInt(r[1]+"ff",16)>>>0:T.hasOwnProperty(t)?T[t]:(r=R.exec(t))?(X(r[1])<<24|X(r[2])<<16|X(r[3])<<8|255)>>>0:(r=L.exec(t))?(X(r[1])<<24|X(r[2])<<16|X(r[3])<<8|K(r[4]))>>>0:(r=z.exec(t))?parseInt(r[1]+r[1]+r[2]+r[2]+r[3]+r[3]+"ff",16)>>>0:(r=W.exec(t))?parseInt(r[1],16)>>>0:(r=U.exec(t))?parseInt(r[1]+r[1]+r[2]+r[2]+r[3]+r[3]+r[4]+r[4],16)>>>0:(r=N.exec(t))?(255|V(q(r[1]),J(r[2]),J(r[3])))>>>0:(r=B.exec(t))?(V(q(r[1]),J(r[2]),J(r[3]))|K(r[4]))>>>0:null;return null===n?e:"rgba("+((4278190080&(n=n||0))>>>24)+", "+((16711680&n)>>>16)+", "+((65280&n)>>>8)+", "+(255&n)/255+")"}var G=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,Z=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,Q=new RegExp("("+Object.keys(T).join("|")+")","g");var ee=function(e){function t(r,n,o){var i;return(i=e.call(this)||this).getValue=function(){var e;return(e=i).calc.apply(e,i.payload.map((function(e){return e.getValue()})))},i.updateConfig=function(e,t){return i.calc=F.create(e,t)},i.interpolate=function(e,r){return new t(a(i),e,r)},i.payload=r instanceof D&&!r.updateConfig?r.payload:Array.isArray(r)?r:[r],i.calc=F.create(n,o),i}return i(t,e),t}(D);var te=function(e){function t(t){var r;return(r=e.call(this)||this).setValue=function(e,t){void 0===t&&(t=!0),r.value=e,t&&r.flush()},r.getValue=function(){return r.value},r.updateStyles=function(){return function e(t,r){"function"==typeof t.update?r.add(t):t.getChildren().forEach((function(t){return e(t,r)}))}(a(r),r.animatedStyles)},r.updateValue=function(e){return r.flush(r.value=e)},r.interpolate=function(e,t){return new ee(a(r),e,t)},r.value=t,r.animatedStyles=new Set,r.done=!1,r.startPosition=t,r.lastPosition=t,r.lastVelocity=void 0,r.lastTime=void 0,r.controller=void 0,r}i(t,e);var r=t.prototype;return r.flush=function(){0===this.animatedStyles.size&&this.updateStyles(),this.animatedStyles.forEach((function(e){return e.update()}))},r.prepare=function(e){void 0===this.controller&&(this.controller=e),this.controller===e&&(this.startPosition=this.value,this.lastPosition=this.value,this.lastVelocity=e.isActive?this.lastVelocity:void 0,this.lastTime=e.isActive?this.lastTime:void 0,this.done=!1,this.animatedStyles.clear())},t}(_),re=function(e){function t(t){var r;return(r=e.call(this)||this).setValue=function(e,t){void 0===t&&(t=!0),Array.isArray(e)?e.length===r.payload.length&&e.forEach((function(e,n){return r.payload[n].setValue(e,t)})):r.payload.forEach((function(n,o){return r.payload[o].setValue(e,t)}))},r.getValue=function(){return r.payload.map((function(e){return e.getValue()}))},r.interpolate=function(e,t){return new ee(a(r),e,t)},r.payload=t.map((function(e){return new te(e)})),r}return i(t,e),t}(D);function ne(e,t){return null==e?t:e}function oe(e){return void 0!==e?Array.isArray(e)?e:[e]:[]}function ie(e,t){if(typeof e!=typeof t)return!1;if("string"==typeof e||"number"==typeof e)return e===t;var r;for(r in e)if(!(r in t))return!1;for(r in t)if(e[r]!==t[r])return!1;return void 0!==r||e===t}function ae(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=r.length)break;i=r[o++]}else{if((o=r.next()).done)break;i=o.value}for(var a=i,s=!0,u=!0,c=0;c=a.startTime+l.delay+l.duration;else if(l.decay)b=v+w/(1-.998)*(1-Math.exp(-(1-.998)*(t-a.startTime))),(f=Math.abs(m.lastPosition-b)<.1)&&(g=b);else{p=void 0!==m.lastTime?m.lastTime:t,w=void 0!==m.lastVelocity?m.lastVelocity:l.initialVelocity,t>p+64&&(p=t);for(var C=Math.floor(t-p),O=0;Og:b1?O-1:0),E=1;E=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function F(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function M(e,t){for(var r=0;r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var x=function(e){var t=e.children,r=e.type,n=e.onRequestRemove,i=b(e,["children","type","onRequestRemove"]);return o.a.createElement(v,g({$type:r,"data-test-type":r,"data-test":"message"},i),o.a.createElement(m,{"data-test":"content"},t),o.a.createElement(y,{"data-test":"remove",onClick:n},o.a.createElement(s.a,{prismaSize:"small",enterpriseSize:"12px"})))},w=r(32),C=r.n(w),O=c()(C.a).withConfig({displayName:"LinkStyles__StyledLink",componentId:"w06zjv-0"})(["margin:0 3px;text-decoration:underline;color:inherit;&:not([disabled]){cursor:pointer;&:focus{"," text-decoration:underline;&:active{box-shadow:none;text-decoration:underline;}}}"],Object(h.pick)({prisma:Object(u.css)(["box-shadow:",";"],h.variables.focusShadow)}));function S(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var E={children:a.a.node,elementRef:a.a.oneOfType([a.a.func,a.a.object]),openInNewContext:a.a.bool,to:a.a.string};function k(e){var t=e.children,r=S(e,["children"]);return o.a.createElement(O,r,t)}k.propTypes=E;var A=k,_=c.a.p.withConfig({displayName:"TitleStyles__StyledTitle",componentId:"sc-6gbjha-0"})([""," ",""],h.mixins.reset("block"),Object(h.pick)({prisma:Object(u.css)(["font-size:14px;line-height:20px;"])}));function D(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var j={children:a.a.node};function P(e){var t=e.children,r=D(e,["children"]);return o.a.createElement(_,r,t)}P.propTypes=j;var T=P,F=c.a.div.withConfig({displayName:"MessageStyles__StyledContent",componentId:"eg66af-0"})(["",";",""],h.mixins.reset("inline"),Object(h.pick)({prisma:Object(u.css)(["color:",";"],h.variables.contentColorActive)})),M=c()(d.a).withConfig({displayName:"MessageStyles__StyledRemove",componentId:"eg66af-1"})(["",";border:1px solid transparent;border-radius:",";color:",";",";cursor:pointer;position:absolute;"," padding:",";&:hover,&:focus{background:",";border:",";color:",";}&:active{",";}",""],h.mixins.reset("flex"),Object(h.pick)({prisma:"50%",enterprise:h.variables.borderRadius}),Object(h.pick)({prisma:h.variables.contentColorMuted,enterprise:{dark:h.variables.gray96,light:h.variables.gray45}}),(function(e){return"banner"===e.$appearance&&Object(h.pick)({prisma:Object(u.css)(["color:",";"],h.variables.contentColorInverted)})}),Object(h.pick)({prisma:Object(u.css)(["top:1px;right:2px;"]),enterprise:Object(u.css)(["top:6px;right:8px;"])}),Object(h.pick)({prisma:"10px",enterprise:"8px"}),Object(h.pick)({prisma:h.variables.interactiveColorOverlayHover,enterprise:{dark:h.variables.gray30,light:h.variables.gray92}}),Object(h.pick)({prisma:Object(u.css)(["1px solid inherit"]),enterprise:Object(u.css)(["1px solid ",""],h.variables.gray80)}),Object(h.pick)({enterprise:{dark:h.variables.gray96,light:h.variables.linkColor},prisma:h.variables.contentColorActive}),Object(h.pick)({prisma:Object(u.css)(["background:",";"],h.variables.interactiveColorOverlayActive),enterprise:Object(u.css)(["box-shadow:",";"],h.variables.focusShadow)}),Object(h.pick)({prisma:Object(u.css)(["&:focus{box-shadow:0 0 0 3px ",";}"],h.variables.focusColor)})),I=c.a.span.withConfig({displayName:"MessageStyles__StyledIconWrapper",componentId:"eg66af-2"})(["position:absolute;top:",";left:0;width:",";height:calc(100% - 8px);text-align:center;color:",";"," border-top-left-radius:inherit;border-bottom-left-radius:inherit;"," ",";"],Object(h.pick)({prisma:"0px",enterprise:"7px"}),Object(h.pick)({prisma:"24px",enterprise:"25px"}),h.variables.white,Object(h.pick)({prisma:Object(u.css)(["padding-top:8px;"])}),Object(h.pickVariant)("$type",{info:Object(u.css)(["color:",";"],Object(h.pick)({prisma:h.variables.contentColorMuted,enterprise:h.variables.infoColor})),success:Object(u.css)(["color:",";"],h.variables.accentColorPositive),warning:Object(u.css)(["color:",";"],h.variables.accentColorWarning),error:Object(u.css)(["color:",";"],h.variables.accentColorNegative)}),(function(e){return e.$fillStyle&&Object(h.pick)({prisma:Object(u.css)(["background-color:",";"],Object(h.pickVariant)("$type",{info:h.variables.contentColorActive,success:h.variables.accentColorPositive,warning:h.variables.accentColorWarning,error:h.variables.accentColorNegative}))})})),R=c()(f.a).withConfig({displayName:"MessageStyles__StyledBox",componentId:"eg66af-3"})(["",";position:relative;border-radius:",";margin-bottom:",";padding:",";word-wrap:break-word;"," ",""],h.mixins.reset("block"),Object(h.pick)({prisma:h.variables.borderRadius,enterprise:"5px"}),h.variables.spacingSmall,Object(h.pickVariant)("$hasRemoveIcon",{true:{prisma:"10px 40px 10px 36px",enterprise:"10px 40px 10px 40px"},false:{prisma:"10px 8px 10px 36px",enterprise:"10px 0 10px 40px"}}),(function(e){return e.$fillStyle&&Object(h.pick)({enterprise:Object(u.css)(["& > ","{left:",";}",""],I,h.variables.spacingXSmall,Object(h.pickVariant)("$type",{info:Object(u.css)(["",""],Object(h.pick)({light:Object(u.css)(["background-color:",";border:1px solid ",";"],h.variables.infoColorL50,h.variables.infoColor),dark:Object(u.css)(["background-color:",";"],h.mixins.colorWithAlpha(h.variables.infoColor,.5))})),success:Object(u.css)(["",""],Object(h.pick)({light:Object(u.css)(["background-color:",";border:1px solid ",";"],h.variables.successColorL50,h.variables.successColor),dark:Object(u.css)(["background-color:",";"],h.mixins.colorWithAlpha(h.variables.successColor,.5))})),warning:Object(u.css)(["",""],Object(h.pick)({light:Object(u.css)(["background-color:",";border:1px solid ",";"],h.variables.warningColorL50,h.variables.warningColor),dark:Object(u.css)(["background-color:",";"],h.mixins.colorWithAlpha(h.variables.warningColor,.5))})),error:Object(u.css)(["",""],Object(h.pick)({light:Object(u.css)(["background-color:",";border:1px solid ",";"],h.variables.errorColorL50,h.variables.errorColor),dark:Object(u.css)(["background-color:",";"],h.mixins.colorWithAlpha(h.variables.errorColor,.5))}))})),prisma:Object(u.css)(["border:1px solid transparent;background-color:",";box-shadow:",";& > ","{color:",";}"],h.variables.backgroundColorPopup,h.variables.embossShadow,I,h.variables.backgroundColorPopup)})}),Object(h.pick)({prisma:Object(u.css)(["& ","{color:",";}"],_,Object(h.pickVariant)("$type",{info:h.variables.contentColorActive,warning:h.variables.accentColorWarning,error:h.variables.accentColorNegative,success:h.variables.accentColorPositive}))})),L=r(61),N=r.n(L),B=r(7),z=r(6);function U(){return(U=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var se={appearance:a.a.oneOf(["default","fill","banner"]),children:a.a.node,elementRef:a.a.oneOfType([a.a.func,a.a.object]),onRequestRemove:a.a.func,type:a.a.oneOf(["info","success","warning","error"])};function ue(e){var t=e.appearance,r=void 0===t?"default":t,i=e.children,a=e.type,u=void 0===a?"warning":a,c=e.onRequestRemove,l=ae(e,["appearance","children","type","onRequestRemove"]),f=Object(n.useCallback)((function(e){null==c||c(e)}),[c]);if("banner"===r)return o.a.createElement(x,ie({type:u,onRequestRemove:f},l),i);var p={info:K,success:Q,warning:oe,error:W}[u],d="fill"===r,h="default"===r||"fill"===r;return o.a.createElement(R,ie({$appearance:r,$fillStyle:d,$hasRemoveIcon:!!c,$type:u,"data-test-type":u,"data-test":"message"},l),h&&o.a.createElement(I,{$fillStyle:d,$type:u},o.a.createElement(p,{prismaSize:"small",enterpriseWidth:"24px",enterpriseHeight:"24px"})),o.a.createElement(F,{"data-test":"content",$fillStyle:d},i),c&&o.a.createElement(M,{"data-test":"remove",onClick:f,$appearance:r},o.a.createElement(s.a,{prismaSize:"small",enterpriseHeight:"12px",enterpriseWidth:"12px"})))}ue.propTypes=se,ue.Title=T,ue.Link=A;var ce=ue},11:function(e,t){e.exports=r(48)},2:function(e,t){e.exports=r(0)},20:function(e,t,r){"use strict";r.d(t,"a",(function(){return p}));var n=r(2),o=r.n(n),i=r(23),a=r.n(i),s=r(7),u=r(6);function c(){return(c=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p={display:"inline-block",flex:"0 0 auto",overflow:"visible",verticalAlign:"middle"},d={display:"block",flex:"0 0 auto",margin:"0 auto",overflow:"visible"},h={Enterprise:a.a.func,enterpriseSize:a.a.oneOfType([a.a.number,a.a.string]),enterpriseWidth:a.a.oneOfType([a.a.number,a.a.string]),enterpriseHeight:a.a.oneOfType([a.a.number,a.a.string]),Prisma24:a.a.func.isRequired,Prisma20:a.a.func,Prisma16:a.a.func,prismaSize:a.a.oneOf(["medium","small"]),inline:a.a.bool,screenReaderText:a.a.string};function m(e){var t=e.Enterprise,r=e.Prisma24,n=e.Prisma20,i=e.Prisma16,a=e.prismaSize,h=e.inline,m=e.enterpriseSize,y=e.enterpriseWidth,v=e.enterpriseHeight,g=e.screenReaderText,b=f(e,["Enterprise","Prisma24","Prisma20","Prisma16","prismaSize","inline","enterpriseSize","enterpriseWidth","enterpriseHeight","screenReaderText"]),x=Object(s.useSplunkTheme)(),w=x.family,C=x.density;if("enterprise"===w)return o.a.createElement(t,l({size:m,width:y,height:v,screenReaderText:g||null,hideDefaultTooltip:!0,inline:h},b));var O=function(e){for(var t=1;t=e?void 0:Object(_messageUtil__WEBPACK_IMPORTED_MODULE_2__.a)(14)}},parseFunctionRawStr=function parseFunctionRawStr(rawStr){var error,result;try{result=eval("(".concat(rawStr,")"))}catch(e){error=Object(_messageUtil__WEBPACK_IMPORTED_MODULE_2__.a)(11,rawStr)}return{error:error,result:result}},checkDupKeyValues=function(e,t,r){var n,o,i=lodash__WEBPACK_IMPORTED_MODULE_0__.get(e,t?"services":"tabs"),a=[];if(i){o="".concat(r,".").concat(t?"services":"tabs"),["name","title"].forEach((function(e){n=parseArrForDupKeys(i,e),appendError(a,n,o)}));i.forEach((function(e,t){var r="".concat(o,"[").concat(t,"].entity");e.entity&&(["field","label"].forEach((function(t,o){n=parseArrForDupKeys(e.entity,t),appendError(a,n,"".concat(r,"[").concat(o,"]"))})),e.entity.forEach((function(e,t){!function(e,t){var r=e.options;if(r){var o=r.items,i=r.autoCompleteFields;if(o&&["label","value"].forEach((function(e){n=parseArrForDupKeys(o,e),appendError(a,n,"".concat(t,".options.items"))})),i){var s=!!i[0].children;(s?i.map((function(e){return e.children})):[i]).forEach((function(e){n=parseArrForDupKeys(e,"label"),appendError(a,n,"".concat(t,".options.autoCompleteFields"))})),s&&(i=lodash__WEBPACK_IMPORTED_MODULE_0__.flatten(lodash__WEBPACK_IMPORTED_MODULE_0__.union(i.map((function(e){return e.children}))))),n=parseArrForDupKeys(i,"value"),appendError(a,n,"".concat(t,".options.autoCompleteFields"))}}}(e,"".concat(r,"[").concat(t,"]"))})))}))}return a},checkConfigDetails=function(e){var t,r=e.pages,n=r.configuration,o=r.inputs,i=[],a="instantce.pages",s=function(e,t){lodash__WEBPACK_IMPORTED_MODULE_0__.values(e).forEach((function(e,r){var n=parseFunctionRawStr(e).err;appendError(i,n,"".concat(t,"[").concat(r,"]"))}))},u=function(e,r,n){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];lodash__WEBPACK_IMPORTED_MODULE_0__.values(e).forEach((function(e,r){var o=e.validators,a=e.options;lodash__WEBPACK_IMPORTED_MODULE_0__.values(o).forEach((function(e,o){switch(e.type){case"string":t=parseStringValidator(e.minLength,e.maxLength).error;break;case"number":t=parseNumberValidator(e.range).error;break;case"regex":t=parseRegexRawStr(e.pattern).error}appendError(i,t,"".concat(n,"[").concat(r,"].validators[").concat(o,"]"))})),lodash__WEBPACK_IMPORTED_MODULE_0__.forEach(["denyList","allowList"],(function(e){a&&a[e]&&(t=parseRegexRawStr(a[e]).error,appendError(i,t,"".concat(n,"[").concat(r,"].options.").concat(e)))}))})),o&&lodash__WEBPACK_IMPORTED_MODULE_0__.every(lodash__WEBPACK_IMPORTED_MODULE_0__.values(e),(function(e){return"name"!==e.field}))&&appendError(i,Object(_messageUtil__WEBPACK_IMPORTED_MODULE_2__.a)(23,r))};o&&(o.services.forEach((function(e,t){var r=e.entity,n=e.options,o=e.name;s(n,"".concat(a,".inputs.services[").concat(t,"].options")),u(r,o,"".concat(a,".inputs.services[").concat(t,"].entity"))})),i=i.concat(checkDupKeyValues(o,!0,"".concat(a,".inputs"))));return n&&(n.tabs.forEach((function(e,t){var r=e.entity,n=e.options,o=e.name;s(n,"".concat(a,".configuration.tabs[").concat(t,"].options")),u(r,o,"".concat(a,".configuration.tabs[").concat(t,"].entity"),!1)})),i=i.concat(checkDupKeyValues(n,!1,"".concat(a,".configuration")))),i},validateSchema=function(e){var t=(new jsonschema__WEBPACK_IMPORTED_MODULE_1__.Validator).validate(e,_schema_schema_json__WEBPACK_IMPORTED_MODULE_3__);return t.errors.length||(t.errors=checkConfigDetails(e)),{failed:!!t.errors.length,errors:t.errors}}},function(e,t,r){"use strict";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;nn&&(n=(t=t.trim()).charCodeAt(0)),n){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*r&&0u.charCodeAt(8))break;case 115:a=a.replace(u,"-webkit-"+u)+";"+a;break;case 207:case 102:a=a.replace(u,"-webkit-"+(102s.charCodeAt(0)&&(s=s.trim()),s=[s],0d)&&(B=($=$.replace(" ",":")).length),00&&void 0!==arguments[0]?arguments[0]:"undefined"!=typeof window?window:null;if(!e)return"enterprise";var t=e.__splunkd_partials__&&e.__splunkd_partials__["/services/server/info"]&&e.__splunkd_partials__["/services/server/info"].entry[0].content.product_type,r=e.__splunk_ui_theme__,n=e.$C&&e.$C.SPLUNK_UI_THEME;return r||n||t||"enterprise"}},function(e,t,r){"use strict";var n=e.exports.Validator=r(232);e.exports.ValidatorResult=r(19).ValidatorResult,e.exports.ValidatorResultError=r(19).ValidatorResultError,e.exports.ValidationError=r(19).ValidationError,e.exports.SchemaError=r(19).SchemaError,e.exports.SchemaScanResult=r(61).SchemaScanResult,e.exports.scan=r(61).scan,e.exports.validate=function(e,t,r){return(new n).validate(e,t,r)}},function(e){e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-04/schema#","definitions":{"AlertEntity":{"type":"object","properties":{"field":{"type":"string","pattern":"^\\\\w+$"},"label":{"type":"string","maxLength":30},"type":{"type":"string","enum":["text","singleSelect","checkbox","radio","singleSelectSplunkSearch"]},"help":{"type":"string","maxLength":200},"defaultValue":{"oneOf":[{"type":"number"},{"type":"string","maxLength":250},{"type":"boolean"}]},"required":{"type":"boolean"},"search":{"type":"string","maxLength":200},"valueField":{"type":"string","maxLength":200},"labelField":{"type":"string","maxLength":200},"options":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}}}}},"required":["field","label","type"],"additionalProperties":false},"Alerts":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9_]+$","maxLength":100},"label":{"type":"string","maxLength":100},"description":{"type":"string"},"activeResponse":{"type":"object","properties":{"task":{"type":"array","items":{"type":"string"},"minItems":1},"supportsAdhoc":{"type":"boolean"},"subject":{"type":"array","items":{"type":"string"},"minItems":1},"category":{"type":"array","items":{"type":"string"},"minItems":1},"technology":{"type":"array","items":{"$ref":"#/definitions/Technology"},"minItems":1},"drilldownUri":{"type":"string"},"sourcetype":{"type":"string","pattern":"^[a-zA-Z0-9:-_]+$","maxLength":50}},"required":["task","supportsAdhoc","subject","category","technology"]},"entity":{"type":"array","items":{"$ref":"#/definitions/AlertEntity"}}},"required":["name","label","description"],"additionalProperties":false},"ConfigurationEntity":{"type":"object","properties":{"field":{"type":"string","pattern":"(?!^(?:output_mode|output_field|owner|app|sharing)$)(?:^\\\\w+$)"},"label":{"type":"string","maxLength":30},"type":{"type":"string","enum":["custom","text","singleSelect","checkbox","multipleSelect","radio","placeholder","oauth","helpLink"]},"help":{"type":"string","maxLength":200},"tooltip":{"type":"string","maxLength":250},"defaultValue":{"oneOf":[{"type":"number"},{"type":"string","maxLength":250},{"type":"boolean"}]},"options":{"type":"object","properties":{"disableSearch":{"type":"boolean"},"autoCompleteFields":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":150},"children":{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}}},"required":["label","children"]}},{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}}]},"endpointUrl":{"type":"string","maxLength":350},"denyList":{"type":"string","maxLength":350},"allowList":{"type":"string","maxLength":350},"delimiter":{"type":"string","maxLength":1},"items":{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}},"referenceName":{"type":"string","maxLength":250},"enable":{"type":"boolean"},"placeholder":{"type":"string","maxLength":250},"display":{"type":"boolean"},"labelField":{"type":"string","maxLength":250},"src":{"type":"string","maxLength":250},"defaultValue":{"type":"string","maxLength":250},"disableonEdit":{"type":"boolean"},"basic":{"type":"array","items":{"$ref":"#/definitions/OAuthFields"}},"oauth":{"type":"array","items":{"$ref":"#/definitions/OAuthFields"}},"auth_type":{"type":"array","items":{"type":"string","maxLength":100}},"auth_label":{"type":"string","maxLength":250},"oauth_popup_width":{"type":"number"},"oauth_popup_height":{"type":"number"},"oauth_timeout":{"type":"number"},"auth_code_endpoint":{"type":"string","maxLength":350},"access_token_endpoint":{"type":"string","maxLength":350},"oauth_state_enabled":{"type":"boolean"},"text":{"type":"string","maxLength":50},"link":{"type":"string"}}},"required":{"type":"boolean"},"encrypted":{"type":"boolean"},"validators":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/StringValidator"},{"$ref":"#/definitions/NumberValidator"},{"$ref":"#/definitions/RegexValidator"},{"$ref":"#/definitions/EmailValidator"},{"$ref":"#/definitions/Ipv4Validator"},{"$ref":"#/definitions/UrlValidator"},{"$ref":"#/definitions/DateValidator"}]}}},"required":["field","label","type"],"additionalProperties":false},"ConfigurationPage":{"type":"object","properties":{"title":{"type":"string","maxLength":60},"description":{"type":"string","maxLength":200},"tabs":{"type":"array","items":{"$ref":"#/definitions/TabContent"},"minItems":1}},"required":["title","tabs"],"additionalProperties":false},"ConfigurationTable":{"type":"object","properties":{"moreInfo":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","pattern":"^\\\\w+$"},"label":{"type":"string","maxLength":30},"mapping":{"type":"object"}},"required":["field","label"]}},"header":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","pattern":"^\\\\w+$"},"label":{"type":"string","maxLength":30},"mapping":{"type":"object"},"customCell":{"type":"object"}},"required":["field","label"]}},"customRow":{"type":"object"},"actions":{"type":"array","items":{"type":"string","enum":["edit","delete","clone"]}}},"required":["header","actions"],"additionalProperties":false},"DateValidator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["date"]}},"required":["type"],"additionalProperties":false},"EmailValidator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["email"]}},"required":["type"],"additionalProperties":false},"Hooks":{"type":"object","properties":{"saveValidator":{"type":"string","maxLength":3000}},"additionalProperties":false},"InputsEntity":{"type":"object","properties":{"field":{"type":"string","pattern":"(?!^(?:persistentQueueSize|queueSize|start_by_shell|output_mode|output_field|owner|app|sharing)$)(?:^\\\\w+$)"},"label":{"type":"string","maxLength":30},"type":{"type":"string","enum":["custom","text","singleSelect","checkbox","multipleSelect","radio","placeholder","oauth","helpLink"]},"help":{"type":"string","maxLength":200},"tooltip":{"type":"string","maxLength":250},"defaultValue":{"oneOf":[{"type":"number"},{"type":"string","maxLength":250},{"type":"boolean"}]},"options":{"type":"object","properties":{"disableSearch":{"type":"boolean"},"autoCompleteFields":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":150},"children":{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}}},"required":["label","children"]}},{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}}]},"endpointUrl":{"type":"string","maxLength":350},"denyList":{"type":"string","maxLength":350},"allowList":{"type":"string","maxLength":350},"delimiter":{"type":"string","maxLength":1},"items":{"type":"array","items":{"$ref":"#/definitions/ValueLabelPair"}},"referenceName":{"type":"string","maxLength":250},"enable":{"type":"boolean"},"placeholder":{"type":"string","maxLength":250},"display":{"type":"boolean"},"labelField":{"type":"string","maxLength":250},"src":{"type":"string","maxLength":250},"defaultValue":{"type":"string","maxLength":250},"disableonEdit":{"type":"boolean"},"basic":{"type":"array","items":{"$ref":"#/definitions/OAuthFields"}},"oauth":{"type":"array","items":{"$ref":"#/definitions/OAuthFields"}},"auth_type":{"type":"array","items":{"type":"string","maxLength":100}},"auth_label":{"type":"string","maxLength":250},"oauth_popup_width":{"type":"number"},"oauth_popup_height":{"type":"number"},"oauth_timeout":{"type":"number"},"auth_code_endpoint":{"type":"string","maxLength":350},"access_token_endpoint":{"type":"string","maxLength":350},"text":{"type":"string","maxLength":50},"link":{"type":"string"}}},"required":{"type":"boolean"},"encrypted":{"type":"boolean"},"validators":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/StringValidator"},{"$ref":"#/definitions/NumberValidator"},{"$ref":"#/definitions/RegexValidator"},{"$ref":"#/definitions/EmailValidator"},{"$ref":"#/definitions/Ipv4Validator"},{"$ref":"#/definitions/UrlValidator"},{"$ref":"#/definitions/DateValidator"}]}}},"required":["field","label","type"],"additionalProperties":false},"InputsPage":{"type":"object","properties":{"title":{"type":"string","maxLength":60},"description":{"type":"string","maxLength":200},"table":{"$ref":"#/definitions/InputsTable"},"services":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[0-9a-zA-Z][0-9a-zA-Z_-]*$","maxLength":50},"title":{"type":"string","maxLength":100},"entity":{"type":"array","items":{"$ref":"#/definitions/InputsEntity"}},"options":{"$ref":"#/definitions/Hooks"},"groups":{"type":"array","items":{"type":"object","properties":{"options":{"type":"object","properties":{"isExpandable":{"type":"boolean"},"expand":{"type":"boolean"}}},"label":{"type":"string","maxLength":100},"field":{"type":"array","items":{"type":"string","pattern":"^\\\\w+$"}}},"required":["label"]}},"style":{"type":"string","enum":["page","dialog"]},"hook":{"type":"object"},"conf":{"type":"string","maxLength":100},"restHandlerName":{"type":"string","maxLength":100}},"required":["name","title","entity"]}},"menu":{"type":"object"}},"required":["title","table","services"],"additionalProperties":false},"InputsTable":{"type":"object","properties":{"moreInfo":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","pattern":"^\\\\w+$"},"label":{"type":"string","maxLength":30},"mapping":{"type":"object"}},"required":["field","label"]}},"header":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","pattern":"^\\\\w+$"},"label":{"type":"string","maxLength":30},"mapping":{"type":"object"},"customCell":{"type":"object"}},"required":["field","label"]}},"customRow":{"type":"object"},"actions":{"type":"array","items":{"type":"string","enum":["edit","delete","clone","enable"]}}},"required":["header","actions"],"additionalProperties":false},"Ipv4Validator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["ipv4"]}},"required":["type"],"additionalProperties":false},"Meta":{"type":"object","properties":{"displayName":{"type":"string","maxLength":200},"name":{"type":"string","pattern":"^[^<>\\\\:\\"\\\\/\\\\\\\\|\\\\?\\\\*]+$"},"restRoot":{"type":"string","pattern":"^\\\\w+$"},"apiVersion":{"type":"string","pattern":"^(?:\\\\d{1,3}\\\\.){2}\\\\d{1,3}$"},"version":{"type":"string"},"schemaVersion":{"type":"string","pattern":"^(?:\\\\d{1,3}\\\\.){2}\\\\d{1,3}$"}},"required":["displayName","name","restRoot","version"],"additionalProperties":false},"NumberValidator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["number"]},"range":{"type":"array","items":{"type":"number"}}},"required":["type","range"],"additionalProperties":false},"OAuthFields":{"type":"object","properties":{"oauth_field":{"type":"string","maxLength":100},"label":{"type":"string","maxLength":100},"field":{"type":"string","maxLength":100},"help":{"type":"string","maxLength":200},"encrypted":{"type":"boolean"},"required":{"type":"boolean"},"options":{"type":"object","properties":{"placeholder":{"type":"string","maxLength":250}},"additionalProperties":false}},"additionalProperties":false},"Pages":{"type":"object","properties":{"configuration":{"$ref":"#/definitions/ConfigurationPage"},"inputs":{"$ref":"#/definitions/InputsPage"}},"additionalProperties":false},"RegexValidator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["regex"]},"pattern":{"type":"string"}},"required":["type","pattern"],"additionalProperties":false},"StringValidator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["string"]},"minLength":{"type":"number","minimum":0},"maxLength":{"type":"number","minimum":0}},"required":["type","minLength","maxLength"],"additionalProperties":false},"TabContent":{"type":"object","properties":{"entity":{"type":"array","items":{"$ref":"#/definitions/ConfigurationEntity"}},"name":{"type":"string","pattern":"^[\\\\/\\\\w]+$","maxLength":250},"title":{"type":"string","maxLength":50},"options":{"$ref":"#/definitions/Hooks"},"table":{"$ref":"#/definitions/ConfigurationTable"},"conf":{"type":"string","maxLength":100},"restHandlerName":{"type":"string","maxLength":100},"hook":{"type":"object"}},"required":["entity","name","title"],"additionalProperties":false},"Technology":{"type":"object","properties":{"version":{"type":"array","items":{"type":"string","pattern":"^\\\\d+(?:\\\\.\\\\d+)*$"},"minItems":1},"product":{"type":"string","maxLength":100},"vendor":{"type":"string","maxLength":100}},"required":["version","product","vendor"],"additionalProperties":false},"UrlValidator":{"type":"object","properties":{"errorMsg":{"type":"string","maxLength":400},"type":{"type":"string","enum":["url"]}},"required":["type"],"additionalProperties":false},"ValueLabelPair":{"type":"object","properties":{"value":{"oneOf":[{"type":"number"},{"type":"string","maxLength":250},{"type":"boolean"}]},"label":{"type":"string","maxLength":100}},"required":["label"],"additionalProperties":false}},"type":"object","properties":{"meta":{"$ref":"#/definitions/Meta"},"pages":{"$ref":"#/definitions/Pages"},"alerts":{"type":"array","items":{"$ref":"#/definitions/Alerts"},"minItems":1}},"required":["meta","pages"],"additionalProperties":false}')},function(e,t,r){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},i=function(){var e={};return function(t){if(void 0===e[t]){var r=document.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}e[t]=r}return e[t]}}(),a=[];function s(e){for(var t=-1,r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function w(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function C(e,t){for(var r=0;rc-r.bottom?"above":"below":"horizontal"===i&&(d=r.left>l-r.right?"left":"right");var h=d,m=function(e){var t=e.align,r=e.anchorPos,n=e.outerContainerEl,o=e.padding,i=e.placement;switch(i){case"above":return{top:r.top-n.offsetHeight,left:"edge"===t?r.left-o:r.middle-n.offsetWidth/2};case"below":return{top:r.bottom,left:"edge"===t?r.left-o:r.middle-n.offsetWidth/2};case"left":return{top:"edge"===t?r.top-o:r.center-n.offsetHeight/2,left:r.left-n.offsetWidth};case"right":return{top:"edge"===t?r.top-o:r.center-n.offsetHeight/2,left:r.right};default:throw new Error("".concat(i," is not a valid placement value. Valid options are: 'above', 'below', 'left', or 'right'"))}}({align:t,anchorPos:r,outerContainerEl:a,padding:s,placement:h}),y=m.top,v=m.left,g="auto",x=l,C=c,O=h,S=r.top-a.offsetHeight>0,E=r.bottom+a.offsetHeight0,A=r.right+a.offsetWidthc-r.bottom,D=("edge"===t?r.left+a.offsetWidth-s:r.middle+a.offsetWidth/2)>l,j=("edge"===t?r.left-s:r.middle-a.offsetWidth/2)<0,P=("edge"===t?r.top-s:r.top-a.offsetHeight/2)<0,T=("edge"===t?r.top+a.offsetHeight-s:r.bottom+a.offsetHeight/2)>c;if("above"===O){if(!S&&p){if(E)return w(b(b({},e),{},{placement:"below"}));if(f&&A)return w(b(b({},e),{},{placement:"right"}));if(f&&k)return w(b(b({},e),{},{placement:"left"}));o&&(O="misaligned",y=0)}"misaligned"!==O&&(g=c-y-a.offsetHeight,n&&(g=Math.min(g,c-n.top)),y="auto"),D?v=Math.max(l-a.offsetWidth,0):j&&(v=0),o||(C=r.top)}if("below"===O){if(!E&&p){if(S&&_)return w(b(b({},e),{},{placement:"above"}));if(f&&A)return w(b(b({},e),{},{placement:"right"}));if(f&&k)return w(b(b({},e),{},{placement:"left"}));o&&(O="misaligned",y=0)}n&&(y=Math.min(y,n.bottom)),D?v=Math.max(l-a.offsetWidth,0):j&&(v=0),o||(C=c-r.bottom)}if("left"===O){if(!k&&p){if(A)return w(b(b({},e),{},{placement:"right"}));if(f&&E)return w(b(b({},e),{},{placement:"below"}));if(f&&S)return w(b(b({},e),{},{placement:"above"}));o&&(O="misaligned",y=0)}P?y=0:T&&(y=Math.max(c-a.offsetHeight,0)),o||(x=r.left)}if("right"===O){if(!A&&p){if(k)return w(b(b({},e),{},{placement:"left"}));if(f&&E)return w(b(b({},e),{},{placement:"below"}));if(f&&S)return w(b(b({},e),{},{placement:"above"}));o&&(O="misaligned",y=0)}P?y=0:T&&(y=Math.max(c-a.offsetHeight,0)),o||(x=l-r.left)}return{placement:O,maxHeight:C,maxWidth:x,outerContainerStyle:{top:y,left:v,bottom:g}}}var C=r(38),O=r(3),S=r.n(O),E=Object(f.pick)({enterprise:"8px",prisma:0}),k=S()(C.animated.div).withConfig({displayName:"PopoverStyles__Styled",componentId:"sc-1nahsvw-0"})(["position:fixed;z-index:",";left:-300%;top:-300%;"],f.variables.zindexPopover),A=S.a.div.withConfig({displayName:"PopoverStyles__StyledBox",componentId:"sc-1nahsvw-1"})(["",";",";"],f.mixins.reset("block"),(function(e){return"none"!==e.$appearance&&Object(O.css)(["padding:8px;"])})),_=S.a.div.withConfig({displayName:"PopoverStyles__StyledContent",componentId:"sc-1nahsvw-2"})(["",""],Object(f.pickVariant)("$appearance",{normal:Object(O.css)(["background-color:",";color:",";border:",";box-shadow:",";border-radius:",";"],f.variables.backgroundColorPopup,f.variables.contentColorDefault,Object(f.pick)({enterprise:{light:f.variables.border,dark:f.variables.border},prisma:"none"}),Object(f.pick)({enterprise:{light:Object(O.css)(["0 2px 2px ",""],f.mixins.colorWithAlpha(f.variables.gray20,.1)),dark:"0 1px 2px #000"},prisma:f.variables.overlayShadow}),f.variables.borderRadius),inverted:Object(O.css)(["background-color:",";color:",";"],Object(f.pick)({light:f.variables.gray20,dark:f.variables.white}),Object(f.pick)({light:f.variables.white,dark:f.variables.gray30}))})),D=S.a.div.withConfig({displayName:"PopoverStyles__StyledArrow",componentId:"sc-1nahsvw-3"})(["width:0;height:0;border-left:"," solid transparent;border-right:"," solid transparent;position:absolute;border-bottom-width:",";border-bottom-style:solid;",""],E,E,E,Object(f.pickVariant)("$appearance",{normal:Object(O.css)(["border-bottom-color:",";&::before{content:'';display:block;width:0;height:0;border-left:"," solid transparent;border-right:"," solid transparent;border-bottom:"," solid ",";position:absolute;top:1px;left:0;margin-left:-",";}"],Object(f.pick)({light:f.variables.borderColor,dark:f.variables.black}),E,E,E,f.variables.backgroundColor,E),inverted:Object(O.css)(["border-bottom-color:",";"],Object(f.pick)({light:f.variables.gray20,dark:f.variables.white}))})),j=S.a.div.withConfig({displayName:"PopoverStyles__StyledLowerRightCorner",componentId:"sc-1nahsvw-4"})(["position:fixed;right:0;bottom:0;"]),P=r(12);function T(e){return(T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function F(){return(F=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:1;return!!e&&!!t&&Object(l.every)(e,(function(e,n){return Object(l.isFinite)(e)?Math.abs(t[n]-e)<=r:t[n]===e}))}var Z=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&$(e,t)}(r,e);var t=W(r);function r(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),q(V(n=t.call(this,e)),"outerContainerEl",null),q(V(n),"innerContainerEl",null),q(V(n),"arrow",null),q(V(n),"windowSizeMeasurementEl",null),q(V(n),"handleScroll",void 0),q(V(n),"handleWindowScroll",void 0),q(V(n),"getElPosition",(function(e){var t=e.getBoundingClientRect(),r={top:t.top,left:t.left,width:e.offsetWidth,height:e.offsetHeight},o=n.props.pointTo;return r.right=t.right||r.left+r.width,r.bottom=t.bottom||r.top+r.height,r.middle=o&&Object(l.has)(o,"x")?r.left+(o.x||0):r.left+(r.right-r.left)/2,r.center=o&&Object(l.has)(o,"y")?r.top+(o.y||0):r.top+(r.bottom-r.top)/2,r})),q(V(n),"setPlacement",(function(e){n.setState((function(t){var o,i=n.props,a=i.align,s=i.anchor,u=i.autoCloseWhenOffScreen,c=i.canCoverAnchor,f=i.defaultPlacement,p=i.open,d=i.repositionMode,h=i.splunkTheme,m=n.context||"window",y="prisma"===h.family;if(!(p&&n.outerContainerEl&&s&&t.anchorEl&&n.windowSizeMeasurementEl))return null;var v=n.getElPosition(t.anchorEl),g="window"!==m?n.getElPosition(m):void 0;if(e&&u&&n.autoCloseWhenOffScreen(v,g))return null;var b=y?0:8,x=w({align:"theme"===a?y?"edge":"center":a,anchorPos:v,scrollContainerPos:g,canCoverAnchor:c,defaultPlacement:f,repositionMode:d,outerContainerEl:n.outerContainerEl,padding:8,windowWidth:n.windowSizeMeasurementEl.offsetLeft,windowHeight:n.windowSizeMeasurementEl.offsetTop}),C=x.placement,O=x.outerContainerStyle,S=x.maxHeight,E=x.maxWidth,k=L(n.arrow?r.getArrowStyle({anchorPos:v,arrowHeight:b,outerContainerStyle:O,placement:C,outerContainerEl:n.outerContainerEl}):[],2),A=k[0],_=k[1],D="none"!==n.props.appearance&&!y,j=G(v,t.anchorPos)&&G(O,t.outerContainerStyle)&&C===t.placement&&S===t.maxHeight&&E===t.maxWidth,P=G(Object(l.omit)(A,"transform"),Object(l.omit)(t.arrowStyle,"transform"))&&G(null!=_?_:{},null!==(o=t.arrowStyleTransformMeta)&&void 0!==o?o:{});return j&&(!D||D&&P)?null:{anchorPos:v,arrowStyle:A,arrowStyleTransformMeta:_,outerContainerStyle:O,placement:C,maxHeight:S,maxWidth:E}}))})),q(V(n),"handleNewAnchor",(function(e){var t,r=(t=!e||e instanceof HTMLElement?null!=e?e:void 0:Object(s.findDOMNode)(e))?n.getElPosition(t):void 0;n.setState({anchorEl:t,anchorPos:r})})),q(V(n),"handleInnerContainerMount",(function(e){n.innerContainerEl=e,e&&n.props.takeFocus&&Object(l.defer)(v.takeFocus,e),Object(P.a)(n.props.elementRef,e)})),q(V(n),"handleTab",(function(e){n.innerContainerEl&&Object(v.handleTab)(n.innerContainerEl,e)})),q(V(n),"handleRequestClose",(function(e){n.props.open&&n.requestClose(e)})),q(V(n),"handleAnimationEnd",(function(){n.setState({animating:!1})})),q(V(n),"renderLayer",(function(){var e=n.props,t=e.animation,i=e.appearance,a=e.children,s=e.id,u=e.open,c=e.splunkTheme,f=n.state,d=f.anchorPos,h=f.arrowStyle,m=f.outerContainerStyle,y=f.placement,v="prisma"===c.family,g=v&&"inverted"===i?"normal":i,b=n.state,x=b.maxHeight,w=b.maxWidth;"none"!==i&&(Object(l.isFinite)(x)&&(x-=20),Object(l.isFinite)(w)&&(w-=20));var C={anchorHeight:d?d.height:null,anchorWidth:d?d.width:null,placement:y||null,maxHeight:x||null,maxWidth:w||null},O=t?{opacity:u?1:0}:{opacity:1};return o.a.createElement(p.Spring,{native:!0,from:{opacity:t?0:1},to:O,config:{tension:300,friction:40},onRest:n.handleAnimationEnd},(function(e){var t=e.opacity;return o.a.createElement(k,{style:R(R({},m),{},{opacity:t}),ref:function(e){n.outerContainerEl=e}},(u||n.state.animating)&&o.a.createElement(A,F({$appearance:g,"data-test":"popover",ref:n.handleInnerContainerMount,tabIndex:-1,id:s,onKeyDown:n.props.retainFocus?n.handleTab:void 0},Object(l.omit)(n.props,["anchor"].concat(M(Object(l.keys)(r.propTypes))))),"none"===i&&a,"none"!==i&&!v&&o.a.createElement(D,{$appearance:g,ref:function(e){n.arrow=e},style:h}),"none"!==i&&o.a.createElement(_,{$appearance:g},Object(l.isFunction)(a)?a(C):a)),o.a.createElement(j,{ref:function(e){n.windowSizeMeasurementEl=e}}))}))})),n.handleScroll=Object(l.throttle)(n.setPlacement.bind(V(n),!0),0),n.handleWindowScroll=Object(l.throttle)(n.setPlacement.bind(V(n),!0),0),n.setPlacement=Object(l.throttle)(n.setPlacement,0,{leading:!1}),n.state={animating:!1,prevOpen:e.open},n}return U(r,null,[{key:"getArrowStyle",value:function(e){var t=e.anchorPos,r=e.arrowHeight,n=e.placement,o=e.outerContainerStyle,i=e.outerContainerEl;if("misaligned"===n)return[{display:"none"}];var a={display:"block"},s=i.offsetHeight/2-22,u=-(i.offsetHeight/2-15),c=t.center-(o.top+i.offsetHeight/2)-r/2,f=Object(l.clamp)(c,u,s),p=t.middle-(o.left+i.offsetWidth/2)-r,d={left:{translateX:r/2,translateY:f,rotate:90},right:{translateX:-r/2,translateY:f,rotate:-90},above:{translateX:p,translateY:0,rotate:180},below:{translateX:p,translateY:0,rotate:0}}[n];a.transform="translate(".concat(d.translateX,"px, ").concat(d.translateY,"px) rotate(").concat(d.rotate,"deg)");a[{left:"right",right:"left",above:"bottom",below:"top"}[n]]="1px";return a[{left:"top",right:"top",above:"left",below:"left"}[n]]="50%",[a,d]}}]),U(r,[{key:"componentDidMount",value:function(){this.handleNewAnchor(this.props.anchor)}},{key:"componentDidUpdate",value:function(e){e.anchor!==this.props.anchor&&this.handleNewAnchor(this.props.anchor),this.innerContainerEl&&(this.props.open||this.state.animating)&&(this.setPlacement(),!e.open&&this.props.takeFocus&&Object(v.takeFocus)(this.innerContainerEl))}},{key:"componentWillUnmount",value:function(){this.setPlacement.cancel(),this.handleScroll.cancel()}},{key:"autoCloseWhenOffScreen",value:function(e,t){return(e.top<0||e.top>window.innerHeight||e.left<0||e.left>window.innerWidth||!(!t||!(e.height+e.topt.bottom||e.width+e.leftt.right)))&&(this.requestClose({reason:"offScreen"}),!0)}},{key:"requestClose",value:function(e){var t,r;Object(l.includes)(this.props.closeReasons,e.reason)&&(null===(t=(r=this.props).onRequestClose)||void 0===t||t.call(r,e))}},{key:"render",value:function(){var e=this.props.open||this.state.animating,t=this.context||"window";return["window"!==t&&o.a.createElement(c.a,{target:t,onScroll:this.handleScroll,key:"eventListener"}),o.a.createElement(c.a,{target:"window",onResize:this.setPlacement,onScroll:this.handleWindowScroll,key:"eventListenerOnWindow"}),o.a.createElement(h.a,{closeReasons:Object(l.intersection)(this.props.closeReasons.filter((function(e){return"offScreen"!==e})),h.a.possibleCloseReasons),open:e,onRequestClose:this.handleRequestClose,key:"Layer"},e&&this.renderLayer())]}}]),r}(n.Component);q(Z,"contextType",y.a),q(Z,"defaultProps",Y),q(Z,"propTypes",J),q(Z,"getDerivedStateFromProps",(function(e,t){return e.open!==t.prevOpen?{animating:e.animation,prevOpen:e.open}:null}));var Q=Object(f.withSplunkTheme)(Z);Q.propTypes=Z.propTypes;var ee=Q},15:function(e,t){e.exports=r(78)},2:function(e,t){e.exports=r(0)},26:function(e,t){e.exports=r(82)},27:function(e,t){e.exports=r(84)},3:function(e,t){e.exports=r(1)},33:function(e,t){e.exports=r(85)},38:function(e,t){e.exports=r(89)},4:function(e,t){e.exports=r(2)},47:function(e,t){e.exports=r(53)},58:function(e,t){e.exports=r(40)}})},function(e,t,r){var n=r(191),o=r(192),i=r(193),a=r(194),s=r(195);function u(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=function(){var e=(0,n.useContext)(o.ThemeContext)||{},t=e.splunkThemeV1,r=void 0===t?{}:t,a=c(e,["splunkThemeV1"]),u=r.family,l=r.colorScheme,f=r.density,p=r.customizer;return s(s({},a),(0,i.getCustomizedTheme)({family:u,colorScheme:l,density:f},p))};t.default=l},function(e,t,r){var n=r(75)(r(49),"Map");e.exports=n},function(e,t,r){"use strict";function n(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=c.a.svg.withConfig({displayName:"SVG__InlineSVG",componentId:"sc-13m0oii-0"})(["display:inline-block;flex:0 0 auto;overflow:visible;vertical-align:middle;"]),d=c.a.svg.withConfig({displayName:"SVG__BlockSVG",componentId:"sc-13m0oii-1"})(["display:block;flex:0 0 auto;margin:0 auto;overflow:visible;"]),h={children:a.a.node,height:a.a.oneOfType([a.a.number,a.a.string]),hideDefaultTooltip:a.a.bool,inline:a.a.bool,screenReaderText:a.a.oneOfType([a.a.string,a.a.oneOf(["null"])]),size:a.a.oneOfType([a.a.number,a.a.string]),width:a.a.oneOfType([a.a.number,a.a.string]),viewBox:a.a.string.isRequired,preserveAspectRatio:a.a.oneOf(["none","xMinYMin","xMidYMin","xMaxYMin","xMinYMid","xMidYMid","xMaxYMid","xMinYMax","xMidYMax","xMaxYMax"])};function m(e){var t=e.children,r=e.height,n=e.hideDefaultTooltip,i=void 0!==n&&n,a=e.inline,u=void 0===a||a,c=e.preserveAspectRatio,h=void 0===c?"xMidYMid":c,m=e.screenReaderText,y=e.size,v=void 0===y?.75:y,g=e.viewBox,b=e.width,x=f(e,["children","height","hideDefaultTooltip","inline","preserveAspectRatio","screenReaderText","size","viewBox","width"]);var w="number"!=typeof v?parseFloat(v):v,C=Object(s.isString)(v)?v.match(/[^\d]+/):"em",O=parseFloat(g.split(" ")[3]),S=parseFloat(g.split(" ")[2]),E=Math.max(S,O),k=Object(s.isUndefined)(r)?O/E*w:r,A=Object(s.isUndefined)(b)?S/E*w:b,_=u?p:d,D=m&&!i;return o.a.createElement(_,l({focusable:"false",height:Object(s.isString)(k)?k:"".concat(k.toFixed(4)).concat(C),width:Object(s.isString)(A)?A:"".concat(A.toFixed(4)).concat(C),viewBox:g,"aria-label":i&&null!=m?m:void 0,"aria-hidden":!m,preserveAspectRatio:h,xmlns:"http://www.w3.org/2000/svg"},x),D&&o.a.createElement("title",null,m),t)}m.propTypes=h,t.default=m},3:function(e,t){e.exports=r(3)},5:function(e,t){e.exports=r(1)},6:function(e,t){e.exports=r(2)}})},function(e,t,r){e.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=172)}({0:function(e,t){e.exports=r(0)},1:function(e,t){e.exports=r(7)},172:function(e,t,r){"use strict";r.r(t),r.d(t,"default",(function(){return c}));var n=r(0),o=r.n(n),i=r(1),a=r(2),s=r.n(a);function u(){return(u=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},i=s({appBuild:t,buildPushNumber:n,buildNumber:r},o),a=e.match(/(^|\w\w-\w\w\/)static\//);if(!a)return e;var u=a.index+a[0].length-1,c=e.match(/(^|\w\w-\w\w|)static\/app/),l=c?":".concat(i.appBuild||0):"",f=i.buildPushNumber?".".concat(i.buildPushNumber):"",p="/@".concat(i.buildNumber).concat(f).concat(l),d=e.substr(0,u),h=e.substr(u);return"".concat(d).concat(p).concat(h)}function l(e,u){var l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},f=s({appBuild:t,buildPushNumber:n,buildNumber:r,rootPath:a,locale:i},l),p=e||"/",d=u?"?".concat((0,o.stringify)(u)):"";return"/"!==p.charAt(0)&&(p="/".concat(p)),c(p="".concat(f.rootPath||"","/").concat(f.locale).concat(p).concat(d),f)}function f(e,t){return l("/help",e,t)}return{createAppDocsURL:function(e,t,r){var n=t.appName,o=t.appVersion;return f({location:"[".concat(n,":").concat(o,"]").concat(e)},r)},createDocsURL:function(e,t){return f({location:e},t)},createRESTURL:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(/^http[s]?:\/\//.test(e))return e;var n,o,i=r.splunkdPath||u||"";return/^\/.*/.test(e)?/^\/services/.test(e)?"".concat(i).concat(e):e:t.app||t.owner?(n=t.sharing?"nobody":t.owner?encodeURIComponent(t.owner):"-",o="system"===t.sharing?"system":t.app?encodeURIComponent(t.app):"-","".concat(i,"/servicesNS/").concat(n,"/").concat(o,"/").concat(e)):"".concat(i,"/services/").concat(e)},createStaticURL:function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:(0,n.get)(i,["document","location","pathname"],""),t=e.match(/\w\w.\w\w\/(app|manager)\/([^/]+)/);return t?t[2]:void 0}t.isAvailable=u;var l=c();t.app=l;var f=a("APP_BUILD");t.appBuild=f;var p=a("BUILD_NUMBER");t.buildNumber=p;var d=a("BUILD_PUSH_NUMBER");t.buildPushNumber=d;var h=(0,n.get)(i,"$C");t.config=h;var m=a("LOCALE");t.locale=m;var y=a("MRSPARKLE_PORT_NUMBER");t.portNumber=y;var v=a("MRSPARKLE_ROOT_PATH");t.rootPath=v;var g=a("SERVER_ZONEINFO");t.serverTimezoneInfo=g;var b=a("SPLUNKD_PATH");t.splunkdPath=b;var x=a("USERNAME");t.username=x;var w=a("VERSION_LABEL");t.versionLabel=w}).call(this,r(23))},function(e,t,r){var n=r(178),o=r(196),i=r(198),a=r(199),s=r(200);function u(e){var t=-1,r=null==e?0:e.length;for(this.clear();++te.length)&&(t=e.length);for(var r=0,n=new Array(t);rj.length&&j.push(e)}function F(e,t,r){return null==e?0:function e(t,r,n,o){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var u=!1;if(null===t)u=!0;else switch(s){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case a:u=!0}}if(u)return n(o,t,""===r?"."+M(t,0):r),1;if(u=0,r=""===r?".":r+":",Array.isArray(t))for(var c=0;c