openstack-uicore-foundation 4.1.42 → 4.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/lib/components/ajaxloader.js +184 -2
  2. package/lib/components/attendance-tracker.js +2066 -2
  3. package/lib/components/bulk-actions-selector.js +197 -2
  4. package/lib/components/circle-button.js +223 -2
  5. package/lib/components/clock.js +767 -2
  6. package/lib/components/exclusive-wrapper.js +151 -2
  7. package/lib/components/extra-questions.js +2011 -2
  8. package/lib/components/form-validation.js +190 -2
  9. package/lib/components/forms/rsvp-form.js +940 -2
  10. package/lib/components/forms/simple-form.js +774 -2
  11. package/lib/components/free-text-search.js +2154 -2
  12. package/lib/components/google-map.js +642 -2
  13. package/lib/components/index.js +13417 -2
  14. package/lib/components/inputs/access-levels-input.js +2381 -2
  15. package/lib/components/inputs/action-dropdown.js +219 -2
  16. package/lib/components/inputs/checkbox-list.js +339 -2
  17. package/lib/components/inputs/company-input.js +2416 -2
  18. package/lib/components/inputs/country-dropdown.js +2474 -2
  19. package/lib/components/inputs/country-input.js +2377 -2
  20. package/lib/components/inputs/datetimepicker.js +314 -2
  21. package/lib/components/inputs/dropdown.js +259 -2
  22. package/lib/components/inputs/editor-input.js +270 -2
  23. package/lib/components/inputs/event-input.js +2355 -2
  24. package/lib/components/inputs/free-multi-text-input.js +252 -2
  25. package/lib/components/inputs/group-input.js +2350 -2
  26. package/lib/components/inputs/grouped-dropdown.js +244 -2
  27. package/lib/components/inputs/language-input.js +2382 -2
  28. package/lib/components/inputs/member-input.js +2377 -2
  29. package/lib/components/inputs/operator-input.js +328 -2
  30. package/lib/components/inputs/organization-input.js +2400 -2
  31. package/lib/components/inputs/promocode-input.js +2385 -2
  32. package/lib/components/inputs/radio-list.js +297 -2
  33. package/lib/components/inputs/registration-company-input.js +2438 -2
  34. package/lib/components/inputs/speaker-input.js +2411 -2
  35. package/lib/components/inputs/sponsor-input.js +2359 -2
  36. package/lib/components/inputs/stepped-select.js +197 -2
  37. package/lib/components/inputs/summit-days-select.js +162 -2
  38. package/lib/components/inputs/summit-input.js +2357 -2
  39. package/lib/components/inputs/summit-venues-select.js +203 -2
  40. package/lib/components/inputs/tag-input.js +2427 -2
  41. package/lib/components/inputs/text-input.js +202 -2
  42. package/lib/components/inputs/textarea-input.js +174 -2
  43. package/lib/components/inputs/ticket-types-input.js +2415 -2
  44. package/lib/components/inputs/upload-input-v2.js +860 -2
  45. package/lib/components/inputs/upload-input.js +391 -2
  46. package/lib/components/progressive-img.js +296 -2
  47. package/lib/components/raw-html.js +125 -2
  48. package/lib/components/schedule-builder-constants.js +87 -2
  49. package/lib/components/schedule-builder-view.js +2188 -2
  50. package/lib/components/sections/panel.js +156 -2
  51. package/lib/components/simple-link-list.js +790 -2
  52. package/lib/components/sponsored-project-input.js +2356 -2
  53. package/lib/components/summit-dropdown.js +214 -2
  54. package/lib/components/table-editable.js +961 -2
  55. package/lib/components/table-selectable.js +552 -2
  56. package/lib/components/table-sortable.js +743 -2
  57. package/lib/components/table.js +510 -2
  58. package/lib/components/video-stream.js +226 -2
  59. package/lib/css/components/bulk-actions-selector.css +19 -2
  60. package/lib/css/components/circle-button.css +28 -1
  61. package/lib/css/components/extra-questions.css +35 -2
  62. package/lib/css/components/form-validation.css +29 -2
  63. package/lib/css/components/free-text-search.css +35 -2
  64. package/lib/css/components/index.css +1397 -3
  65. package/lib/css/components/inputs/action-dropdown.css +46 -2
  66. package/lib/css/components/inputs/datetimepicker.css +208 -2
  67. package/lib/css/components/inputs/grouped-dropdown.css +25 -2
  68. package/lib/css/components/inputs/stepped-select.css +12 -2
  69. package/lib/css/components/inputs/upload-input-v2.css +108 -2
  70. package/lib/css/components/inputs/upload-input.css +43 -2
  71. package/lib/css/components/progressive-img.css +18 -1
  72. package/lib/css/components/schedule-builder-view.css +249 -2
  73. package/lib/css/components/simple-link-list.css +195 -2
  74. package/lib/css/components/summit-dropdown.css +35 -2
  75. package/lib/css/components/table-editable.css +145 -2
  76. package/lib/css/components/table-selectable.css +147 -2
  77. package/lib/css/components/table-sortable.css +156 -2
  78. package/lib/css/components/table.css +147 -2
  79. package/lib/i18n.js +515 -2
  80. package/lib/models/index.js +238 -2
  81. package/lib/models/summit-event.js +210 -2
  82. package/lib/security/abstract-auth-callback-route.js +2192 -2
  83. package/lib/security/actions.js +1892 -2
  84. package/lib/security/constants.js +75 -2
  85. package/lib/security/methods.js +1892 -2
  86. package/lib/security/reducers.js +2035 -2
  87. package/lib/security/session-checker.js +2253 -2
  88. package/lib/utils/actions.js +1892 -2
  89. package/lib/utils/fragment-parser.js +207 -2
  90. package/lib/utils/methods.js +435 -2
  91. package/lib/utils/query-actions.js +2229 -2
  92. package/lib/utils/questions-set.js +681 -2
  93. package/lib/utils/reducers.js +1948 -2
  94. package/lib/utils/use-fit-text.js +178 -2
  95. package/package.json +1 -1
  96. package/lib/components/ajaxloader.js.map +0 -1
  97. package/lib/components/attendance-tracker.js.map +0 -1
  98. package/lib/components/bulk-actions-selector.js.map +0 -1
  99. package/lib/components/circle-button.js.map +0 -1
  100. package/lib/components/clock.js.map +0 -1
  101. package/lib/components/exclusive-wrapper.js.map +0 -1
  102. package/lib/components/extra-questions.js.map +0 -1
  103. package/lib/components/form-validation.js.map +0 -1
  104. package/lib/components/forms/rsvp-form.js.map +0 -1
  105. package/lib/components/forms/simple-form.js.map +0 -1
  106. package/lib/components/free-text-search.js.map +0 -1
  107. package/lib/components/google-map.js.map +0 -1
  108. package/lib/components/index.js.map +0 -1
  109. package/lib/components/inputs/access-levels-input.js.map +0 -1
  110. package/lib/components/inputs/action-dropdown.js.map +0 -1
  111. package/lib/components/inputs/checkbox-list.js.map +0 -1
  112. package/lib/components/inputs/company-input.js.map +0 -1
  113. package/lib/components/inputs/country-dropdown.js.map +0 -1
  114. package/lib/components/inputs/country-input.js.map +0 -1
  115. package/lib/components/inputs/datetimepicker.js.map +0 -1
  116. package/lib/components/inputs/dropdown.js.map +0 -1
  117. package/lib/components/inputs/editor-input.js.map +0 -1
  118. package/lib/components/inputs/event-input.js.map +0 -1
  119. package/lib/components/inputs/free-multi-text-input.js.map +0 -1
  120. package/lib/components/inputs/group-input.js.map +0 -1
  121. package/lib/components/inputs/grouped-dropdown.js.map +0 -1
  122. package/lib/components/inputs/language-input.js.map +0 -1
  123. package/lib/components/inputs/member-input.js.map +0 -1
  124. package/lib/components/inputs/operator-input.js.map +0 -1
  125. package/lib/components/inputs/organization-input.js.map +0 -1
  126. package/lib/components/inputs/promocode-input.js.map +0 -1
  127. package/lib/components/inputs/radio-list.js.map +0 -1
  128. package/lib/components/inputs/registration-company-input.js.map +0 -1
  129. package/lib/components/inputs/speaker-input.js.map +0 -1
  130. package/lib/components/inputs/sponsor-input.js.map +0 -1
  131. package/lib/components/inputs/stepped-select.js.map +0 -1
  132. package/lib/components/inputs/summit-days-select.js.map +0 -1
  133. package/lib/components/inputs/summit-input.js.map +0 -1
  134. package/lib/components/inputs/summit-venues-select.js.map +0 -1
  135. package/lib/components/inputs/tag-input.js.map +0 -1
  136. package/lib/components/inputs/text-input.js.map +0 -1
  137. package/lib/components/inputs/textarea-input.js.map +0 -1
  138. package/lib/components/inputs/ticket-types-input.js.map +0 -1
  139. package/lib/components/inputs/upload-input-v2.js.map +0 -1
  140. package/lib/components/inputs/upload-input.js.map +0 -1
  141. package/lib/components/progressive-img.js.map +0 -1
  142. package/lib/components/raw-html.js.map +0 -1
  143. package/lib/components/schedule-builder-constants.js.map +0 -1
  144. package/lib/components/schedule-builder-view.js.map +0 -1
  145. package/lib/components/sections/panel.js.map +0 -1
  146. package/lib/components/simple-link-list.js.map +0 -1
  147. package/lib/components/sponsored-project-input.js.map +0 -1
  148. package/lib/components/summit-dropdown.js.map +0 -1
  149. package/lib/components/table-editable.js.map +0 -1
  150. package/lib/components/table-selectable.js.map +0 -1
  151. package/lib/components/table-sortable.js.map +0 -1
  152. package/lib/components/table.js.map +0 -1
  153. package/lib/components/video-stream.js.map +0 -1
  154. package/lib/css/components/bulk-actions-selector.css.map +0 -1
  155. package/lib/css/components/extra-questions.css.map +0 -1
  156. package/lib/css/components/form-validation.css.map +0 -1
  157. package/lib/css/components/free-text-search.css.map +0 -1
  158. package/lib/css/components/index.css.map +0 -1
  159. package/lib/css/components/inputs/action-dropdown.css.map +0 -1
  160. package/lib/css/components/inputs/datetimepicker.css.map +0 -1
  161. package/lib/css/components/inputs/grouped-dropdown.css.map +0 -1
  162. package/lib/css/components/inputs/stepped-select.css.map +0 -1
  163. package/lib/css/components/inputs/upload-input-v2.css.map +0 -1
  164. package/lib/css/components/inputs/upload-input.css.map +0 -1
  165. package/lib/css/components/schedule-builder-view.css.map +0 -1
  166. package/lib/css/components/simple-link-list.css.map +0 -1
  167. package/lib/css/components/summit-dropdown.css.map +0 -1
  168. package/lib/css/components/table-editable.css.map +0 -1
  169. package/lib/css/components/table-selectable.css.map +0 -1
  170. package/lib/css/components/table-sortable.css.map +0 -1
  171. package/lib/css/components/table.css.map +0 -1
  172. package/lib/i18n.js.map +0 -1
  173. package/lib/models/index.js.map +0 -1
  174. package/lib/models/summit-event.js.map +0 -1
  175. package/lib/security/abstract-auth-callback-route.js.map +0 -1
  176. package/lib/security/actions.js.map +0 -1
  177. package/lib/security/constants.js.map +0 -1
  178. package/lib/security/methods.js.map +0 -1
  179. package/lib/security/reducers.js.map +0 -1
  180. package/lib/security/session-checker.js.map +0 -1
  181. package/lib/utils/actions.js.map +0 -1
  182. package/lib/utils/fragment-parser.js.map +0 -1
  183. package/lib/utils/methods.js.map +0 -1
  184. package/lib/utils/query-actions.js.map +0 -1
  185. package/lib/utils/questions-set.js.map +0 -1
  186. package/lib/utils/reducers.js.map +0 -1
  187. package/lib/utils/use-fit-text.js.map +0 -1
@@ -1,2 +1,2011 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(()=>(()=>{"use strict";var e={2230:(e,t,a)=>{a.d(t,{default:()=>p});var r=a(3838),n=a.n(r),s=a(580),l=a.n(s),i=a(6689),o=a.n(i),u=a(4656),c=a.n(u),d=a(418);const m=["onChange","value","className","options","id","children","error","disabled","name","ariaLabelledBy"];class p extends o().Component{constructor(e){super(e);let t=!!e.value&&e.value.find((t=>!e.options.map((e=>e.value)).includes(t)));this.state={otherChecked:!!t},this.handleChange=this.handleChange.bind(this),this.handleOtherCBChange=this.handleOtherCBChange.bind(this)}handleChange(e){let t=this.props.options.map((e=>e.value)),a=this.props.value?[...this.props.value]:[];if("checkbox"===e.target.type)if(e.target.checked){const t=isNaN(e.target.value)?e.target.value:parseInt(e.target.value);a.push(t)}else a=a.filter((t=>t!=e.target.value));else a=a.filter((e=>t.includes(e))),a.push(e.target.value);let r={target:{id:this.props.id,value:a,type:"checkboxlist"}};this.props.onChange(r)}handleOtherCBChange(e){this.setState({otherChecked:e.target.checked})}render(){let e,t=this.props,{onChange:a,value:r,className:s,options:l,id:i,children:u,error:p,disabled:h,name:b,ariaLabelledBy:g}=t,{otherChecked:f}=(n()(t,m),this.state),v=this.props.hasOwnProperty("inline"),y=this.props.hasOwnProperty("html"),_=this.props.hasOwnProperty("allowOther"),q=!!r&&r.find((e=>!l.map((e=>e.value)).includes(e))),E=this.props.hasOwnProperty("error")&&""!==p,C=this.props.hasOwnProperty("disabled")&&1==h;return e=v?{paddingLeft:"22px",marginLeft:"20px",float:"left"}:{paddingLeft:"22px",marginTop:"7px"},o().createElement("div",{id:`chl_wrapper_${i}`,"aria-labelledby":g},o().createElement("div",{className:"checkboxes-div"+(E?" error":"")},l.map((t=>{let a=!!r&&r.includes(t.value);return o().createElement("div",{className:"form-check abc-checkbox",key:"radio_key_"+t.value,style:e},o().createElement("input",{type:"checkbox",id:`cb_${i}_${t.value}`,name:b||i,checked:a,disabled:C,onChange:this.handleChange,className:"form-check-input",value:t.value}),o().createElement("label",{className:"form-check-label",htmlFor:`cb_${i}_${t.value}`},y&&o().createElement(d.default,null,t.label),!y&&t.label))})),_&&o().createElement("div",{className:"form-check abc-checkbox",style:e},o().createElement("input",{type:"checkbox",id:"cb_other"+i,checked:f,disabled:C,onChange:this.handleOtherCBChange,className:"form-check-input",value:"other"}),o().createElement("label",{className:"form-check-label",htmlFor:"cb_other"+i},c().translate("general.other"))),_&&f&&o().createElement("div",{style:{paddingLeft:"22px",width:"50%"}},o().createElement("input",{className:"form-control",disabled:C,onChange:this.handleChange,value:q}))),E&&o().createElement("p",{className:"error-label"},p))}}p.defaultProps={ariaLabelledBy:null},p.propTypes={id:l().string.isRequired}},401:(e,t,a)=>{a.d(t,{default:()=>g});var r=a(8213),n=a.n(r),s=a(8779),l=a.n(s),i=a(3838),o=a.n(i),u=a(6689),c=a.n(u),d=a(1929),m=a.n(d);const p=["onChange","value","className","error","clearable","disabled","overrideCSS","ariaLabelledBy"];function h(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function b(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?h(Object(a),!0).forEach((function(t){l()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):h(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}class g extends c().Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(e){let t=null;t=this.props.isMulti?e?e.map((e=>e.value)):null:e?e.value:null;let a={target:{id:this.props.id,value:t,type:"dropdown"}};this.props.onChange(a)}render(){let e=this.props,{onChange:t,value:a,className:r,error:s,clearable:l,disabled:i,overrideCSS:u,ariaLabelledBy:d}=e,h=o()(e,p),g=this.props.hasOwnProperty("error")&&""!=s,f=this.props.hasOwnProperty("clearable"),v=this.props.hasOwnProperty("disabled")&&1==i,y=null,_=r;this.props.hasOwnProperty("overrideCSS")&&0!=u||(_="dropdown "+r+" "+(g?"error":"")),y=this.props.isMulti?this.props.options.filter((e=>a.includes(e.value))):a instanceof Object||null==a?a:this.props.options.find((e=>e.value==a));const q={menu:e=>b(b({},e),{},{zIndex:999})};return c().createElement("div",null,c().createElement(m(),n()({className:_,value:y,onChange:this.handleChange,isClearable:f,isDisabled:v,styles:q,"aria-labelledby":d},h)),g&&c().createElement("p",{className:"error-label"},s))}}g.defaultProps={ariaLabelledBy:null}},7027:(e,t,a)=>{a.d(t,{default:()=>d});var r=a(3838),n=a.n(r),s=a(6689),l=a.n(s),i=a(418),o=a(580),u=a.n(o);const c=["onChange","value","className","error","ariaLabelledBy","disabled","options","id","name"];class d extends l().Component{constructor(e){super(e),this.state={value:e.value},this.handleChange=this.handleChange.bind(this)}handleChange(e){let t={target:{id:this.props.id,value:e.target.value,type:"radio"}};this.props.onChange(t)}getLabel(e,t,a,r,n){return a?l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`,style:{display:"inline-block"}},n&&l().createElement(i.default,null,e.label),!n&&e.label):r?l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`},e.label):l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`,style:{display:"inline-block"}},l().createElement("h4",{style:{marginTop:"0px"}},e.label),l().createElement(i.default,null,e.description))}render(){let e,t=this.props,{onChange:a,value:r,className:s,error:i,ariaLabelledBy:o,disabled:u,options:d,id:m,name:p}=t,h=(n()(t,c),this.props.hasOwnProperty("error")&&""!=i),b=this.props.hasOwnProperty("inline"),g=this.props.hasOwnProperty("simple"),f=this.props.hasOwnProperty("html"),v=this.props.hasOwnProperty("disabled")&&1==u;return e=b?{paddingLeft:"22px",marginLeft:"20px",float:"left"}:{paddingLeft:"22px"},l().createElement("div",{id:`rl_wrapper_${m}`,"aria-labelledby":o},d.map((t=>{let a=t.value==r;return l().createElement("div",{className:"form-check abc-radio",key:`radio_key_${m}_${t.value}`,style:e},l().createElement("input",{className:"form-check-input",type:"radio",id:`radio_${m}_${t.value}`,value:t.value,checked:a,onChange:this.handleChange,disabled:v,name:p||`radio_${m}`}),this.getLabel(t,m,b,g,f))})),h&&l().createElement("p",{className:"error-label"},i))}}d.defaultProps={ariaLabelledBy:null},d.propTypes={id:u().string.isRequired}},1833:(e,t,a)=>{a.d(t,{default:()=>c});var r=a(8213),n=a.n(r),s=a(3838),l=a.n(s),i=a(6689),o=a.n(i);const u=["onChange","value","className","error","ariaLabelledBy","containerClassName"];class c extends o().Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}componentDidUpdate(e,t,a){this.props.value!==e.value&&(this.input.value=this.props.value)}handleChange(e){this.props.onChange(e)}render(){let e=this.props,{onChange:t,value:a,className:r,error:s,ariaLabelledBy:i,containerClassName:c}=e,d=l()(e,u),m=this.props.hasOwnProperty("error")&&""!==s,p=this.props.hasOwnProperty("className")?r:"form-control",h=this.props.hasOwnProperty("containerClassName")?c:"container-form-control";return o().createElement("div",{className:h},o().createElement("input",n()({className:`${p} ${m?"error":""}`,ref:e=>{this.input=e},defaultValue:a,"aria-labelledby":i,onChange:this.handleChange},d)),m&&o().createElement("p",{className:"error-label"},s))}}c.defaultProps={ariaLabelledBy:null}},418:(e,t,a)=>{a.d(t,{default:()=>s});var r=a(6689),n=a.n(r);const s=({children:e,replaceNewLine:t=!1,className:a=""})=>n().createElement("span",{className:a,dangerouslySetInnerHTML:{__html:t?null==e?void 0:e.replace(/\n/g,"<br />"):e}})},6793:(e,t,a)=>{a.d(t,{toSlug:()=>r});a(8362),a(6530);const r=e=>(e=e.toLowerCase()).replace(/[^a-zA-Z0-9]+/g,"_")},1995:(e,t,a)=>{a.d(t,{default:()=>h});var r=a(8779),n=a.n(r),s=a(6793);function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){n()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}const o="ComboBox",u="CheckBoxList",c="RadioButtonList",d=[o,u,c],m="And",p="Equal";class h{constructor(e,t=[]){n()(this,"_parseQuestion",(e=>{if(this.questionByName[(0,s.toSlug)(e.name)]=e,this.questionById[parseInt(e.id)]=e,e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules)this.rules[parseInt(t.id)]=t,this._parseQuestion(t.sub_question)})),n()(this,"_parseQuestions",(()=>{for(let e of this.questions)this._parseQuestion(e)})),n()(this,"_allowsValues",(e=>d.includes(e.type))),n()(this,"_allowsValue",((e,t)=>{let a=t.value.split(",").map((e=>parseInt(e)));for(let t of a)if(!e.values.map((e=>e.id)).includes(t))return!1;return!0})),n()(this,"_getAnswerFor",(e=>{let t=Number.isInteger(e)?e:e.id,a=this.answers[t]||null;return a||null})),n()(this,"_hasValue",(e=>""!==e.value)),n()(this,"_answerContains",((e,t)=>e.value.split(",").includes(t))),n()(this,"_isSubQuestionVisible",(e=>{let t=e.answer_values_operator===m;const a=this._getAnswerFor(e.parent_question_id);if(a)switch(e.visibility_condition){case p:for(let r of e.answer_values)t=e.answer_values_operator===m?t&&this._answerContains(a,r):t||this._answerContains(a,r);break;case"NotEqual":for(let r of e.answer_values)t=e.answer_values_operator===m?t&&!this._answerContains(a,r):t||!this._answerContains(a,r)}else t=e.visibility_condition!==p;return"Visible"===e.visibility?t:!t})),n()(this,"_isAnswered",(e=>{const t=this._getAnswerFor(e);if("MainQuestion"===e.class)return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));for(let a of e.parent_rules)if(this._isSubQuestionVisible(this.rules[a]))return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));return!0})),n()(this,"_checkQuestion",(e=>{let t=this._isAnswered(e);if(e.hasOwnProperty("sub_question_rules"))for(let a of e.sub_question_rules)t=t&&this._checkQuestion(a.sub_question);return t})),n()(this,"_formatQuestionAnswer",(e=>{var t,a;let r={};const n=(0,s.toSlug)(e.name);let l=null===(t=this.originalAnswers.find((t=>t.question_id===e.id)))||void 0===t?void 0:t.value;if(!l&&(null==e||null===(a=e.values)||void 0===a?void 0:a.length)>0){const t=e.values.find((e=>e.is_default));t&&(l=t.id.toString())}if(l&&("CheckBox"===e.type&&(l="false"!==l&&!!l),e.type!==c&&e.type!==o||(l=parseInt(l)),e.type===u&&(l=l.split(",").map((e=>parseInt(e)))||[])),r[n]=l||"",e.type===u&&""===r[n]&&(r[n]=[]),e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules){let e=this._formatQuestionAnswer(t.sub_question);r=i(i({},r),e)}return r})),n()(this,"formatAnswers",(()=>{let e={};return this.questions.forEach((t=>{let a=this._formatQuestionAnswer(t);e=i(i({},e),a)})),e})),n()(this,"completed",(()=>{let e=!0;for(let t of this.questions)e=e&&this._checkQuestion(t);return e})),n()(this,"getQuestionByName",(e=>{const t=(0,s.toSlug)(e);return this.questionByName[e]||this.questionByName[t]||null})),n()(this,"getQuestionById",(e=>this.questionById[parseInt(e)]||null)),this.questions=e,this.originalAnswers=t,this.answers=[];for(let e of this.originalAnswers)this.answers[e.question_id]=e;this.questionByName={},this.questionById={},this.rules={},this._parseQuestions()}}},8779:e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},8213:e=>{e.exports=require("@babel/runtime/helpers/extends")},3838:e=>{e.exports=require("@babel/runtime/helpers/objectWithoutProperties")},4656:e=>{e.exports=require("i18n-react/dist/i18n-react")},8362:e=>{e.exports=require("moment-timezone")},580:e=>{e.exports=require("prop-types")},6689:e=>{e.exports=require("react")},1929:e=>{e.exports=require("react-select")},6530:e=>{e.exports=require("urijs")}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,a),s.exports}(()=>{a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t}})(),(()=>{a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}})(),(()=>{a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})();var r={};return(()=>{a.r(r),a.d(r,{default:()=>x});var e=a(8213),t=a.n(e),n=a(3838),s=a.n(n),l=a(6689),i=a.n(l),o=a(580),u=a.n(o),c=a(418),d=a(1833),m=a(401),p=a(7027),h=a(2230),b=a(1995);const g=require("react-final-form");var f=a(6793);const v=["input","meta","question","className","isDisabled","isRequired"],y=["input","meta","question","isDisabled","isRequired"],_=["input","meta","question","isDisabled","isRequired"],q=["input","meta","question","isDisabled","isRequired","maxValues"],E=e=>{let{input:a,meta:r,question:n,className:l,isDisabled:o,isRequired:u}=e,c=s()(e,v);return i().createElement(d.default,t()({},a,c,{containerClassName:l,name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,id:(0,f.toSlug)(n.name),value:a.value,disabled:o,required:u,onChange:a.onChange,placeholder:n.placeholder}))},C=e=>{let{input:a,meta:r,question:n,isDisabled:l,isRequired:o}=e,u=s()(e,y);return i().createElement(p.default,t()({},a,u,{name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,id:(0,f.toSlug)(n.name),overrideCSS:!0,value:a.value,disabled:l,required:o,onChange:a.onChange}))},w=e=>{let{input:a,meta:r,question:n,isDisabled:l,isRequired:o}=e,u=s()(e,_);return i().createElement(m.default,t()({},a,u,{name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,id:(0,f.toSlug)(n.name),overrideCSS:!0,className:"ddl-extra-questions-container",classNamePrefix:"ddl-extra-questions",value:a.value,disabled:l,required:o,onChange:a.onChange}))},N=e=>{let{input:a,meta:r,question:n,isDisabled:l,isRequired:o,maxValues:u}=e,c=s()(e,q);return i().createElement(h.default,t()({},a,c,{id:(0,f.toSlug)(n.name),name:(0,f.toSlug)(n.name),ariaLabelledBy:`${(0,f.toSlug)(n.name)} label`,value:a.value,disabled:l,required:o,onChange:e=>{const t=e.target.value;return u>0&&t.length>u?null:a.onChange(e)}}))},S=e=>e?e=>e?void 0:"Required":()=>{},O=i().forwardRef((({extraQuestions:e,userAnswers:t,onAnswerChanges:a,className:r="questions-form",questionContainerClassName:n="question-container",questionLabelContainerClassName:s="question-label-container",questionControlContainerClassName:o="question-control-container",readOnly:u=!1,debug:d=!1,buttonText:m="Submit",RequiredErrorMessage:p="Required",ValidationErrorClassName:h="extra-question-error",allowExtraQuestionsEdit:v=!0,onError:y=(e=>console.log("form errors: ",e)),shouldScroll2FirstError:_=!0},q)=>{let O=null;const x=(0,l.useRef)({}),k=(0,l.useRef)(null),[P,L]=(0,l.useState)({});(0,l.useEffect)((()=>{B()}),[e]),(0,l.useImperativeHandle)(q,(()=>({doSubmit(){k.current.dispatchEvent(new Event("submit",{cancelable:!0,bubbles:!0}))}})));const B=()=>{const a=new b.default(e,t);L(a.formatAnswers())},j=({when:e,rule:t,children:a})=>i().createElement(g.Field,{name:e,subscription:{value:!0}},(({input:{value:e}})=>R(t,$(e,t),a))),F=({name:e})=>i().createElement(g.Field,{name:e,subscription:{error:!0,touched:!0}},(({meta:{error:e,touched:t}})=>e&&t?i().createElement("div",{className:h},e):null)),$=(e,t)=>{let a=t.answer_values;if(Array.isArray(e)){if(!e.length)return!1;let r="And"===t.answer_values_operator;return a.forEach((a=>{r="And"===t.answer_values_operator?r&&e.includes(parseInt(a)):r||e.includes(parseInt(a))})),r}return a.includes(e.toString())},R=(e,t,a)=>"Visible"===e.visibility?"Equal"===e.visibility_condition?t?a:(delete x.current[e.sub_question.id],null):t?(delete x.current[e.sub_question.id],null):a:"Equal"===e.visibility_condition?t?(delete x.current[e.sub_question.id],null):a:t?a:(delete x.current[e.sub_question.id],null),A=e=>{const t=String.fromCharCode(160),a=document.createElement("div");a.innerHTML=e.label;const r=a.innerText||a.textContent||"",n=e.mandatory?`${r}${t}<b>*</b>`:r;return`<label id="${(0,f.toSlug)(e.name)} label" htmlFor="${(0,f.toSlug)(e.name)}">\n ${n}\n </label>`},D=e=>{let t=e.values;const a=!v&&((e,t)=>{const a=(0,f.toSlug)(e.name);if(!t.hasOwnProperty(a))return!1;const r=t[a];return Array.isArray(r)||"string"==typeof r?r.length>0:"number"==typeof r?r>0:"boolean"==typeof r&&r})(e,P);var r,u,d;if("Text"===e.type)return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>x.current[e.id]=t,className:n},i().createElement(c.default,{replaceNewLine:!0,className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),question:e,isDisabled:a,isRequired:e.mandatory,validate:S(e.mandatory),component:E}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(r=e.sub_question_rules)||void 0===r?void 0:r.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("TextArea"===e.type)return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>x.current[e.id]=t,className:n},i().createElement(c.default,{replaceNewLine:!0,className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{validate:S(e.mandatory),name:(0,f.toSlug)(e.name),id:(0,f.toSlug)(e.name),disabled:a,required:e.mandatory,component:"textarea"}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(u=e.sub_question_rules)||void 0===u?void 0:u.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("CheckBox"===e.type)return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>x.current[e.id]=t,style:{display:"flex"},className:n},i().createElement(c.default,{replaceNewLine:!0,className:`eq-checkbox-label ${s}`},A(e)),i().createElement("div",{className:o},i().createElement("div",{className:"form-check abc-checkbox"},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),id:(0,f.toSlug)(e.name),validate:S(e.mandatory),disabled:a,required:e.mandatory,type:"checkbox",className:"form-check-input",component:"input"}),i().createElement("label",{className:"form-check-label",htmlFor:(0,f.toSlug)(e.name)}),i().createElement(F,{name:(0,f.toSlug)(e.name)})))),(null===(d=e.sub_question_rules)||void 0===d?void 0:d.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("RadioButtonList"===e.type){var m;const r=t.map((e=>({label:e.label,value:e.id})));return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{key:(0,f.toSlug)(e.name),ref:t=>x.current[e.id]=t,className:n},i().createElement(c.default,{replaceNewLine:!0,className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),options:r,question:e,validate:S(e.mandatory),isDisabled:a,isRequired:e.mandatory,component:C}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(m=e.sub_question_rules)||void 0===m?void 0:m.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}if("ComboBox"===e.type||"CountryComboBox"===e.type){var p;const r=t.map((e=>({label:e.label,value:e.id})));return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>x.current[e.id]=t,className:n},i().createElement(c.default,{replaceNewLine:!0,className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),options:r,question:e,validate:S(e.mandatory),isDisabled:a,isRequired:e.mandatory,component:w}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(p=e.sub_question_rules)||void 0===p?void 0:p.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}if("CheckBoxList"===e.type){var h;const r=t.map((e=>({label:e.label,value:e.id})));return i().createElement(l.Fragment,{key:(0,f.toSlug)(e.name)},i().createElement("div",{ref:t=>x.current[e.id]=t,className:n},i().createElement(c.default,{replaceNewLine:!0,className:s},A(e)),i().createElement("div",{className:o},i().createElement(g.Field,{name:(0,f.toSlug)(e.name),className:o,validate:S(e.mandatory),options:r,question:e,maxValues:e.max_selected_values,isDisabled:a,isRequired:e.mandatory,component:N}),i().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(h=e.sub_question_rules)||void 0===h?void 0:h.length)>0&&e.sub_question_rules.map((t=>i().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}return null},V=(e,t,a)=>{var r;if(e.mandatory&&(e=>!!x.current[e.id])(e)){const r=(0,f.toSlug)(e.name);t.hasOwnProperty((0,f.toSlug)(r))&&""!==t[(0,f.toSlug)(r)]&&0!==t[r].length||(a[r]=p)}null===(r=e.sub_question_rules)||void 0===r||r.forEach((e=>{V(e.sub_question,t,a)}))};if(!Object.keys(P).length)return null;const Q=(e,t,a)=>{var r;t.includes((0,f.toSlug)(e.name))&&a.push(e),null===(r=e.sub_question_rules)||void 0===r||r.forEach((e=>{Q(e.sub_question,t,a)}))},I=t=>{const a=[];return e.forEach((e=>{Q(e,t,a)})),a.sort(((e,t)=>e.order>t.order))[0]};return Object.keys(P).length?i().createElement("div",{className:r},i().createElement(g.Form,{validate:t=>{const a={};return e.forEach((e=>{V(e,t,a)})),a},onSubmit:e=>{a(e)},initialValues:P},(({handleSubmit:t,form:a,submitting:r,pristine:n,values:s})=>(O=t,i().createElement("form",{onSubmit:e=>{const r=a.getRegisteredFields().filter((e=>a.getFieldState(e).invalid));if(r.length>0){const e=I(r);y(r,x.current[e.id]),_&&(e=>{const t=I(e);x.current[t.id].scrollIntoView({behavior:"smooth",block:"center"})})(r)}t(e)},ref:k},u?i().createElement("fieldset",{disabled:"disabled"},e.map((e=>D(e)))):e.map((e=>D(e))),d&&i().createElement("pre",null,JSON.stringify(s,0,2)))))),!q&&i().createElement("button",{type:"submit",onClick:e=>{O(e)},style:{marginTop:10}},m)):null}));O.propTypes={extraQuestions:u().array.isRequired,userAnswers:u().array.isRequired,onAnswerChanges:u().func.isRequired,className:u().string,debug:u().bool,buttonText:u().string,questionContainerClassName:u().string,questionLabelContainerClassName:u().string,questionControlContainerClassName:u().string,RequiredErrorMessage:u().string,ValidationErrorClassName:u().string,allowExtraQuestionsEdit:u().bool,shouldScroll2FirstError:u().bool};const x=O})(),r})()));
2
- //# sourceMappingURL=extra-questions.js.map
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define("openstack-uicore-foundation", [], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["openstack-uicore-foundation"] = factory();
8
+ else
9
+ root["openstack-uicore-foundation"] = factory();
10
+ })(this, () => {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ "./src/components/extra-questions/constants.js":
16
+ /*!*****************************************************!*\
17
+ !*** ./src/components/extra-questions/constants.js ***!
18
+ \*****************************************************/
19
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20
+
21
+ __webpack_require__.r(__webpack_exports__);
22
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23
+ /* harmony export */ "QuestionType_CheckBoxList": () => (/* binding */ QuestionType_CheckBoxList),
24
+ /* harmony export */ "QuestionType_Checkbox": () => (/* binding */ QuestionType_Checkbox),
25
+ /* harmony export */ "QuestionType_ComboBox": () => (/* binding */ QuestionType_ComboBox),
26
+ /* harmony export */ "QuestionType_CountryComboBox": () => (/* binding */ QuestionType_CountryComboBox),
27
+ /* harmony export */ "QuestionType_RadioButtonList": () => (/* binding */ QuestionType_RadioButtonList),
28
+ /* harmony export */ "QuestionType_Text": () => (/* binding */ QuestionType_Text),
29
+ /* harmony export */ "QuestionType_TextArea": () => (/* binding */ QuestionType_TextArea)
30
+ /* harmony export */ });
31
+ const QuestionType_Text = "Text";
32
+ const QuestionType_TextArea = "TextArea";
33
+ const QuestionType_Checkbox = "CheckBox";
34
+ const QuestionType_RadioButtonList = "RadioButtonList";
35
+ const QuestionType_ComboBox = "ComboBox";
36
+ const QuestionType_CheckBoxList = "CheckBoxList";
37
+ const QuestionType_CountryComboBox = "CountryComboBox";
38
+
39
+ /***/ }),
40
+
41
+ /***/ "./src/components/inputs/checkbox-list.js":
42
+ /*!************************************************!*\
43
+ !*** ./src/components/inputs/checkbox-list.js ***!
44
+ \************************************************/
45
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46
+
47
+ __webpack_require__.r(__webpack_exports__);
48
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49
+ /* harmony export */ "default": () => (/* binding */ CheckboxList)
50
+ /* harmony export */ });
51
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
52
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);
53
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
54
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
55
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
56
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
57
+ /* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n-react/dist/i18n-react */ "i18n-react/dist/i18n-react");
58
+ /* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3__);
59
+ /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
60
+
61
+ const _excluded = ["onChange", "value", "className", "options", "id", "children", "error", "disabled", "name", "ariaLabelledBy"];
62
+
63
+ /**
64
+ * Copyright 2018 OpenStack Foundation
65
+ * Licensed under the Apache License, Version 2.0 (the "License");
66
+ * you may not use this file except in compliance with the License.
67
+ * You may obtain a copy of the License at
68
+ * http://www.apache.org/licenses/LICENSE-2.0
69
+ * Unless required by applicable law or agreed to in writing, software
70
+ * distributed under the License is distributed on an "AS IS" BASIS,
71
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
72
+ * See the License for the specific language governing permissions and
73
+ * limitations under the License.
74
+ **/
75
+
76
+
77
+
78
+
79
+ class CheckboxList extends (react__WEBPACK_IMPORTED_MODULE_2___default().Component) {
80
+ constructor(props) {
81
+ super(props);
82
+ let otherValue = props.value ? props.value.find(v => !props.options.map(op => op.value).includes(v)) : false;
83
+ this.state = {
84
+ otherChecked: !!otherValue
85
+ };
86
+ this.handleChange = this.handleChange.bind(this);
87
+ this.handleOtherCBChange = this.handleOtherCBChange.bind(this);
88
+ }
89
+
90
+ handleChange(event) {
91
+ let optionValues = this.props.options.map(op => op.value);
92
+ let value = this.props.value ? [...this.props.value] : [];
93
+
94
+ if (event.target.type === 'checkbox') {
95
+ if (event.target.checked) {
96
+ const theVal = isNaN(event.target.value) ? event.target.value : parseInt(event.target.value);
97
+ value.push(theVal);
98
+ } else {
99
+ value = value.filter(v => v != event.target.value);
100
+ }
101
+ } else {
102
+ value = value.filter(v => optionValues.includes(v));
103
+ value.push(event.target.value);
104
+ }
105
+
106
+ let ev = {
107
+ target: {
108
+ id: this.props.id,
109
+ value: value,
110
+ type: 'checkboxlist'
111
+ }
112
+ };
113
+ this.props.onChange(ev);
114
+ }
115
+
116
+ handleOtherCBChange(event) {
117
+ this.setState({
118
+ otherChecked: event.target.checked
119
+ });
120
+ }
121
+
122
+ render() {
123
+ let _this$props = this.props,
124
+ {
125
+ onChange,
126
+ value,
127
+ className,
128
+ options,
129
+ id,
130
+ children,
131
+ error,
132
+ disabled,
133
+ name,
134
+ ariaLabelledBy
135
+ } = _this$props,
136
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(_this$props, _excluded);
137
+
138
+ let {
139
+ otherChecked
140
+ } = this.state;
141
+ let inline = this.props.hasOwnProperty('inline');
142
+ let html = this.props.hasOwnProperty('html');
143
+ let allowOther = this.props.hasOwnProperty('allowOther');
144
+ let otherValue = value ? value.find(v => !options.map(op => op.value).includes(v)) : false;
145
+ let has_error = this.props.hasOwnProperty('error') && error !== '';
146
+ let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
147
+ let style, label;
148
+
149
+ if (inline) {
150
+ style = {
151
+ paddingLeft: '22px',
152
+ marginLeft: '20px',
153
+ float: 'left'
154
+ };
155
+ } else {
156
+ style = {
157
+ paddingLeft: '22px',
158
+ marginTop: '7px'
159
+ };
160
+ }
161
+
162
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
163
+ id: `chl_wrapper_${id}`,
164
+ "aria-labelledby": ariaLabelledBy
165
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
166
+ className: "checkboxes-div" + (has_error ? ' error' : '')
167
+ }, options.map(op => {
168
+ let checked = value ? value.includes(op.value) : false;
169
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
170
+ className: "form-check abc-checkbox",
171
+ key: "radio_key_" + op.value,
172
+ style: style
173
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
174
+ type: "checkbox",
175
+ id: `cb_${id}_${op.value}`,
176
+ name: name ? name : id,
177
+ checked: checked,
178
+ disabled: isDisabled,
179
+ onChange: this.handleChange,
180
+ className: "form-check-input",
181
+ value: op.value
182
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
183
+ className: "form-check-label",
184
+ htmlFor: `cb_${id}_${op.value}`
185
+ }, html && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], null, op.label), !html && op.label));
186
+ }), allowOther && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
187
+ className: "form-check abc-checkbox",
188
+ style: style
189
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
190
+ type: "checkbox",
191
+ id: "cb_other" + id,
192
+ checked: otherChecked,
193
+ disabled: isDisabled,
194
+ onChange: this.handleOtherCBChange,
195
+ className: "form-check-input",
196
+ value: "other"
197
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
198
+ className: "form-check-label",
199
+ htmlFor: "cb_other" + id
200
+ }, i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3___default().translate("general.other"))), allowOther && otherChecked && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
201
+ style: {
202
+ paddingLeft: '22px',
203
+ width: '50%'
204
+ }
205
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
206
+ className: "form-control",
207
+ disabled: isDisabled,
208
+ onChange: this.handleChange,
209
+ value: otherValue
210
+ }))), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("p", {
211
+ className: "error-label"
212
+ }, error));
213
+ }
214
+
215
+ }
216
+ CheckboxList.defaultProps = {
217
+ ariaLabelledBy: null
218
+ };
219
+ CheckboxList.propTypes = {
220
+ id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string.isRequired)
221
+ };
222
+
223
+ /***/ }),
224
+
225
+ /***/ "./src/components/inputs/dropdown.js":
226
+ /*!*******************************************!*\
227
+ !*** ./src/components/inputs/dropdown.js ***!
228
+ \*******************************************/
229
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
230
+
231
+ __webpack_require__.r(__webpack_exports__);
232
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
233
+ /* harmony export */ "default": () => (/* binding */ Dropdown)
234
+ /* harmony export */ });
235
+ /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
236
+ /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
237
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
238
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);
239
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
240
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
241
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
242
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
243
+ /* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-select */ "react-select");
244
+ /* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_select__WEBPACK_IMPORTED_MODULE_4__);
245
+
246
+
247
+
248
+ const _excluded = ["onChange", "value", "className", "error", "clearable", "disabled", "overrideCSS", "ariaLabelledBy"];
249
+
250
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
251
+
252
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
253
+
254
+ /**
255
+ * Copyright 2017 OpenStack Foundation
256
+ * Licensed under the Apache License, Version 2.0 (the "License");
257
+ * you may not use this file except in compliance with the License.
258
+ * You may obtain a copy of the License at
259
+ * http://www.apache.org/licenses/LICENSE-2.0
260
+ * Unless required by applicable law or agreed to in writing, software
261
+ * distributed under the License is distributed on an "AS IS" BASIS,
262
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
263
+ * See the License for the specific language governing permissions and
264
+ * limitations under the License.
265
+ **/
266
+
267
+
268
+ class Dropdown extends (react__WEBPACK_IMPORTED_MODULE_3___default().Component) {
269
+ constructor(props) {
270
+ super(props);
271
+ this.handleChange = this.handleChange.bind(this);
272
+ }
273
+
274
+ handleChange(selection) {
275
+ let value = null;
276
+
277
+ if (this.props.isMulti) {
278
+ value = selection ? selection.map(val => val.value) : null;
279
+ } else {
280
+ value = selection ? selection.value : null;
281
+ }
282
+
283
+ let ev = {
284
+ target: {
285
+ id: this.props.id,
286
+ value: value,
287
+ type: 'dropdown'
288
+ }
289
+ };
290
+ this.props.onChange(ev);
291
+ }
292
+
293
+ render() {
294
+ let _this$props = this.props,
295
+ {
296
+ onChange,
297
+ value,
298
+ className,
299
+ error,
300
+ clearable,
301
+ disabled,
302
+ overrideCSS,
303
+ ariaLabelledBy
304
+ } = _this$props,
305
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(_this$props, _excluded);
306
+
307
+ let has_error = this.props.hasOwnProperty('error') && error != '';
308
+ let isClearable = this.props.hasOwnProperty('clearable');
309
+ let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
310
+ let theValue = null;
311
+ let selectClassName = className;
312
+
313
+ if (!this.props.hasOwnProperty('overrideCSS') || overrideCSS == false) {
314
+ selectClassName = 'dropdown ' + className + ' ' + (has_error ? 'error' : '');
315
+ }
316
+
317
+ if (this.props.isMulti) {
318
+ theValue = this.props.options.filter(op => value.includes(op.value));
319
+ } else {
320
+ theValue = value instanceof Object || value == null ? value : this.props.options.find(opt => opt.value == value);
321
+ }
322
+
323
+ const selectStyles = {
324
+ menu: styles => _objectSpread(_objectSpread({}, styles), {}, {
325
+ zIndex: 999
326
+ })
327
+ };
328
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react_select__WEBPACK_IMPORTED_MODULE_4___default()), _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({
329
+ className: selectClassName,
330
+ value: theValue,
331
+ onChange: this.handleChange,
332
+ isClearable: isClearable,
333
+ isDisabled: isDisabled,
334
+ styles: selectStyles,
335
+ "aria-labelledby": ariaLabelledBy
336
+ }, rest)), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement("p", {
337
+ className: "error-label"
338
+ }, error));
339
+ }
340
+
341
+ }
342
+ Dropdown.defaultProps = {
343
+ ariaLabelledBy: null
344
+ };
345
+
346
+ /***/ }),
347
+
348
+ /***/ "./src/components/inputs/radio-list.js":
349
+ /*!*********************************************!*\
350
+ !*** ./src/components/inputs/radio-list.js ***!
351
+ \*********************************************/
352
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
353
+
354
+ __webpack_require__.r(__webpack_exports__);
355
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
356
+ /* harmony export */ "default": () => (/* binding */ RadioList)
357
+ /* harmony export */ });
358
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
359
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);
360
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
361
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
362
+ /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
363
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
364
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
365
+
366
+ const _excluded = ["onChange", "value", "className", "error", "ariaLabelledBy", "disabled", "options", "id", "name"];
367
+
368
+ /**
369
+ * Copyright 2018 OpenStack Foundation
370
+ * Licensed under the Apache License, Version 2.0 (the "License");
371
+ * you may not use this file except in compliance with the License.
372
+ * You may obtain a copy of the License at
373
+ * http://www.apache.org/licenses/LICENSE-2.0
374
+ * Unless required by applicable law or agreed to in writing, software
375
+ * distributed under the License is distributed on an "AS IS" BASIS,
376
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
377
+ * See the License for the specific language governing permissions and
378
+ * limitations under the License.
379
+ **/
380
+
381
+
382
+
383
+ class RadioList extends (react__WEBPACK_IMPORTED_MODULE_1___default().Component) {
384
+ constructor(props) {
385
+ super(props);
386
+ this.state = {
387
+ value: props.value
388
+ };
389
+ this.handleChange = this.handleChange.bind(this);
390
+ }
391
+
392
+ handleChange(selection) {
393
+ let ev = {
394
+ target: {
395
+ id: this.props.id,
396
+ value: selection.target.value,
397
+ type: 'radio'
398
+ }
399
+ };
400
+ this.props.onChange(ev);
401
+ }
402
+
403
+ getLabel(option, id, inline, simple, html) {
404
+ if (inline) {
405
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
406
+ className: "form-check-label",
407
+ htmlFor: `radio_${id}_${option.value}`,
408
+ style: {
409
+ display: 'inline-block'
410
+ }
411
+ }, html && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_2__["default"], null, option.label), !html && option.label);
412
+ } else if (simple) {
413
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
414
+ className: "form-check-label",
415
+ htmlFor: `radio_${id}_${option.value}`
416
+ }, option.label);
417
+ } else {
418
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
419
+ className: "form-check-label",
420
+ htmlFor: `radio_${id}_${option.value}`,
421
+ style: {
422
+ display: 'inline-block'
423
+ }
424
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("h4", {
425
+ style: {
426
+ marginTop: '0px'
427
+ }
428
+ }, option.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_2__["default"], null, option.description));
429
+ }
430
+ }
431
+
432
+ render() {
433
+ let _this$props = this.props,
434
+ {
435
+ onChange,
436
+ value,
437
+ className,
438
+ error,
439
+ ariaLabelledBy,
440
+ disabled,
441
+ options,
442
+ id,
443
+ name
444
+ } = _this$props,
445
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(_this$props, _excluded);
446
+
447
+ let has_error = this.props.hasOwnProperty('error') && error != '';
448
+ let inline = this.props.hasOwnProperty('inline');
449
+ let simple = this.props.hasOwnProperty('simple');
450
+ let html = this.props.hasOwnProperty('html');
451
+ let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
452
+ let style, label;
453
+
454
+ if (inline) {
455
+ style = {
456
+ paddingLeft: '22px',
457
+ marginLeft: '20px',
458
+ float: 'left'
459
+ };
460
+ } else {
461
+ style = {
462
+ paddingLeft: '22px'
463
+ };
464
+ }
465
+
466
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
467
+ id: `rl_wrapper_${id}`,
468
+ "aria-labelledby": ariaLabelledBy
469
+ }, options.map(op => {
470
+ let checked = op.value == value;
471
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
472
+ className: "form-check abc-radio",
473
+ key: `radio_key_${id}_${op.value}`,
474
+ style: style
475
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("input", {
476
+ className: "form-check-input",
477
+ type: "radio",
478
+ id: `radio_${id}_${op.value}`,
479
+ value: op.value,
480
+ checked: checked,
481
+ onChange: this.handleChange,
482
+ disabled: isDisabled,
483
+ name: name ? name : `radio_${id}`
484
+ }), this.getLabel(op, id, inline, simple, html));
485
+ }), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("p", {
486
+ className: "error-label"
487
+ }, error));
488
+ }
489
+
490
+ }
491
+ RadioList.defaultProps = {
492
+ ariaLabelledBy: null
493
+ };
494
+ RadioList.propTypes = {
495
+ id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string.isRequired)
496
+ };
497
+
498
+ /***/ }),
499
+
500
+ /***/ "./src/components/inputs/text-input.js":
501
+ /*!*********************************************!*\
502
+ !*** ./src/components/inputs/text-input.js ***!
503
+ \*********************************************/
504
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
505
+
506
+ __webpack_require__.r(__webpack_exports__);
507
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
508
+ /* harmony export */ "default": () => (/* binding */ Input)
509
+ /* harmony export */ });
510
+ /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
511
+ /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
512
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
513
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
514
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
515
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
516
+
517
+
518
+ const _excluded = ["onChange", "value", "className", "error", "ariaLabelledBy", "containerClassName"];
519
+
520
+ /**
521
+ * Copyright 2017 OpenStack Foundation
522
+ * Licensed under the Apache License, Version 2.0 (the "License");
523
+ * you may not use this file except in compliance with the License.
524
+ * You may obtain a copy of the License at
525
+ * http://www.apache.org/licenses/LICENSE-2.0
526
+ * Unless required by applicable law or agreed to in writing, software
527
+ * distributed under the License is distributed on an "AS IS" BASIS,
528
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
529
+ * See the License for the specific language governing permissions and
530
+ * limitations under the License.
531
+ **/
532
+
533
+ class Input extends (react__WEBPACK_IMPORTED_MODULE_2___default().Component) {
534
+ constructor(props) {
535
+ super(props);
536
+ this.handleChange = this.handleChange.bind(this);
537
+ }
538
+
539
+ componentDidUpdate(prevProps, prevState, snapshot) {
540
+ if (this.props.value !== prevProps.value) {
541
+ this.input.value = this.props.value;
542
+ }
543
+ }
544
+
545
+ handleChange(ev) {
546
+ this.props.onChange(ev);
547
+ }
548
+
549
+ render() {
550
+ let _this$props = this.props,
551
+ {
552
+ onChange,
553
+ value,
554
+ className,
555
+ error,
556
+ ariaLabelledBy,
557
+ containerClassName
558
+ } = _this$props,
559
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_this$props, _excluded);
560
+
561
+ let has_error = this.props.hasOwnProperty('error') && error !== '';
562
+ let class_name = this.props.hasOwnProperty('className') ? className : 'form-control';
563
+ let container_class_name = this.props.hasOwnProperty('containerClassName') ? containerClassName : 'container-form-control';
564
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
565
+ className: container_class_name
566
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({
567
+ className: `${class_name} ${has_error ? 'error' : ''}`,
568
+ ref: node => {
569
+ this.input = node;
570
+ },
571
+ defaultValue: value,
572
+ "aria-labelledby": ariaLabelledBy,
573
+ onChange: this.handleChange
574
+ }, rest)), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("p", {
575
+ className: "error-label"
576
+ }, error));
577
+ }
578
+
579
+ }
580
+ Input.defaultProps = {
581
+ ariaLabelledBy: null
582
+ };
583
+
584
+ /***/ }),
585
+
586
+ /***/ "./src/components/raw-html/index.js":
587
+ /*!******************************************!*\
588
+ !*** ./src/components/raw-html/index.js ***!
589
+ \******************************************/
590
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
591
+
592
+ __webpack_require__.r(__webpack_exports__);
593
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
594
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
595
+ /* harmony export */ });
596
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
597
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
598
+
599
+
600
+ const RawHTML = ({
601
+ children,
602
+ replaceNewLine = false,
603
+ className = ""
604
+ }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
605
+ className: className,
606
+ dangerouslySetInnerHTML: {
607
+ __html: replaceNewLine ? children === null || children === void 0 ? void 0 : children.replace(/\n/g, '<br />') : children
608
+ }
609
+ });
610
+
611
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RawHTML);
612
+
613
+ /***/ }),
614
+
615
+ /***/ "./src/utils/methods.js":
616
+ /*!******************************!*\
617
+ !*** ./src/utils/methods.js ***!
618
+ \******************************/
619
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
620
+
621
+ __webpack_require__.r(__webpack_exports__);
622
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
623
+ /* harmony export */ "arraysEqual": () => (/* binding */ arraysEqual),
624
+ /* harmony export */ "base64URLEncode": () => (/* binding */ base64URLEncode),
625
+ /* harmony export */ "buildAPIBaseUrl": () => (/* binding */ buildAPIBaseUrl),
626
+ /* harmony export */ "convertSVGtoImg": () => (/* binding */ convertSVGtoImg),
627
+ /* harmony export */ "epochToMoment": () => (/* binding */ epochToMoment),
628
+ /* harmony export */ "epochToMomentTimeZone": () => (/* binding */ epochToMomentTimeZone),
629
+ /* harmony export */ "findElementPos": () => (/* binding */ findElementPos),
630
+ /* harmony export */ "formatEpoch": () => (/* binding */ formatEpoch),
631
+ /* harmony export */ "getAllowedUserGroups": () => (/* binding */ getAllowedUserGroups),
632
+ /* harmony export */ "getAuthCallback": () => (/* binding */ getAuthCallback),
633
+ /* harmony export */ "getBackURL": () => (/* binding */ getBackURL),
634
+ /* harmony export */ "getCurrentHref": () => (/* binding */ getCurrentHref),
635
+ /* harmony export */ "getCurrentLocation": () => (/* binding */ getCurrentLocation),
636
+ /* harmony export */ "getCurrentPathName": () => (/* binding */ getCurrentPathName),
637
+ /* harmony export */ "getCurrentUserLanguage": () => (/* binding */ getCurrentUserLanguage),
638
+ /* harmony export */ "getEventHosts": () => (/* binding */ getEventHosts),
639
+ /* harmony export */ "getEventLocation": () => (/* binding */ getEventLocation),
640
+ /* harmony export */ "getFromLocalStorage": () => (/* binding */ getFromLocalStorage),
641
+ /* harmony export */ "getOrigin": () => (/* binding */ getOrigin),
642
+ /* harmony export */ "getTimeServiceUrl": () => (/* binding */ getTimeServiceUrl),
643
+ /* harmony export */ "hasErrors": () => (/* binding */ hasErrors),
644
+ /* harmony export */ "isClearingSessionState": () => (/* binding */ isClearingSessionState),
645
+ /* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
646
+ /* harmony export */ "objectToQueryString": () => (/* binding */ objectToQueryString),
647
+ /* harmony export */ "parseLocationHour": () => (/* binding */ parseLocationHour),
648
+ /* harmony export */ "putOnLocalStorage": () => (/* binding */ putOnLocalStorage),
649
+ /* harmony export */ "removeFromLocalStorage": () => (/* binding */ removeFromLocalStorage),
650
+ /* harmony export */ "retryPromise": () => (/* binding */ retryPromise),
651
+ /* harmony export */ "scrollToError": () => (/* binding */ scrollToError),
652
+ /* harmony export */ "setSessionClearingState": () => (/* binding */ setSessionClearingState),
653
+ /* harmony export */ "shallowEqual": () => (/* binding */ shallowEqual),
654
+ /* harmony export */ "toSlug": () => (/* binding */ toSlug)
655
+ /* harmony export */ });
656
+ /* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-timezone */ "moment-timezone");
657
+ /* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_timezone__WEBPACK_IMPORTED_MODULE_0__);
658
+ /* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! urijs */ "urijs");
659
+ /* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(urijs__WEBPACK_IMPORTED_MODULE_1__);
660
+ /**
661
+ * Copyright 2018 OpenStack Foundation
662
+ * Licensed under the Apache License, Version 2.0 (the "License");
663
+ * you may not use this file except in compliance with the License.
664
+ * You may obtain a copy of the License at
665
+ * http://www.apache.org/licenses/LICENSE-2.0
666
+ * Unless required by applicable law or agreed to in writing, software
667
+ * distributed under the License is distributed on an "AS IS" BASIS,
668
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
669
+ * See the License for the specific language governing permissions and
670
+ * limitations under the License.
671
+ **/
672
+
673
+
674
+ const findElementPos = obj => {
675
+ var curtop = -70;
676
+
677
+ if (obj.offsetParent) {
678
+ do {
679
+ curtop += obj.offsetTop;
680
+ } while (obj = obj.offsetParent);
681
+
682
+ return [curtop];
683
+ }
684
+ };
685
+ const epochToMoment = atime => {
686
+ if (!atime) return atime;
687
+ atime = atime * 1000;
688
+ return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime);
689
+ };
690
+ const epochToMomentTimeZone = (atime, time_zone) => {
691
+ if (!atime) return atime;
692
+ atime = atime * 1000;
693
+ return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime).tz(time_zone);
694
+ };
695
+ const formatEpoch = (atime, format = 'M/D/YYYY h:mm a') => {
696
+ if (!atime) return atime;
697
+ return epochToMoment(atime).format(format);
698
+ };
699
+ const parseLocationHour = hour => {
700
+ let parsedHour = hour.toString();
701
+ if (parsedHour.length < 4) parsedHour = `0${parsedHour}`;
702
+ parsedHour = parsedHour.match(/.{2}/g);
703
+ parsedHour = parsedHour.join(':');
704
+ return parsedHour;
705
+ };
706
+ const objectToQueryString = obj => {
707
+ var str = "";
708
+
709
+ for (var key in obj) {
710
+ if (str != "") {
711
+ str += "&";
712
+ }
713
+
714
+ str += key + "=" + encodeURIComponent(obj[key]);
715
+ }
716
+
717
+ return str;
718
+ };
719
+ const getBackURL = () => {
720
+ let url = urijs__WEBPACK_IMPORTED_MODULE_1___default()(window.location.href);
721
+ let query = url.search(true);
722
+ let fragment = url.fragment();
723
+ let backUrl = query.hasOwnProperty('BackUrl') ? query['BackUrl'] : null;
724
+
725
+ if (fragment != null && fragment != '') {
726
+ backUrl += `#${fragment}`;
727
+ }
728
+
729
+ return backUrl;
730
+ };
731
+ const toSlug = text => {
732
+ text = text.toLowerCase();
733
+ return text.replace(/[^a-zA-Z0-9]+/g, '_');
734
+ };
735
+ const getAuthCallback = () => {
736
+ if (typeof window !== 'undefined') {
737
+ return `${window.location.origin}/auth/callback`;
738
+ }
739
+
740
+ return null;
741
+ };
742
+ const getCurrentLocation = () => {
743
+ let location = '';
744
+
745
+ if (typeof window !== 'undefined') {
746
+ location = window.location; // check if we are on iframe
747
+
748
+ if (window.top) location = window.top.location;
749
+ }
750
+
751
+ return location;
752
+ };
753
+ const getOrigin = () => {
754
+ if (typeof window !== 'undefined') {
755
+ return window.location.origin;
756
+ }
757
+
758
+ return null;
759
+ };
760
+ const getCurrentPathName = () => {
761
+ if (typeof window !== 'undefined') {
762
+ return window.location.pathname;
763
+ }
764
+
765
+ return null;
766
+ };
767
+ const getCurrentHref = () => {
768
+ if (typeof window !== 'undefined') {
769
+ return window.location.href;
770
+ }
771
+
772
+ return null;
773
+ };
774
+ const getAllowedUserGroups = () => {
775
+ if (typeof window !== 'undefined') {
776
+ return window.ALLOWED_USER_GROUPS || '';
777
+ }
778
+
779
+ return null;
780
+ };
781
+ const buildAPIBaseUrl = relativeUrl => {
782
+ if (typeof window !== 'undefined') {
783
+ return `${window.API_BASE_URL}${relativeUrl}`;
784
+ }
785
+
786
+ return null``;
787
+ };
788
+ const putOnLocalStorage = (key, value) => {
789
+ if (typeof window !== 'undefined') {
790
+ window.localStorage.setItem(key, value);
791
+ }
792
+ };
793
+ const getFromLocalStorage = (key, removeIt) => {
794
+ if (typeof window !== 'undefined') {
795
+ let val = window.localStorage.getItem(key);
796
+
797
+ if (removeIt) {
798
+ console.log(`getFromLocalStorage removing key ${key}`);
799
+ removeFromLocalStorage(key);
800
+ }
801
+
802
+ return val;
803
+ }
804
+
805
+ return null;
806
+ };
807
+ const removeFromLocalStorage = key => {
808
+ if (typeof window !== 'undefined') {
809
+ window.localStorage.removeItem(key);
810
+ }
811
+ };
812
+ const isClearingSessionState = () => {
813
+ if (typeof window !== 'undefined') {
814
+ return window.clearing_session_state;
815
+ }
816
+
817
+ return false;
818
+ };
819
+ const setSessionClearingState = val => {
820
+ if (typeof window !== 'undefined') {
821
+ window.clearing_session_state = val;
822
+ }
823
+ };
824
+ const getCurrentUserLanguage = () => {
825
+ let language = 'en';
826
+
827
+ if (typeof navigator !== 'undefined') {
828
+ language = navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage;
829
+ }
830
+
831
+ return language;
832
+ };
833
+ const scrollToError = errors => {
834
+ if (Object.keys(errors).length > 0) {
835
+ const firstError = Object.keys(errors)[0];
836
+ const firstNode = document.getElementById(firstError);
837
+ if (firstNode) window.scrollTo(0, findElementPos(firstNode));
838
+ }
839
+ };
840
+ const hasErrors = (field, errors) => {
841
+ if (field in errors) {
842
+ return errors[field];
843
+ }
844
+
845
+ return '';
846
+ };
847
+ const shallowEqual = (object1, object2) => {
848
+ const keys1 = Object.keys(object1);
849
+ const keys2 = Object.keys(object2);
850
+
851
+ if (keys1.length !== keys2.length) {
852
+ return false;
853
+ }
854
+
855
+ for (let key of keys1) {
856
+ if (object1[key] !== object2[key]) {
857
+ return false;
858
+ }
859
+ }
860
+
861
+ return true;
862
+ };
863
+ const arraysEqual = (a1, a2) => a1.length === a2.length && a1.every((o, idx) => shallowEqual(o, a2[idx]));
864
+ const isEmpty = obj => {
865
+ return Object.keys(obj).length === 0;
866
+ };
867
+ const base64URLEncode = str => {
868
+ return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
869
+ };
870
+ const retryPromise = async (cb, maxNumberOfRetries = 3) => {
871
+ for (let i = 0; i < maxNumberOfRetries; i++) {
872
+ if (await cb()) {
873
+ return true;
874
+ }
875
+ }
876
+
877
+ return false;
878
+ };
879
+ const getTimeServiceUrl = () => {
880
+ if (typeof window !== 'undefined') {
881
+ return window.TIMEINTERVALSINCE1970_API_URL || process.env.TIMEINTERVALSINCE1970_API_URL;
882
+ }
883
+
884
+ return null;
885
+ };
886
+ const getEventLocation = (event, summitVenueCount, summitShowLocDate = null, nowUtc = null) => {
887
+ var _location$venue, _location$floor;
888
+
889
+ const shouldShowVenues = summitShowLocDate && nowUtc ? summitShowLocDate * 1000 < nowUtc : true;
890
+ const locationName = [];
891
+ const {
892
+ location
893
+ } = event;
894
+ if (!shouldShowVenues) return 'TBA';
895
+ if (!location) return 'TBA';
896
+ if (summitVenueCount > 1 && (_location$venue = location.venue) !== null && _location$venue !== void 0 && _location$venue.name) locationName.push(location.venue.name);
897
+ if ((_location$floor = location.floor) !== null && _location$floor !== void 0 && _location$floor.name) locationName.push(location.floor.name);
898
+ if (location.name) locationName.push(location.name);
899
+ return locationName.length > 0 ? locationName.join(' - ') : 'TBA';
900
+ };
901
+ const getEventHosts = event => {
902
+ var _event$speakers;
903
+
904
+ let hosts = [];
905
+
906
+ if (((_event$speakers = event.speakers) === null || _event$speakers === void 0 ? void 0 : _event$speakers.length) > 0) {
907
+ hosts = [...event.speakers];
908
+ }
909
+
910
+ if (event.moderator) hosts.push(event.moderator);
911
+ return hosts;
912
+ };
913
+
914
+ const loadImage = async url => {
915
+ const img = document.createElement('img');
916
+ img.src = url;
917
+ img.crossOrigin = 'anonymous';
918
+ return new Promise((resolve, reject) => {
919
+ img.onload = () => resolve(img);
920
+
921
+ img.onerror = reject;
922
+ });
923
+ };
924
+
925
+ const convertSVGtoImg = async svgUrl => {
926
+ const img = await loadImage(svgUrl);
927
+ const newWidth = 100;
928
+ const newHeight = Math.floor(img.naturalHeight * 100 / img.naturalWidth);
929
+ const canvas = document.createElement('canvas');
930
+ canvas.width = newWidth;
931
+ canvas.height = newHeight;
932
+ canvas.getContext('2d').drawImage(img, 0, 0, newWidth, newHeight);
933
+ const url = await canvas.toDataURL(`image/png`, 1.0);
934
+ console.log(url, newWidth, newHeight);
935
+ return {
936
+ url,
937
+ width: newWidth,
938
+ height: newHeight
939
+ };
940
+ };
941
+
942
+ /***/ }),
943
+
944
+ /***/ "./src/utils/questions-set.js":
945
+ /*!************************************!*\
946
+ !*** ./src/utils/questions-set.js ***!
947
+ \************************************/
948
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
949
+
950
+ __webpack_require__.r(__webpack_exports__);
951
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
952
+ /* harmony export */ "AllowedMultipleValueQuestionType": () => (/* binding */ AllowedMultipleValueQuestionType),
953
+ /* harmony export */ "AnswerValuesOperator_And": () => (/* binding */ AnswerValuesOperator_And),
954
+ /* harmony export */ "AnswerValuesOperator_Or": () => (/* binding */ AnswerValuesOperator_Or),
955
+ /* harmony export */ "CheckBoxListQuestionType": () => (/* binding */ CheckBoxListQuestionType),
956
+ /* harmony export */ "CheckBoxQuestionType": () => (/* binding */ CheckBoxQuestionType),
957
+ /* harmony export */ "ComboBoxQuestionType": () => (/* binding */ ComboBoxQuestionType),
958
+ /* harmony export */ "MainQuestionClassType": () => (/* binding */ MainQuestionClassType),
959
+ /* harmony export */ "RadioButtonListQuestionType": () => (/* binding */ RadioButtonListQuestionType),
960
+ /* harmony export */ "VisibilityCondition_Equal": () => (/* binding */ VisibilityCondition_Equal),
961
+ /* harmony export */ "VisibilityCondition_NotEqual": () => (/* binding */ VisibilityCondition_NotEqual),
962
+ /* harmony export */ "Visibility_Visible": () => (/* binding */ Visibility_Visible),
963
+ /* harmony export */ "default": () => (/* binding */ QuestionsSet)
964
+ /* harmony export */ });
965
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
966
+ /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
967
+ /* harmony import */ var _methods__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./methods */ "./src/utils/methods.js");
968
+
969
+
970
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
971
+
972
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
973
+
974
+ const CheckBoxQuestionType = 'CheckBox';
975
+ const ComboBoxQuestionType = 'ComboBox';
976
+ const CheckBoxListQuestionType = 'CheckBoxList';
977
+ const RadioButtonListQuestionType = 'RadioButtonList';
978
+ const AllowedMultipleValueQuestionType = [ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType];
979
+ const AnswerValuesOperator_And = 'And';
980
+ const AnswerValuesOperator_Or = 'Or';
981
+ const VisibilityCondition_Equal = 'Equal';
982
+ const VisibilityCondition_NotEqual = 'NotEqual';
983
+ const Visibility_Visible = 'Visible';
984
+ const MainQuestionClassType = 'MainQuestion';
985
+
986
+ class QuestionsSet {
987
+ constructor(questions, answers = []) {
988
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_parseQuestion", q => {
989
+ this.questionByName[(0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(q.name)] = q;
990
+ this.questionById[parseInt(q.id)] = q;
991
+ if (q.hasOwnProperty('sub_question_rules')) for (let r of q.sub_question_rules) {
992
+ this.rules[parseInt(r.id)] = r;
993
+
994
+ this._parseQuestion(r.sub_question);
995
+ }
996
+ });
997
+
998
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_parseQuestions", () => {
999
+ for (let q of this.questions) {
1000
+ this._parseQuestion(q);
1001
+ }
1002
+ });
1003
+
1004
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_allowsValues", q => {
1005
+ return AllowedMultipleValueQuestionType.includes(q.type);
1006
+ });
1007
+
1008
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_allowsValue", (q, answer) => {
1009
+ let value = answer.value.split(',').map(v => parseInt(v));
1010
+
1011
+ for (let av of value) {
1012
+ if (!q.values.map(e => e.id).includes(av)) return false;
1013
+ }
1014
+
1015
+ return true;
1016
+ });
1017
+
1018
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_getAnswerFor", q => {
1019
+ let id = Number.isInteger(q) ? q : q.id;
1020
+ let a = this.answers[id] || null;
1021
+ return a ? a : null;
1022
+ });
1023
+
1024
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_hasValue", answer => {
1025
+ return answer.value !== '';
1026
+ });
1027
+
1028
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_answerContains", (answer, val) => {
1029
+ return answer.value.split(',').includes(val);
1030
+ });
1031
+
1032
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isSubQuestionVisible", rule => {
1033
+ let initialCondition = rule.answer_values_operator === AnswerValuesOperator_And ? true : false;
1034
+
1035
+ const parentQuestionAnswer = this._getAnswerFor(rule.parent_question_id);
1036
+
1037
+ if (!parentQuestionAnswer) {
1038
+ initialCondition = rule.visibility_condition === VisibilityCondition_Equal ? false : true;
1039
+ } else {
1040
+ switch (rule.visibility_condition) {
1041
+ case VisibilityCondition_Equal:
1042
+ {
1043
+ for (let answerValue of rule.answer_values) {
1044
+ if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || this._answerContains(parentQuestionAnswer, answerValue);
1045
+ }
1046
+ }
1047
+ break;
1048
+
1049
+ case VisibilityCondition_NotEqual:
1050
+ {
1051
+ for (let answerValue of rule.answer_values) {
1052
+ if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && !this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || !this._answerContains(parentQuestionAnswer, answerValue);
1053
+ }
1054
+ }
1055
+ break;
1056
+ }
1057
+ } // final visibility check
1058
+
1059
+
1060
+ if (rule.visibility === Visibility_Visible) {
1061
+ return initialCondition;
1062
+ } // not visible
1063
+
1064
+
1065
+ return !initialCondition;
1066
+ });
1067
+
1068
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isAnswered", q => {
1069
+ const answer = this._getAnswerFor(q);
1070
+
1071
+ if (q.class === MainQuestionClassType) {
1072
+ if (!q.mandatory) return true;
1073
+ if (!answer) return false;
1074
+ if (!this._hasValue(answer)) return false;
1075
+ if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
1076
+ return true;
1077
+ } // check parent rules ...
1078
+
1079
+
1080
+ for (let ruleId of q.parent_rules) {
1081
+ if (!this._isSubQuestionVisible(this.rules[ruleId])) // if question is not visible skip it
1082
+ continue;
1083
+ if (!q.mandatory) return true;
1084
+ if (!answer) return false;
1085
+ if (!this._hasValue(answer)) return false;
1086
+ if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
1087
+ return true;
1088
+ }
1089
+
1090
+ return true;
1091
+ });
1092
+
1093
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_checkQuestion", q => {
1094
+ let res = this._isAnswered(q);
1095
+
1096
+ if (q.hasOwnProperty('sub_question_rules')) for (let rule of q.sub_question_rules) {
1097
+ // check recursive all the tree till leaves ...
1098
+ res = res && this._checkQuestion(rule.sub_question);
1099
+ }
1100
+ return res;
1101
+ });
1102
+
1103
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_formatQuestionAnswer", question => {
1104
+ var _this$originalAnswers, _question$values;
1105
+
1106
+ let res = {};
1107
+ const slug = (0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(question.name);
1108
+ let userAnswer = (_this$originalAnswers = this.originalAnswers.find(a => a.question_id === question.id)) === null || _this$originalAnswers === void 0 ? void 0 : _this$originalAnswers.value;
1109
+
1110
+ if (!userAnswer && (question === null || question === void 0 ? void 0 : (_question$values = question.values) === null || _question$values === void 0 ? void 0 : _question$values.length) > 0) {
1111
+ // check default value
1112
+ const defaultVal = question.values.find(v => v.is_default);
1113
+ if (defaultVal) userAnswer = defaultVal.id.toString();
1114
+ }
1115
+
1116
+ if (userAnswer) {
1117
+ if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer;
1118
+ if (question.type === RadioButtonListQuestionType || question.type === ComboBoxQuestionType) userAnswer = parseInt(userAnswer);
1119
+ if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal => parseInt(ansVal)) || [];
1120
+ }
1121
+
1122
+ res[slug] = userAnswer || '';
1123
+ if (question.type === CheckBoxListQuestionType && res[slug] === '') res[slug] = [];
1124
+ if (question.hasOwnProperty('sub_question_rules')) for (let rule of question.sub_question_rules) {
1125
+ // check recursive all the tree till leaves ...
1126
+ let res1 = this._formatQuestionAnswer(rule.sub_question);
1127
+
1128
+ res = _objectSpread(_objectSpread({}, res), res1);
1129
+ }
1130
+ return res;
1131
+ });
1132
+
1133
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "formatAnswers", () => {
1134
+ let res = {};
1135
+ this.questions.forEach(q => {
1136
+ let res1 = this._formatQuestionAnswer(q);
1137
+
1138
+ res = _objectSpread(_objectSpread({}, res), res1);
1139
+ });
1140
+ return res;
1141
+ });
1142
+
1143
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "completed", () => {
1144
+ let res = true;
1145
+
1146
+ for (let q of this.questions) {
1147
+ res = res && this._checkQuestion(q);
1148
+ }
1149
+
1150
+ return res;
1151
+ });
1152
+
1153
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "getQuestionByName", name => {
1154
+ const slug = (0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(name);
1155
+ return this.questionByName[name] || this.questionByName[slug] || null;
1156
+ });
1157
+
1158
+ _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "getQuestionById", id => {
1159
+ return this.questionById[parseInt(id)] || null;
1160
+ });
1161
+
1162
+ this.questions = questions;
1163
+ this.originalAnswers = answers;
1164
+ this.answers = []; // map answers to associate array
1165
+
1166
+ for (let a of this.originalAnswers) this.answers[a.question_id] = a;
1167
+
1168
+ this.questionByName = {};
1169
+ this.questionById = {}; // associative array ( rule id , rule);
1170
+
1171
+ this.rules = {};
1172
+
1173
+ this._parseQuestions();
1174
+ }
1175
+
1176
+ }
1177
+
1178
+ /***/ }),
1179
+
1180
+ /***/ "./src/components/extra-questions/index.scss":
1181
+ /*!***************************************************!*\
1182
+ !*** ./src/components/extra-questions/index.scss ***!
1183
+ \***************************************************/
1184
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1185
+
1186
+ __webpack_require__.r(__webpack_exports__);
1187
+ // extracted by mini-css-extract-plugin
1188
+
1189
+
1190
+ /***/ }),
1191
+
1192
+ /***/ "@babel/runtime/helpers/defineProperty":
1193
+ /*!********************************************************!*\
1194
+ !*** external "@babel/runtime/helpers/defineProperty" ***!
1195
+ \********************************************************/
1196
+ /***/ ((module) => {
1197
+
1198
+ module.exports = require("@babel/runtime/helpers/defineProperty");
1199
+
1200
+ /***/ }),
1201
+
1202
+ /***/ "@babel/runtime/helpers/extends":
1203
+ /*!*************************************************!*\
1204
+ !*** external "@babel/runtime/helpers/extends" ***!
1205
+ \*************************************************/
1206
+ /***/ ((module) => {
1207
+
1208
+ module.exports = require("@babel/runtime/helpers/extends");
1209
+
1210
+ /***/ }),
1211
+
1212
+ /***/ "@babel/runtime/helpers/objectWithoutProperties":
1213
+ /*!*****************************************************************!*\
1214
+ !*** external "@babel/runtime/helpers/objectWithoutProperties" ***!
1215
+ \*****************************************************************/
1216
+ /***/ ((module) => {
1217
+
1218
+ module.exports = require("@babel/runtime/helpers/objectWithoutProperties");
1219
+
1220
+ /***/ }),
1221
+
1222
+ /***/ "i18n-react/dist/i18n-react":
1223
+ /*!*********************************************!*\
1224
+ !*** external "i18n-react/dist/i18n-react" ***!
1225
+ \*********************************************/
1226
+ /***/ ((module) => {
1227
+
1228
+ module.exports = require("i18n-react/dist/i18n-react");
1229
+
1230
+ /***/ }),
1231
+
1232
+ /***/ "moment-timezone":
1233
+ /*!**********************************!*\
1234
+ !*** external "moment-timezone" ***!
1235
+ \**********************************/
1236
+ /***/ ((module) => {
1237
+
1238
+ module.exports = require("moment-timezone");
1239
+
1240
+ /***/ }),
1241
+
1242
+ /***/ "prop-types":
1243
+ /*!*****************************!*\
1244
+ !*** external "prop-types" ***!
1245
+ \*****************************/
1246
+ /***/ ((module) => {
1247
+
1248
+ module.exports = require("prop-types");
1249
+
1250
+ /***/ }),
1251
+
1252
+ /***/ "react":
1253
+ /*!************************!*\
1254
+ !*** external "react" ***!
1255
+ \************************/
1256
+ /***/ ((module) => {
1257
+
1258
+ module.exports = require("react");
1259
+
1260
+ /***/ }),
1261
+
1262
+ /***/ "react-final-form":
1263
+ /*!***********************************!*\
1264
+ !*** external "react-final-form" ***!
1265
+ \***********************************/
1266
+ /***/ ((module) => {
1267
+
1268
+ module.exports = require("react-final-form");
1269
+
1270
+ /***/ }),
1271
+
1272
+ /***/ "react-select":
1273
+ /*!*******************************!*\
1274
+ !*** external "react-select" ***!
1275
+ \*******************************/
1276
+ /***/ ((module) => {
1277
+
1278
+ module.exports = require("react-select");
1279
+
1280
+ /***/ }),
1281
+
1282
+ /***/ "urijs":
1283
+ /*!************************!*\
1284
+ !*** external "urijs" ***!
1285
+ \************************/
1286
+ /***/ ((module) => {
1287
+
1288
+ module.exports = require("urijs");
1289
+
1290
+ /***/ })
1291
+
1292
+ /******/ });
1293
+ /************************************************************************/
1294
+ /******/ // The module cache
1295
+ /******/ var __webpack_module_cache__ = {};
1296
+ /******/
1297
+ /******/ // The require function
1298
+ /******/ function __webpack_require__(moduleId) {
1299
+ /******/ // Check if module is in cache
1300
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
1301
+ /******/ if (cachedModule !== undefined) {
1302
+ /******/ return cachedModule.exports;
1303
+ /******/ }
1304
+ /******/ // Create a new module (and put it into the cache)
1305
+ /******/ var module = __webpack_module_cache__[moduleId] = {
1306
+ /******/ // no module.id needed
1307
+ /******/ // no module.loaded needed
1308
+ /******/ exports: {}
1309
+ /******/ };
1310
+ /******/
1311
+ /******/ // Execute the module function
1312
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1313
+ /******/
1314
+ /******/ // Return the exports of the module
1315
+ /******/ return module.exports;
1316
+ /******/ }
1317
+ /******/
1318
+ /************************************************************************/
1319
+ /******/ /* webpack/runtime/compat get default export */
1320
+ /******/ (() => {
1321
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
1322
+ /******/ __webpack_require__.n = (module) => {
1323
+ /******/ var getter = module && module.__esModule ?
1324
+ /******/ () => (module['default']) :
1325
+ /******/ () => (module);
1326
+ /******/ __webpack_require__.d(getter, { a: getter });
1327
+ /******/ return getter;
1328
+ /******/ };
1329
+ /******/ })();
1330
+ /******/
1331
+ /******/ /* webpack/runtime/define property getters */
1332
+ /******/ (() => {
1333
+ /******/ // define getter functions for harmony exports
1334
+ /******/ __webpack_require__.d = (exports, definition) => {
1335
+ /******/ for(var key in definition) {
1336
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
1337
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
1338
+ /******/ }
1339
+ /******/ }
1340
+ /******/ };
1341
+ /******/ })();
1342
+ /******/
1343
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
1344
+ /******/ (() => {
1345
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
1346
+ /******/ })();
1347
+ /******/
1348
+ /******/ /* webpack/runtime/make namespace object */
1349
+ /******/ (() => {
1350
+ /******/ // define __esModule on exports
1351
+ /******/ __webpack_require__.r = (exports) => {
1352
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
1353
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1354
+ /******/ }
1355
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
1356
+ /******/ };
1357
+ /******/ })();
1358
+ /******/
1359
+ /************************************************************************/
1360
+ var __webpack_exports__ = {};
1361
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
1362
+ (() => {
1363
+ /*!*************************************************!*\
1364
+ !*** ./src/components/extra-questions/index.js ***!
1365
+ \*************************************************/
1366
+ __webpack_require__.r(__webpack_exports__);
1367
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1368
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1369
+ /* harmony export */ });
1370
+ /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
1371
+ /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
1372
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1373
+ /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
1374
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
1375
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
1376
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
1377
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
1378
+ /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
1379
+ /* harmony import */ var _inputs_text_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../inputs/text-input */ "./src/components/inputs/text-input.js");
1380
+ /* harmony import */ var _inputs_dropdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../inputs/dropdown */ "./src/components/inputs/dropdown.js");
1381
+ /* harmony import */ var _inputs_radio_list__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../inputs/radio-list */ "./src/components/inputs/radio-list.js");
1382
+ /* harmony import */ var _inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../inputs/checkbox-list */ "./src/components/inputs/checkbox-list.js");
1383
+ /* harmony import */ var _utils_questions_set__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/questions-set */ "./src/utils/questions-set.js");
1384
+ /* harmony import */ var react_final_form__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-final-form */ "react-final-form");
1385
+ /* harmony import */ var react_final_form__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_final_form__WEBPACK_IMPORTED_MODULE_10__);
1386
+ /* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./index.scss */ "./src/components/extra-questions/index.scss");
1387
+ /* harmony import */ var _utils_methods__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/methods */ "./src/utils/methods.js");
1388
+ /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./constants */ "./src/components/extra-questions/constants.js");
1389
+
1390
+
1391
+ const _excluded = ["input", "meta", "question", "className", "isDisabled", "isRequired"],
1392
+ _excluded2 = ["input", "meta", "question", "isDisabled", "isRequired"],
1393
+ _excluded3 = ["input", "meta", "question", "isDisabled", "isRequired"],
1394
+ _excluded4 = ["input", "meta", "question", "isDisabled", "isRequired", "maxValues"];
1395
+
1396
+ /**
1397
+ * Copyright 2017 OpenStack Foundation
1398
+ * Licensed under the Apache License, Version 2.0 (the "License");
1399
+ * you may not use this file except in compliance with the License.
1400
+ * You may obtain a copy of the License at
1401
+ * http://www.apache.org/licenses/LICENSE-2.0
1402
+ * Unless required by applicable law or agreed to in writing, software
1403
+ * distributed under the License is distributed on an "AS IS" BASIS,
1404
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1405
+ * See the License for the specific language governing permissions and
1406
+ * limitations under the License.
1407
+ **/
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+ const InputAdapter = _ref => {
1422
+ let {
1423
+ input,
1424
+ meta,
1425
+ question,
1426
+ className,
1427
+ isDisabled,
1428
+ isRequired
1429
+ } = _ref,
1430
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref, _excluded);
1431
+
1432
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_text_input__WEBPACK_IMPORTED_MODULE_5__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
1433
+ containerClassName: className,
1434
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1435
+ ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
1436
+ id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1437
+ value: input.value,
1438
+ disabled: isDisabled,
1439
+ required: isRequired,
1440
+ onChange: input.onChange,
1441
+ placeholder: question.placeholder
1442
+ }));
1443
+ };
1444
+
1445
+ const RadioButtonListAdapter = _ref2 => {
1446
+ let {
1447
+ input,
1448
+ meta,
1449
+ question,
1450
+ isDisabled,
1451
+ isRequired
1452
+ } = _ref2,
1453
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref2, _excluded2);
1454
+
1455
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_radio_list__WEBPACK_IMPORTED_MODULE_7__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
1456
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1457
+ ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
1458
+ id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1459
+ overrideCSS: true,
1460
+ value: input.value,
1461
+ disabled: isDisabled,
1462
+ required: isRequired,
1463
+ onChange: input.onChange
1464
+ }));
1465
+ };
1466
+
1467
+ const DropdownAdapter = _ref3 => {
1468
+ let {
1469
+ input,
1470
+ meta,
1471
+ question,
1472
+ isDisabled,
1473
+ isRequired
1474
+ } = _ref3,
1475
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref3, _excluded3);
1476
+
1477
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_dropdown__WEBPACK_IMPORTED_MODULE_6__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
1478
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1479
+ ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
1480
+ id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1481
+ overrideCSS: true,
1482
+ className: "ddl-extra-questions-container",
1483
+ classNamePrefix: "ddl-extra-questions",
1484
+ value: input.value,
1485
+ disabled: isDisabled,
1486
+ required: isRequired,
1487
+ onChange: input.onChange
1488
+ }));
1489
+ };
1490
+
1491
+ const CheckBoxListAdapter = _ref4 => {
1492
+ let {
1493
+ input,
1494
+ meta,
1495
+ question,
1496
+ isDisabled,
1497
+ isRequired,
1498
+ maxValues
1499
+ } = _ref4,
1500
+ rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref4, _excluded4);
1501
+
1502
+ const shouldChange = ev => {
1503
+ const question_answers = ev.target.value; // if there's a max value of options checked and the value from the input is higher than the max, don't change the value
1504
+
1505
+ if (maxValues > 0 && question_answers.length > maxValues) {
1506
+ return null;
1507
+ }
1508
+
1509
+ return input.onChange(ev);
1510
+ };
1511
+
1512
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_8__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
1513
+ id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1514
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
1515
+ ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
1516
+ value: input.value,
1517
+ disabled: isDisabled,
1518
+ required: isRequired,
1519
+ onChange: shouldChange
1520
+ }));
1521
+ };
1522
+
1523
+ const getValidator = isRequired => isRequired ? value => value ? undefined : "Required" : () => {};
1524
+
1525
+ const ExtraQuestionsForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(({
1526
+ extraQuestions,
1527
+ userAnswers,
1528
+ onAnswerChanges,
1529
+ className = 'questions-form',
1530
+ questionContainerClassName = 'question-container',
1531
+ questionLabelContainerClassName = 'question-label-container',
1532
+ questionControlContainerClassName = 'question-control-container',
1533
+ readOnly = false,
1534
+ debug = false,
1535
+ buttonText = 'Submit',
1536
+ RequiredErrorMessage = 'Required',
1537
+ ValidationErrorClassName = 'extra-question-error',
1538
+ allowExtraQuestionsEdit = true,
1539
+ onError = e => console.log('form errors: ', e),
1540
+ shouldScroll2FirstError = true
1541
+ }, ref) => {
1542
+ let submit = null;
1543
+ const questionRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)({});
1544
+ const formRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);
1545
+ const [answers, setAnswers] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)({});
1546
+ (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(() => {
1547
+ formatUserAnswers();
1548
+ }, [extraQuestions]); // @see https://beta.reactjs.org/reference/react/useImperativeHandle
1549
+
1550
+ (0,react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle)(ref, () => ({
1551
+ doSubmit() {
1552
+ formRef.current.dispatchEvent(new Event("submit", {
1553
+ cancelable: true,
1554
+ bubbles: true
1555
+ }));
1556
+ }
1557
+
1558
+ }));
1559
+
1560
+ const formatUserAnswers = () => {
1561
+ const qs = new _utils_questions_set__WEBPACK_IMPORTED_MODULE_9__["default"](extraQuestions, userAnswers);
1562
+ setAnswers(qs.formatAnswers());
1563
+ };
1564
+
1565
+ const Condition = ({
1566
+ when,
1567
+ rule,
1568
+ children
1569
+ }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1570
+ name: when,
1571
+ subscription: {
1572
+ value: true
1573
+ }
1574
+ }, ({
1575
+ input: {
1576
+ value
1577
+ }
1578
+ }) => checkVisibility(rule, checkRule(value, rule), children));
1579
+
1580
+ const Error = ({
1581
+ name
1582
+ }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1583
+ name: name,
1584
+ subscription: {
1585
+ error: true,
1586
+ touched: true
1587
+ }
1588
+ }, ({
1589
+ meta: {
1590
+ error,
1591
+ touched
1592
+ }
1593
+ }) => error && touched ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1594
+ className: ValidationErrorClassName
1595
+ }, error) : null);
1596
+
1597
+ const checkRule = (value, rule) => {
1598
+ let values = rule.answer_values;
1599
+
1600
+ if (Array.isArray(value)) {
1601
+ if (!value.length) return false;
1602
+ let res = rule.answer_values_operator === "And";
1603
+ values.forEach(v => {
1604
+ if (rule.answer_values_operator === "And") {
1605
+ res = res && value.includes(parseInt(v));
1606
+ } else {
1607
+ // Or
1608
+ res = res || value.includes(parseInt(v));
1609
+ }
1610
+ });
1611
+ return res;
1612
+ }
1613
+
1614
+ return values.includes(value.toString());
1615
+ };
1616
+
1617
+ const checkVisibility = (rule, ruleResult, children) => {
1618
+ if (rule.visibility === "Visible") {
1619
+ if (rule.visibility_condition === "Equal") {
1620
+ if (ruleResult) return children;
1621
+ delete questionRef.current[rule.sub_question.id];
1622
+ return null;
1623
+ } // Non Equal
1624
+
1625
+
1626
+ if (!ruleResult) {
1627
+ return children;
1628
+ }
1629
+
1630
+ delete questionRef.current[rule.sub_question.id];
1631
+ return null;
1632
+ } // not visible
1633
+
1634
+
1635
+ if (rule.visibility_condition === "Equal") {
1636
+ if (!ruleResult) return children;
1637
+ delete questionRef.current[rule.sub_question.id];
1638
+ return null;
1639
+ }
1640
+
1641
+ if (ruleResult) return children;
1642
+ delete questionRef.current[rule.sub_question.id];
1643
+ return null;
1644
+ };
1645
+
1646
+ const getLabel = q => {
1647
+ // Keep the last word and the required asterisk on the same line
1648
+ const nonBreakingSpace = String.fromCharCode(160); // equals to &nbsp;
1649
+ // Using browser parser isntead of regex to avoid possible issues
1650
+
1651
+ const div = document.createElement("div");
1652
+ div.innerHTML = q.label; // Using innerText first since it keeps the line breaks
1653
+
1654
+ const label = div.innerText || div.textContent || "";
1655
+ const labelText = q.mandatory ? `${label}${nonBreakingSpace}<b>*</b>` : label;
1656
+ const labelHTML = `<label id="${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)} label" htmlFor="${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)}">
1657
+ ${labelText}
1658
+ </label>`;
1659
+ return labelHTML;
1660
+ };
1661
+
1662
+ const isAnswered = (q, answers) => {
1663
+ const slug = (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name);
1664
+ if (!answers.hasOwnProperty(slug)) return false;
1665
+ const answer = answers[slug]; // check type
1666
+
1667
+ if (Array.isArray(answer)) return answer.length > 0;
1668
+ if (typeof answer === 'string') return answer.length > 0;
1669
+ if (typeof answer === 'number') return answer > 0;
1670
+ if (typeof answer === 'boolean') return answer;
1671
+ return false;
1672
+ };
1673
+
1674
+ const renderQuestion = q => {
1675
+ let questionValues = q.values; // disable field if edit isn't allowed and the questions is answered
1676
+
1677
+ const isDisabled = !allowExtraQuestionsEdit && isAnswered(q, answers); // @see https://codesandbox.io/s/vg05y?file=/index.js
1678
+
1679
+ if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_Text) {
1680
+ var _q$sub_question_rules;
1681
+
1682
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1683
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1684
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1685
+ ref: el => questionRef.current[q.id] = el,
1686
+ className: questionContainerClassName
1687
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
1688
+ replaceNewLine: true,
1689
+ className: questionLabelContainerClassName
1690
+ }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1691
+ className: questionControlContainerClassName
1692
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1693
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1694
+ question: q,
1695
+ isDisabled: isDisabled,
1696
+ isRequired: q.mandatory,
1697
+ validate: getValidator(q.mandatory),
1698
+ component: InputAdapter
1699
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
1700
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1701
+ }))), ((_q$sub_question_rules = q.sub_question_rules) === null || _q$sub_question_rules === void 0 ? void 0 : _q$sub_question_rules.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
1702
+ key: r.id,
1703
+ when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1704
+ rule: r
1705
+ }, renderQuestion(r.sub_question))));
1706
+ }
1707
+
1708
+ if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_TextArea) {
1709
+ var _q$sub_question_rules2;
1710
+
1711
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1712
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1713
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1714
+ ref: el => questionRef.current[q.id] = el,
1715
+ className: questionContainerClassName
1716
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
1717
+ replaceNewLine: true,
1718
+ className: questionLabelContainerClassName
1719
+ }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1720
+ className: questionControlContainerClassName
1721
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1722
+ validate: getValidator(q.mandatory),
1723
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1724
+ id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1725
+ disabled: isDisabled,
1726
+ required: q.mandatory,
1727
+ component: "textarea"
1728
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
1729
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1730
+ }))), ((_q$sub_question_rules2 = q.sub_question_rules) === null || _q$sub_question_rules2 === void 0 ? void 0 : _q$sub_question_rules2.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
1731
+ key: r.id,
1732
+ when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1733
+ rule: r
1734
+ }, renderQuestion(r.sub_question))));
1735
+ }
1736
+
1737
+ if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_Checkbox) {
1738
+ var _q$sub_question_rules3;
1739
+
1740
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1741
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1742
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1743
+ ref: el => questionRef.current[q.id] = el,
1744
+ style: {
1745
+ display: 'flex'
1746
+ },
1747
+ className: questionContainerClassName
1748
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1749
+ className: questionControlContainerClassName
1750
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1751
+ className: "form-check abc-checkbox"
1752
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1753
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1754
+ id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1755
+ validate: getValidator(q.mandatory),
1756
+ disabled: isDisabled,
1757
+ required: q.mandatory,
1758
+ type: "checkbox",
1759
+ className: "form-check-input",
1760
+ component: "input"
1761
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
1762
+ className: "form-check-label",
1763
+ htmlFor: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1764
+ }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
1765
+ replaceNewLine: true,
1766
+ className: `eq-checkbox-label ${questionLabelContainerClassName}`
1767
+ }, getLabel(q))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
1768
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1769
+ }), ((_q$sub_question_rules3 = q.sub_question_rules) === null || _q$sub_question_rules3 === void 0 ? void 0 : _q$sub_question_rules3.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
1770
+ key: r.id,
1771
+ when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1772
+ rule: r
1773
+ }, renderQuestion(r.sub_question))));
1774
+ }
1775
+
1776
+ if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_RadioButtonList) {
1777
+ var _q$sub_question_rules4;
1778
+
1779
+ const options = questionValues.map(val => ({
1780
+ label: val.label,
1781
+ value: val.id
1782
+ }));
1783
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1784
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1785
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1786
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1787
+ ref: el => questionRef.current[q.id] = el,
1788
+ className: questionContainerClassName
1789
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
1790
+ replaceNewLine: true,
1791
+ className: questionLabelContainerClassName
1792
+ }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1793
+ className: questionControlContainerClassName
1794
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1795
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1796
+ options: options,
1797
+ question: q,
1798
+ validate: getValidator(q.mandatory),
1799
+ isDisabled: isDisabled,
1800
+ isRequired: q.mandatory,
1801
+ component: RadioButtonListAdapter
1802
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
1803
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1804
+ }))), ((_q$sub_question_rules4 = q.sub_question_rules) === null || _q$sub_question_rules4 === void 0 ? void 0 : _q$sub_question_rules4.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
1805
+ key: r.id,
1806
+ when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1807
+ rule: r
1808
+ }, renderQuestion(r.sub_question))));
1809
+ }
1810
+
1811
+ if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_ComboBox || q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_CountryComboBox) {
1812
+ var _q$sub_question_rules5;
1813
+
1814
+ const options = questionValues.map(val => ({
1815
+ label: val.label,
1816
+ value: val.id
1817
+ }));
1818
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1819
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1820
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1821
+ ref: el => questionRef.current[q.id] = el,
1822
+ className: questionContainerClassName
1823
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
1824
+ replaceNewLine: true,
1825
+ className: questionLabelContainerClassName
1826
+ }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1827
+ className: questionControlContainerClassName
1828
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1829
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1830
+ options: options,
1831
+ question: q,
1832
+ validate: getValidator(q.mandatory),
1833
+ isDisabled: isDisabled,
1834
+ isRequired: q.mandatory,
1835
+ component: DropdownAdapter
1836
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
1837
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1838
+ }))), ((_q$sub_question_rules5 = q.sub_question_rules) === null || _q$sub_question_rules5 === void 0 ? void 0 : _q$sub_question_rules5.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
1839
+ key: r.id,
1840
+ when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1841
+ rule: r
1842
+ }, renderQuestion(r.sub_question))));
1843
+ }
1844
+
1845
+ if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_CheckBoxList) {
1846
+ var _q$sub_question_rules6;
1847
+
1848
+ const options = questionValues.map(val => ({
1849
+ label: val.label,
1850
+ value: val.id
1851
+ }));
1852
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
1853
+ key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1854
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1855
+ ref: el => questionRef.current[q.id] = el,
1856
+ className: questionContainerClassName
1857
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
1858
+ replaceNewLine: true,
1859
+ className: questionLabelContainerClassName
1860
+ }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1861
+ className: questionControlContainerClassName
1862
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
1863
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1864
+ className: questionControlContainerClassName,
1865
+ validate: getValidator(q.mandatory),
1866
+ options: options,
1867
+ question: q,
1868
+ maxValues: q.max_selected_values,
1869
+ isDisabled: isDisabled,
1870
+ isRequired: q.mandatory,
1871
+ component: CheckBoxListAdapter
1872
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
1873
+ name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
1874
+ }))), ((_q$sub_question_rules6 = q.sub_question_rules) === null || _q$sub_question_rules6 === void 0 ? void 0 : _q$sub_question_rules6.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
1875
+ key: r.id,
1876
+ when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
1877
+ rule: r
1878
+ }, renderQuestion(r.sub_question))));
1879
+ }
1880
+
1881
+ return null;
1882
+ };
1883
+
1884
+ const isVisible = q => {
1885
+ return !!questionRef.current[q.id];
1886
+ };
1887
+
1888
+ const validateQuestion = (q, values, errors) => {
1889
+ var _q$sub_question_rules7;
1890
+
1891
+ if (q.mandatory && isVisible(q)) {
1892
+ const slug = (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name);
1893
+
1894
+ if (!values.hasOwnProperty((0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(slug)) || values[(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(slug)] === "" || values[slug].length === 0) {
1895
+ errors[slug] = RequiredErrorMessage;
1896
+ }
1897
+ } // validate sub rules
1898
+
1899
+
1900
+ (_q$sub_question_rules7 = q.sub_question_rules) === null || _q$sub_question_rules7 === void 0 ? void 0 : _q$sub_question_rules7.forEach(r => {
1901
+ validateQuestion(r.sub_question, values, errors);
1902
+ });
1903
+ };
1904
+
1905
+ const onSubmit = values => {
1906
+ onAnswerChanges(values);
1907
+ };
1908
+
1909
+ const validate = values => {
1910
+ const errors = {};
1911
+ extraQuestions.forEach(q => {
1912
+ validateQuestion(q, values, errors);
1913
+ });
1914
+ return errors;
1915
+ };
1916
+
1917
+ if (!Object.keys(answers).length) return null;
1918
+
1919
+ const getErrorFields = (q, invalidFormFields, errorFields) => {
1920
+ var _q$sub_question_rules8;
1921
+
1922
+ if (invalidFormFields.includes((0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name))) {
1923
+ errorFields.push(q);
1924
+ } // find errors on sub rules
1925
+
1926
+
1927
+ (_q$sub_question_rules8 = q.sub_question_rules) === null || _q$sub_question_rules8 === void 0 ? void 0 : _q$sub_question_rules8.forEach(r => {
1928
+ getErrorFields(r.sub_question, invalidFormFields, errorFields);
1929
+ });
1930
+ };
1931
+
1932
+ const getFirstError = invalidFormFields => {
1933
+ const errorFields = [];
1934
+ extraQuestions.forEach(q => {
1935
+ getErrorFields(q, invalidFormFields, errorFields);
1936
+ });
1937
+ return errorFields.sort((a, b) => a.order > b.order)[0];
1938
+ };
1939
+
1940
+ const scrollToFirstError = invalidFormFields => {
1941
+ const firstError = getFirstError(invalidFormFields);
1942
+ questionRef.current[firstError.id].scrollIntoView({
1943
+ behavior: 'smooth',
1944
+ block: 'center'
1945
+ });
1946
+ };
1947
+
1948
+ if (!Object.keys(answers).length) return null;
1949
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1950
+ className: className
1951
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Form, {
1952
+ validate: validate,
1953
+ onSubmit: onSubmit,
1954
+ initialValues: answers
1955
+ }, ({
1956
+ handleSubmit,
1957
+ form,
1958
+ submitting,
1959
+ pristine,
1960
+ values
1961
+ }) => {
1962
+ submit = handleSubmit;
1963
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("form", {
1964
+ onSubmit: event => {
1965
+ const invalidFormFields = form.getRegisteredFields().filter(field => form.getFieldState(field).invalid);
1966
+
1967
+ if (invalidFormFields.length > 0) {
1968
+ const firstError = getFirstError(invalidFormFields);
1969
+ onError(invalidFormFields, questionRef.current[firstError.id]);
1970
+ if (shouldScroll2FirstError) scrollToFirstError(invalidFormFields);
1971
+ }
1972
+
1973
+ handleSubmit(event);
1974
+ },
1975
+ ref: formRef
1976
+ }, readOnly ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("fieldset", {
1977
+ disabled: "disabled"
1978
+ }, extraQuestions.map(q => renderQuestion(q))) : extraQuestions.map(q => renderQuestion(q)), debug && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("pre", null, JSON.stringify(values, 0, 2)));
1979
+ }), !ref && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("button", {
1980
+ type: "submit",
1981
+ onClick: event => {
1982
+ submit(event);
1983
+ },
1984
+ style: {
1985
+ marginTop: 10
1986
+ }
1987
+ }, buttonText));
1988
+ });
1989
+ ExtraQuestionsForm.propTypes = {
1990
+ extraQuestions: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array.isRequired),
1991
+ userAnswers: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array.isRequired),
1992
+ onAnswerChanges: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func.isRequired),
1993
+ className: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
1994
+ debug: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
1995
+ buttonText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
1996
+ questionContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
1997
+ questionLabelContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
1998
+ questionControlContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
1999
+ RequiredErrorMessage: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
2000
+ ValidationErrorClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
2001
+ allowExtraQuestionsEdit: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
2002
+ shouldScroll2FirstError: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool)
2003
+ };
2004
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExtraQuestionsForm);
2005
+ })();
2006
+
2007
+ /******/ return __webpack_exports__;
2008
+ /******/ })()
2009
+ ;
2010
+ });
2011
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVk8sTUFBTUEsaUJBQWlCLEdBQUcsTUFBMUI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxVQUE5QjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLFVBQTlCO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsaUJBQXJDO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsVUFBOUI7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxjQUFsQztBQUVBLE1BQU1DLDRCQUE0QixHQUFHLGlCQUFyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNQUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1LLFlBQU4sU0FBMkJILHdEQUEzQixDQUEyQztFQUV0REssV0FBVyxDQUFDQyxLQUFELEVBQVE7SUFDZixNQUFNQSxLQUFOO0lBRUEsSUFBSUMsVUFBVSxHQUFHRCxLQUFLLENBQUNFLEtBQU4sR0FBY0YsS0FBSyxDQUFDRSxLQUFOLENBQVlDLElBQVosQ0FBa0JDLENBQUMsSUFBSSxDQUFDSixLQUFLLENBQUNLLE9BQU4sQ0FBY0MsR0FBZCxDQUFrQkMsRUFBRSxJQUFJQSxFQUFFLENBQUNMLEtBQTNCLEVBQWtDTSxRQUFsQyxDQUEyQ0osQ0FBM0MsQ0FBeEIsQ0FBZCxHQUF3RixLQUF6RztJQUVBLEtBQUtLLEtBQUwsR0FBYTtNQUNUQyxZQUFZLEVBQUUsQ0FBQyxDQUFDVDtJQURQLENBQWI7SUFJQSxLQUFLVSxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0JDLElBQWxCLENBQXVCLElBQXZCLENBQXBCO0lBQ0EsS0FBS0MsbUJBQUwsR0FBMkIsS0FBS0EsbUJBQUwsQ0FBeUJELElBQXpCLENBQThCLElBQTlCLENBQTNCO0VBQ0g7O0VBRURELFlBQVksQ0FBQ0csS0FBRCxFQUFRO0lBQ2hCLElBQUlDLFlBQVksR0FBRyxLQUFLZixLQUFMLENBQVdLLE9BQVgsQ0FBbUJDLEdBQW5CLENBQXVCQyxFQUFFLElBQUlBLEVBQUUsQ0FBQ0wsS0FBaEMsQ0FBbkI7SUFDQSxJQUFJQSxLQUFLLEdBQUcsS0FBS0YsS0FBTCxDQUFXRSxLQUFYLEdBQW1CLENBQUMsR0FBRyxLQUFLRixLQUFMLENBQVdFLEtBQWYsQ0FBbkIsR0FBMkMsRUFBdkQ7O0lBRUEsSUFBSVksS0FBSyxDQUFDRSxNQUFOLENBQWFDLElBQWIsS0FBc0IsVUFBMUIsRUFBc0M7TUFDbEMsSUFBSUgsS0FBSyxDQUFDRSxNQUFOLENBQWFFLE9BQWpCLEVBQTBCO1FBQ3RCLE1BQU1DLE1BQU0sR0FBR0MsS0FBSyxDQUFDTixLQUFLLENBQUNFLE1BQU4sQ0FBYWQsS0FBZCxDQUFMLEdBQTRCWSxLQUFLLENBQUNFLE1BQU4sQ0FBYWQsS0FBekMsR0FBaURtQixRQUFRLENBQUNQLEtBQUssQ0FBQ0UsTUFBTixDQUFhZCxLQUFkLENBQXhFO1FBQ0FBLEtBQUssQ0FBQ29CLElBQU4sQ0FBV0gsTUFBWDtNQUNILENBSEQsTUFHTztRQUNIakIsS0FBSyxHQUFHQSxLQUFLLENBQUNxQixNQUFOLENBQWNuQixDQUFDLElBQUlBLENBQUMsSUFBSVUsS0FBSyxDQUFDRSxNQUFOLENBQWFkLEtBQXJDLENBQVI7TUFDSDtJQUNKLENBUEQsTUFPTztNQUNIQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3FCLE1BQU4sQ0FBYW5CLENBQUMsSUFBSVcsWUFBWSxDQUFDUCxRQUFiLENBQXNCSixDQUF0QixDQUFsQixDQUFSO01BQ0FGLEtBQUssQ0FBQ29CLElBQU4sQ0FBV1IsS0FBSyxDQUFDRSxNQUFOLENBQWFkLEtBQXhCO0lBQ0g7O0lBRUQsSUFBSXNCLEVBQUUsR0FBRztNQUFDUixNQUFNLEVBQUU7UUFDVlMsRUFBRSxFQUFFLEtBQUt6QixLQUFMLENBQVd5QixFQURMO1FBRVZ2QixLQUFLLEVBQUVBLEtBRkc7UUFHVmUsSUFBSSxFQUFFO01BSEk7SUFBVCxDQUFUO0lBTUEsS0FBS2pCLEtBQUwsQ0FBVzBCLFFBQVgsQ0FBb0JGLEVBQXBCO0VBQ0g7O0VBRURYLG1CQUFtQixDQUFDQyxLQUFELEVBQVE7SUFDdkIsS0FBS2EsUUFBTCxDQUFjO01BQUNqQixZQUFZLEVBQUVJLEtBQUssQ0FBQ0UsTUFBTixDQUFhRTtJQUE1QixDQUFkO0VBQ0g7O0VBRURVLE1BQU0sR0FBRztJQUVMLGtCQUF5RyxLQUFLNUIsS0FBOUc7SUFBQSxJQUFJO01BQUMwQixRQUFEO01BQVd4QixLQUFYO01BQWtCMkIsU0FBbEI7TUFBNkJ4QixPQUE3QjtNQUFzQ29CLEVBQXRDO01BQTBDSyxRQUExQztNQUFvREMsS0FBcEQ7TUFBMkRDLFFBQTNEO01BQW9FQyxJQUFwRTtNQUEwRUM7SUFBMUUsQ0FBSjtJQUFBLElBQWlHQyxJQUFqRzs7SUFDQSxJQUFJO01BQUV6QjtJQUFGLElBQW1CLEtBQUtELEtBQTVCO0lBRUEsSUFBSTJCLE1BQU0sR0FBSyxLQUFLcEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixRQUExQixDQUFmO0lBQ0EsSUFBSUMsSUFBSSxHQUFLLEtBQUt0QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLE1BQTFCLENBQWI7SUFDQSxJQUFJRSxVQUFVLEdBQUssS0FBS3ZDLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsWUFBMUIsQ0FBbkI7SUFDQSxJQUFJcEMsVUFBVSxHQUFHQyxLQUFLLEdBQUdBLEtBQUssQ0FBQ0MsSUFBTixDQUFZQyxDQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxHQUFSLENBQVlDLEVBQUUsSUFBSUEsRUFBRSxDQUFDTCxLQUFyQixFQUE0Qk0sUUFBNUIsQ0FBcUNKLENBQXJDLENBQWxCLENBQUgsR0FBaUUsS0FBdkY7SUFDQSxJQUFJb0MsU0FBUyxHQUFLLEtBQUt4QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLE9BQTFCLEtBQXNDTixLQUFLLEtBQUssRUFBbEU7SUFDQSxJQUFJVSxVQUFVLEdBQUksS0FBS3pDLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsVUFBMUIsS0FBeUNMLFFBQVEsSUFBSSxJQUF2RTtJQUdBLElBQUlVLEtBQUosRUFBV0MsS0FBWDs7SUFFQSxJQUFJUCxNQUFKLEVBQVk7TUFDUk0sS0FBSyxHQUFHO1FBQ0pFLFdBQVcsRUFBRSxNQURUO1FBRUpDLFVBQVUsRUFBRSxNQUZSO1FBR0pDLEtBQUssRUFBRTtNQUhILENBQVI7SUFLSCxDQU5ELE1BTU87TUFDSEosS0FBSyxHQUFHO1FBQ0pFLFdBQVcsRUFBRSxNQURUO1FBRUpHLFNBQVMsRUFBRTtNQUZQLENBQVI7SUFJSDs7SUFFRCxvQkFDSTtNQUFLLEVBQUUsRUFBRyxlQUFjdEIsRUFBRyxFQUEzQjtNQUE4QixtQkFBaUJTO0lBQS9DLGdCQUNJO01BQUssU0FBUyxFQUFFLG9CQUFvQk0sU0FBUyxHQUFHLFFBQUgsR0FBYyxFQUEzQztJQUFoQixHQUNNbkMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLEVBQUUsSUFBSTtNQUNoQixJQUFJVyxPQUFPLEdBQUdoQixLQUFLLEdBQUdBLEtBQUssQ0FBQ00sUUFBTixDQUFlRCxFQUFFLENBQUNMLEtBQWxCLENBQUgsR0FBOEIsS0FBakQ7TUFDQSxvQkFDSTtRQUFLLFNBQVMsRUFBQyx5QkFBZjtRQUF5QyxHQUFHLEVBQUUsZUFBZUssRUFBRSxDQUFDTCxLQUFoRTtRQUF1RSxLQUFLLEVBQUV3QztNQUE5RSxnQkFDSTtRQUFPLElBQUksRUFBQyxVQUFaO1FBQ08sRUFBRSxFQUFHLE1BQUtqQixFQUFHLElBQUdsQixFQUFFLENBQUNMLEtBQU0sRUFEaEM7UUFFTyxJQUFJLEVBQUUrQixJQUFJLEdBQUVBLElBQUYsR0FBU1IsRUFGMUI7UUFHTyxPQUFPLEVBQUVQLE9BSGhCO1FBSU8sUUFBUSxFQUFFdUIsVUFKakI7UUFLTyxRQUFRLEVBQUUsS0FBSzlCLFlBTHRCO1FBS29DLFNBQVMsRUFBQyxrQkFMOUM7UUFLaUUsS0FBSyxFQUFFSixFQUFFLENBQUNMO01BTDNFLEVBREosZUFPSTtRQUFPLFNBQVMsRUFBQyxrQkFBakI7UUFBb0MsT0FBTyxFQUFHLE1BQUt1QixFQUFHLElBQUdsQixFQUFFLENBQUNMLEtBQU07TUFBbEUsR0FDS29DLElBQUksaUJBQ0wsMkRBQUMsaURBQUQsUUFBVS9CLEVBQUUsQ0FBQ29DLEtBQWIsQ0FGSixFQUlLLENBQUNMLElBQUQsSUFDRC9CLEVBQUUsQ0FBQ29DLEtBTFAsQ0FQSixDQURKO0lBa0JILENBcEJDLENBRE4sRUF1QktKLFVBQVUsaUJBQ1g7TUFBSyxTQUFTLEVBQUMseUJBQWY7TUFBeUMsS0FBSyxFQUFFRztJQUFoRCxnQkFDSTtNQUFPLElBQUksRUFBQyxVQUFaO01BQXVCLEVBQUUsRUFBRSxhQUFhakIsRUFBeEM7TUFBNEMsT0FBTyxFQUFFZixZQUFyRDtNQUFtRSxRQUFRLEVBQUUrQixVQUE3RTtNQUNPLFFBQVEsRUFBRSxLQUFLNUIsbUJBRHRCO01BQzJDLFNBQVMsRUFBQyxrQkFEckQ7TUFDd0UsS0FBSyxFQUFDO0lBRDlFLEVBREosZUFHSTtNQUFPLFNBQVMsRUFBQyxrQkFBakI7TUFBb0MsT0FBTyxFQUFFLGFBQWFZO0lBQTFELEdBQ0s5QiwyRUFBQSxDQUFZLGVBQVosQ0FETCxDQUhKLENBeEJKLEVBaUNLNEMsVUFBVSxJQUFJN0IsWUFBZCxpQkFDRDtNQUFLLEtBQUssRUFBRTtRQUFDa0MsV0FBVyxFQUFFLE1BQWQ7UUFBc0JLLEtBQUssRUFBRTtNQUE3QjtJQUFaLGdCQUNJO01BQU8sU0FBUyxFQUFDLGNBQWpCO01BQWdDLFFBQVEsRUFBRVIsVUFBMUM7TUFBc0QsUUFBUSxFQUFFLEtBQUs5QixZQUFyRTtNQUFtRixLQUFLLEVBQUVWO0lBQTFGLEVBREosQ0FsQ0osQ0FESixFQXlDS3VDLFNBQVMsaUJBQ1Y7TUFBRyxTQUFTLEVBQUM7SUFBYixHQUE0QlQsS0FBNUIsQ0ExQ0osQ0FESjtFQWdESDs7QUF4SHFEO0FBMkgxRGxDLFlBQVksQ0FBQ3FELFlBQWIsR0FBNEI7RUFDeEJoQixjQUFjLEVBQUc7QUFETyxDQUE1QjtBQUtBckMsWUFBWSxDQUFDc0QsU0FBYixHQUF5QjtFQUNyQjFCLEVBQUUsRUFBRWhDLHFFQUEyQjREO0FBRFYsQ0FBekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRWUsTUFBTUUsUUFBTixTQUF1QjdELHdEQUF2QixDQUF1QztFQUVsREssV0FBVyxDQUFDQyxLQUFELEVBQVE7SUFDZixNQUFNQSxLQUFOO0lBRUEsS0FBS1csWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFwQjtFQUNIOztFQUVERCxZQUFZLENBQUM2QyxTQUFELEVBQVk7SUFFcEIsSUFBSXRELEtBQUssR0FBRyxJQUFaOztJQUNBLElBQUksS0FBS0YsS0FBTCxDQUFXeUQsT0FBZixFQUF3QjtNQUNwQnZELEtBQUssR0FBR3NELFNBQVMsR0FBR0EsU0FBUyxDQUFDbEQsR0FBVixDQUFjb0QsR0FBRyxJQUFJQSxHQUFHLENBQUN4RCxLQUF6QixDQUFILEdBQXFDLElBQXREO0lBQ0gsQ0FGRCxNQUVPO01BQ0hBLEtBQUssR0FBR3NELFNBQVMsR0FBR0EsU0FBUyxDQUFDdEQsS0FBYixHQUFxQixJQUF0QztJQUNIOztJQUVELElBQUlzQixFQUFFLEdBQUc7TUFBQ1IsTUFBTSxFQUFFO1FBQ1ZTLEVBQUUsRUFBRSxLQUFLekIsS0FBTCxDQUFXeUIsRUFETDtRQUVWdkIsS0FBSyxFQUFFQSxLQUZHO1FBR1ZlLElBQUksRUFBRTtNQUhJO0lBQVQsQ0FBVDtJQU1BLEtBQUtqQixLQUFMLENBQVcwQixRQUFYLENBQW9CRixFQUFwQjtFQUNIOztFQUVESSxNQUFNLEdBQUc7SUFFTCxrQkFBcUcsS0FBSzVCLEtBQTFHO0lBQUEsSUFBSTtNQUFDMEIsUUFBRDtNQUFXeEIsS0FBWDtNQUFrQjJCLFNBQWxCO01BQTZCRSxLQUE3QjtNQUFvQzRCLFNBQXBDO01BQStDM0IsUUFBL0M7TUFBeUQ0QixXQUF6RDtNQUFzRTFCO0lBQXRFLENBQUo7SUFBQSxJQUE2RkMsSUFBN0Y7O0lBQ0EsSUFBSUssU0FBUyxHQUFLLEtBQUt4QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLE9BQTFCLEtBQXNDTixLQUFLLElBQUksRUFBakU7SUFDQSxJQUFJOEIsV0FBVyxHQUFJLEtBQUs3RCxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFdBQTFCLENBQW5CO0lBQ0EsSUFBSUksVUFBVSxHQUFJLEtBQUt6QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFVBQTFCLEtBQXlDTCxRQUFRLElBQUksSUFBdkU7SUFDQSxJQUFJOEIsUUFBUSxHQUFHLElBQWY7SUFFQSxJQUFJQyxlQUFlLEdBQUdsQyxTQUF0Qjs7SUFFQSxJQUFJLENBQUMsS0FBSzdCLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsYUFBMUIsQ0FBRCxJQUE2Q3VCLFdBQVcsSUFBSSxLQUFoRSxFQUF1RTtNQUNuRUcsZUFBZSxHQUFHLGNBQWNsQyxTQUFkLEdBQTBCLEdBQTFCLElBQWlDVyxTQUFTLEdBQUcsT0FBSCxHQUFhLEVBQXZELENBQWxCO0lBQ0g7O0lBRUQsSUFBSSxLQUFLeEMsS0FBTCxDQUFXeUQsT0FBZixFQUF3QjtNQUNwQkssUUFBUSxHQUFHLEtBQUs5RCxLQUFMLENBQVdLLE9BQVgsQ0FBbUJrQixNQUFuQixDQUEwQmhCLEVBQUUsSUFBSUwsS0FBSyxDQUFDTSxRQUFOLENBQWVELEVBQUUsQ0FBQ0wsS0FBbEIsQ0FBaEMsQ0FBWDtJQUNILENBRkQsTUFFTztNQUNINEQsUUFBUSxHQUFJNUQsS0FBSyxZQUFZOEQsTUFBakIsSUFBMkI5RCxLQUFLLElBQUksSUFBckMsR0FBNkNBLEtBQTdDLEdBQXFELEtBQUtGLEtBQUwsQ0FBV0ssT0FBWCxDQUFtQkYsSUFBbkIsQ0FBd0I4RCxHQUFHLElBQUlBLEdBQUcsQ0FBQy9ELEtBQUosSUFBYUEsS0FBNUMsQ0FBaEU7SUFDSDs7SUFFRCxNQUFNZ0UsWUFBWSxHQUFHO01BQUVDLElBQUksRUFBRUMsTUFBTSxvQ0FBVUEsTUFBVjtRQUFrQkMsTUFBTSxFQUFFO01BQTFCO0lBQWQsQ0FBckI7SUFFQSxvQkFDSSxxRkFDSSwyREFBQyxxREFBRDtNQUNJLFNBQVMsRUFBRU4sZUFEZjtNQUVJLEtBQUssRUFBRUQsUUFGWDtNQUdJLFFBQVEsRUFBRSxLQUFLbkQsWUFIbkI7TUFJSSxXQUFXLEVBQUVrRCxXQUpqQjtNQUtJLFVBQVUsRUFBRXBCLFVBTGhCO01BTUksTUFBTSxFQUFFeUIsWUFOWjtNQU9JLG1CQUFpQmhDO0lBUHJCLEdBUVFDLElBUlIsRUFESixFQVdLSyxTQUFTLGlCQUNWO01BQUcsU0FBUyxFQUFDO0lBQWIsR0FBNEJULEtBQTVCLENBWkosQ0FESjtFQWtCSDs7QUFsRWlEO0FBcUV0RHdCLFFBQVEsQ0FBQ0wsWUFBVCxHQUF3QjtFQUNwQmhCLGNBQWMsRUFBRztBQURHLENBQXhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRWUsTUFBTW9DLFNBQU4sU0FBd0I1RSx3REFBeEIsQ0FBd0M7RUFFbkRLLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2YsTUFBTUEsS0FBTjtJQUVBLEtBQUtTLEtBQUwsR0FBYTtNQUNUUCxLQUFLLEVBQUVGLEtBQUssQ0FBQ0U7SUFESixDQUFiO0lBSUEsS0FBS1MsWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFwQjtFQUNIOztFQUVERCxZQUFZLENBQUM2QyxTQUFELEVBQVk7SUFFcEIsSUFBSWhDLEVBQUUsR0FBRztNQUFDUixNQUFNLEVBQUU7UUFDVlMsRUFBRSxFQUFFLEtBQUt6QixLQUFMLENBQVd5QixFQURMO1FBRVZ2QixLQUFLLEVBQUVzRCxTQUFTLENBQUN4QyxNQUFWLENBQWlCZCxLQUZkO1FBR1ZlLElBQUksRUFBRTtNQUhJO0lBQVQsQ0FBVDtJQU1BLEtBQUtqQixLQUFMLENBQVcwQixRQUFYLENBQW9CRixFQUFwQjtFQUNIOztFQUVEK0MsUUFBUSxDQUFDQyxNQUFELEVBQVMvQyxFQUFULEVBQWFXLE1BQWIsRUFBcUJxQyxNQUFyQixFQUE2Qm5DLElBQTdCLEVBQW1DO0lBQ3ZDLElBQUlGLE1BQUosRUFBWTtNQUNSLG9CQUNJO1FBQU8sU0FBUyxFQUFDLGtCQUFqQjtRQUFvQyxPQUFPLEVBQUcsU0FBUVgsRUFBRyxJQUFHK0MsTUFBTSxDQUFDdEUsS0FBTSxFQUF6RTtRQUE0RSxLQUFLLEVBQUU7VUFBQ3dFLE9BQU8sRUFBRTtRQUFWO01BQW5GLEdBQ0twQyxJQUFJLGlCQUNMLDJEQUFDLGlEQUFELFFBQ0trQyxNQUFNLENBQUM3QixLQURaLENBRkosRUFNSyxDQUFDTCxJQUFELElBQ0RrQyxNQUFNLENBQUM3QixLQVBYLENBREo7SUFZSCxDQWJELE1BYU8sSUFBSThCLE1BQUosRUFBWTtNQUNmLG9CQUNJO1FBQU8sU0FBUyxFQUFDLGtCQUFqQjtRQUFvQyxPQUFPLEVBQUcsU0FBUWhELEVBQUcsSUFBRytDLE1BQU0sQ0FBQ3RFLEtBQU07TUFBekUsR0FDS3NFLE1BQU0sQ0FBQzdCLEtBRFosQ0FESjtJQUtILENBTk0sTUFNQTtNQUNILG9CQUNJO1FBQU8sU0FBUyxFQUFDLGtCQUFqQjtRQUFvQyxPQUFPLEVBQUcsU0FBUWxCLEVBQUcsSUFBRytDLE1BQU0sQ0FBQ3RFLEtBQU0sRUFBekU7UUFBNEUsS0FBSyxFQUFFO1VBQUN3RSxPQUFPLEVBQUU7UUFBVjtNQUFuRixnQkFDSTtRQUFJLEtBQUssRUFBRTtVQUFDM0IsU0FBUyxFQUFFO1FBQVo7TUFBWCxHQUFnQ3lCLE1BQU0sQ0FBQzdCLEtBQXZDLENBREosZUFFSSwyREFBQyxpREFBRCxRQUFVNkIsTUFBTSxDQUFDRyxXQUFqQixDQUZKLENBREo7SUFNSDtFQUNKOztFQUVEL0MsTUFBTSxHQUFHO0lBRUwsa0JBQThGLEtBQUs1QixLQUFuRztJQUFBLElBQUk7TUFBQzBCLFFBQUQ7TUFBV3hCLEtBQVg7TUFBa0IyQixTQUFsQjtNQUE2QkUsS0FBN0I7TUFBb0NHLGNBQXBDO01BQW9ERixRQUFwRDtNQUE4RDNCLE9BQTlEO01BQXNFb0IsRUFBdEU7TUFBMEVRO0lBQTFFLENBQUo7SUFBQSxJQUFzRkUsSUFBdEY7O0lBQ0EsSUFBSUssU0FBUyxHQUFLLEtBQUt4QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLE9BQTFCLEtBQXNDTixLQUFLLElBQUksRUFBakU7SUFDQSxJQUFJSyxNQUFNLEdBQUssS0FBS3BDLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsUUFBMUIsQ0FBZjtJQUNBLElBQUlvQyxNQUFNLEdBQUssS0FBS3pFLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsUUFBMUIsQ0FBZjtJQUNBLElBQUlDLElBQUksR0FBSyxLQUFLdEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixNQUExQixDQUFiO0lBQ0EsSUFBSUksVUFBVSxHQUFJLEtBQUt6QyxLQUFMLENBQVdxQyxjQUFYLENBQTBCLFVBQTFCLEtBQXlDTCxRQUFRLElBQUksSUFBdkU7SUFFQSxJQUFJVSxLQUFKLEVBQVdDLEtBQVg7O0lBRUEsSUFBSVAsTUFBSixFQUFZO01BQ1JNLEtBQUssR0FBRztRQUNKRSxXQUFXLEVBQUUsTUFEVDtRQUVKQyxVQUFVLEVBQUUsTUFGUjtRQUdKQyxLQUFLLEVBQUU7TUFISCxDQUFSO0lBT0gsQ0FSRCxNQVFPO01BQ0hKLEtBQUssR0FBRztRQUNKRSxXQUFXLEVBQUU7TUFEVCxDQUFSO0lBR0g7O0lBRUQsb0JBQ0k7TUFBSyxFQUFFLEVBQUcsY0FBYW5CLEVBQUcsRUFBMUI7TUFBNkIsbUJBQWlCUztJQUE5QyxHQUNNN0IsT0FBTyxDQUFDQyxHQUFSLENBQVlDLEVBQUUsSUFBSTtNQUNoQixJQUFJVyxPQUFPLEdBQUlYLEVBQUUsQ0FBQ0wsS0FBSCxJQUFZQSxLQUEzQjtNQUNBLG9CQUNJO1FBQUssU0FBUyxFQUFDLHNCQUFmO1FBQXNDLEdBQUcsRUFBRyxhQUFZdUIsRUFBRyxJQUFHbEIsRUFBRSxDQUFDTCxLQUFNLEVBQXZFO1FBQTBFLEtBQUssRUFBRXdDO01BQWpGLGdCQUNJO1FBQ0ksU0FBUyxFQUFDLGtCQURkO1FBRUksSUFBSSxFQUFDLE9BRlQ7UUFHSSxFQUFFLEVBQUcsU0FBUWpCLEVBQUcsSUFBR2xCLEVBQUUsQ0FBQ0wsS0FBTSxFQUhoQztRQUlJLEtBQUssRUFBRUssRUFBRSxDQUFDTCxLQUpkO1FBS0ksT0FBTyxFQUFFZ0IsT0FMYjtRQU1JLFFBQVEsRUFBRSxLQUFLUCxZQU5uQjtRQU9JLFFBQVEsRUFBRThCLFVBUGQ7UUFRSSxJQUFJLEVBQUVSLElBQUksR0FBR0EsSUFBSCxHQUFXLFNBQVFSLEVBQUc7TUFScEMsRUFESixFQVdLLEtBQUs4QyxRQUFMLENBQWNoRSxFQUFkLEVBQWtCa0IsRUFBbEIsRUFBc0JXLE1BQXRCLEVBQThCcUMsTUFBOUIsRUFBc0NuQyxJQUF0QyxDQVhMLENBREo7SUFlSCxDQWpCQyxDQUROLEVBb0JLRSxTQUFTLGlCQUNWO01BQUcsU0FBUyxFQUFDO0lBQWIsR0FBNEJULEtBQTVCLENBckJKLENBREo7RUEyQkg7O0FBekdrRDtBQTRHdkR1QyxTQUFTLENBQUNwQixZQUFWLEdBQXlCO0VBQ3JCaEIsY0FBYyxFQUFHO0FBREksQ0FBekI7QUFJQW9DLFNBQVMsQ0FBQ25CLFNBQVYsR0FBc0I7RUFDbEIxQixFQUFFLEVBQUVoQyxxRUFBMkI0RDtBQURiLENBQXRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFZSxNQUFNdUIsS0FBTixTQUFvQmxGLHdEQUFwQixDQUFvQztFQUUvQ0ssV0FBVyxDQUFDQyxLQUFELEVBQVE7SUFDZixNQUFNQSxLQUFOO0lBRUEsS0FBS1csWUFBTCxHQUFvQixLQUFLQSxZQUFMLENBQWtCQyxJQUFsQixDQUF1QixJQUF2QixDQUFwQjtFQUNIOztFQUVEaUUsa0JBQWtCLENBQUNDLFNBQUQsRUFBWUMsU0FBWixFQUF1QkMsUUFBdkIsRUFBaUM7SUFDL0MsSUFBSSxLQUFLaEYsS0FBTCxDQUFXRSxLQUFYLEtBQXFCNEUsU0FBUyxDQUFDNUUsS0FBbkMsRUFBMEM7TUFDdEMsS0FBSytFLEtBQUwsQ0FBVy9FLEtBQVgsR0FBbUIsS0FBS0YsS0FBTCxDQUFXRSxLQUE5QjtJQUNIO0VBQ0o7O0VBRURTLFlBQVksQ0FBQ2EsRUFBRCxFQUFLO0lBQ2IsS0FBS3hCLEtBQUwsQ0FBVzBCLFFBQVgsQ0FBb0JGLEVBQXBCO0VBQ0g7O0VBRURJLE1BQU0sR0FBRztJQUVMLGtCQUFzRixLQUFLNUIsS0FBM0Y7SUFBQSxJQUFJO01BQUMwQixRQUFEO01BQVd4QixLQUFYO01BQWtCMkIsU0FBbEI7TUFBNkJFLEtBQTdCO01BQW9DRyxjQUFwQztNQUFvRGdEO0lBQXBELENBQUo7SUFBQSxJQUE4RS9DLElBQTlFOztJQUNBLElBQUlLLFNBQVMsR0FBSyxLQUFLeEMsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixPQUExQixLQUFzQ04sS0FBSyxLQUFLLEVBQWxFO0lBQ0EsSUFBSW9ELFVBQVUsR0FBRyxLQUFLbkYsS0FBTCxDQUFXcUMsY0FBWCxDQUEwQixXQUExQixJQUF5Q1IsU0FBekMsR0FBcUQsY0FBdEU7SUFDQSxJQUFJdUQsb0JBQW9CLEdBQUcsS0FBS3BGLEtBQUwsQ0FBV3FDLGNBQVgsQ0FBMEIsb0JBQTFCLElBQWtENkMsa0JBQWxELEdBQXVFLHdCQUFsRztJQUNBLG9CQUNJO01BQUssU0FBUyxFQUFFRTtJQUFoQixnQkFDSTtNQUNJLFNBQVMsRUFBRyxHQUFFRCxVQUFXLElBQUczQyxTQUFTLEdBQUcsT0FBSCxHQUFhLEVBQUcsRUFEekQ7TUFFSSxHQUFHLEVBQUU2QyxJQUFJLElBQUk7UUFBQyxLQUFLSixLQUFMLEdBQWFJLElBQWI7TUFBa0IsQ0FGcEM7TUFHSSxZQUFZLEVBQUVuRixLQUhsQjtNQUlJLG1CQUFpQmdDLGNBSnJCO01BS0ksUUFBUSxFQUFFLEtBQUt2QjtJQUxuQixHQU1Rd0IsSUFOUixFQURKLEVBU0tLLFNBQVMsaUJBQ1Y7TUFBRyxTQUFTLEVBQUM7SUFBYixHQUE0QlQsS0FBNUIsQ0FWSixDQURKO0VBZ0JIOztBQXhDOEM7QUEyQ25ENkMsS0FBSyxDQUFDMUIsWUFBTixHQUFxQjtFQUNqQmhCLGNBQWMsRUFBRztBQURBLENBQXJCOzs7Ozs7Ozs7Ozs7Ozs7O0FDMURBOztBQUVBLE1BQU10QyxPQUFPLEdBQUcsQ0FBQztFQUFDa0MsUUFBRDtFQUFXd0QsY0FBYyxHQUFHLEtBQTVCO0VBQW1DekQsU0FBUyxHQUFHO0FBQS9DLENBQUQsa0JBQ1o7RUFBTSxTQUFTLEVBQUVBLFNBQWpCO0VBQ00sdUJBQXVCLEVBQUU7SUFBRTBELE1BQU0sRUFBRUQsY0FBYyxHQUFHeEQsUUFBSCxhQUFHQSxRQUFILHVCQUFHQSxRQUFRLENBQUUwRCxPQUFWLENBQWtCLEtBQWxCLEVBQXlCLFFBQXpCLENBQUgsR0FBd0MxRDtFQUFoRTtBQUQvQixFQURKOztBQUlBLGlFQUFlbEMsT0FBZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFTyxNQUFNK0YsY0FBYyxHQUFJQyxHQUFELElBQVM7RUFDbkMsSUFBSUMsTUFBTSxHQUFHLENBQUMsRUFBZDs7RUFDQSxJQUFJRCxHQUFHLENBQUNFLFlBQVIsRUFBc0I7SUFDbEIsR0FBRztNQUNDRCxNQUFNLElBQUlELEdBQUcsQ0FBQ0csU0FBZDtJQUNILENBRkQsUUFFU0gsR0FBRyxHQUFHQSxHQUFHLENBQUNFLFlBRm5COztJQUdBLE9BQU8sQ0FBQ0QsTUFBRCxDQUFQO0VBQ0g7QUFDSixDQVJNO0FBVUEsTUFBTUcsYUFBYSxHQUFJQyxLQUFELElBQVc7RUFDcEMsSUFBRyxDQUFDQSxLQUFKLEVBQVcsT0FBT0EsS0FBUDtFQUNYQSxLQUFLLEdBQUdBLEtBQUssR0FBRyxJQUFoQjtFQUNBLE9BQU9SLHNEQUFNLENBQUNRLEtBQUQsQ0FBYjtBQUNILENBSk07QUFNQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDRCxLQUFELEVBQVFFLFNBQVIsS0FBc0I7RUFDdkQsSUFBRyxDQUFDRixLQUFKLEVBQVcsT0FBT0EsS0FBUDtFQUNYQSxLQUFLLEdBQUdBLEtBQUssR0FBRyxJQUFoQjtFQUNBLE9BQU9SLHNEQUFNLENBQUNRLEtBQUQsQ0FBTixDQUFjRyxFQUFkLENBQWlCRCxTQUFqQixDQUFQO0FBQ0gsQ0FKTTtBQU1BLE1BQU1FLFdBQVcsR0FBRyxDQUFDSixLQUFELEVBQVFLLE1BQU0sR0FBRyxpQkFBakIsS0FBdUM7RUFDOUQsSUFBRyxDQUFDTCxLQUFKLEVBQVcsT0FBT0EsS0FBUDtFQUNYLE9BQU9ELGFBQWEsQ0FBQ0MsS0FBRCxDQUFiLENBQXFCSyxNQUFyQixDQUE0QkEsTUFBNUIsQ0FBUDtBQUNILENBSE07QUFLQSxNQUFNQyxpQkFBaUIsR0FBSUMsSUFBRCxJQUFVO0VBQ3ZDLElBQUlDLFVBQVUsR0FBR0QsSUFBSSxDQUFDRSxRQUFMLEVBQWpCO0VBQ0EsSUFBR0QsVUFBVSxDQUFDRSxNQUFYLEdBQW9CLENBQXZCLEVBQTBCRixVQUFVLEdBQUksSUFBR0EsVUFBVyxFQUE1QjtFQUMxQkEsVUFBVSxHQUFHQSxVQUFVLENBQUNHLEtBQVgsQ0FBaUIsT0FBakIsQ0FBYjtFQUNBSCxVQUFVLEdBQUdBLFVBQVUsQ0FBQ0ksSUFBWCxDQUFnQixHQUFoQixDQUFiO0VBQ0EsT0FBT0osVUFBUDtBQUNILENBTk07QUFRQSxNQUFNSyxtQkFBbUIsR0FBSWxCLEdBQUQsSUFBUztFQUN4QyxJQUFJbUIsR0FBRyxHQUFHLEVBQVY7O0VBQ0EsS0FBSyxJQUFJQyxHQUFULElBQWdCcEIsR0FBaEIsRUFBcUI7SUFDakIsSUFBSW1CLEdBQUcsSUFBSSxFQUFYLEVBQWU7TUFDWEEsR0FBRyxJQUFJLEdBQVA7SUFDSDs7SUFDREEsR0FBRyxJQUFJQyxHQUFHLEdBQUcsR0FBTixHQUFZQyxrQkFBa0IsQ0FBQ3JCLEdBQUcsQ0FBQ29CLEdBQUQsQ0FBSixDQUFyQztFQUNIOztFQUVELE9BQU9ELEdBQVA7QUFDSCxDQVZNO0FBWUEsTUFBTUcsVUFBVSxHQUFHLE1BQU07RUFDNUIsSUFBSUMsR0FBRyxHQUFRekIsNENBQUcsQ0FBQzBCLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBakIsQ0FBbEI7RUFDQSxJQUFJQyxLQUFLLEdBQU1KLEdBQUcsQ0FBQ0ssTUFBSixDQUFXLElBQVgsQ0FBZjtFQUNBLElBQUlDLFFBQVEsR0FBR04sR0FBRyxDQUFDTSxRQUFKLEVBQWY7RUFDQSxJQUFJQyxPQUFPLEdBQUlILEtBQUssQ0FBQ2xGLGNBQU4sQ0FBcUIsU0FBckIsSUFBa0NrRixLQUFLLENBQUMsU0FBRCxDQUF2QyxHQUFxRCxJQUFwRTs7RUFDQSxJQUFHRSxRQUFRLElBQUksSUFBWixJQUFvQkEsUUFBUSxJQUFJLEVBQW5DLEVBQXNDO0lBQ2xDQyxPQUFPLElBQUssSUFBR0QsUUFBUyxFQUF4QjtFQUNIOztFQUNELE9BQU9DLE9BQVA7QUFDSCxDQVRNO0FBV0EsTUFBTUMsTUFBTSxHQUFJQyxJQUFELElBQVM7RUFDM0JBLElBQUksR0FBR0EsSUFBSSxDQUFDQyxXQUFMLEVBQVA7RUFDQSxPQUFPRCxJQUFJLENBQUNwQyxPQUFMLENBQWEsZ0JBQWIsRUFBOEIsR0FBOUIsQ0FBUDtBQUNILENBSE07QUFLQSxNQUFNc0MsZUFBZSxHQUFHLE1BQU07RUFDakMsSUFBRyxPQUFPVixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQVEsR0FBRUEsTUFBTSxDQUFDQyxRQUFQLENBQWdCVSxNQUFPLGdCQUFqQztFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxrQkFBa0IsR0FBRyxNQUFNO0VBQ3BDLElBQUlYLFFBQVEsR0FBRyxFQUFmOztFQUNBLElBQUcsT0FBT0QsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QkMsUUFBUSxHQUFHRCxNQUFNLENBQUNDLFFBQWxCLENBRDhCLENBRTlCOztJQUNBLElBQUlELE1BQU0sQ0FBQ2EsR0FBWCxFQUNJWixRQUFRLEdBQUdELE1BQU0sQ0FBQ2EsR0FBUCxDQUFXWixRQUF0QjtFQUNQOztFQUNELE9BQU9BLFFBQVA7QUFDSCxDQVRNO0FBV0EsTUFBTWEsU0FBUyxHQUFHLE1BQU07RUFDM0IsSUFBRyxPQUFPZCxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQU9BLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQlUsTUFBdkI7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTUksa0JBQWtCLEdBQUcsTUFBTTtFQUNwQyxJQUFHLE9BQU9mLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDL0IsT0FBT0EsTUFBTSxDQUFDQyxRQUFQLENBQWdCZSxRQUF2QjtFQUNGOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxjQUFjLEdBQUcsTUFBTTtFQUNoQyxJQUFHLE9BQU9qQixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQU9BLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBdkI7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTWdCLG9CQUFvQixHQUFHLE1BQU07RUFDdEMsSUFBRyxPQUFPbEIsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNtQixtQkFBUCxJQUE4QixFQUFyQztFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxlQUFlLEdBQUlDLFdBQUQsSUFBaUI7RUFDNUMsSUFBRyxPQUFPckIsTUFBUCxLQUFrQixXQUFyQixFQUFpQztJQUM3QixPQUFRLEdBQUVBLE1BQU0sQ0FBQ3NCLFlBQWEsR0FBRUQsV0FBWSxFQUE1QztFQUNIOztFQUNELE9BQU8sSUFBSyxFQUFaO0FBQ0gsQ0FMTTtBQU9BLE1BQU1FLGlCQUFpQixHQUFHLENBQUMzQixHQUFELEVBQU05RyxLQUFOLEtBQWdCO0VBQzdDLElBQUcsT0FBT2tILE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUJBLE1BQU0sQ0FBQ3dCLFlBQVAsQ0FBb0JDLE9BQXBCLENBQTRCN0IsR0FBNUIsRUFBaUM5RyxLQUFqQztFQUNIO0FBQ0osQ0FKTTtBQU1BLE1BQU00SSxtQkFBbUIsR0FBRyxDQUFDOUIsR0FBRCxFQUFNK0IsUUFBTixLQUFtQjtFQUNsRCxJQUFHLE9BQU8zQixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLElBQUkxRCxHQUFHLEdBQUcwRCxNQUFNLENBQUN3QixZQUFQLENBQW9CSSxPQUFwQixDQUE0QmhDLEdBQTVCLENBQVY7O0lBQ0EsSUFBRytCLFFBQUgsRUFBWTtNQUNSRSxPQUFPLENBQUNDLEdBQVIsQ0FBYSxvQ0FBbUNsQyxHQUFJLEVBQXBEO01BQ0FtQyxzQkFBc0IsQ0FBQ25DLEdBQUQsQ0FBdEI7SUFDSDs7SUFDRCxPQUFPdEQsR0FBUDtFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBVk07QUFZQSxNQUFNeUYsc0JBQXNCLEdBQUluQyxHQUFELElBQVM7RUFDM0MsSUFBRyxPQUFPSSxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCQSxNQUFNLENBQUN3QixZQUFQLENBQW9CUSxVQUFwQixDQUErQnBDLEdBQS9CO0VBQ0g7QUFDSixDQUpNO0FBTUEsTUFBTXFDLHNCQUFzQixHQUFHLE1BQU07RUFDeEMsSUFBRyxPQUFPakMsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNrQyxzQkFBZDtFQUNIOztFQUNELE9BQU8sS0FBUDtBQUNILENBTE07QUFPQSxNQUFNQyx1QkFBdUIsR0FBSTdGLEdBQUQsSUFBUztFQUM1QyxJQUFHLE9BQU8wRCxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCQSxNQUFNLENBQUNrQyxzQkFBUCxHQUFnQzVGLEdBQWhDO0VBQ0g7QUFDSixDQUpNO0FBTUEsTUFBTThGLHNCQUFzQixHQUFHLE1BQU07RUFDeEMsSUFBSUMsUUFBUSxHQUFHLElBQWY7O0VBQ0EsSUFBRyxPQUFPQyxTQUFQLEtBQXFCLFdBQXhCLEVBQXFDO0lBQ2pDRCxRQUFRLEdBQUlDLFNBQVMsQ0FBQ0MsU0FBVixJQUF1QkQsU0FBUyxDQUFDQyxTQUFWLENBQW9CLENBQXBCLENBQXhCLElBQW1ERCxTQUFTLENBQUNELFFBQTdELElBQXlFQyxTQUFTLENBQUNFLFlBQTlGO0VBQ0g7O0VBQ0QsT0FBT0gsUUFBUDtBQUNILENBTk07QUFRQSxNQUFNSSxhQUFhLEdBQUlDLE1BQUQsSUFBWTtFQUNyQyxJQUFHOUYsTUFBTSxDQUFDK0YsSUFBUCxDQUFZRCxNQUFaLEVBQW9CbkQsTUFBcEIsR0FBNkIsQ0FBaEMsRUFBbUM7SUFDL0IsTUFBTXFELFVBQVUsR0FBR2hHLE1BQU0sQ0FBQytGLElBQVAsQ0FBWUQsTUFBWixFQUFvQixDQUFwQixDQUFuQjtJQUNBLE1BQU1HLFNBQVMsR0FBR0MsUUFBUSxDQUFDQyxjQUFULENBQXdCSCxVQUF4QixDQUFsQjtJQUNBLElBQUlDLFNBQUosRUFBZTdDLE1BQU0sQ0FBQ2dELFFBQVAsQ0FBZ0IsQ0FBaEIsRUFBbUJ6RSxjQUFjLENBQUNzRSxTQUFELENBQWpDO0VBQ2xCO0FBQ0osQ0FOTTtBQVFBLE1BQU1JLFNBQVMsR0FBRyxDQUFDQyxLQUFELEVBQVFSLE1BQVIsS0FBbUI7RUFDeEMsSUFBR1EsS0FBSyxJQUFJUixNQUFaLEVBQW9CO0lBQ2hCLE9BQU9BLE1BQU0sQ0FBQ1EsS0FBRCxDQUFiO0VBQ0g7O0VBQ0QsT0FBTyxFQUFQO0FBQ0gsQ0FMTTtBQU9BLE1BQU1DLFlBQVksR0FBRyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsS0FBc0I7RUFDOUMsTUFBTUMsS0FBSyxHQUFHMUcsTUFBTSxDQUFDK0YsSUFBUCxDQUFZUyxPQUFaLENBQWQ7RUFDQSxNQUFNRyxLQUFLLEdBQUczRyxNQUFNLENBQUMrRixJQUFQLENBQVlVLE9BQVosQ0FBZDs7RUFFQSxJQUFJQyxLQUFLLENBQUMvRCxNQUFOLEtBQWlCZ0UsS0FBSyxDQUFDaEUsTUFBM0IsRUFBbUM7SUFDL0IsT0FBTyxLQUFQO0VBQ0g7O0VBRUQsS0FBSyxJQUFJSyxHQUFULElBQWdCMEQsS0FBaEIsRUFBdUI7SUFDbkIsSUFBSUYsT0FBTyxDQUFDeEQsR0FBRCxDQUFQLEtBQWlCeUQsT0FBTyxDQUFDekQsR0FBRCxDQUE1QixFQUFtQztNQUMvQixPQUFPLEtBQVA7SUFDSDtFQUNKOztFQUVELE9BQU8sSUFBUDtBQUNILENBZk07QUFpQkEsTUFBTTRELFdBQVcsR0FBRyxDQUFDQyxFQUFELEVBQUtDLEVBQUwsS0FDdkJELEVBQUUsQ0FBQ2xFLE1BQUgsS0FBY21FLEVBQUUsQ0FBQ25FLE1BQWpCLElBQTJCa0UsRUFBRSxDQUFDRSxLQUFILENBQVMsQ0FBQ0MsQ0FBRCxFQUFJQyxHQUFKLEtBQVlWLFlBQVksQ0FBQ1MsQ0FBRCxFQUFJRixFQUFFLENBQUNHLEdBQUQsQ0FBTixDQUFqQyxDQUR4QjtBQUdBLE1BQU1DLE9BQU8sR0FBSXRGLEdBQUQsSUFBUztFQUM1QixPQUFPNUIsTUFBTSxDQUFDK0YsSUFBUCxDQUFZbkUsR0FBWixFQUFpQmUsTUFBakIsS0FBNEIsQ0FBbkM7QUFDSCxDQUZNO0FBS0EsTUFBTXdFLGVBQWUsR0FBSXBFLEdBQUQsSUFBUztFQUNwQyxPQUFPQSxHQUFHLENBQ0xMLFFBREUsQ0FDTyxRQURQLEVBRUZsQixPQUZFLENBRU0sS0FGTixFQUVhLEdBRmIsRUFHRkEsT0FIRSxDQUdNLEtBSE4sRUFHYSxHQUhiLEVBSUZBLE9BSkUsQ0FJTSxJQUpOLEVBSVksRUFKWixDQUFQO0FBS0gsQ0FOTTtBQVFBLE1BQU00RixZQUFZLEdBQUcsT0FDeEJDLEVBRHdCLEVBRXhCQyxrQkFBa0IsR0FBRyxDQUZHLEtBR3ZCO0VBQ0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxrQkFBcEIsRUFBd0NDLENBQUMsRUFBekMsRUFBNkM7SUFDekMsSUFBSSxNQUFNRixFQUFFLEVBQVosRUFBZ0I7TUFDWixPQUFPLElBQVA7SUFDSDtFQUNKOztFQUVELE9BQU8sS0FBUDtBQUNILENBWE07QUFhQSxNQUFNRyxpQkFBaUIsR0FBRyxNQUFNO0VBQ25DLElBQUcsT0FBT3BFLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUIsT0FBT0EsTUFBTSxDQUFDcUUsNkJBQVAsSUFBd0NDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRiw2QkFBM0Q7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTUcsZ0JBQWdCLEdBQUcsQ0FBQzlLLEtBQUQsRUFBUStLLGdCQUFSLEVBQTBCQyxpQkFBaUIsR0FBRyxJQUE5QyxFQUFvREMsTUFBTSxHQUFHLElBQTdELEtBQXNFO0VBQUE7O0VBQ2xHLE1BQU1DLGdCQUFnQixHQUFJRixpQkFBaUIsSUFBSUMsTUFBdEIsR0FBZ0NELGlCQUFpQixHQUFHLElBQXBCLEdBQTJCQyxNQUEzRCxHQUFvRSxJQUE3RjtFQUNBLE1BQU1FLFlBQVksR0FBRyxFQUFyQjtFQUNBLE1BQU07SUFBRTVFO0VBQUYsSUFBZXZHLEtBQXJCO0VBRUEsSUFBSSxDQUFDa0wsZ0JBQUwsRUFBdUIsT0FBTyxLQUFQO0VBRXZCLElBQUksQ0FBQzNFLFFBQUwsRUFBZSxPQUFPLEtBQVA7RUFFZixJQUFJd0UsZ0JBQWdCLEdBQUcsQ0FBbkIsdUJBQXdCeEUsUUFBUSxDQUFDNkUsS0FBakMsNENBQXdCLGdCQUFnQmpLLElBQTVDLEVBQWtEZ0ssWUFBWSxDQUFDM0ssSUFBYixDQUFrQitGLFFBQVEsQ0FBQzZFLEtBQVQsQ0FBZWpLLElBQWpDO0VBQ2xELHVCQUFJb0YsUUFBUSxDQUFDOEUsS0FBYiw0Q0FBSSxnQkFBZ0JsSyxJQUFwQixFQUEwQmdLLFlBQVksQ0FBQzNLLElBQWIsQ0FBa0IrRixRQUFRLENBQUM4RSxLQUFULENBQWVsSyxJQUFqQztFQUMxQixJQUFJb0YsUUFBUSxDQUFDcEYsSUFBYixFQUFtQmdLLFlBQVksQ0FBQzNLLElBQWIsQ0FBa0IrRixRQUFRLENBQUNwRixJQUEzQjtFQUVuQixPQUFPZ0ssWUFBWSxDQUFDdEYsTUFBYixHQUFzQixDQUF0QixHQUEwQnNGLFlBQVksQ0FBQ3BGLElBQWIsQ0FBa0IsS0FBbEIsQ0FBMUIsR0FBcUQsS0FBNUQ7QUFDSCxDQWRNO0FBZ0JBLE1BQU11RixhQUFhLEdBQUl0TCxLQUFELElBQVc7RUFBQTs7RUFDcEMsSUFBSXVMLEtBQUssR0FBRyxFQUFaOztFQUNBLElBQUksb0JBQUF2TCxLQUFLLENBQUN3TCxRQUFOLG9FQUFnQjNGLE1BQWhCLElBQXlCLENBQTdCLEVBQWdDO0lBQzVCMEYsS0FBSyxHQUFHLENBQUMsR0FBR3ZMLEtBQUssQ0FBQ3dMLFFBQVYsQ0FBUjtFQUNIOztFQUNELElBQUl4TCxLQUFLLENBQUN5TCxTQUFWLEVBQXFCRixLQUFLLENBQUMvSyxJQUFOLENBQVdSLEtBQUssQ0FBQ3lMLFNBQWpCO0VBRXJCLE9BQU9GLEtBQVA7QUFDSCxDQVJNOztBQVVQLE1BQU1HLFNBQVMsR0FBRyxNQUFNckYsR0FBTixJQUFhO0VBQzNCLE1BQU1zRixHQUFHLEdBQUd2QyxRQUFRLENBQUN3QyxhQUFULENBQXVCLEtBQXZCLENBQVo7RUFDQUQsR0FBRyxDQUFDRSxHQUFKLEdBQVV4RixHQUFWO0VBQ0FzRixHQUFHLENBQUNHLFdBQUosR0FBa0IsV0FBbEI7RUFFQSxPQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7SUFDcENOLEdBQUcsQ0FBQ08sTUFBSixHQUFhLE1BQU1GLE9BQU8sQ0FBQ0wsR0FBRCxDQUExQjs7SUFDQUEsR0FBRyxDQUFDUSxPQUFKLEdBQWNGLE1BQWQ7RUFDSCxDQUhNLENBQVA7QUFJSCxDQVREOztBQVdPLE1BQU1HLGVBQWUsR0FBRyxNQUFPQyxNQUFQLElBQWtCO0VBQzdDLE1BQU1WLEdBQUcsR0FBRyxNQUFNRCxTQUFTLENBQUNXLE1BQUQsQ0FBM0I7RUFDQSxNQUFNQyxRQUFRLEdBQUcsR0FBakI7RUFDQSxNQUFNQyxTQUFTLEdBQUdDLElBQUksQ0FBQ25CLEtBQUwsQ0FBV00sR0FBRyxDQUFDYyxhQUFKLEdBQW9CLEdBQXBCLEdBQTBCZCxHQUFHLENBQUNlLFlBQXpDLENBQWxCO0VBRUEsTUFBTUMsTUFBTSxHQUFHdkQsUUFBUSxDQUFDd0MsYUFBVCxDQUF1QixRQUF2QixDQUFmO0VBQ0FlLE1BQU0sQ0FBQ3hLLEtBQVAsR0FBZW1LLFFBQWY7RUFDQUssTUFBTSxDQUFDQyxNQUFQLEdBQWdCTCxTQUFoQjtFQUNBSSxNQUFNLENBQUNFLFVBQVAsQ0FBa0IsSUFBbEIsRUFBd0JDLFNBQXhCLENBQWtDbkIsR0FBbEMsRUFBdUMsQ0FBdkMsRUFBMEMsQ0FBMUMsRUFBNkNXLFFBQTdDLEVBQXVEQyxTQUF2RDtFQUVBLE1BQU1sRyxHQUFHLEdBQUcsTUFBTXNHLE1BQU0sQ0FBQ0ksU0FBUCxDQUFrQixXQUFsQixFQUE4QixHQUE5QixDQUFsQjtFQUNBNUUsT0FBTyxDQUFDQyxHQUFSLENBQVkvQixHQUFaLEVBQWlCaUcsUUFBakIsRUFBMkJDLFNBQTNCO0VBQ0EsT0FBTztJQUFDbEcsR0FBRDtJQUFNbEUsS0FBSyxFQUFFbUssUUFBYjtJQUF1Qk0sTUFBTSxFQUFFTDtFQUEvQixDQUFQO0FBQ0gsQ0FiTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFSQSxNQUFNUyxvQkFBb0IsR0FBRyxVQUE3QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFVBQTdCO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsY0FBakM7QUFDQSxNQUFNQywyQkFBMkIsR0FBRyxpQkFBcEM7QUFDQSxNQUFNQyxnQ0FBZ0MsR0FBRyxDQUFDSCxvQkFBRCxFQUF1QkMsd0JBQXZCLEVBQWlEQywyQkFBakQsQ0FBekM7QUFDQSxNQUFNRSx3QkFBd0IsR0FBRyxLQUFqQztBQUNBLE1BQU1DLHVCQUF1QixHQUFHLElBQWhDO0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcsT0FBbEM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyxVQUFyQztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLFNBQTNCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsY0FBOUI7QUFDUDtBQUVlLE1BQU1DLFlBQU4sQ0FBbUI7RUFFOUIxTyxXQUFXLENBQUMyTyxTQUFELEVBQVlDLE9BQU8sR0FBRyxFQUF0QixFQUEwQjtJQUFBLHFHQWNuQkMsQ0FBRCxJQUFPO01BQ3BCLEtBQUtDLGNBQUwsQ0FBb0JsSCxnREFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUExQixJQUFzQzJNLENBQXRDO01BQ0EsS0FBS0UsWUFBTCxDQUFrQnpOLFFBQVEsQ0FBQ3VOLENBQUMsQ0FBQ25OLEVBQUgsQ0FBMUIsSUFBb0NtTixDQUFwQztNQUNBLElBQUdBLENBQUMsQ0FBQ3ZNLGNBQUYsQ0FBaUIsb0JBQWpCLENBQUgsRUFDSSxLQUFLLElBQUkwTSxDQUFULElBQWNILENBQUMsQ0FBQ0ksa0JBQWhCLEVBQW9DO1FBQ2hDLEtBQUtDLEtBQUwsQ0FBVzVOLFFBQVEsQ0FBQzBOLENBQUMsQ0FBQ3ROLEVBQUgsQ0FBbkIsSUFBNkJzTixDQUE3Qjs7UUFDQSxLQUFLRyxjQUFMLENBQW9CSCxDQUFDLENBQUNJLFlBQXRCO01BQ0g7SUFDUixDQXRCb0M7O0lBQUEsc0dBd0JuQixNQUFNO01BQ3BCLEtBQUssSUFBSVAsQ0FBVCxJQUFjLEtBQUtGLFNBQW5CLEVBQThCO1FBQzFCLEtBQUtRLGNBQUwsQ0FBb0JOLENBQXBCO01BQ0g7SUFDSixDQTVCb0M7O0lBQUEsb0dBOEJwQkEsQ0FBRCxJQUFPO01BQ25CLE9BQU9WLGdDQUFnQyxDQUFDMU4sUUFBakMsQ0FBMENvTyxDQUFDLENBQUMzTixJQUE1QyxDQUFQO0lBQ0gsQ0FoQ29DOztJQUFBLG1HQWtDdEIsQ0FBQzJOLENBQUQsRUFBSVEsTUFBSixLQUFlO01BQzFCLElBQUlsUCxLQUFLLEdBQUdrUCxNQUFNLENBQUNsUCxLQUFQLENBQWFtUCxLQUFiLENBQW1CLEdBQW5CLEVBQXdCL08sR0FBeEIsQ0FBNEJGLENBQUMsSUFBSWlCLFFBQVEsQ0FBQ2pCLENBQUQsQ0FBekMsQ0FBWjs7TUFDQSxLQUFLLElBQUlrUCxFQUFULElBQWVwUCxLQUFmLEVBQXNCO1FBQ2xCLElBQUksQ0FBQzBPLENBQUMsQ0FBQ1csTUFBRixDQUFTalAsR0FBVCxDQUFha1AsQ0FBQyxJQUFJQSxDQUFDLENBQUMvTixFQUFwQixFQUF3QmpCLFFBQXhCLENBQWlDOE8sRUFBakMsQ0FBTCxFQUNJLE9BQU8sS0FBUDtNQUNQOztNQUNELE9BQU8sSUFBUDtJQUNILENBekNvQzs7SUFBQSxvR0EyQ3BCVixDQUFELElBQU87TUFDbkIsSUFBSW5OLEVBQUUsR0FBR2dPLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQmQsQ0FBakIsSUFBc0JBLENBQXRCLEdBQTBCQSxDQUFDLENBQUNuTixFQUFyQztNQUNBLElBQUlrTyxDQUFDLEdBQUcsS0FBS2hCLE9BQUwsQ0FBYWxOLEVBQWIsS0FBb0IsSUFBNUI7TUFDQSxPQUFPa08sQ0FBQyxHQUFHQSxDQUFILEdBQU8sSUFBZjtJQUNILENBL0NvQzs7SUFBQSxnR0FpRHhCUCxNQUFELElBQVk7TUFDcEIsT0FBT0EsTUFBTSxDQUFDbFAsS0FBUCxLQUFpQixFQUF4QjtJQUNILENBbkRvQzs7SUFBQSxzR0FxRG5CLENBQUNrUCxNQUFELEVBQVMxTCxHQUFULEtBQWlCO01BQy9CLE9BQU8wTCxNQUFNLENBQUNsUCxLQUFQLENBQWFtUCxLQUFiLENBQW1CLEdBQW5CLEVBQXdCN08sUUFBeEIsQ0FBaUNrRCxHQUFqQyxDQUFQO0lBQ0gsQ0F2RG9DOztJQUFBLDRHQXlEWmtNLElBQUQsSUFBVTtNQUM5QixJQUFJQyxnQkFBZ0IsR0FBR0QsSUFBSSxDQUFDRSxzQkFBTCxLQUFnQzNCLHdCQUFoQyxHQUEyRCxJQUEzRCxHQUFrRSxLQUF6Rjs7TUFDQSxNQUFNNEIsb0JBQW9CLEdBQUcsS0FBS0MsYUFBTCxDQUFtQkosSUFBSSxDQUFDSyxrQkFBeEIsQ0FBN0I7O01BQ0EsSUFBSSxDQUFDRixvQkFBTCxFQUEyQjtRQUN2QkYsZ0JBQWdCLEdBQUdELElBQUksQ0FBQ00sb0JBQUwsS0FBOEI3Qix5QkFBOUIsR0FBMEQsS0FBMUQsR0FBa0UsSUFBckY7TUFDSCxDQUZELE1BRU87UUFDSCxRQUFRdUIsSUFBSSxDQUFDTSxvQkFBYjtVQUNJLEtBQUs3Qix5QkFBTDtZQUFnQztjQUM1QixLQUFLLElBQUk4QixXQUFULElBQXdCUCxJQUFJLENBQUNRLGFBQTdCLEVBQTRDO2dCQUN4QyxJQUFJUixJQUFJLENBQUNFLHNCQUFMLEtBQWdDM0Isd0JBQXBDLEVBQ0kwQixnQkFBZ0IsR0FBR0EsZ0JBQWdCLElBQUksS0FBS1EsZUFBTCxDQUFxQk4sb0JBQXJCLEVBQTJDSSxXQUEzQyxDQUF2QyxDQURKLEtBR0lOLGdCQUFnQixHQUFHQSxnQkFBZ0IsSUFBSSxLQUFLUSxlQUFMLENBQXFCTixvQkFBckIsRUFBMkNJLFdBQTNDLENBQXZDO2NBQ1A7WUFDSjtZQUNHOztVQUNKLEtBQUs3Qiw0QkFBTDtZQUFtQztjQUMvQixLQUFLLElBQUk2QixXQUFULElBQXdCUCxJQUFJLENBQUNRLGFBQTdCLEVBQTRDO2dCQUN4QyxJQUFJUixJQUFJLENBQUNFLHNCQUFMLEtBQWdDM0Isd0JBQXBDLEVBQ0kwQixnQkFBZ0IsR0FBR0EsZ0JBQWdCLElBQUksQ0FBQyxLQUFLUSxlQUFMLENBQXFCTixvQkFBckIsRUFBMkNJLFdBQTNDLENBQXhDLENBREosS0FHSU4sZ0JBQWdCLEdBQUdBLGdCQUFnQixJQUFJLENBQUMsS0FBS1EsZUFBTCxDQUFxQk4sb0JBQXJCLEVBQTJDSSxXQUEzQyxDQUF4QztjQUNQO1lBQ0o7WUFDRztRQWxCUjtNQW9CSCxDQTFCNkIsQ0EyQjlCOzs7TUFDQSxJQUFJUCxJQUFJLENBQUNVLFVBQUwsS0FBb0IvQixrQkFBeEIsRUFBNEM7UUFDeEMsT0FBT3NCLGdCQUFQO01BQ0gsQ0E5QjZCLENBK0I5Qjs7O01BQ0EsT0FBTyxDQUFDQSxnQkFBUjtJQUNILENBMUZvQzs7SUFBQSxrR0E0RnRCakIsQ0FBRCxJQUFPO01BQ2pCLE1BQU1RLE1BQU0sR0FBRyxLQUFLWSxhQUFMLENBQW1CcEIsQ0FBbkIsQ0FBZjs7TUFFQSxJQUFJQSxDQUFDLENBQUMyQixLQUFGLEtBQVkvQixxQkFBaEIsRUFBdUM7UUFDbkMsSUFBSSxDQUFDSSxDQUFDLENBQUM0QixTQUFQLEVBQWtCLE9BQU8sSUFBUDtRQUNsQixJQUFJLENBQUNwQixNQUFMLEVBQWEsT0FBTyxLQUFQO1FBQ2IsSUFBSSxDQUFDLEtBQUtxQixTQUFMLENBQWVyQixNQUFmLENBQUwsRUFBNkIsT0FBTyxLQUFQO1FBQzdCLElBQUksS0FBS3NCLGFBQUwsQ0FBbUI5QixDQUFuQixLQUF5QixDQUFDLEtBQUsrQixZQUFMLENBQWtCL0IsQ0FBbEIsRUFBcUJRLE1BQXJCLENBQTlCLEVBQ0ksT0FBTyxLQUFQO1FBQ0osT0FBTyxJQUFQO01BQ0gsQ0FWZ0IsQ0FZakI7OztNQUNBLEtBQUssSUFBSXdCLE1BQVQsSUFBbUJoQyxDQUFDLENBQUNpQyxZQUFyQixFQUFtQztRQUMvQixJQUFJLENBQUMsS0FBS0MscUJBQUwsQ0FBMkIsS0FBSzdCLEtBQUwsQ0FBVzJCLE1BQVgsQ0FBM0IsQ0FBTCxFQUFxRDtVQUNqRDtRQUNKLElBQUksQ0FBQ2hDLENBQUMsQ0FBQzRCLFNBQVAsRUFBa0IsT0FBTyxJQUFQO1FBQ2xCLElBQUksQ0FBQ3BCLE1BQUwsRUFBYSxPQUFPLEtBQVA7UUFDYixJQUFJLENBQUMsS0FBS3FCLFNBQUwsQ0FBZXJCLE1BQWYsQ0FBTCxFQUE2QixPQUFPLEtBQVA7UUFDN0IsSUFBSSxLQUFLc0IsYUFBTCxDQUFtQjlCLENBQW5CLEtBQXlCLENBQUMsS0FBSytCLFlBQUwsQ0FBa0IvQixDQUFsQixFQUFxQlEsTUFBckIsQ0FBOUIsRUFDSSxPQUFPLEtBQVA7UUFDSixPQUFPLElBQVA7TUFDSDs7TUFFRCxPQUFPLElBQVA7SUFDSCxDQXJIb0M7O0lBQUEscUdBdUhuQlIsQ0FBRCxJQUFPO01BQ3BCLElBQUltQyxHQUFHLEdBQUcsS0FBS0MsV0FBTCxDQUFpQnBDLENBQWpCLENBQVY7O01BQ0EsSUFBR0EsQ0FBQyxDQUFDdk0sY0FBRixDQUFpQixvQkFBakIsQ0FBSCxFQUNJLEtBQUssSUFBSXVOLElBQVQsSUFBaUJoQixDQUFDLENBQUNJLGtCQUFuQixFQUF1QztRQUNuQztRQUNBK0IsR0FBRyxHQUFHQSxHQUFHLElBQUksS0FBS0UsY0FBTCxDQUFvQnJCLElBQUksQ0FBQ1QsWUFBekIsQ0FBYjtNQUNIO01BQ0wsT0FBTzRCLEdBQVA7SUFDSCxDQS9Ib0M7O0lBQUEsNEdBaUlaRyxRQUFELElBQWM7TUFBQTs7TUFDbEMsSUFBSUgsR0FBRyxHQUFHLEVBQVY7TUFDQSxNQUFNSSxJQUFJLEdBQUd4SixnREFBTSxDQUFDdUosUUFBUSxDQUFDalAsSUFBVixDQUFuQjtNQUNBLElBQUltUCxVQUFVLDRCQUFHLEtBQUtDLGVBQUwsQ0FBcUJsUixJQUFyQixDQUEwQndQLENBQUMsSUFBSUEsQ0FBQyxDQUFDMkIsV0FBRixLQUFrQkosUUFBUSxDQUFDelAsRUFBMUQsQ0FBSCwwREFBRyxzQkFBK0R2QixLQUFoRjs7TUFDQSxJQUFHLENBQUNrUixVQUFELElBQWUsQ0FBQUYsUUFBUSxTQUFSLElBQUFBLFFBQVEsV0FBUixnQ0FBQUEsUUFBUSxDQUFFM0IsTUFBVixzRUFBa0I1SSxNQUFsQixJQUEyQixDQUE3QyxFQUErQztRQUMzQztRQUNBLE1BQU00SyxVQUFVLEdBQUdMLFFBQVEsQ0FBQzNCLE1BQVQsQ0FBZ0JwUCxJQUFoQixDQUFxQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUNvUixVQUE1QixDQUFuQjtRQUNBLElBQUdELFVBQUgsRUFBZUgsVUFBVSxHQUFHRyxVQUFVLENBQUM5UCxFQUFYLENBQWNpRixRQUFkLEVBQWI7TUFDbEI7O01BQ0QsSUFBRzBLLFVBQUgsRUFBZTtRQUNYLElBQUlGLFFBQVEsQ0FBQ2pRLElBQVQsS0FBa0I2TSxvQkFBdEIsRUFBNENzRCxVQUFVLEdBQUdBLFVBQVUsS0FBSyxPQUFmLEdBQXlCLEtBQXpCLEdBQWlDLENBQUMsQ0FBQ0EsVUFBaEQ7UUFDNUMsSUFBSUYsUUFBUSxDQUFDalEsSUFBVCxLQUFrQmdOLDJCQUFsQixJQUFpRGlELFFBQVEsQ0FBQ2pRLElBQVQsS0FBa0I4TSxvQkFBdkUsRUFBNkZxRCxVQUFVLEdBQUcvUCxRQUFRLENBQUMrUCxVQUFELENBQXJCO1FBQzdGLElBQUlGLFFBQVEsQ0FBQ2pRLElBQVQsS0FBa0IrTSx3QkFBdEIsRUFBZ0RvRCxVQUFVLEdBQUdBLFVBQVUsQ0FBQy9CLEtBQVgsQ0FBaUIsR0FBakIsRUFBc0IvTyxHQUF0QixDQUEwQm1SLE1BQU0sSUFBSXBRLFFBQVEsQ0FBQ29RLE1BQUQsQ0FBNUMsS0FBeUQsRUFBdEU7TUFDbkQ7O01BRURWLEdBQUcsQ0FBQ0ksSUFBRCxDQUFILEdBQWFDLFVBQVUsSUFBSSxFQUEzQjtNQUNBLElBQUdGLFFBQVEsQ0FBQ2pRLElBQVQsS0FBa0IrTSx3QkFBbEIsSUFBOEMrQyxHQUFHLENBQUNJLElBQUQsQ0FBSCxLQUFjLEVBQS9ELEVBQW1FSixHQUFHLENBQUNJLElBQUQsQ0FBSCxHQUFZLEVBQVo7TUFDbkUsSUFBR0QsUUFBUSxDQUFDN08sY0FBVCxDQUF3QixvQkFBeEIsQ0FBSCxFQUNJLEtBQUssSUFBSXVOLElBQVQsSUFBaUJzQixRQUFRLENBQUNsQyxrQkFBMUIsRUFBOEM7UUFDMUM7UUFDQSxJQUFJMEMsSUFBSSxHQUFHLEtBQUtDLHFCQUFMLENBQTJCL0IsSUFBSSxDQUFDVCxZQUFoQyxDQUFYOztRQUNBNEIsR0FBRyxtQ0FBT0EsR0FBUCxHQUFlVyxJQUFmLENBQUg7TUFDSDtNQUNMLE9BQU9YLEdBQVA7SUFDSCxDQXpKb0M7O0lBQUEsb0dBMkpyQixNQUFNO01BQ2xCLElBQUlBLEdBQUcsR0FBRyxFQUFWO01BQ0EsS0FBS3JDLFNBQUwsQ0FBZWtELE9BQWYsQ0FBdUJoRCxDQUFDLElBQUk7UUFDeEIsSUFBSThDLElBQUksR0FBRyxLQUFLQyxxQkFBTCxDQUEyQi9DLENBQTNCLENBQVg7O1FBQ0FtQyxHQUFHLG1DQUFPQSxHQUFQLEdBQWNXLElBQWQsQ0FBSDtNQUNILENBSEQ7TUFJQSxPQUFPWCxHQUFQO0lBQ0gsQ0FsS29DOztJQUFBLGdHQW9LekIsTUFBTTtNQUNkLElBQUlBLEdBQUcsR0FBRyxJQUFWOztNQUNBLEtBQUssSUFBSW5DLENBQVQsSUFBYyxLQUFLRixTQUFuQixFQUE4QjtRQUMxQnFDLEdBQUcsR0FBR0EsR0FBRyxJQUFJLEtBQUtFLGNBQUwsQ0FBb0JyQyxDQUFwQixDQUFiO01BQ0g7O01BQ0QsT0FBT21DLEdBQVA7SUFDSCxDQTFLb0M7O0lBQUEsd0dBNEtoQjlPLElBQUQsSUFBVTtNQUMxQixNQUFNa1AsSUFBSSxHQUFHeEosZ0RBQU0sQ0FBQzFGLElBQUQsQ0FBbkI7TUFDQSxPQUFPLEtBQUs0TSxjQUFMLENBQW9CNU0sSUFBcEIsS0FBNkIsS0FBSzRNLGNBQUwsQ0FBb0JzQyxJQUFwQixDQUE3QixJQUEyRCxJQUFsRTtJQUNILENBL0tvQzs7SUFBQSxzR0FpTGxCMVAsRUFBRCxJQUFRO01BQ3RCLE9BQU8sS0FBS3FOLFlBQUwsQ0FBa0J6TixRQUFRLENBQUNJLEVBQUQsQ0FBMUIsS0FBbUMsSUFBMUM7SUFDSCxDQW5Mb0M7O0lBQ2pDLEtBQUtpTixTQUFMLEdBQWlCQSxTQUFqQjtJQUNBLEtBQUsyQyxlQUFMLEdBQXVCMUMsT0FBdkI7SUFDQSxLQUFLQSxPQUFMLEdBQWUsRUFBZixDQUhpQyxDQUlqQzs7SUFDQSxLQUFLLElBQUlnQixDQUFULElBQWMsS0FBSzBCLGVBQW5CLEVBQ0ksS0FBSzFDLE9BQUwsQ0FBYWdCLENBQUMsQ0FBQzJCLFdBQWYsSUFBOEIzQixDQUE5Qjs7SUFDSixLQUFLZCxjQUFMLEdBQXNCLEVBQXRCO0lBQ0EsS0FBS0MsWUFBTCxHQUFvQixFQUFwQixDQVJpQyxDQVNqQzs7SUFDQSxLQUFLRyxLQUFMLEdBQWEsRUFBYjs7SUFDQSxLQUFLNEMsZUFBTDtFQUNIOztBQWQ2Qjs7Ozs7Ozs7Ozs7QUNibEM7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQU9BLE1BQU1RLFlBQVksR0FBRyxRQUEyRTtFQUFBLElBQTFFO0lBQUVwTixLQUFGO0lBQVNxTixJQUFUO0lBQWVwQixRQUFmO0lBQXlCclAsU0FBekI7SUFBb0NZLFVBQXBDO0lBQWdEWTtFQUFoRCxDQUEwRTtFQUFBLElBQVhsQixJQUFXOztFQUU1RixvQkFDSSwyREFBQywwREFBRCw0RUFDUThDLEtBRFIsRUFFUTlDLElBRlI7SUFHSSxrQkFBa0IsRUFBRU4sU0FIeEI7SUFJSSxJQUFJLEVBQUU4Rix1REFBTSxDQUFDdUosUUFBUSxDQUFDalAsSUFBVixDQUpoQjtJQUtJLGNBQWMsRUFBRyxHQUFFMEYsdURBQU0sQ0FBQ3VKLFFBQVEsQ0FBQ2pQLElBQVYsQ0FBZ0IsUUFMN0M7SUFNSSxFQUFFLEVBQUUwRix1REFBTSxDQUFDdUosUUFBUSxDQUFDalAsSUFBVixDQU5kO0lBT0ksS0FBSyxFQUFFZ0QsS0FBSyxDQUFDL0UsS0FQakI7SUFRSSxRQUFRLEVBQUV1QyxVQVJkO0lBU0ksUUFBUSxFQUFFWSxVQVRkO0lBVUksUUFBUSxFQUFFNEIsS0FBSyxDQUFDdkQsUUFWcEI7SUFXSSxXQUFXLEVBQUV3UCxRQUFRLENBQUNxQjtFQVgxQixHQURKO0FBZUgsQ0FqQkQ7O0FBbUJBLE1BQU1DLHNCQUFzQixHQUFHLFNBQWdFO0VBQUEsSUFBL0Q7SUFBRXZOLEtBQUY7SUFBU3FOLElBQVQ7SUFBZXBCLFFBQWY7SUFBeUJ6TyxVQUF6QjtJQUFxQ1k7RUFBckMsQ0FBK0Q7RUFBQSxJQUFYbEIsSUFBVzs7RUFFM0Ysb0JBQ0ksMkRBQUMsMERBQUQsNEVBQ1E4QyxLQURSLEVBRVE5QyxJQUZSO0lBR0ksSUFBSSxFQUFFd0YsdURBQU0sQ0FBQ3VKLFFBQVEsQ0FBQ2pQLElBQVYsQ0FIaEI7SUFJSSxjQUFjLEVBQUcsR0FBRTBGLHVEQUFNLENBQUN1SixRQUFRLENBQUNqUCxJQUFWLENBQWdCLFFBSjdDO0lBS0ksRUFBRSxFQUFFMEYsdURBQU0sQ0FBQ3VKLFFBQVEsQ0FBQ2pQLElBQVYsQ0FMZDtJQU1JLFdBQVcsRUFBRSxJQU5qQjtJQU9JLEtBQUssRUFBRWdELEtBQUssQ0FBQy9FLEtBUGpCO0lBUUksUUFBUSxFQUFFdUMsVUFSZDtJQVNJLFFBQVEsRUFBRVksVUFUZDtJQVVJLFFBQVEsRUFBRTRCLEtBQUssQ0FBQ3ZEO0VBVnBCLEdBREo7QUFhRSxDQWZOOztBQWlCQSxNQUFNK1EsZUFBZSxHQUFHLFNBQWdFO0VBQUEsSUFBL0Q7SUFBRXhOLEtBQUY7SUFBU3FOLElBQVQ7SUFBZXBCLFFBQWY7SUFBeUJ6TyxVQUF6QjtJQUFxQ1k7RUFBckMsQ0FBK0Q7RUFBQSxJQUFYbEIsSUFBVzs7RUFFcEYsb0JBQVEsMkRBQUMsd0RBQUQsNEVBQ0E4QyxLQURBLEVBRUE5QyxJQUZBO0lBR0osSUFBSSxFQUFFd0YsdURBQU0sQ0FBQ3VKLFFBQVEsQ0FBQ2pQLElBQVYsQ0FIUjtJQUlKLGNBQWMsRUFBRyxHQUFFMEYsdURBQU0sQ0FBQ3VKLFFBQVEsQ0FBQ2pQLElBQVYsQ0FBZ0IsUUFKckM7SUFLSixFQUFFLEVBQUUwRix1REFBTSxDQUFDdUosUUFBUSxDQUFDalAsSUFBVixDQUxOO0lBTUosV0FBVyxFQUFFLElBTlQ7SUFPSixTQUFTLEVBQUMsK0JBUE47SUFRSixlQUFlLEVBQUMscUJBUlo7SUFTSixLQUFLLEVBQUVnRCxLQUFLLENBQUMvRSxLQVRUO0lBVUosUUFBUSxFQUFFdUMsVUFWTjtJQVdKLFFBQVEsRUFBRVksVUFYTjtJQVlKLFFBQVEsRUFBRTRCLEtBQUssQ0FBQ3ZEO0VBWlosR0FBUjtBQWNILENBaEJEOztBQWtCQSxNQUFNZ1IsbUJBQW1CLEdBQUcsU0FBMkU7RUFBQSxJQUExRTtJQUFFek4sS0FBRjtJQUFTcU4sSUFBVDtJQUFlcEIsUUFBZjtJQUF5QnpPLFVBQXpCO0lBQXFDWSxVQUFyQztJQUFpRHNQO0VBQWpELENBQTBFO0VBQUEsSUFBWHhRLElBQVc7O0VBRW5HLE1BQU15USxZQUFZLEdBQUlwUixFQUFELElBQVE7SUFDekIsTUFBTXFSLGdCQUFnQixHQUFHclIsRUFBRSxDQUFDUixNQUFILENBQVVkLEtBQW5DLENBRHlCLENBRXpCOztJQUNBLElBQUl5UyxTQUFTLEdBQUcsQ0FBWixJQUFpQkUsZ0JBQWdCLENBQUNsTSxNQUFqQixHQUEwQmdNLFNBQS9DLEVBQTBEO01BQ3RELE9BQU8sSUFBUDtJQUNIOztJQUNELE9BQU8xTixLQUFLLENBQUN2RCxRQUFOLENBQWVGLEVBQWYsQ0FBUDtFQUNILENBUEQ7O0VBUUEsb0JBQ0ksMkRBQUMsNkRBQUQsNEVBQ1F5RCxLQURSLEVBRVE5QyxJQUZSO0lBR0ksRUFBRSxFQUFFd0YsdURBQU0sQ0FBQ3VKLFFBQVEsQ0FBQ2pQLElBQVYsQ0FIZDtJQUlJLElBQUksRUFBRTBGLHVEQUFNLENBQUN1SixRQUFRLENBQUNqUCxJQUFWLENBSmhCO0lBS0ksY0FBYyxFQUFHLEdBQUUwRix1REFBTSxDQUFDdUosUUFBUSxDQUFDalAsSUFBVixDQUFnQixRQUw3QztJQU1JLEtBQUssRUFBRWdELEtBQUssQ0FBQy9FLEtBTmpCO0lBT0ksUUFBUSxFQUFFdUMsVUFQZDtJQVFJLFFBQVEsRUFBRVksVUFSZDtJQVNJLFFBQVEsRUFBRXVQO0VBVGQsR0FESjtBQWFILENBdkJEOztBQXlCQSxNQUFNRSxZQUFZLEdBQUd6UCxVQUFVLElBQzNCQSxVQUFVLEdBQUduRCxLQUFLLElBQUtBLEtBQUssR0FBRzZTLFNBQUgsR0FBZSxVQUFqQyxHQUErQyxNQUFNLENBQUUsQ0FEckU7O0FBR0EsTUFBTUMsa0JBQWtCLGdCQUFHdFQsdURBQUEsQ0FBaUIsQ0FBQztFQUNJd1QsY0FESjtFQUVJQyxXQUZKO0VBR0lDLGVBSEo7RUFJSXZSLFNBQVMsR0FBRyxnQkFKaEI7RUFLSXdSLDBCQUEwQixHQUFHLG9CQUxqQztFQU1JQywrQkFBK0IsR0FBRywwQkFOdEM7RUFPSUMsaUNBQWlDLEdBQUUsNEJBUHZDO0VBUUlDLFFBQVEsR0FBRyxLQVJmO0VBU0lDLEtBQUssR0FBRyxLQVRaO0VBVUlDLFVBQVUsR0FBRyxRQVZqQjtFQVdJQyxvQkFBb0IsR0FBRyxVQVgzQjtFQVlJQyx3QkFBd0IsR0FBRyxzQkFaL0I7RUFhSUMsdUJBQXVCLEdBQUcsSUFiOUI7RUFjSUMsT0FBTyxHQUFJdEUsQ0FBRCxJQUFPdkcsT0FBTyxDQUFDQyxHQUFSLENBQVksZUFBWixFQUE2QnNHLENBQTdCLENBZHJCO0VBZUl1RSx1QkFBdUIsR0FBRztBQWY5QixDQUFELEVBZ0JJQyxHQWhCSixLQWdCWTtFQUVwRCxJQUFJQyxNQUFNLEdBQUcsSUFBYjtFQUVBLE1BQU1DLFdBQVcsR0FBR2xDLDZDQUFNLENBQUMsRUFBRCxDQUExQjtFQUNBLE1BQU1tQyxPQUFPLEdBQUduQyw2Q0FBTSxDQUFDLElBQUQsQ0FBdEI7RUFDQSxNQUFNLENBQUNyRCxPQUFELEVBQVV5RixVQUFWLElBQXdCbkMsK0NBQVEsQ0FBQyxFQUFELENBQXRDO0VBRUFGLGdEQUFTLENBQUMsTUFBTTtJQUNac0MsaUJBQWlCO0VBQ3BCLENBRlEsRUFFTixDQUFDbkIsY0FBRCxDQUZNLENBQVQsQ0FSb0QsQ0FhcEQ7O0VBQ0FoQiwwREFBbUIsQ0FBQzhCLEdBQUQsRUFBTSxPQUFPO0lBQzVCTSxRQUFRLEdBQUc7TUFDUEgsT0FBTyxDQUFDSSxPQUFSLENBQWdCQyxhQUFoQixDQUE4QixJQUFJQyxLQUFKLENBQVUsUUFBVixFQUFvQjtRQUFFQyxVQUFVLEVBQUUsSUFBZDtRQUFvQkMsT0FBTyxFQUFFO01BQTdCLENBQXBCLENBQTlCO0lBQ0g7O0VBSDJCLENBQVAsQ0FBTixDQUFuQjs7RUFNQSxNQUFNTixpQkFBaUIsR0FBRyxNQUFNO0lBQzVCLE1BQU1PLEVBQUUsR0FBRyxJQUFJbkcsNERBQUosQ0FBaUJ5RSxjQUFqQixFQUFpQ0MsV0FBakMsQ0FBWDtJQUNBaUIsVUFBVSxDQUFDUSxFQUFFLENBQUNDLGFBQUgsRUFBRCxDQUFWO0VBQ0gsQ0FIRDs7RUFLQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQztJQUFDQyxJQUFEO0lBQU9uRixJQUFQO0lBQWE5TjtFQUFiLENBQUQsa0JBQ2QsMkRBQUMsb0RBQUQ7SUFBTyxJQUFJLEVBQUVpVCxJQUFiO0lBQW1CLFlBQVksRUFBRTtNQUFDN1UsS0FBSyxFQUFFO0lBQVI7RUFBakMsR0FDSyxDQUFDO0lBQUMrRSxLQUFLLEVBQUU7TUFBQy9FO0lBQUQ7RUFBUixDQUFELEtBQ0c4VSxlQUFlLENBQUNwRixJQUFELEVBQU9xRixTQUFTLENBQUMvVSxLQUFELEVBQVEwUCxJQUFSLENBQWhCLEVBQStCOU4sUUFBL0IsQ0FGdkIsQ0FESjs7RUFRQSxNQUFNb1QsS0FBSyxHQUFHLENBQUM7SUFBRWpUO0VBQUYsQ0FBRCxrQkFDViwyREFBQyxvREFBRDtJQUFPLElBQUksRUFBRUEsSUFBYjtJQUFtQixZQUFZLEVBQUU7TUFBRUYsS0FBSyxFQUFFLElBQVQ7TUFBZW9ULE9BQU8sRUFBRTtJQUF4QjtFQUFqQyxHQUNLLENBQUM7SUFBRTdDLElBQUksRUFBRTtNQUFFdlEsS0FBRjtNQUFTb1Q7SUFBVDtFQUFSLENBQUQsS0FDR3BULEtBQUssSUFBSW9ULE9BQVQsZ0JBQW1CO0lBQUssU0FBUyxFQUFFdkI7RUFBaEIsR0FBMkM3UixLQUEzQyxDQUFuQixHQUE2RSxJQUZyRixDQURKOztFQVFBLE1BQU1rVCxTQUFTLEdBQUcsQ0FBQy9VLEtBQUQsRUFBUTBQLElBQVIsS0FBaUI7SUFDL0IsSUFBSUwsTUFBTSxHQUFHSyxJQUFJLENBQUNRLGFBQWxCOztJQUVBLElBQUlnRixLQUFLLENBQUNDLE9BQU4sQ0FBY25WLEtBQWQsQ0FBSixFQUEwQjtNQUN0QixJQUFJLENBQUNBLEtBQUssQ0FBQ3lHLE1BQVgsRUFBbUIsT0FBTyxLQUFQO01BQ25CLElBQUlvSyxHQUFHLEdBQUduQixJQUFJLENBQUNFLHNCQUFMLEtBQWdDLEtBQTFDO01BQ0FQLE1BQU0sQ0FBQ3FDLE9BQVAsQ0FBZ0J4UixDQUFELElBQU87UUFDbEIsSUFBSXdQLElBQUksQ0FBQ0Usc0JBQUwsS0FBZ0MsS0FBcEMsRUFBMkM7VUFDdkNpQixHQUFHLEdBQUdBLEdBQUcsSUFBSTdRLEtBQUssQ0FBQ00sUUFBTixDQUFlYSxRQUFRLENBQUNqQixDQUFELENBQXZCLENBQWI7UUFDSCxDQUZELE1BRU87VUFDSDtVQUNBMlEsR0FBRyxHQUFHQSxHQUFHLElBQUk3USxLQUFLLENBQUNNLFFBQU4sQ0FBZWEsUUFBUSxDQUFDakIsQ0FBRCxDQUF2QixDQUFiO1FBQ0g7TUFDSixDQVBEO01BUUEsT0FBTzJRLEdBQVA7SUFDSDs7SUFDRCxPQUFPeEIsTUFBTSxDQUFDL08sUUFBUCxDQUFnQk4sS0FBSyxDQUFDd0csUUFBTixFQUFoQixDQUFQO0VBQ0gsQ0FqQkQ7O0VBbUJBLE1BQU1zTyxlQUFlLEdBQUcsQ0FBQ3BGLElBQUQsRUFBTzBGLFVBQVAsRUFBbUJ4VCxRQUFuQixLQUFnQztJQUNwRCxJQUFJOE4sSUFBSSxDQUFDVSxVQUFMLEtBQW9CLFNBQXhCLEVBQW1DO01BQy9CLElBQUlWLElBQUksQ0FBQ00sb0JBQUwsS0FBOEIsT0FBbEMsRUFBMkM7UUFDdkMsSUFBR29GLFVBQUgsRUFBZSxPQUFPeFQsUUFBUDtRQUNmLE9BQU9vUyxXQUFXLENBQUNLLE9BQVosQ0FBb0IzRSxJQUFJLENBQUNULFlBQUwsQ0FBa0IxTixFQUF0QyxDQUFQO1FBQ0EsT0FBTyxJQUFQO01BQ0gsQ0FMOEIsQ0FNL0I7OztNQUNBLElBQUcsQ0FBQzZULFVBQUosRUFBZTtRQUNYLE9BQU94VCxRQUFQO01BQ0g7O01BQ0QsT0FBT29TLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQjNFLElBQUksQ0FBQ1QsWUFBTCxDQUFrQjFOLEVBQXRDLENBQVA7TUFDQSxPQUFPLElBQVA7SUFDSCxDQWJtRCxDQWNwRDs7O0lBQ0EsSUFBSW1PLElBQUksQ0FBQ00sb0JBQUwsS0FBOEIsT0FBbEMsRUFBMkM7TUFDdkMsSUFBRyxDQUFDb0YsVUFBSixFQUFnQixPQUFPeFQsUUFBUDtNQUNoQixPQUFPb1MsV0FBVyxDQUFDSyxPQUFaLENBQW9CM0UsSUFBSSxDQUFDVCxZQUFMLENBQWtCMU4sRUFBdEMsQ0FBUDtNQUNBLE9BQU8sSUFBUDtJQUNIOztJQUNELElBQUc2VCxVQUFILEVBQWUsT0FBT3hULFFBQVA7SUFDZixPQUFPb1MsV0FBVyxDQUFDSyxPQUFaLENBQW9CM0UsSUFBSSxDQUFDVCxZQUFMLENBQWtCMU4sRUFBdEMsQ0FBUDtJQUNBLE9BQU8sSUFBUDtFQUNILENBdkJEOztFQXlCQSxNQUFNOEMsUUFBUSxHQUFJcUssQ0FBRCxJQUFPO0lBQ3BCO0lBQ0EsTUFBTTJHLGdCQUFnQixHQUFHQyxNQUFNLENBQUNDLFlBQVAsQ0FBb0IsR0FBcEIsQ0FBekIsQ0FGb0IsQ0FFK0I7SUFFbkQ7O0lBQ0EsTUFBTUMsR0FBRyxHQUFHeEwsUUFBUSxDQUFDd0MsYUFBVCxDQUF1QixLQUF2QixDQUFaO0lBQ0FnSixHQUFHLENBQUNDLFNBQUosR0FBZ0IvRyxDQUFDLENBQUNqTSxLQUFsQixDQU5vQixDQU9wQjs7SUFDQSxNQUFNQSxLQUFLLEdBQUcrUyxHQUFHLENBQUNFLFNBQUosSUFBaUJGLEdBQUcsQ0FBQ0csV0FBckIsSUFBb0MsRUFBbEQ7SUFFQSxNQUFNQyxTQUFTLEdBQUdsSCxDQUFDLENBQUM0QixTQUFGLEdBQWUsR0FBRTdOLEtBQU0sR0FBRTRTLGdCQUFpQixVQUExQyxHQUFzRDVTLEtBQXhFO0lBQ0EsTUFBTW9ULFNBQVMsR0FBSSxjQUFhcE8sdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FBUyxvQkFBbUIwRix1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFTO0FBQ3pGLGtDQUFrQzZULFNBQVU7QUFDNUMsb0NBRlE7SUFJQSxPQUFPQyxTQUFQO0VBQ0gsQ0FoQkQ7O0VBa0JBLE1BQU1DLFVBQVUsR0FBRyxDQUFDcEgsQ0FBRCxFQUFJRCxPQUFKLEtBQWdCO0lBQy9CLE1BQU13QyxJQUFJLEdBQUd4Six1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFuQjtJQUNBLElBQUcsQ0FBQzBNLE9BQU8sQ0FBQ3RNLGNBQVIsQ0FBdUI4TyxJQUF2QixDQUFKLEVBQWtDLE9BQU8sS0FBUDtJQUNsQyxNQUFNL0IsTUFBTSxHQUFHVCxPQUFPLENBQUN3QyxJQUFELENBQXRCLENBSCtCLENBSS9COztJQUNBLElBQUdpRSxLQUFLLENBQUNDLE9BQU4sQ0FBY2pHLE1BQWQsQ0FBSCxFQUEwQixPQUFPQSxNQUFNLENBQUN6SSxNQUFQLEdBQWdCLENBQXZCO0lBQzFCLElBQUksT0FBT3lJLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0MsT0FBT0EsTUFBTSxDQUFDekksTUFBUCxHQUFnQixDQUF2QjtJQUNoQyxJQUFHLE9BQU95SSxNQUFQLEtBQWtCLFFBQXJCLEVBQStCLE9BQU9BLE1BQU0sR0FBRyxDQUFoQjtJQUMvQixJQUFHLE9BQU9BLE1BQVAsS0FBa0IsU0FBckIsRUFBZ0MsT0FBT0EsTUFBUDtJQUNoQyxPQUFPLEtBQVA7RUFDSCxDQVZEOztFQVlBLE1BQU02RyxjQUFjLEdBQUlySCxDQUFELElBQU87SUFDMUIsSUFBSXNILGNBQWMsR0FBR3RILENBQUMsQ0FBQ1csTUFBdkIsQ0FEMEIsQ0FFMUI7O0lBQ0EsTUFBTTlNLFVBQVUsR0FBRyxDQUFDb1IsdUJBQUQsSUFBNEJtQyxVQUFVLENBQUNwSCxDQUFELEVBQUlELE9BQUosQ0FBekQsQ0FIMEIsQ0FJMUI7O0lBQ0EsSUFBSUMsQ0FBQyxDQUFDM04sSUFBRixLQUFXL0IsMERBQWYsRUFBa0M7TUFBQTs7TUFDOUIsb0JBQ0ksMkRBQUMsMkNBQUQ7UUFBVSxHQUFHLEVBQUV5SSx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSDtNQUFyQixnQkFDSTtRQUFLLEdBQUcsRUFBRWtVLEVBQUUsSUFBSWpDLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQjNGLENBQUMsQ0FBQ25OLEVBQXRCLElBQTRCMFUsRUFBNUM7UUFBZ0QsU0FBUyxFQUFFOUM7TUFBM0QsZ0JBQ0ksMkRBQUMsaURBQUQ7UUFBUyxjQUFjLEVBQUUsSUFBekI7UUFBK0IsU0FBUyxFQUFFQztNQUExQyxHQUE0RS9PLFFBQVEsQ0FBQ3FLLENBQUQsQ0FBcEYsQ0FESixlQUVJO1FBQUssU0FBUyxFQUFFMkU7TUFBaEIsZ0JBQ0ksMkRBQUMsb0RBQUQ7UUFBTyxJQUFJLEVBQUU1TCx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFuQjtRQUNPLFFBQVEsRUFBRTJNLENBRGpCO1FBRU8sVUFBVSxFQUFFbk0sVUFGbkI7UUFHTyxVQUFVLEVBQUVtTSxDQUFDLENBQUM0QixTQUhyQjtRQUlPLFFBQVEsRUFBRXNDLFlBQVksQ0FBQ2xFLENBQUMsQ0FBQzRCLFNBQUgsQ0FKN0I7UUFLTyxTQUFTLEVBQUU2QjtNQUxsQixFQURKLGVBUUksMkRBQUMsS0FBRDtRQUFPLElBQUksRUFBRTFLLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFIO01BQW5CLEVBUkosQ0FGSixDQURKLEVBY0ssMEJBQUEyTSxDQUFDLENBQUNJLGtCQUFGLGdGQUFzQnJJLE1BQXRCLElBQStCLENBQS9CLElBQ0RpSSxDQUFDLENBQUNJLGtCQUFGLENBQXFCMU8sR0FBckIsQ0FBMEJ5TyxDQUFELGlCQUVqQiwyREFBQyxTQUFEO1FBQVcsR0FBRyxFQUFFQSxDQUFDLENBQUN0TixFQUFsQjtRQUFzQixJQUFJLEVBQUVrRyx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFsQztRQUE0QyxJQUFJLEVBQUU4TTtNQUFsRCxHQUNLa0gsY0FBYyxDQUFDbEgsQ0FBQyxDQUFDSSxZQUFILENBRG5CLENBRlIsQ0FmSixDQURKO0lBeUJIOztJQUNELElBQUlQLENBQUMsQ0FBQzNOLElBQUYsS0FBVzlCLDhEQUFmLEVBQXNDO01BQUE7O01BQ2xDLG9CQUNJLDJEQUFDLDJDQUFEO1FBQVUsR0FBRyxFQUFFd0ksdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUg7TUFBckIsZ0JBQ0k7UUFBSyxHQUFHLEVBQUVrVSxFQUFFLElBQUlqQyxXQUFXLENBQUNLLE9BQVosQ0FBb0IzRixDQUFDLENBQUNuTixFQUF0QixJQUE0QjBVLEVBQTVDO1FBQWdELFNBQVMsRUFBRTlDO01BQTNELGdCQUNJLDJEQUFDLGlEQUFEO1FBQVMsY0FBYyxFQUFFLElBQXpCO1FBQStCLFNBQVMsRUFBRUM7TUFBMUMsR0FBNEUvTyxRQUFRLENBQUNxSyxDQUFELENBQXBGLENBREosZUFFSTtRQUFLLFNBQVMsRUFBRTJFO01BQWhCLGdCQUNJLDJEQUFDLG9EQUFEO1FBQ08sUUFBUSxFQUFFVCxZQUFZLENBQUNsRSxDQUFDLENBQUM0QixTQUFILENBRDdCO1FBRU8sSUFBSSxFQUFFN0ksdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FGbkI7UUFHTyxFQUFFLEVBQUUwRix1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUhqQjtRQUlPLFFBQVEsRUFBRVEsVUFKakI7UUFLTyxRQUFRLEVBQUVtTSxDQUFDLENBQUM0QixTQUxuQjtRQU1PLFNBQVMsRUFBQztNQU5qQixFQURKLGVBUUksMkRBQUMsS0FBRDtRQUFPLElBQUksRUFBRTdJLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFIO01BQW5CLEVBUkosQ0FGSixDQURKLEVBY0ssMkJBQUEyTSxDQUFDLENBQUNJLGtCQUFGLGtGQUFzQnJJLE1BQXRCLElBQStCLENBQS9CLElBQ0RpSSxDQUFDLENBQUNJLGtCQUFGLENBQXFCMU8sR0FBckIsQ0FBMEJ5TyxDQUFELGlCQUVqQiwyREFBQyxTQUFEO1FBQVcsR0FBRyxFQUFFQSxDQUFDLENBQUN0TixFQUFsQjtRQUFzQixJQUFJLEVBQUVrRyx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFsQztRQUE0QyxJQUFJLEVBQUU4TTtNQUFsRCxHQUNLa0gsY0FBYyxDQUFDbEgsQ0FBQyxDQUFDSSxZQUFILENBRG5CLENBRlIsQ0FmSixDQURKO0lBeUJIOztJQUNELElBQUlQLENBQUMsQ0FBQzNOLElBQUYsS0FBVzdCLDhEQUFmLEVBQXNDO01BQUE7O01BQ2xDLG9CQUNJLDJEQUFDLDJDQUFEO1FBQVUsR0FBRyxFQUFFdUksdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUg7TUFBckIsZ0JBQ0k7UUFBSyxHQUFHLEVBQUVrVSxFQUFFLElBQUlqQyxXQUFXLENBQUNLLE9BQVosQ0FBb0IzRixDQUFDLENBQUNuTixFQUF0QixJQUE0QjBVLEVBQTVDO1FBQWdELEtBQUssRUFBRTtVQUFDelIsT0FBTyxFQUFFO1FBQVYsQ0FBdkQ7UUFDSyxTQUFTLEVBQUUyTztNQURoQixnQkFFSTtRQUFLLFNBQVMsRUFBRUU7TUFBaEIsZ0JBQ0k7UUFBSyxTQUFTLEVBQUM7TUFBZixnQkFDSSwyREFBQyxvREFBRDtRQUNPLElBQUksRUFBRTVMLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFILENBRG5CO1FBRU8sRUFBRSxFQUFFMEYsdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FGakI7UUFHTyxRQUFRLEVBQUU2USxZQUFZLENBQUNsRSxDQUFDLENBQUM0QixTQUFILENBSDdCO1FBSU8sUUFBUSxFQUFFL04sVUFKakI7UUFLTyxRQUFRLEVBQUVtTSxDQUFDLENBQUM0QixTQUxuQjtRQU1PLElBQUksRUFBQyxVQU5aO1FBT08sU0FBUyxFQUFDLGtCQVBqQjtRQVFPLFNBQVMsRUFBQztNQVJqQixFQURKLGVBVUk7UUFBTyxTQUFTLEVBQUMsa0JBQWpCO1FBQW9DLE9BQU8sRUFBRTdJLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFIO01BQW5ELEVBVkosQ0FESixDQUZKLGVBZ0JJLDJEQUFDLGlEQUFEO1FBQVMsY0FBYyxFQUFFLElBQXpCO1FBQStCLFNBQVMsRUFBRyxxQkFBb0JxUiwrQkFBZ0M7TUFBL0YsR0FDSy9PLFFBQVEsQ0FBQ3FLLENBQUQsQ0FEYixDQWhCSixDQURKLGVBcUJJLDJEQUFDLEtBQUQ7UUFBTyxJQUFJLEVBQUVqSCx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSDtNQUFuQixFQXJCSixFQXNCSywyQkFBQTJNLENBQUMsQ0FBQ0ksa0JBQUYsa0ZBQXNCckksTUFBdEIsSUFBK0IsQ0FBL0IsSUFDRGlJLENBQUMsQ0FBQ0ksa0JBQUYsQ0FBcUIxTyxHQUFyQixDQUEwQnlPLENBQUQsaUJBRWpCLDJEQUFDLFNBQUQ7UUFBVyxHQUFHLEVBQUVBLENBQUMsQ0FBQ3ROLEVBQWxCO1FBQXNCLElBQUksRUFBRWtHLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFILENBQWxDO1FBQTRDLElBQUksRUFBRThNO01BQWxELEdBQ0trSCxjQUFjLENBQUNsSCxDQUFDLENBQUNJLFlBQUgsQ0FEbkIsQ0FGUixDQXZCSixDQURKO0lBaUNIOztJQUNELElBQUlQLENBQUMsQ0FBQzNOLElBQUYsS0FBVzVCLHFFQUFmLEVBQTZDO01BQUE7O01BQ3pDLE1BQU1nQixPQUFPLEdBQUc2VixjQUFjLENBQUM1VixHQUFmLENBQW1Cb0QsR0FBRyxLQUFLO1FBQUNmLEtBQUssRUFBR2UsR0FBRyxDQUFDZixLQUFiO1FBQW9CekMsS0FBSyxFQUFHd0QsR0FBRyxDQUFDakM7TUFBaEMsQ0FBTCxDQUF0QixDQUFoQjtNQUNBLG9CQUNJLDJEQUFDLDJDQUFEO1FBQVUsR0FBRyxFQUFFa0csdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUg7TUFBckIsZ0JBQ0k7UUFBSyxHQUFHLEVBQUUwRix1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFoQjtRQUEwQixHQUFHLEVBQUVrVSxFQUFFLElBQUlqQyxXQUFXLENBQUNLLE9BQVosQ0FBb0IzRixDQUFDLENBQUNuTixFQUF0QixJQUE0QjBVLEVBQWpFO1FBQXFFLFNBQVMsRUFBRTlDO01BQWhGLGdCQUNJLDJEQUFDLGlEQUFEO1FBQVMsY0FBYyxFQUFFLElBQXpCO1FBQStCLFNBQVMsRUFBRUM7TUFBMUMsR0FDSy9PLFFBQVEsQ0FBQ3FLLENBQUQsQ0FEYixDQURKLGVBSUk7UUFBSyxTQUFTLEVBQUUyRTtNQUFoQixnQkFDSSwyREFBQyxvREFBRDtRQUFPLElBQUksRUFBRTVMLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFILENBQW5CO1FBQ08sT0FBTyxFQUFFNUIsT0FEaEI7UUFFTyxRQUFRLEVBQUV1TyxDQUZqQjtRQUdPLFFBQVEsRUFBRWtFLFlBQVksQ0FBQ2xFLENBQUMsQ0FBQzRCLFNBQUgsQ0FIN0I7UUFJTyxVQUFVLEVBQUUvTixVQUpuQjtRQUtPLFVBQVUsRUFBRW1NLENBQUMsQ0FBQzRCLFNBTHJCO1FBTU8sU0FBUyxFQUFFZ0M7TUFObEIsRUFESixlQVFJLDJEQUFDLEtBQUQ7UUFBTyxJQUFJLEVBQUU3Syx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSDtNQUFuQixFQVJKLENBSkosQ0FESixFQWdCSywyQkFBQTJNLENBQUMsQ0FBQ0ksa0JBQUYsa0ZBQXNCckksTUFBdEIsSUFBK0IsQ0FBL0IsSUFDRGlJLENBQUMsQ0FBQ0ksa0JBQUYsQ0FBcUIxTyxHQUFyQixDQUEwQnlPLENBQUQsaUJBRWpCLDJEQUFDLFNBQUQ7UUFBVyxHQUFHLEVBQUVBLENBQUMsQ0FBQ3ROLEVBQWxCO1FBQXNCLElBQUksRUFBRWtHLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFILENBQWxDO1FBQTRDLElBQUksRUFBRThNO01BQWxELEdBQ0trSCxjQUFjLENBQUNsSCxDQUFDLENBQUNJLFlBQUgsQ0FEbkIsQ0FGUixDQWpCSixDQURKO0lBMkJIOztJQUNELElBQUlQLENBQUMsQ0FBQzNOLElBQUYsS0FBVzNCLDhEQUFYLElBQW9Dc1AsQ0FBQyxDQUFDM04sSUFBRixLQUFXekIscUVBQW5ELEVBQWlGO01BQUE7O01BQzdFLE1BQU1hLE9BQU8sR0FBRzZWLGNBQWMsQ0FBQzVWLEdBQWYsQ0FBbUJvRCxHQUFHLEtBQUs7UUFBQ2YsS0FBSyxFQUFHZSxHQUFHLENBQUNmLEtBQWI7UUFBb0J6QyxLQUFLLEVBQUd3RCxHQUFHLENBQUNqQztNQUFoQyxDQUFMLENBQXRCLENBQWhCO01BQ0Esb0JBQ0ksMkRBQUMsMkNBQUQ7UUFBVSxHQUFHLEVBQUVrRyx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSDtNQUFyQixnQkFDSTtRQUFLLEdBQUcsRUFBRWtVLEVBQUUsSUFBSWpDLFdBQVcsQ0FBQ0ssT0FBWixDQUFvQjNGLENBQUMsQ0FBQ25OLEVBQXRCLElBQTRCMFUsRUFBNUM7UUFBZ0QsU0FBUyxFQUFFOUM7TUFBM0QsZ0JBQ0ksMkRBQUMsaURBQUQ7UUFBUyxjQUFjLEVBQUUsSUFBekI7UUFBK0IsU0FBUyxFQUFFQztNQUExQyxHQUNLL08sUUFBUSxDQUFDcUssQ0FBRCxDQURiLENBREosZUFJSTtRQUFLLFNBQVMsRUFBRTJFO01BQWhCLGdCQUNJLDJEQUFDLG9EQUFEO1FBQU8sSUFBSSxFQUFFNUwsdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FBbkI7UUFDTyxPQUFPLEVBQUU1QixPQURoQjtRQUVPLFFBQVEsRUFBRXVPLENBRmpCO1FBR08sUUFBUSxFQUFFa0UsWUFBWSxDQUFDbEUsQ0FBQyxDQUFDNEIsU0FBSCxDQUg3QjtRQUlPLFVBQVUsRUFBRS9OLFVBSm5CO1FBS08sVUFBVSxFQUFFbU0sQ0FBQyxDQUFDNEIsU0FMckI7UUFNTyxTQUFTLEVBQUVpQztNQU5sQixFQURKLGVBU0ksMkRBQUMsS0FBRDtRQUFPLElBQUksRUFBRTlLLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFIO01BQW5CLEVBVEosQ0FKSixDQURKLEVBaUJLLDJCQUFBMk0sQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0JySSxNQUF0QixJQUErQixDQUEvQixJQUNEaUksQ0FBQyxDQUFDSSxrQkFBRixDQUFxQjFPLEdBQXJCLENBQTBCeU8sQ0FBRCxpQkFFakIsMkRBQUMsU0FBRDtRQUFXLEdBQUcsRUFBRUEsQ0FBQyxDQUFDdE4sRUFBbEI7UUFBc0IsSUFBSSxFQUFFa0csdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FBbEM7UUFBNEMsSUFBSSxFQUFFOE07TUFBbEQsR0FDS2tILGNBQWMsQ0FBQ2xILENBQUMsQ0FBQ0ksWUFBSCxDQURuQixDQUZSLENBbEJKLENBREo7SUE0Qkg7O0lBQ0QsSUFBSVAsQ0FBQyxDQUFDM04sSUFBRixLQUFXMUIsa0VBQWYsRUFBMEM7TUFBQTs7TUFDdEMsTUFBTWMsT0FBTyxHQUFHNlYsY0FBYyxDQUFDNVYsR0FBZixDQUFtQm9ELEdBQUcsS0FBSztRQUFDZixLQUFLLEVBQUdlLEdBQUcsQ0FBQ2YsS0FBYjtRQUFvQnpDLEtBQUssRUFBR3dELEdBQUcsQ0FBQ2pDO01BQWhDLENBQUwsQ0FBdEIsQ0FBaEI7TUFDQSxvQkFDSSwyREFBQywyQ0FBRDtRQUFVLEdBQUcsRUFBRWtHLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFIO01BQXJCLGdCQUNJO1FBQUssR0FBRyxFQUFFa1UsRUFBRSxJQUFJakMsV0FBVyxDQUFDSyxPQUFaLENBQW9CM0YsQ0FBQyxDQUFDbk4sRUFBdEIsSUFBNEIwVSxFQUE1QztRQUFnRCxTQUFTLEVBQUU5QztNQUEzRCxnQkFDSSwyREFBQyxpREFBRDtRQUFTLGNBQWMsRUFBRSxJQUF6QjtRQUErQixTQUFTLEVBQUVDO01BQTFDLEdBQ0svTyxRQUFRLENBQUNxSyxDQUFELENBRGIsQ0FESixlQUlJO1FBQUssU0FBUyxFQUFFMkU7TUFBaEIsZ0JBQ0ksMkRBQUMsb0RBQUQ7UUFBTyxJQUFJLEVBQUU1TCx1REFBTSxDQUFDaUgsQ0FBQyxDQUFDM00sSUFBSCxDQUFuQjtRQUNPLFNBQVMsRUFBRXNSLGlDQURsQjtRQUVPLFFBQVEsRUFBRVQsWUFBWSxDQUFDbEUsQ0FBQyxDQUFDNEIsU0FBSCxDQUY3QjtRQUdPLE9BQU8sRUFBRW5RLE9BSGhCO1FBSU8sUUFBUSxFQUFFdU8sQ0FKakI7UUFLTyxTQUFTLEVBQUVBLENBQUMsQ0FBQ3dILG1CQUxwQjtRQU1PLFVBQVUsRUFBRTNULFVBTm5CO1FBT08sVUFBVSxFQUFFbU0sQ0FBQyxDQUFDNEIsU0FQckI7UUFRTyxTQUFTLEVBQUVrQztNQVJsQixFQURKLGVBV0ksMkRBQUMsS0FBRDtRQUFPLElBQUksRUFBRS9LLHVEQUFNLENBQUNpSCxDQUFDLENBQUMzTSxJQUFIO01BQW5CLEVBWEosQ0FKSixDQURKLEVBbUJLLDJCQUFBMk0sQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0JySSxNQUF0QixJQUErQixDQUEvQixJQUNEaUksQ0FBQyxDQUFDSSxrQkFBRixDQUFxQjFPLEdBQXJCLENBQTBCeU8sQ0FBRCxpQkFFakIsMkRBQUMsU0FBRDtRQUFXLEdBQUcsRUFBRUEsQ0FBQyxDQUFDdE4sRUFBbEI7UUFBc0IsSUFBSSxFQUFFa0csdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FBbEM7UUFBNEMsSUFBSSxFQUFFOE07TUFBbEQsR0FDS2tILGNBQWMsQ0FBQ2xILENBQUMsQ0FBQ0ksWUFBSCxDQURuQixDQUZSLENBcEJKLENBREo7SUE4Qkg7O0lBQ0QsT0FBTyxJQUFQO0VBQ0gsQ0E3TEQ7O0VBK0xBLE1BQU1rSCxTQUFTLEdBQUl6SCxDQUFELElBQU87SUFDckIsT0FBTyxDQUFDLENBQUNzRixXQUFXLENBQUNLLE9BQVosQ0FBb0IzRixDQUFDLENBQUNuTixFQUF0QixDQUFUO0VBQ0gsQ0FGRDs7RUFJQSxNQUFNNlUsZ0JBQWdCLEdBQUcsQ0FBQzFILENBQUQsRUFBSVcsTUFBSixFQUFZekYsTUFBWixLQUF1QjtJQUFBOztJQUM1QyxJQUFJOEUsQ0FBQyxDQUFDNEIsU0FBRixJQUFlNkYsU0FBUyxDQUFDekgsQ0FBRCxDQUE1QixFQUFpQztNQUM3QixNQUFNdUMsSUFBSSxHQUFHeEosdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FBbkI7O01BQ0EsSUFBSSxDQUFDc04sTUFBTSxDQUFDbE4sY0FBUCxDQUFzQnNGLHVEQUFNLENBQUN3SixJQUFELENBQTVCLENBQUQsSUFBd0M1QixNQUFNLENBQUM1SCx1REFBTSxDQUFDd0osSUFBRCxDQUFQLENBQU4sS0FBeUIsRUFBakUsSUFBdUU1QixNQUFNLENBQUM0QixJQUFELENBQU4sQ0FBYXhLLE1BQWIsS0FBd0IsQ0FBbkcsRUFBc0c7UUFDbEdtRCxNQUFNLENBQUNxSCxJQUFELENBQU4sR0FBZXdDLG9CQUFmO01BQ0g7SUFDSixDQU4yQyxDQU81Qzs7O0lBQ0EsMEJBQUEvRSxDQUFDLENBQUNJLGtCQUFGLGtGQUFzQjRDLE9BQXRCLENBQStCN0MsQ0FBRCxJQUFPO01BQ2pDdUgsZ0JBQWdCLENBQUN2SCxDQUFDLENBQUNJLFlBQUgsRUFBaUJJLE1BQWpCLEVBQXlCekYsTUFBekIsQ0FBaEI7SUFDSCxDQUZEO0VBR0gsQ0FYRDs7RUFhQSxNQUFNeU0sUUFBUSxHQUFJaEgsTUFBRCxJQUFZO0lBQ3pCNkQsZUFBZSxDQUFDN0QsTUFBRCxDQUFmO0VBQ0gsQ0FGRDs7RUFJQSxNQUFNaUgsUUFBUSxHQUFJakgsTUFBRCxJQUFZO0lBQ3pCLE1BQU16RixNQUFNLEdBQUcsRUFBZjtJQUNBb0osY0FBYyxDQUFDdEIsT0FBZixDQUF3QmhELENBQUMsSUFBSTtNQUN6QjBILGdCQUFnQixDQUFDMUgsQ0FBRCxFQUFJVyxNQUFKLEVBQVl6RixNQUFaLENBQWhCO0lBQ0gsQ0FGRDtJQUdBLE9BQU9BLE1BQVA7RUFDSCxDQU5EOztFQVFBLElBQUcsQ0FBQzlGLE1BQU0sQ0FBQytGLElBQVAsQ0FBWTRFLE9BQVosRUFBcUJoSSxNQUF6QixFQUFpQyxPQUFPLElBQVA7O0VBRWpDLE1BQU04UCxjQUFjLEdBQUcsQ0FBQzdILENBQUQsRUFBSThILGlCQUFKLEVBQXVCQyxXQUF2QixLQUF1QztJQUFBOztJQUMxRCxJQUFJRCxpQkFBaUIsQ0FBQ2xXLFFBQWxCLENBQTJCbUgsdURBQU0sQ0FBQ2lILENBQUMsQ0FBQzNNLElBQUgsQ0FBakMsQ0FBSixFQUFnRDtNQUM1QzBVLFdBQVcsQ0FBQ3JWLElBQVosQ0FBaUJzTixDQUFqQjtJQUNILENBSHlELENBSTFEOzs7SUFDQSwwQkFBQUEsQ0FBQyxDQUFDSSxrQkFBRixrRkFBc0I0QyxPQUF0QixDQUErQjdDLENBQUQsSUFBTztNQUNqQzBILGNBQWMsQ0FBQzFILENBQUMsQ0FBQ0ksWUFBSCxFQUFpQnVILGlCQUFqQixFQUFvQ0MsV0FBcEMsQ0FBZDtJQUNILENBRkQ7RUFHSCxDQVJEOztFQVVBLE1BQU1DLGFBQWEsR0FBSUYsaUJBQUQsSUFBdUI7SUFDekMsTUFBTUMsV0FBVyxHQUFHLEVBQXBCO0lBQ0F6RCxjQUFjLENBQUN0QixPQUFmLENBQXVCaEQsQ0FBQyxJQUFJO01BQ3hCNkgsY0FBYyxDQUFDN0gsQ0FBRCxFQUFJOEgsaUJBQUosRUFBdUJDLFdBQXZCLENBQWQ7SUFDSCxDQUZEO0lBR0EsT0FBT0EsV0FBVyxDQUFDRSxJQUFaLENBQWlCLENBQUNsSCxDQUFELEVBQUltSCxDQUFKLEtBQVVuSCxDQUFDLENBQUNvSCxLQUFGLEdBQVVELENBQUMsQ0FBQ0MsS0FBdkMsRUFBOEMsQ0FBOUMsQ0FBUDtFQUNILENBTkQ7O0VBUUEsTUFBTUMsa0JBQWtCLEdBQUlOLGlCQUFELElBQXVCO0lBQzlDLE1BQU0xTSxVQUFVLEdBQUc0TSxhQUFhLENBQUNGLGlCQUFELENBQWhDO0lBQ0F4QyxXQUFXLENBQUNLLE9BQVosQ0FBb0J2SyxVQUFVLENBQUN2SSxFQUEvQixFQUFtQ3dWLGNBQW5DLENBQWtEO01BQzlDQyxRQUFRLEVBQUUsUUFEb0M7TUFFOUNDLEtBQUssRUFBRTtJQUZ1QyxDQUFsRDtFQUlILENBTkQ7O0VBUUEsSUFBSSxDQUFDblQsTUFBTSxDQUFDK0YsSUFBUCxDQUFZNEUsT0FBWixFQUFxQmhJLE1BQTFCLEVBQWtDLE9BQU8sSUFBUDtFQUVsQyxvQkFDSTtJQUFLLFNBQVMsRUFBRTlFO0VBQWhCLGdCQUNJLDJEQUFDLG1EQUFEO0lBQ0ksUUFBUSxFQUFFMlUsUUFEZDtJQUVJLFFBQVEsRUFBRUQsUUFGZDtJQUdJLGFBQWEsRUFBRTVIO0VBSG5CLEdBS0ssQ0FBQztJQUFDeUksWUFBRDtJQUFlQyxJQUFmO0lBQXFCQyxVQUFyQjtJQUFpQ0MsUUFBakM7SUFBMkNoSTtFQUEzQyxDQUFELEtBQXdEO0lBQ3JEMEUsTUFBTSxHQUFHbUQsWUFBVDtJQUNBLG9CQUNJO01BQ0ksUUFBUSxFQUFHdFcsS0FBRCxJQUFXO1FBQ2pCLE1BQU00VixpQkFBaUIsR0FBR1csSUFBSSxDQUFDRyxtQkFBTCxHQUEyQmpXLE1BQTNCLENBQWtDK0ksS0FBSyxJQUFJK00sSUFBSSxDQUFDSSxhQUFMLENBQW1Cbk4sS0FBbkIsRUFBMEJvTixPQUFyRSxDQUExQjs7UUFDQSxJQUFJaEIsaUJBQWlCLENBQUMvUCxNQUFsQixHQUEyQixDQUEvQixFQUFrQztVQUM5QixNQUFNcUQsVUFBVSxHQUFHNE0sYUFBYSxDQUFDRixpQkFBRCxDQUFoQztVQUNBNUMsT0FBTyxDQUFDNEMsaUJBQUQsRUFBb0J4QyxXQUFXLENBQUNLLE9BQVosQ0FBb0J2SyxVQUFVLENBQUN2SSxFQUEvQixDQUFwQixDQUFQO1VBQ0EsSUFBR3NTLHVCQUFILEVBQ0lpRCxrQkFBa0IsQ0FBQ04saUJBQUQsQ0FBbEI7UUFDUDs7UUFDRFUsWUFBWSxDQUFDdFcsS0FBRCxDQUFaO01BQ0gsQ0FWTDtNQVdJLEdBQUcsRUFBRXFUO0lBWFQsR0FZS1gsUUFBUSxnQkFDTDtNQUFVLFFBQVEsRUFBQztJQUFuQixHQUNLTixjQUFjLENBQUM1UyxHQUFmLENBQW9Cc08sQ0FBRCxJQUFPcUgsY0FBYyxDQUFDckgsQ0FBRCxDQUF4QyxDQURMLENBREssR0FLTHNFLGNBQWMsQ0FBQzVTLEdBQWYsQ0FBb0JzTyxDQUFELElBQU9xSCxjQUFjLENBQUNySCxDQUFELENBQXhDLENBakJSLEVBbUJLNkUsS0FBSyxpQkFBSSx3RUFBTWtFLElBQUksQ0FBQ0MsU0FBTCxDQUFlckksTUFBZixFQUF1QixDQUF2QixFQUEwQixDQUExQixDQUFOLENBbkJkLENBREo7RUF1QkgsQ0E5QkwsQ0FESixFQWlDSyxDQUFDeUUsR0FBRCxpQkFDRDtJQUNJLElBQUksRUFBQyxRQURUO0lBRUksT0FBTyxFQUFHbFQsS0FBRCxJQUFXO01BQ2hCbVQsTUFBTSxDQUFDblQsS0FBRCxDQUFOO0lBQ0gsQ0FKTDtJQUtJLEtBQUssRUFBRTtNQUFDaUMsU0FBUyxFQUFFO0lBQVo7RUFMWCxHQU9LMlEsVUFQTCxDQWxDSixDQURKO0FBK0NILENBNWEwQixDQUEzQjtBQThhQVYsa0JBQWtCLENBQUM3UCxTQUFuQixHQUErQjtFQUMzQitQLGNBQWMsRUFBRXpULG9FQURXO0VBRTNCMFQsV0FBVyxFQUFFMVQsb0VBRmM7RUFHM0IyVCxlQUFlLEVBQUUzVCxtRUFIVTtFQUkzQm9DLFNBQVMsRUFBRXBDLDBEQUpnQjtFQUszQmdVLEtBQUssRUFBRWhVLHdEQUxvQjtFQU0zQmlVLFVBQVUsRUFBRWpVLDBEQU5lO0VBTzNCNFQsMEJBQTBCLEVBQUU1VCwwREFQRDtFQVEzQjZULCtCQUErQixFQUFFN1QsMERBUk47RUFTM0I4VCxpQ0FBaUMsRUFBRTlULDBEQVRSO0VBVTNCa1Usb0JBQW9CLEVBQUVsVSwwREFWSztFQVczQm1VLHdCQUF3QixFQUFFblUsMERBWEM7RUFZM0JvVSx1QkFBdUIsRUFBRXBVLHdEQVpFO0VBYTNCc1UsdUJBQXVCLEVBQUV0VSx3REFBY3NZO0FBYlosQ0FBL0I7QUFnQkEsaUVBQWUvRSxrQkFBZixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9jaGVja2JveC1saXN0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvcmFkaW8tbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9yYXctaHRtbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvdXRpbHMvbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvdXRpbHMvcXVlc3Rpb25zLXNldC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguc2Nzcz8xYTczIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnQtdGltZXpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJwcm9wLXR5cGVzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1maW5hbC1mb3JtXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwidXJpanNcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZXh0cmEtcXVlc3Rpb25zL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCAoKSA9PiB7XG5yZXR1cm4gIiwiZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9UZXh0ID0gXCJUZXh0XCI7XG5leHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX1RleHRBcmVhID0gXCJUZXh0QXJlYVwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9DaGVja2JveCA9IFwiQ2hlY2tCb3hcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b25MaXN0ID0gXCJSYWRpb0J1dHRvbkxpc3RcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ29tYm9Cb3ggPSBcIkNvbWJvQm94XCI7XG5leHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdCA9IFwiQ2hlY2tCb3hMaXN0XCI7XG5cbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94ID0gXCJDb3VudHJ5Q29tYm9Cb3hcIjtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hlY2tib3hMaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBsZXQgb3RoZXJWYWx1ZSA9IHByb3BzLnZhbHVlID8gcHJvcHMudmFsdWUuZmluZCggdiA9PiAhcHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpLmluY2x1ZGVzKHYpICkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3RoZXJDaGVja2VkOiAhIW90aGVyVmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZSA9IHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgICBsZXQgb3B0aW9uVmFsdWVzID0gdGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWUgPyBbLi4udGhpcy5wcm9wcy52YWx1ZV0gOiBbXTtcblxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoZVZhbCA9IGlzTmFOKGV2ZW50LnRhcmdldC52YWx1ZSkgPyBldmVudC50YXJnZXQudmFsdWUgOiBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlLnB1c2godGhlVmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoIHYgPT4gdiAhPSBldmVudC50YXJnZXQudmFsdWUgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIodiA9PiBvcHRpb25WYWx1ZXMuaW5jbHVkZXModikpO1xuICAgICAgICAgICAgdmFsdWUucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3hsaXN0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlT3RoZXJDQkNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvdGhlckNoZWNrZWQ6IGV2ZW50LnRhcmdldC5jaGVja2VkfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIG9wdGlvbnMsIGlkLCBjaGlsZHJlbiwgZXJyb3IsIGRpc2FibGVkLG5hbWUsIGFyaWFMYWJlbGxlZEJ5LCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7IG90aGVyQ2hlY2tlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBhbGxvd090aGVyID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd090aGVyJykgKTtcbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSB2YWx1ZSA/IHZhbHVlLmZpbmQoIHYgPT4gIW9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2UgO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc3cHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YGNobF93cmFwcGVyXyR7aWR9YH0gYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWxsZWRCeX0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiY2hlY2tib3hlcy1kaXZcIiArIChoYXNfZXJyb3IgPyAnIGVycm9yJyA6ICcnKSB9PlxuICAgICAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkID0gdmFsdWUgPyB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIGtleT17XCJyYWRpb19rZXlfXCIgKyBvcC52YWx1ZX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGNiXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWU/IG5hbWUgOiBpZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT17b3AudmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YGNiXyR7aWR9XyR7b3AudmFsdWV9YCAgfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93T3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e1wiY2Jfb3RoZXJcIiArIGlkfSBjaGVja2VkPXtvdGhlckNoZWNrZWR9IGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT1cIm90aGVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17XCJjYl9vdGhlclwiICsgaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtULnRyYW5zbGF0ZShcImdlbmVyYWwub3RoZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmIG90aGVyQ2hlY2tlZCAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cGFkZGluZ0xlZnQ6ICcyMnB4Jywgd2lkdGg6ICc1MCUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gdmFsdWU9e290aGVyVmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5DaGVja2JveExpc3QuZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn1cblxuXG5DaGVja2JveExpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5tYXAodmFsID0+IHZhbC52YWx1ZSkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24udmFsdWUgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZHJvcGRvd24nXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGNsZWFyYWJsZSwgZGlzYWJsZWQsIG92ZXJyaWRlQ1NTLCBhcmlhTGFiZWxsZWRCeSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc0NsZWFyYWJsZSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGVhcmFibGUnKSk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgbGV0IHNlbGVjdENsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ292ZXJyaWRlQ1NTJykgfHwgb3ZlcnJpZGVDU1MgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzTmFtZSA9ICdkcm9wZG93biAnICsgY2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdFN0eWxlcyA9IHsgbWVudTogc3R5bGVzID0+ICh7IC4uLnN0eWxlcywgekluZGV4OiA5OTkgfSkgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2lzQ2xlYXJhYmxlfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZXM9e3NlbGVjdFN0eWxlc31cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWxsZWRCeX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5Ecm9wZG93bi5kZWZhdWx0UHJvcHMgPSB7XG4gICAgYXJpYUxhYmVsbGVkQnkgOiBudWxsLFxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYWRpb0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGlvbi50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3JhZGlvJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWwob3B0aW9uLCBpZCwgaW5saW5lLCBzaW1wbGUsIGh0bWwpIHtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIHtodG1sICYmXG4gICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSA+XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jayd9fT5cbiAgICAgICAgICAgICAgICAgICAgPGg0IHN0eWxlPXt7bWFyZ2luVG9wOiAnMHB4J319PntvcHRpb24ubGFiZWx9PC9oND5cbiAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wdGlvbi5kZXNjcmlwdGlvbn08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGFyaWFMYWJlbGxlZEJ5LCBkaXNhYmxlZCwgb3B0aW9ucyxpZCwgbmFtZSwuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IHNpbXBsZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2ltcGxlJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YHJsX3dyYXBwZXJfJHtpZH1gfSBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbGxlZEJ5fT5cbiAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSAob3AudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1yYWRpb1wiIGtleT17YHJhZGlvX2tleV8ke2lkfV8ke29wLnZhbHVlfWB9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YHJhZGlvXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e29wLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lID8gbmFtZSA6IGByYWRpb18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZXRMYWJlbChvcCwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5SYWRpb0xpc3QuZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn1cblxuUmFkaW9MaXN0LnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgYXJpYUxhYmVsbGVkQnksIGNvbnRhaW5lckNsYXNzTmFtZSwuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcbiAgICAgICAgbGV0IGNvbnRhaW5lcl9jbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY29udGFpbmVyQ2xhc3NOYW1lJykgPyBjb250YWluZXJDbGFzc05hbWUgOiAnY29udGFpbmVyLWZvcm0tY29udHJvbCc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGFpbmVyX2NsYXNzX25hbWV9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2NsYXNzX25hbWV9ICR7aGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnfWB9XG4gICAgICAgICAgICAgICAgICAgIHJlZj17bm9kZSA9PiB7dGhpcy5pbnB1dCA9IG5vZGV9fVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbGxlZEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBSYXdIVE1MID0gKHtjaGlsZHJlbiwgcmVwbGFjZU5ld0xpbmUgPSBmYWxzZSwgY2xhc3NOYW1lID0gXCJcIn0pID0+XG4gICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiByZXBsYWNlTmV3TGluZSA/IGNoaWxkcmVuPy5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpIDogY2hpbGRyZW59fSAvPlxuXG5leHBvcnQgZGVmYXVsdCBSYXdIVE1MOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcblxuZXhwb3J0IGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKG9iaikgPT4ge1xuICAgIHZhciBjdXJ0b3AgPSAtNzA7XG4gICAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY3VydG9wICs9IG9iai5vZmZzZXRUb3A7XG4gICAgICAgIH0gd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gW2N1cnRvcF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnQgPSAoYXRpbWUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50VGltZVpvbmUgPSAoYXRpbWUsIHRpbWVfem9uZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpLnR6KHRpbWVfem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXBvY2ggPSAoYXRpbWUsIGZvcm1hdCA9ICdNL0QvWVlZWSBoOm1tIGEnKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgcmV0dXJuIGVwb2NoVG9Nb21lbnQoYXRpbWUpLmZvcm1hdChmb3JtYXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTG9jYXRpb25Ib3VyID0gKGhvdXIpID0+IHtcbiAgICBsZXQgcGFyc2VkSG91ciA9IGhvdXIudG9TdHJpbmcoKTtcbiAgICBpZihwYXJzZWRIb3VyLmxlbmd0aCA8IDQpIHBhcnNlZEhvdXIgPSBgMCR7cGFyc2VkSG91cn1gO1xuICAgIHBhcnNlZEhvdXIgPSBwYXJzZWRIb3VyLm1hdGNoKC8uezJ9L2cpO1xuICAgIHBhcnNlZEhvdXIgPSBwYXJzZWRIb3VyLmpvaW4oJzonKTtcbiAgICByZXR1cm4gcGFyc2VkSG91cjtcbn1cblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAob2JqKSA9PiB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoc3RyICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFja1VSTCA9ICgpID0+IHtcbiAgICBsZXQgdXJsICAgICAgPSBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBxdWVyeSAgICA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgbGV0IGZyYWdtZW50ID0gdXJsLmZyYWdtZW50KCk7XG4gICAgbGV0IGJhY2tVcmwgID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgIGlmKGZyYWdtZW50ICE9IG51bGwgJiYgZnJhZ21lbnQgIT0gJycpe1xuICAgICAgICBiYWNrVXJsICs9IGAjJHtmcmFnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYmFja1VybDtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1NsdWcgPSAodGV4dCkgPT57XG4gICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csJ18nKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhDYWxsYmFjayA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9jYWxsYmFja2A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRMb2NhdGlvbiA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSAnJztcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGlmcmFtZVxuICAgICAgICBpZiAod2luZG93LnRvcClcbiAgICAgICAgICAgIGxvY2F0aW9uID0gd2luZG93LnRvcC5sb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGhOYW1lID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhyZWYgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkVXNlckdyb3VwcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LkFMTE9XRURfVVNFUl9HUk9VUFMgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVBJQmFzZVVybCA9IChyZWxhdGl2ZVVybCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5BUElfQkFTRV9VUkx9JHtyZWxhdGl2ZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbGBgO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dE9uTG9jYWxTdG9yYWdlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5LCByZW1vdmVJdCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCB2YWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYocmVtb3ZlSXQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEZyb21Mb2NhbFN0b3JhZ2UgcmVtb3Zpbmcga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSA9ICh2YWwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IHZhbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAnZW4nO1xuICAgIGlmKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0Vycm9yID0gKGVycm9ycykgPT4ge1xuICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFcnJvcik7XG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHdpbmRvdy5zY3JvbGxUbygwLCBmaW5kRWxlbWVudFBvcyhmaXJzdE5vZGUpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3JzID0gKGZpZWxkLCBlcnJvcnMpID0+IHtcbiAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFsbG93RXF1YWwgPSAob2JqZWN0MSwgb2JqZWN0MikgPT4ge1xuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcblxuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmIChvYmplY3QxW2tleV0gIT09IG9iamVjdDJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXJyYXlzRXF1YWwgPSAoYTEsIGEyKSA9PlxuICAgIGExLmxlbmd0aCA9PT0gYTIubGVuZ3RoICYmIGExLmV2ZXJ5KChvLCBpZHgpID0+IHNoYWxsb3dFcXVhbChvLCBhMltpZHhdKSk7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGJhc2U2NFVSTEVuY29kZSA9IChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgICAucmVwbGFjZSgvPS9nLCAnJylcbn1cblxuZXhwb3J0IGNvbnN0IHJldHJ5UHJvbWlzZSA9IGFzeW5jIChcbiAgICBjYixcbiAgICBtYXhOdW1iZXJPZlJldHJpZXMgPSAzXG4pID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heE51bWJlck9mUmV0cmllczsgaSsrKSB7XG4gICAgICAgIGlmIChhd2FpdCBjYigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVTZXJ2aWNlVXJsID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkwgfHwgcHJvY2Vzcy5lbnYuVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV2ZW50TG9jYXRpb24gPSAoZXZlbnQsIHN1bW1pdFZlbnVlQ291bnQsIHN1bW1pdFNob3dMb2NEYXRlID0gbnVsbCwgbm93VXRjID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNob3VsZFNob3dWZW51ZXMgPSAoc3VtbWl0U2hvd0xvY0RhdGUgJiYgbm93VXRjKSA/IHN1bW1pdFNob3dMb2NEYXRlICogMTAwMCA8IG5vd1V0YyA6IHRydWU7XG4gICAgY29uc3QgbG9jYXRpb25OYW1lID0gW107XG4gICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gZXZlbnQ7XG4gICAgXG4gICAgaWYgKCFzaG91bGRTaG93VmVudWVzKSByZXR1cm4gJ1RCQSc7XG4gICAgXG4gICAgaWYgKCFsb2NhdGlvbikgcmV0dXJuICdUQkEnO1xuICAgIFxuICAgIGlmIChzdW1taXRWZW51ZUNvdW50ID4gMSAmJiBsb2NhdGlvbi52ZW51ZT8ubmFtZSkgbG9jYXRpb25OYW1lLnB1c2gobG9jYXRpb24udmVudWUubmFtZSk7XG4gICAgaWYgKGxvY2F0aW9uLmZsb29yPy5uYW1lKSBsb2NhdGlvbk5hbWUucHVzaChsb2NhdGlvbi5mbG9vci5uYW1lKTtcbiAgICBpZiAobG9jYXRpb24ubmFtZSkgbG9jYXRpb25OYW1lLnB1c2gobG9jYXRpb24ubmFtZSk7XG4gICAgXG4gICAgcmV0dXJuIGxvY2F0aW9uTmFtZS5sZW5ndGggPiAwID8gbG9jYXRpb25OYW1lLmpvaW4oJyAtICcpIDogJ1RCQSc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnRIb3N0cyA9IChldmVudCkgPT4ge1xuICAgIGxldCBob3N0cyA9IFtdO1xuICAgIGlmIChldmVudC5zcGVha2Vycz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBob3N0cyA9IFsuLi5ldmVudC5zcGVha2Vyc107XG4gICAgfVxuICAgIGlmIChldmVudC5tb2RlcmF0b3IpIGhvc3RzLnB1c2goZXZlbnQubW9kZXJhdG9yKTtcbiAgICBcbiAgICByZXR1cm4gaG9zdHM7XG59O1xuXG5jb25zdCBsb2FkSW1hZ2UgPSBhc3luYyB1cmwgPT4ge1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpXG4gICAgaW1nLnNyYyA9IHVybFxuICAgIGltZy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnXG4gICAgXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1nKVxuICAgICAgICBpbWcub25lcnJvciA9IHJlamVjdFxuICAgIH0pXG59XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0U1ZHdG9JbWcgPSBhc3luYyAoc3ZnVXJsKSA9PiB7XG4gICAgY29uc3QgaW1nID0gYXdhaXQgbG9hZEltYWdlKHN2Z1VybClcbiAgICBjb25zdCBuZXdXaWR0aCA9IDEwMFxuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGguZmxvb3IoaW1nLm5hdHVyYWxIZWlnaHQgKiAxMDAgLyBpbWcubmF0dXJhbFdpZHRoKVxuICAgIFxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGhcbiAgICBjYW52YXMuaGVpZ2h0ID0gbmV3SGVpZ2h0XG4gICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltZywgMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodClcbiAgICBcbiAgICBjb25zdCB1cmwgPSBhd2FpdCBjYW52YXMudG9EYXRhVVJMKGBpbWFnZS9wbmdgLCAxLjApXG4gICAgY29uc29sZS5sb2codXJsLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICByZXR1cm4ge3VybCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodH1cbn1cbiIsImV4cG9ydCBjb25zdCBDaGVja0JveFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveCc7XG5leHBvcnQgY29uc3QgQ29tYm9Cb3hRdWVzdGlvblR5cGUgPSAnQ29tYm9Cb3gnXG5leHBvcnQgY29uc3QgQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlID0gJ0NoZWNrQm94TGlzdCc7XG5leHBvcnQgY29uc3QgUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlID0gJ1JhZGlvQnV0dG9uTGlzdCc7XG5leHBvcnQgY29uc3QgQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUgPSBbQ29tYm9Cb3hRdWVzdGlvblR5cGUsIENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSwgUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlXTtcbmV4cG9ydCBjb25zdCBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQgPSAnQW5kJztcbmV4cG9ydCBjb25zdCBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciA9ICdPcic7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA9ICdFcXVhbCc7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCA9ICdOb3RFcXVhbCc7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eV9WaXNpYmxlID0gJ1Zpc2libGUnO1xuZXhwb3J0IGNvbnN0IE1haW5RdWVzdGlvbkNsYXNzVHlwZSA9ICdNYWluUXVlc3Rpb24nO1xuaW1wb3J0IHt0b1NsdWd9IGZyb20gXCIuL21ldGhvZHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlc3Rpb25zU2V0IHtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgYW5zd2VycyA9IFtdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgICAgICB0aGlzLm9yaWdpbmFsQW5zd2VycyA9IGFuc3dlcnNcbiAgICAgICAgdGhpcy5hbnN3ZXJzID0gW107XG4gICAgICAgIC8vIG1hcCBhbnN3ZXJzIHRvIGFzc29jaWF0ZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBhIG9mIHRoaXMub3JpZ2luYWxBbnN3ZXJzKVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2EucXVlc3Rpb25faWRdID0gYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZSA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkID0ge31cbiAgICAgICAgLy8gYXNzb2NpYXRpdmUgYXJyYXkgKCBydWxlIGlkICwgcnVsZSk7XG4gICAgICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbnMoKTtcbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWVbdG9TbHVnKHEubmFtZSldID0gcTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5SWRbcGFyc2VJbnQocS5pZCldID0gcTtcbiAgICAgICAgaWYocS5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCByIG9mIHEuc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydWxlc1twYXJzZUludChyLmlkKV0gPSByO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIF9wYXJzZVF1ZXN0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbihxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hbGxvd3NWYWx1ZXMgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUuaW5jbHVkZXMocS50eXBlKTtcbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWUgPSAocSwgYW5zd2VyKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHBhcnNlSW50KHYpKTtcbiAgICAgICAgZm9yIChsZXQgYXYgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcS52YWx1ZXMubWFwKGUgPT4gZS5pZCkuaW5jbHVkZXMoYXYpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZ2V0QW5zd2VyRm9yID0gKHEpID0+IHtcbiAgICAgICAgbGV0IGlkID0gTnVtYmVyLmlzSW50ZWdlcihxKSA/IHEgOiBxLmlkO1xuICAgICAgICBsZXQgYSA9IHRoaXMuYW5zd2Vyc1tpZF0gfHwgbnVsbDtcbiAgICAgICAgcmV0dXJuIGEgPyBhIDogbnVsbDtcbiAgICB9XG5cbiAgICBfaGFzVmFsdWUgPSAoYW5zd2VyKSA9PiB7XG4gICAgICAgIHJldHVybiBhbnN3ZXIudmFsdWUgIT09ICcnO1xuICAgIH1cblxuICAgIF9hbnN3ZXJDb250YWlucyA9IChhbnN3ZXIsIHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlLnNwbGl0KCcsJykuaW5jbHVkZXModmFsKTtcbiAgICB9XG5cbiAgICBfaXNTdWJRdWVzdGlvblZpc2libGUgPSAocnVsZSkgPT4ge1xuICAgICAgICBsZXQgaW5pdGlhbENvbmRpdGlvbiA9IHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJlbnRRdWVzdGlvbkFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihydWxlLnBhcmVudF9xdWVzdGlvbl9pZCk7XG4gICAgICAgIGlmICghcGFyZW50UXVlc3Rpb25BbnN3ZXIpIHtcbiAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFuc3dlclZhbHVlIG9mIHJ1bGUuYW5zd2VyX3ZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uICYmIHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gfHwgdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFuc3dlclZhbHVlIG9mIHJ1bGUuYW5zd2VyX3ZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uICYmICF0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8ICF0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbCB2aXNpYmlsaXR5IGNoZWNrXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHkgPT09IFZpc2liaWxpdHlfVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb25kaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHZpc2libGVcbiAgICAgICAgcmV0dXJuICFpbml0aWFsQ29uZGl0aW9uO1xuICAgIH1cblxuICAgIF9pc0Fuc3dlcmVkID0gKHEpID0+IHtcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyRm9yKHEpO1xuXG4gICAgICAgIGlmIChxLmNsYXNzID09PSBNYWluUXVlc3Rpb25DbGFzc1R5cGUpIHtcbiAgICAgICAgICAgIGlmICghcS5tYW5kYXRvcnkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFzVmFsdWUoYW5zd2VyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93c1ZhbHVlcyhxKSAmJiAhdGhpcy5fYWxsb3dzVmFsdWUocSwgYW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIHBhcmVudCBydWxlcyAuLi5cbiAgICAgICAgZm9yIChsZXQgcnVsZUlkIG9mIHEucGFyZW50X3J1bGVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3ViUXVlc3Rpb25WaXNpYmxlKHRoaXMucnVsZXNbcnVsZUlkXSkpIC8vIGlmIHF1ZXN0aW9uIGlzIG5vdCB2aXNpYmxlIHNraXAgaXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcS5tYW5kYXRvcnkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFzVmFsdWUoYW5zd2VyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93c1ZhbHVlcyhxKSAmJiAhdGhpcy5fYWxsb3dzVmFsdWUocSwgYW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9jaGVja1F1ZXN0aW9uID0gKHEpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRoaXMuX2lzQW5zd2VyZWQocSk7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIF9mb3JtYXRRdWVzdGlvbkFuc3dlciA9IChxdWVzdGlvbikgPT4ge1xuICAgICAgICBsZXQgcmVzID0ge307XG4gICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocXVlc3Rpb24ubmFtZSk7XG4gICAgICAgIGxldCB1c2VyQW5zd2VyID0gdGhpcy5vcmlnaW5hbEFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHF1ZXN0aW9uLmlkKT8udmFsdWU7XG4gICAgICAgIGlmKCF1c2VyQW5zd2VyICYmIHF1ZXN0aW9uPy52YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgLy8gY2hlY2sgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbCA9IHF1ZXN0aW9uLnZhbHVlcy5maW5kKHYgPT4gdi5pc19kZWZhdWx0KTtcbiAgICAgICAgICAgIGlmKGRlZmF1bHRWYWwpIHVzZXJBbnN3ZXIgPSBkZWZhdWx0VmFsLmlkLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodXNlckFuc3dlcikge1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gdXNlckFuc3dlciA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF1c2VyQW5zd2VyO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSB8fCBxdWVzdGlvbi50eXBlID09PSBDb21ib0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHBhcnNlSW50KHVzZXJBbnN3ZXIpO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIuc3BsaXQoJywnKS5tYXAoYW5zVmFsID0+IHBhcnNlSW50KGFuc1ZhbCkpIHx8IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzW3NsdWddID0gIHVzZXJBbnN3ZXIgfHwgJyc7XG4gICAgICAgIGlmKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSAmJiByZXNbc2x1Z10gPT09ICcnKSByZXNbc2x1Z10gPSBbXVxuICAgICAgICBpZihxdWVzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHF1ZXN0aW9uLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgcmVzID0gey4uLnJlcywgLi4ucmVzMX07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZm9ybWF0QW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHEpO1xuICAgICAgICAgICAgcmVzID0gey4uLnJlcywuLi5yZXMxfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcobmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CeU5hbWVbbmFtZV0gfHwgdGhpcy5xdWVzdGlvbkJ5TmFtZVtzbHVnXSAgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5SWQgPSAoaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KGlkKV0gfHwgbnVsbDtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudC10aW1lem9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWZpbmFsLWZvcm1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVyaWpzXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwge0ZyYWdtZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUltcGVyYXRpdmVIYW5kbGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4uL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBSYWRpb0xpc3QgZnJvbSAnLi4vaW5wdXRzL3JhZGlvLWxpc3QnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4uL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IFF1ZXN0aW9uc1NldCBmcm9tICcuLi8uLi91dGlscy9xdWVzdGlvbnMtc2V0JztcbmltcG9ydCB7RmllbGQsIEZvcm19IGZyb20gXCJyZWFjdC1maW5hbC1mb3JtXCI7XG5pbXBvcnQgJy4vaW5kZXguc2Nzcyc7XG5pbXBvcnQge3RvU2x1Z30gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcbmltcG9ydCB7XG4gICAgUXVlc3Rpb25UeXBlX0NoZWNrYm94LCBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0LCBRdWVzdGlvblR5cGVfQ29tYm9Cb3gsIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3gsXG4gICAgUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdCxcbiAgICBRdWVzdGlvblR5cGVfVGV4dCxcbiAgICBRdWVzdGlvblR5cGVfVGV4dEFyZWFcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IElucHV0QWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgY2xhc3NOYW1lLCBpc0Rpc2FibGVkLCBpc1JlcXVpcmVkLCAuLi5yZXN0IH0pID0+IHtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgey4uLmlucHV0fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBjb250YWluZXJDbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIG5hbWU9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgICAgIGlkPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXQudmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2lucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3F1ZXN0aW9uLnBsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgIClcbn1cblxuY29uc3QgUmFkaW9CdXR0b25MaXN0QWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgaXNEaXNhYmxlZCwgaXNSZXF1aXJlZCwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICB7Li4uaW5wdXR9XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIG5hbWU9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgICAgIGlkPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgIHZhbHVlPXtpbnB1dC52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aW5wdXQub25DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgKX07XG5cbmNvbnN0IERyb3Bkb3duQWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgaXNEaXNhYmxlZCwgaXNSZXF1aXJlZCwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICByZXR1cm4gKDxEcm9wZG93blxuICAgICAgICB7Li4uaW5wdXR9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBuYW1lPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgaWQ9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgIGNsYXNzTmFtZT1cImRkbC1leHRyYS1xdWVzdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgY2xhc3NOYW1lUHJlZml4PVwiZGRsLWV4dHJhLXF1ZXN0aW9uc1wiXG4gICAgICAgIHZhbHVlPXtpbnB1dC52YWx1ZX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICBvbkNoYW5nZT17aW5wdXQub25DaGFuZ2V9XG4gICAgLz4pXG59XG5cbmNvbnN0IENoZWNrQm94TGlzdEFkYXB0ZXIgPSAoeyBpbnB1dCwgbWV0YSwgcXVlc3Rpb24sIGlzRGlzYWJsZWQsIGlzUmVxdWlyZWQsIG1heFZhbHVlcywgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICBjb25zdCBzaG91bGRDaGFuZ2UgPSAoZXYpID0+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25fYW5zd2VycyA9IGV2LnRhcmdldC52YWx1ZTtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIG1heCB2YWx1ZSBvZiBvcHRpb25zIGNoZWNrZWQgYW5kIHRoZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4LCBkb24ndCBjaGFuZ2UgdGhlIHZhbHVlXG4gICAgICAgIGlmIChtYXhWYWx1ZXMgPiAwICYmIHF1ZXN0aW9uX2Fuc3dlcnMubGVuZ3RoID4gbWF4VmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5vbkNoYW5nZShldilcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgey4uLmlucHV0fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBpZD17dG9TbHVnKHF1ZXN0aW9uLm5hbWUpfVxuICAgICAgICAgICAgbmFtZT17dG9TbHVnKHF1ZXN0aW9uLm5hbWUpfVxuICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnk9e2Ake3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX0gbGFiZWxgfVxuICAgICAgICAgICAgdmFsdWU9e2lucHV0LnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzaG91bGRDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgKVxufVxuXG5jb25zdCBnZXRWYWxpZGF0b3IgPSBpc1JlcXVpcmVkID0+XG4gICAgaXNSZXF1aXJlZCA/IHZhbHVlID0+ICh2YWx1ZSA/IHVuZGVmaW5lZCA6IFwiUmVxdWlyZWRcIikgOiAoKSA9PiB7fTtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gUmVhY3QuZm9yd2FyZFJlZigoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQW5zd2VyQ2hhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAncXVlc3Rpb25zLWZvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSA9ICdxdWVzdGlvbi1sYWJlbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZT0gJ3F1ZXN0aW9uLWNvbnRyb2wtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkT25seSA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkRXJyb3JNZXNzYWdlID0gJ1JlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3JDbGFzc05hbWUgPSAnZXh0cmEtcXVlc3Rpb24tZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RXh0cmFRdWVzdGlvbnNFZGl0ID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yID0gKGUpID0+IGNvbnNvbGUubG9nKCdmb3JtIGVycm9yczogJywgZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3IgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWYpID0+IHtcblxuICAgIGxldCBzdWJtaXQgPSBudWxsO1xuXG4gICAgY29uc3QgcXVlc3Rpb25SZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGZvcm1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG5cbiAgICAvLyBAc2VlIGh0dHBzOi8vYmV0YS5yZWFjdGpzLm9yZy9yZWZlcmVuY2UvcmVhY3QvdXNlSW1wZXJhdGl2ZUhhbmRsZVxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBkb1N1Ym1pdCgpIHtcbiAgICAgICAgICAgIGZvcm1SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInN1Ym1pdFwiLCB7IGNhbmNlbGFibGU6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7IG5hbWUgfSkgPT4gKFxuICAgICAgICA8RmllbGQgbmFtZT17bmFtZX0gc3Vic2NyaXB0aW9uPXt7IGVycm9yOiB0cnVlLCB0b3VjaGVkOiB0cnVlIH19PlxuICAgICAgICAgICAgeyh7IG1ldGE6IHsgZXJyb3IsIHRvdWNoZWQgfSB9KSA9PlxuICAgICAgICAgICAgICAgIGVycm9yICYmIHRvdWNoZWQgPyA8ZGl2IGNsYXNzTmFtZT17VmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lfT57ZXJyb3J9PC9kaXY+IDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgIClcblxuICAgIGNvbnN0IGNoZWNrUnVsZSA9ICh2YWx1ZSwgcnVsZSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWVzID0gcnVsZS5hbnN3ZXJfdmFsdWVzO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxldCByZXMgPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHZhbHVlLmluY2x1ZGVzKHBhcnNlSW50KHYpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBPclxuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgfHwgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSAocnVsZSwgcnVsZVJlc3VsdCwgY2hpbGRyZW4pID0+IHtcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gXCJWaXNpYmxlXCIpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgICAgICBpZihydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb24gRXF1YWxcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KXtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRMYWJlbCA9IChxKSA9PiB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGxhc3Qgd29yZCBhbmQgdGhlIHJlcXVpcmVkIGFzdGVyaXNrIG9uIHRoZSBzYW1lIGxpbmVcbiAgICAgICAgY29uc3Qgbm9uQnJlYWtpbmdTcGFjZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTsgLy8gZXF1YWxzIHRvICZuYnNwO1xuICAgICAgICBcbiAgICAgICAgLy8gVXNpbmcgYnJvd3NlciBwYXJzZXIgaXNudGVhZCBvZiByZWdleCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXNcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IHEubGFiZWw7XG4gICAgICAgIC8vIFVzaW5nIGlubmVyVGV4dCBmaXJzdCBzaW5jZSBpdCBrZWVwcyB0aGUgbGluZSBicmVha3NcbiAgICAgICAgY29uc3QgbGFiZWwgPSBkaXYuaW5uZXJUZXh0IHx8IGRpdi50ZXh0Q29udGVudCB8fCBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IHEubWFuZGF0b3J5ID8gYCR7bGFiZWx9JHtub25CcmVha2luZ1NwYWNlfTxiPio8L2I+YCA6IGxhYmVsXG4gICAgICAgIGNvbnN0IGxhYmVsSFRNTCA9IGA8bGFiZWwgaWQ9XCIke3RvU2x1ZyhxLm5hbWUpfSBsYWJlbFwiIGh0bWxGb3I9XCIke3RvU2x1ZyhxLm5hbWUpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xhYmVsVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+YFxuXG4gICAgICAgIHJldHVybiBsYWJlbEhUTUw7XG4gICAgfVxuXG4gICAgY29uc3QgaXNBbnN3ZXJlZCA9IChxLCBhbnN3ZXJzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocS5uYW1lKTtcbiAgICAgICAgaWYoIWFuc3dlcnMuaGFzT3duUHJvcGVydHkoc2x1ZykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgYW5zd2VyID0gYW5zd2Vyc1tzbHVnXTtcbiAgICAgICAgLy8gY2hlY2sgdHlwZVxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09ICdzdHJpbmcnKSByZXR1cm4gYW5zd2VyLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmKHR5cGVvZiBhbnN3ZXIgPT09ICdudW1iZXInKSByZXR1cm4gYW5zd2VyID4gMDtcbiAgICAgICAgaWYodHlwZW9mIGFuc3dlciA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYW5zd2VyO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICBsZXQgcXVlc3Rpb25WYWx1ZXMgPSBxLnZhbHVlcztcbiAgICAgICAgLy8gZGlzYWJsZSBmaWVsZCBpZiBlZGl0IGlzbid0IGFsbG93ZWQgYW5kIHRoZSBxdWVzdGlvbnMgaXMgYW5zd2VyZWRcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9ICFhbGxvd0V4dHJhUXVlc3Rpb25zRWRpdCAmJiBpc0Fuc3dlcmVkKHEsIGFuc3dlcnMpO1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy92ZzA1eT9maWxlPS9pbmRleC5qc1xuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfVGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXt0b1NsdWcocS5uYW1lKX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgcmVwbGFjZU5ld0xpbmU9e3RydWV9IGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e2dldExhYmVsKHEpfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb249e3F9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtJbnB1dEFkYXB0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFF1ZXN0aW9uVHlwZV9UZXh0QXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXt0b1NsdWcocS5uYW1lKX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgcmVwbGFjZU5ld0xpbmU9e3RydWV9IGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e2dldExhYmVsKHEpfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPXtxLm1hbmRhdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PVwidGV4dGFyZWFcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiBrZXk9e3IuaWR9IHdoZW49e3RvU2x1ZyhxLm5hbWUpfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfQ2hlY2tib3gpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4J319XG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PVwiaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIHJlcGxhY2VOZXdMaW5lPXt0cnVlfSBjbGFzc05hbWU9e2BlcS1jaGVja2JveC1sYWJlbCAke3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldExhYmVsKHEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiBrZXk9e3IuaWR9IHdoZW49e3RvU2x1ZyhxLm5hbWUpfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b25MaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoe2xhYmVsIDogdmFsLmxhYmVsLCB2YWx1ZSA6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17dG9TbHVnKHEubmFtZSl9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIHJlcGxhY2VOZXdMaW5lPXt0cnVlfSBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbChxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb249e3F9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkPXtxLm1hbmRhdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtSYWRpb0J1dHRvbkxpc3RBZGFwdGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXt0b1NsdWcocS5uYW1lKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24ga2V5PXtyLmlkfSB3aGVuPXt0b1NsdWcocS5uYW1lKX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gUXVlc3Rpb25UeXBlX0NvbWJvQm94IHx8IHEudHlwZSA9PT0gUXVlc3Rpb25UeXBlX0NvdW50cnlDb21ib0JveCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHtsYWJlbCA6IHZhbC5sYWJlbCwgdmFsdWUgOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e3RvU2x1ZyhxLm5hbWUpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCByZXBsYWNlTmV3TGluZT17dHJ1ZX0gY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0TGFiZWwocSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uPXtxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZD17cS5tYW5kYXRvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD17RHJvcGRvd25BZGFwdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiBrZXk9e3IuaWR9IHdoZW49e3RvU2x1ZyhxLm5hbWUpfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoe2xhYmVsIDogdmFsLmxhYmVsLCB2YWx1ZSA6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIHJlcGxhY2VOZXdMaW5lPXt0cnVlfSBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbChxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbj17cX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWVzPXtxLm1heF9zZWxlY3RlZF92YWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e0NoZWNrQm94TGlzdEFkYXB0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1Zpc2libGUgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gISFxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9uID0gKHEsIHZhbHVlcywgZXJyb3JzKSA9PiB7XG4gICAgICAgIGlmIChxLm1hbmRhdG9yeSAmJiBpc1Zpc2libGUocSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocS5uYW1lKTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHRvU2x1ZyhzbHVnKSkgfHwgdmFsdWVzW3RvU2x1ZyhzbHVnKV0gPT09IFwiXCIgfHwgdmFsdWVzW3NsdWddLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yc1tzbHVnXSA9IFJlcXVpcmVkRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHZhbGlkYXRlIHN1YiBydWxlc1xuICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcz8uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbiwgdmFsdWVzLCBlcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWJtaXQgPSAodmFsdWVzKSA9PiB7XG4gICAgICAgIG9uQW5zd2VyQ2hhbmdlcyh2YWx1ZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgZXh0cmFRdWVzdGlvbnMuZm9yRWFjaCggcSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVF1ZXN0aW9uKHEsIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgaWYoIU9iamVjdC5rZXlzKGFuc3dlcnMpLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBnZXRFcnJvckZpZWxkcyA9IChxLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKGludmFsaWRGb3JtRmllbGRzLmluY2x1ZGVzKHRvU2x1ZyhxLm5hbWUpKSkge1xuICAgICAgICAgICAgZXJyb3JGaWVsZHMucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIGVycm9ycyBvbiBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIGdldEVycm9yRmllbGRzKHIuc3ViX3F1ZXN0aW9uLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRGaXJzdEVycm9yID0gKGludmFsaWRGb3JtRmllbGRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yRmllbGRzID0gW107XG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBnZXRFcnJvckZpZWxkcyhxLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yRmllbGRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0ZpcnN0RXJyb3IgPSAoaW52YWxpZEZvcm1GaWVsZHMpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IGdldEZpcnN0RXJyb3IoaW52YWxpZEZvcm1GaWVsZHMpXG4gICAgICAgIHF1ZXN0aW9uUmVmLmN1cnJlbnRbZmlyc3RFcnJvci5pZF0uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGlmICghT2JqZWN0LmtleXMoYW5zd2VycykubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgPEZvcm1cbiAgICAgICAgICAgICAgICB2YWxpZGF0ZT17dmFsaWRhdGV9XG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2Fuc3dlcnN9PlxuXG4gICAgICAgICAgICAgICAgeyh7aGFuZGxlU3VibWl0LCBmb3JtLCBzdWJtaXR0aW5nLCBwcmlzdGluZSwgdmFsdWVzfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXQgPSBoYW5kbGVTdWJtaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZEZvcm1GaWVsZHMgPSBmb3JtLmdldFJlZ2lzdGVyZWRGaWVsZHMoKS5maWx0ZXIoZmllbGQgPT4gZm9ybS5nZXRGaWVsZFN0YXRlKGZpZWxkKS5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRGb3JtRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBnZXRGaXJzdEVycm9yKGludmFsaWRGb3JtRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoaW52YWxpZEZvcm1GaWVsZHMsIHF1ZXN0aW9uUmVmLmN1cnJlbnRbZmlyc3RFcnJvci5pZF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzaG91bGRTY3JvbGwyRmlyc3RFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb0ZpcnN0RXJyb3IoaW52YWxpZEZvcm1GaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZWJ1ZyAmJiA8cHJlPntKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIDAsIDIpfTwvcHJlPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgeyFyZWYgJiZcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2J1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgKVxufSk7XG5cbkV4dHJhUXVlc3Rpb25zRm9ybS5wcm9wVHlwZXMgPSB7XG4gICAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHVzZXJBbnN3ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvbkFuc3dlckNoYW5nZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFJlcXVpcmVkRXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFZhbGlkYXRpb25FcnJvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhbGxvd0V4dHJhUXVlc3Rpb25zRWRpdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3I6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXh0cmFRdWVzdGlvbnNGb3JtO1xuIl0sIm5hbWVzIjpbIlF1ZXN0aW9uVHlwZV9UZXh0IiwiUXVlc3Rpb25UeXBlX1RleHRBcmVhIiwiUXVlc3Rpb25UeXBlX0NoZWNrYm94IiwiUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdCIsIlF1ZXN0aW9uVHlwZV9Db21ib0JveCIsIlF1ZXN0aW9uVHlwZV9DaGVja0JveExpc3QiLCJRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94IiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJUIiwiUmF3SFRNTCIsIkNoZWNrYm94TGlzdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJvdGhlclZhbHVlIiwidmFsdWUiLCJmaW5kIiwidiIsIm9wdGlvbnMiLCJtYXAiLCJvcCIsImluY2x1ZGVzIiwic3RhdGUiLCJvdGhlckNoZWNrZWQiLCJoYW5kbGVDaGFuZ2UiLCJiaW5kIiwiaGFuZGxlT3RoZXJDQkNoYW5nZSIsImV2ZW50Iiwib3B0aW9uVmFsdWVzIiwidGFyZ2V0IiwidHlwZSIsImNoZWNrZWQiLCJ0aGVWYWwiLCJpc05hTiIsInBhcnNlSW50IiwicHVzaCIsImZpbHRlciIsImV2IiwiaWQiLCJvbkNoYW5nZSIsInNldFN0YXRlIiwicmVuZGVyIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJlcnJvciIsImRpc2FibGVkIiwibmFtZSIsImFyaWFMYWJlbGxlZEJ5IiwicmVzdCIsImlubGluZSIsImhhc093blByb3BlcnR5IiwiaHRtbCIsImFsbG93T3RoZXIiLCJoYXNfZXJyb3IiLCJpc0Rpc2FibGVkIiwic3R5bGUiLCJsYWJlbCIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsImZsb2F0IiwibWFyZ2luVG9wIiwidHJhbnNsYXRlIiwid2lkdGgiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiU2VsZWN0IiwiRHJvcGRvd24iLCJzZWxlY3Rpb24iLCJpc011bHRpIiwidmFsIiwiY2xlYXJhYmxlIiwib3ZlcnJpZGVDU1MiLCJpc0NsZWFyYWJsZSIsInRoZVZhbHVlIiwic2VsZWN0Q2xhc3NOYW1lIiwiT2JqZWN0Iiwib3B0Iiwic2VsZWN0U3R5bGVzIiwibWVudSIsInN0eWxlcyIsInpJbmRleCIsIlJhZGlvTGlzdCIsImdldExhYmVsIiwib3B0aW9uIiwic2ltcGxlIiwiZGlzcGxheSIsImRlc2NyaXB0aW9uIiwiSW5wdXQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJzbmFwc2hvdCIsImlucHV0IiwiY29udGFpbmVyQ2xhc3NOYW1lIiwiY2xhc3NfbmFtZSIsImNvbnRhaW5lcl9jbGFzc19uYW1lIiwibm9kZSIsInJlcGxhY2VOZXdMaW5lIiwiX19odG1sIiwicmVwbGFjZSIsIm1vbWVudCIsIlVSSSIsImZpbmRFbGVtZW50UG9zIiwib2JqIiwiY3VydG9wIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0VG9wIiwiZXBvY2hUb01vbWVudCIsImF0aW1lIiwiZXBvY2hUb01vbWVudFRpbWVab25lIiwidGltZV96b25lIiwidHoiLCJmb3JtYXRFcG9jaCIsImZvcm1hdCIsInBhcnNlTG9jYXRpb25Ib3VyIiwiaG91ciIsInBhcnNlZEhvdXIiLCJ0b1N0cmluZyIsImxlbmd0aCIsIm1hdGNoIiwiam9pbiIsIm9iamVjdFRvUXVlcnlTdHJpbmciLCJzdHIiLCJrZXkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRCYWNrVVJMIiwidXJsIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwicXVlcnkiLCJzZWFyY2giLCJmcmFnbWVudCIsImJhY2tVcmwiLCJ0b1NsdWciLCJ0ZXh0IiwidG9Mb3dlckNhc2UiLCJnZXRBdXRoQ2FsbGJhY2siLCJvcmlnaW4iLCJnZXRDdXJyZW50TG9jYXRpb24iLCJ0b3AiLCJnZXRPcmlnaW4iLCJnZXRDdXJyZW50UGF0aE5hbWUiLCJwYXRobmFtZSIsImdldEN1cnJlbnRIcmVmIiwiZ2V0QWxsb3dlZFVzZXJHcm91cHMiLCJBTExPV0VEX1VTRVJfR1JPVVBTIiwiYnVpbGRBUElCYXNlVXJsIiwicmVsYXRpdmVVcmwiLCJBUElfQkFTRV9VUkwiLCJwdXRPbkxvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJnZXRGcm9tTG9jYWxTdG9yYWdlIiwicmVtb3ZlSXQiLCJnZXRJdGVtIiwiY29uc29sZSIsImxvZyIsInJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwiaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSIsImNsZWFyaW5nX3Nlc3Npb25fc3RhdGUiLCJzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsYW5ndWFnZSIsIm5hdmlnYXRvciIsImxhbmd1YWdlcyIsInVzZXJMYW5ndWFnZSIsInNjcm9sbFRvRXJyb3IiLCJlcnJvcnMiLCJrZXlzIiwiZmlyc3RFcnJvciIsImZpcnN0Tm9kZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JvbGxUbyIsImhhc0Vycm9ycyIsImZpZWxkIiwic2hhbGxvd0VxdWFsIiwib2JqZWN0MSIsIm9iamVjdDIiLCJrZXlzMSIsImtleXMyIiwiYXJyYXlzRXF1YWwiLCJhMSIsImEyIiwiZXZlcnkiLCJvIiwiaWR4IiwiaXNFbXB0eSIsImJhc2U2NFVSTEVuY29kZSIsInJldHJ5UHJvbWlzZSIsImNiIiwibWF4TnVtYmVyT2ZSZXRyaWVzIiwiaSIsImdldFRpbWVTZXJ2aWNlVXJsIiwiVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkwiLCJwcm9jZXNzIiwiZW52IiwiZ2V0RXZlbnRMb2NhdGlvbiIsInN1bW1pdFZlbnVlQ291bnQiLCJzdW1taXRTaG93TG9jRGF0ZSIsIm5vd1V0YyIsInNob3VsZFNob3dWZW51ZXMiLCJsb2NhdGlvbk5hbWUiLCJ2ZW51ZSIsImZsb29yIiwiZ2V0RXZlbnRIb3N0cyIsImhvc3RzIiwic3BlYWtlcnMiLCJtb2RlcmF0b3IiLCJsb2FkSW1hZ2UiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiY3Jvc3NPcmlnaW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJjb252ZXJ0U1ZHdG9JbWciLCJzdmdVcmwiLCJuZXdXaWR0aCIsIm5ld0hlaWdodCIsIk1hdGgiLCJuYXR1cmFsSGVpZ2h0IiwibmF0dXJhbFdpZHRoIiwiY2FudmFzIiwiaGVpZ2h0IiwiZ2V0Q29udGV4dCIsImRyYXdJbWFnZSIsInRvRGF0YVVSTCIsIkNoZWNrQm94UXVlc3Rpb25UeXBlIiwiQ29tYm9Cb3hRdWVzdGlvblR5cGUiLCJDaGVja0JveExpc3RRdWVzdGlvblR5cGUiLCJSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUiLCJBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZSIsIkFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCIsIkFuc3dlclZhbHVlc09wZXJhdG9yX09yIiwiVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCIsIlZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWwiLCJWaXNpYmlsaXR5X1Zpc2libGUiLCJNYWluUXVlc3Rpb25DbGFzc1R5cGUiLCJRdWVzdGlvbnNTZXQiLCJxdWVzdGlvbnMiLCJhbnN3ZXJzIiwicSIsInF1ZXN0aW9uQnlOYW1lIiwicXVlc3Rpb25CeUlkIiwiciIsInN1Yl9xdWVzdGlvbl9ydWxlcyIsInJ1bGVzIiwiX3BhcnNlUXVlc3Rpb24iLCJzdWJfcXVlc3Rpb24iLCJhbnN3ZXIiLCJzcGxpdCIsImF2IiwidmFsdWVzIiwiZSIsIk51bWJlciIsImlzSW50ZWdlciIsImEiLCJydWxlIiwiaW5pdGlhbENvbmRpdGlvbiIsImFuc3dlcl92YWx1ZXNfb3BlcmF0b3IiLCJwYXJlbnRRdWVzdGlvbkFuc3dlciIsIl9nZXRBbnN3ZXJGb3IiLCJwYXJlbnRfcXVlc3Rpb25faWQiLCJ2aXNpYmlsaXR5X2NvbmRpdGlvbiIsImFuc3dlclZhbHVlIiwiYW5zd2VyX3ZhbHVlcyIsIl9hbnN3ZXJDb250YWlucyIsInZpc2liaWxpdHkiLCJjbGFzcyIsIm1hbmRhdG9yeSIsIl9oYXNWYWx1ZSIsIl9hbGxvd3NWYWx1ZXMiLCJfYWxsb3dzVmFsdWUiLCJydWxlSWQiLCJwYXJlbnRfcnVsZXMiLCJfaXNTdWJRdWVzdGlvblZpc2libGUiLCJyZXMiLCJfaXNBbnN3ZXJlZCIsIl9jaGVja1F1ZXN0aW9uIiwicXVlc3Rpb24iLCJzbHVnIiwidXNlckFuc3dlciIsIm9yaWdpbmFsQW5zd2VycyIsInF1ZXN0aW9uX2lkIiwiZGVmYXVsdFZhbCIsImlzX2RlZmF1bHQiLCJhbnNWYWwiLCJyZXMxIiwiX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyIiwiZm9yRWFjaCIsIl9wYXJzZVF1ZXN0aW9ucyIsIkZyYWdtZW50IiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiRmllbGQiLCJGb3JtIiwiSW5wdXRBZGFwdGVyIiwibWV0YSIsInBsYWNlaG9sZGVyIiwiUmFkaW9CdXR0b25MaXN0QWRhcHRlciIsIkRyb3Bkb3duQWRhcHRlciIsIkNoZWNrQm94TGlzdEFkYXB0ZXIiLCJtYXhWYWx1ZXMiLCJzaG91bGRDaGFuZ2UiLCJxdWVzdGlvbl9hbnN3ZXJzIiwiZ2V0VmFsaWRhdG9yIiwidW5kZWZpbmVkIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZm9yd2FyZFJlZiIsImV4dHJhUXVlc3Rpb25zIiwidXNlckFuc3dlcnMiLCJvbkFuc3dlckNoYW5nZXMiLCJxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUiLCJxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWUiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsIlJlcXVpcmVkRXJyb3JNZXNzYWdlIiwiVmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lIiwiYWxsb3dFeHRyYVF1ZXN0aW9uc0VkaXQiLCJvbkVycm9yIiwic2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3IiLCJyZWYiLCJzdWJtaXQiLCJxdWVzdGlvblJlZiIsImZvcm1SZWYiLCJzZXRBbnN3ZXJzIiwiZm9ybWF0VXNlckFuc3dlcnMiLCJkb1N1Ym1pdCIsImN1cnJlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJjYW5jZWxhYmxlIiwiYnViYmxlcyIsInFzIiwiZm9ybWF0QW5zd2VycyIsIkNvbmRpdGlvbiIsIndoZW4iLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsInRvdWNoZWQiLCJBcnJheSIsImlzQXJyYXkiLCJydWxlUmVzdWx0Iiwibm9uQnJlYWtpbmdTcGFjZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImRpdiIsImlubmVySFRNTCIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwibGFiZWxUZXh0IiwibGFiZWxIVE1MIiwiaXNBbnN3ZXJlZCIsInJlbmRlclF1ZXN0aW9uIiwicXVlc3Rpb25WYWx1ZXMiLCJlbCIsIm1heF9zZWxlY3RlZF92YWx1ZXMiLCJpc1Zpc2libGUiLCJ2YWxpZGF0ZVF1ZXN0aW9uIiwib25TdWJtaXQiLCJ2YWxpZGF0ZSIsImdldEVycm9yRmllbGRzIiwiaW52YWxpZEZvcm1GaWVsZHMiLCJlcnJvckZpZWxkcyIsImdldEZpcnN0RXJyb3IiLCJzb3J0IiwiYiIsIm9yZGVyIiwic2Nyb2xsVG9GaXJzdEVycm9yIiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsImJsb2NrIiwiaGFuZGxlU3VibWl0IiwiZm9ybSIsInN1Ym1pdHRpbmciLCJwcmlzdGluZSIsImdldFJlZ2lzdGVyZWRGaWVsZHMiLCJnZXRGaWVsZFN0YXRlIiwiaW52YWxpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcnJheSIsImZ1bmMiLCJib29sIl0sInNvdXJjZVJvb3QiOiIifQ==