geonetwork-ui 2.7.0-dev.8de7be79f → 2.7.0-dev.af30c6fac

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 (137) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +4 -7
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +20 -20
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +3 -3
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -4
  8. package/esm2022/libs/api/repository/src/index.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +5 -5
  10. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +55 -12
  11. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +3 -3
  12. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +3 -3
  13. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -3
  14. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -5
  15. package/esm2022/libs/api/repository/src/lib/metadata-language.token.mjs +3 -0
  16. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +11 -1
  17. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +3 -3
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.mjs +79 -0
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +8 -3
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  21. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +77 -1
  22. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  23. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +3 -2
  24. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  25. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  26. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +1 -4
  27. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +7 -7
  28. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +1 -6
  29. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  30. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -2
  31. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  32. package/esm2022/libs/util/app-config/src/lib/parse-utils.mjs +5 -4
  33. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +50 -9
  34. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +9 -8
  35. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  36. package/esm2022/translations/de.json +39 -7
  37. package/esm2022/translations/en.json +38 -6
  38. package/esm2022/translations/es.json +38 -6
  39. package/esm2022/translations/fr.json +38 -6
  40. package/esm2022/translations/it.json +38 -6
  41. package/esm2022/translations/nl.json +38 -6
  42. package/esm2022/translations/pt.json +38 -6
  43. package/esm2022/translations/sk.json +38 -6
  44. package/fesm2022/geonetwork-ui.mjs +2955 -2841
  45. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  46. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -1
  47. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +1 -1
  48. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  49. package/libs/api/repository/src/index.d.ts +1 -1
  50. package/libs/api/repository/src/index.d.ts.map +1 -1
  51. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -2
  52. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  53. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +1 -0
  54. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  55. package/libs/api/repository/src/lib/metadata-language.token.d.ts +5 -0
  56. package/libs/api/repository/src/lib/metadata-language.token.d.ts.map +1 -0
  57. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +4 -0
  58. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  59. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  60. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts +28 -0
  61. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts.map +1 -0
  62. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -0
  63. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  64. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  65. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  66. package/libs/feature/editor/src/lib/fields.config.d.ts +8 -1
  67. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  68. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  69. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  70. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  71. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  72. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -1
  73. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  74. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  75. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  76. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  77. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  78. package/libs/util/app-config/src/lib/parse-utils.d.ts.map +1 -1
  79. package/libs/util/i18n/src/lib/language-codes.d.ts +91 -31
  80. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  81. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -1
  82. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  83. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  84. package/package.json +11 -10
  85. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +3 -6
  86. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +47 -22
  87. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +2 -2
  88. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +2 -2
  89. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -2
  90. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +3 -3
  91. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +3 -3
  92. package/src/libs/api/repository/src/index.ts +1 -1
  93. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -4
  94. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +65 -14
  95. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  96. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +2 -2
  97. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +2 -2
  98. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +9 -7
  99. package/src/libs/api/repository/src/lib/metadata-language.token.ts +8 -0
  100. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +16 -0
  101. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +2 -5
  102. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.css +0 -0
  103. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.html +20 -0
  104. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.ts +85 -0
  105. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +6 -0
  106. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
  107. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  108. package/src/libs/feature/editor/src/lib/fields.config.ts +85 -1
  109. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  110. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +2 -1
  111. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  112. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -1
  113. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -4
  114. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -6
  115. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +0 -6
  116. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  117. package/src/libs/util/app-config/src/lib/fixtures.ts +1 -1
  118. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  119. package/src/libs/util/app-config/src/lib/parse-utils.ts +4 -7
  120. package/src/libs/util/i18n/src/lib/language-codes.ts +62 -11
  121. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +13 -10
  122. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  123. package/translations/de.json +39 -7
  124. package/translations/en.json +38 -6
  125. package/translations/es.json +38 -6
  126. package/translations/fr.json +38 -6
  127. package/translations/it.json +38 -6
  128. package/translations/nl.json +38 -6
  129. package/translations/pt.json +38 -6
  130. package/translations/sk.json +38 -6
  131. package/esm2022/libs/api/repository/src/lib/metadata-language.mjs +0 -3
  132. package/esm2022/libs/util/app-config/src/lib/constants.mjs +0 -439
  133. package/libs/api/repository/src/lib/metadata-language.d.ts +0 -3
  134. package/libs/api/repository/src/lib/metadata-language.d.ts.map +0 -1
  135. package/libs/util/app-config/src/lib/constants.d.ts +0 -2
  136. package/libs/util/app-config/src/lib/constants.d.ts.map +0 -1
  137. package/src/libs/api/repository/src/lib/metadata-language.ts +0 -3
@@ -7,7 +7,7 @@ import { getKeywordTypeFromKeywordTypeCode } from './utils/keyword.mapper';
7
7
  import { getRoleFromRoleCode } from './utils/role.mapper';
8
8
  import { getStatusFromStatusCode } from './utils/status.mapper';
9
9
  import { getUpdateFrequencyFromFrequencyCode } from './utils/update-frequency.mapper';
10
- import { getLang2FromLang3 } from '../../../../../../libs/util/i18n/src/lib/language-codes';
10
+ import { toLang2 } from '../../../../../../libs/util/i18n/src/lib/language-codes';
11
11
  import { getResourceType, getReuseType } from '../common/resource-types';
12
12
  export function extractCharacterString() {
13
13
  return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false), findChildElement('gmx:MimeFileType', false)), readText());
@@ -474,12 +474,12 @@ export function readSpatialExtents(rootEl) {
474
474
  }
475
475
  export function readOtherLanguages(rootEl) {
476
476
  const defaultLanguage = readDefaultLanguage(rootEl);
477
- return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => getLang2FromLang3(lang?.toLowerCase()) ?? lang))), map((languages) => languages.filter((lang) => lang !== null)), map((languages) => (languages.length ? languages : [defaultLanguage])))(rootEl);
477
+ return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => toLang2(lang?.toLowerCase()) ?? lang))), map((languages) => languages.filter((lang) => lang !== null)), map((languages) => (languages.length ? languages : [defaultLanguage])))(rootEl);
478
478
  }
479
479
  export function readDefaultLanguage(rootEl) {
480
- return pipe(findChildElement('gmd:language', false), findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? getLang2FromLang3(lang.toLowerCase()) : null)))(rootEl);
480
+ return pipe(findChildElement('gmd:language', false), findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? toLang2(lang.toLowerCase()) : null)))(rootEl);
481
481
  }
482
482
  export function readResourceIdentifier(rootEl) {
483
483
  return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), extractCharacterString())(rootEl);
484
484
  }
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBQzNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFeEUsTUFBTSxVQUFVLHNCQUFzQjtJQUlwQyxPQUFPLElBQUksQ0FDVCxRQUFRLENBQ04sZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEVBQzlDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFDckMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQzVDLEVBQ0QsUUFBUSxFQUFFLENBQ1gsQ0FBQTtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSwrQkFBK0IsQ0FDN0MsU0FBaUIsRUFDakIsWUFBZ0I7SUFFaEIsT0FBTyxPQUFPLENBQ1osSUFBSSxDQUNGLFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsRUFDOUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUN0QyxFQUNELFFBQVEsRUFBRSxDQUNYLEVBQ0QsQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUNMLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQ3pDLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsOEJBQThCLENBQy9CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDTCxNQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSyxFQUFRLENBQUE7UUFDbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU07WUFBRSxPQUFPLGdCQUFnQixDQUFBO1FBQ3JELE1BQU0saUJBQWlCLEdBQXFCLGdCQUFnQixDQUFDLE1BQU0sQ0FDakUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztpQkFDaEQsV0FBVyxFQUFFO2lCQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDcEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDdkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sSUFBSSxDQUFBO1lBQ2IsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFBO1FBQ25DLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQTtRQUNELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHO1lBQzVCLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQzlCLEdBQUcsaUJBQWlCO1NBQ3JCLENBQUE7UUFDRCxPQUFPLGdCQUFnQixDQUFBO0lBQ3pCLENBQUMsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FDTixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FDcEMsRUFDRCxRQUFRLEVBQUUsRUFDVixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDdkQsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQ3RDLFFBQVEsRUFBRSxFQUNWLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDM0QsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVTtJQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQzdCLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxFQUM5QyxRQUFRLEVBQUUsQ0FDWCxDQUFBO0lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUNwQixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQ3JDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDNUIsQ0FBQTtJQUNELE9BQU8sSUFBSSxDQUNULFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLEVBQy9DLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUNILENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNuQyxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQzlCLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUN6QixDQUFBO0FBQ0gsQ0FBQztBQUVELCtCQUErQjtBQUMvQixNQUFNLFVBQVUsbUJBQW1CO0lBSWpDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FDakIsa0JBQWtCLENBQ2hCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN2QixhQUFhLENBQ2QsRUFDRCxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQ2IsVUFBVSxFQUFFLENBQ2IsQ0FBQTtJQUNELE9BQU8sSUFBSSxDQUNULE9BQU8sQ0FDTCxJQUFJLENBQ0YsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLEVBQy9DLCtCQUErQixDQUEyQixNQUFNLENBQUMsQ0FDbEUsRUFDRCxNQUFNLENBQ1AsRUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUk7UUFDSixHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsWUFBWTtLQUNiLENBQUMsQ0FBQyxDQUNKLENBQUE7QUFDSCxDQUFDO0FBRUQsK0JBQStCO0FBQy9CLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDakUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUN0QixnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNwQyxzQkFBc0IsRUFBRSxDQUN6QixDQUFBO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUN2QixnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxFQUN0QyxzQkFBc0IsRUFBRSxFQUN4QixHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNmLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFDeEIsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNELE1BQU0sZUFBZSxHQUFHLG1CQUFtQixFQUFFLENBQUE7SUFDN0MsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQ25CLGNBQWMsRUFDZCxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUM3QyxzQkFBc0IsRUFBRSxFQUN4QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2pFLENBQUE7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQ3JCLGNBQWMsRUFDZCxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsRUFDbEQsT0FBTyxDQUNMLElBQUksQ0FDRixnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsRUFDNUMsc0JBQXNCLEVBQUUsQ0FDekIsRUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQ3ZFLEVBQ0QsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3BELENBQUE7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQ25CLGNBQWMsRUFDZCxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLEVBQy9ELHNCQUFzQixFQUFFLENBQ3pCLENBQUE7SUFDRCxPQUFPLElBQUksQ0FDVCxPQUFPLENBQ0wsT0FBTyxFQUNQLFdBQVcsRUFDWCxZQUFZLEVBQ1osZUFBZSxFQUNmLFFBQVEsRUFDUixVQUFVLEVBQ1YsUUFBUSxDQUNULEVBQ0QsR0FBRyxDQUNELENBQUMsQ0FDQyxJQUFJLEVBQ0osUUFBUSxFQUNSLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUNyQixZQUFZLEVBQ1osS0FBSyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ04sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNMLEtBQUs7UUFDTCxJQUFJO1FBQ0osWUFBWTtRQUNaLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM3QixHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDL0IsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7S0FDeEIsQ0FBQyxDQUNILENBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUN2QyxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQzlCLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUM3QixDQUFBO0FBQ0gsQ0FBQztBQUVELCtCQUErQjtBQUMvQixNQUFNLFVBQVUsdUJBQXVCO0lBSXJDLE9BQU8sSUFBSSxDQUNULG1CQUFtQixDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxFQUNyRCxXQUFXLENBQ1QsSUFBSSxDQUNGLG1CQUFtQixDQUFDLHdCQUF3QixDQUFDLEVBQzdDLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsRUFDeEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ2xELENBQ0YsRUFDRCxRQUFRLENBQ04sT0FBTyxDQUNMLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLEVBQzNDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQ3pDLENBQ0YsRUFDRCxZQUFZLEVBQUUsRUFDZCxZQUFZLEVBQUUsRUFDZCxRQUFRLENBQ04sT0FBTyxDQUNMLCtCQUErQixDQUF5QixNQUFNLENBQUMsRUFDL0QsVUFBVSxFQUFFLENBQ2IsQ0FDRixFQUNELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUk7UUFDSixZQUFZO0tBQ2IsQ0FBQyxDQUFDLENBQ0osQ0FBQTtBQUNILENBQUM7QUFFRCwrQkFBK0I7QUFDL0IsTUFBTSxVQUFVLDBCQUEwQjtJQUl4QyxPQUFPLElBQUksQ0FDVCxrQkFBa0IsQ0FBQyw0QkFBNEIsRUFBRSxtQkFBbUIsQ0FBQyxFQUNyRSxZQUFZLEVBQUUsRUFDZCxRQUFRLENBQ04sT0FBTyxDQUNMLCtCQUErQixDQUF5QixNQUFNLENBQUMsRUFDL0QsVUFBVSxFQUFFLENBQ2IsQ0FDRixFQUNELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUk7UUFDSixZQUFZO0tBQ2IsQ0FBQyxDQUFDLENBQ0osQ0FBQTtBQUNILENBQUM7QUFFRCwrQkFBK0I7QUFDL0IsTUFBTSxVQUFVLHVCQUF1QjtJQUlyQyxPQUFPLElBQUksQ0FDVCxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxFQUM3RCxZQUFZLEVBQUUsRUFDZCxRQUFRLENBQ04sT0FBTyxDQUNMLCtCQUErQixDQUF5QixNQUFNLENBQUMsRUFDL0QsVUFBVSxFQUFFLENBQ2IsQ0FDRixFQUNELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUk7UUFDSixZQUFZO0tBQ2IsQ0FBQyxDQUFDLENBQ0osQ0FBQTtBQUNILENBQUM7QUFFRCwrQkFBK0I7QUFDL0IsTUFBTSxVQUFVLGVBQWU7SUFJN0IsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLEVBQ3JELFdBQVcsQ0FDVCxJQUFJLENBQ0YsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsRUFDN0MsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDaEQsQ0FDRixFQUNELFFBQVEsQ0FDTixPQUFPLENBQ0wsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsRUFDM0MsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FDekMsQ0FDRixFQUNELFlBQVksRUFBRSxFQUNkLFlBQVksRUFBRSxFQUNkLFFBQVEsQ0FDTixPQUFPLENBQ0wsK0JBQStCLENBQXlCLE1BQU0sQ0FBQyxFQUMvRCxVQUFVLEVBQUUsQ0FDYixDQUNGLEVBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSTtRQUNKLFlBQVk7S0FDYixDQUFDLENBQUMsQ0FDSixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FDdEIsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEVBQ2pDLGlCQUFpQixDQUFDLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsRUFDeEUsc0JBQXNCLEVBQUUsRUFDeEIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUNuQixDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxhQUFvRDtJQUVwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FDekIsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQ2hDLHNCQUFzQixFQUFFLENBQ3pCLENBQUE7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0lBQzVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUM1QixpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsMkJBQTJCLENBQUMsRUFDOUQsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUMvQixDQUFBO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUN2QixXQUFXLEVBQ1gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQ3hDLENBQUE7SUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQ3hCLE9BQU8sQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLEVBQ3hELEdBQUcsQ0FDRCxDQUFDLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQzNDLENBQUMsQ0FBQyxTQUFTLElBQUksY0FBYyxLQUFLLFVBQVUsQ0FBQztRQUM3QyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNoQyxDQUNGLENBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQ2xCLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUM1QiwrQkFBK0IsQ0FBNkIsTUFBTSxDQUFDLENBQ3BFLENBQUE7SUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQ3pCLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEVBQ25DLCtCQUErQixDQUE2QixhQUFhLENBQUMsQ0FDM0UsQ0FBQTtJQUNELE9BQU8sSUFBSSxDQUNULGtCQUFrQixDQUNoQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLFlBQVksRUFDWix1QkFBdUIsQ0FDeEIsRUFDRCxRQUFRLENBQ04sT0FBTyxDQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IsV0FBVyxFQUNYLE1BQU0sRUFDTixPQUFPLEVBQ1AsY0FBYyxFQUNkLGFBQWEsQ0FDZCxDQUNGLEVBQ0QsUUFBUSxDQUNOLENBQUMsQ0FDQyxTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixHQUFHLEVBQ0gsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFDeEIsQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLENBQUMsRUFDdEMsUUFBUSxFQUNULEVBQUUsRUFBRTtRQUNILE1BQU0sWUFBWSxHQUFHO1lBQ25CLEdBQUcsZ0JBQWdCO1lBQ25CLEdBQUcsdUJBQXVCO1NBQzNCLENBQUE7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTztnQkFDTCxJQUFJLEVBQUUsU0FBUztnQkFDZixHQUFHLEVBQUUsR0FBRztnQkFDUixxQkFBcUIsRUFBRSxRQUFRO2dCQUMvQixHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSx5RUFBeUU7Z0JBQ3JILEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNuQyxZQUFZO2FBQ2IsQ0FBQTtRQUNILENBQUM7YUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNuQyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQzdCLFlBQVk7YUFDYixDQUFBO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPO2dCQUNMLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNuQyxZQUFZO2FBQ2IsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDLENBQ0YsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQ0FBa0MsQ0FDaEQsU0FBaUI7SUFFakIsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUMzQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUM3QixnRUFBZ0UsQ0FDakUsQ0FBQTtJQUNELElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDekIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDMUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU87WUFDTCxHQUFHLEVBQUUsTUFBTTtZQUNYLFlBQVksRUFBRSxDQUFDO1NBQ2hCLENBQUE7SUFDSCxDQUFDO1NBQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTztZQUNMLEdBQUcsRUFBRSxPQUFPO1lBQ1osWUFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQTtJQUNILENBQUM7U0FBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE9BQU87WUFDTCxHQUFHLEVBQUUsTUFBTTtZQUNYLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7U0FDdEMsQ0FBQTtJQUNILENBQUM7U0FBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPO1lBQ0wsR0FBRyxFQUFFLEtBQUs7WUFDVixZQUFZLEVBQUUsQ0FBQztTQUNoQixDQUFBO0lBQ0gsQ0FBQztTQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTztZQUNMLEdBQUcsRUFBRSxNQUFNO1lBQ1gsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxnRUFBZ0U7U0FDOUcsQ0FBQTtJQUNILENBQUM7U0FBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hCLE9BQU87WUFDTCxHQUFHLEVBQUUsT0FBTztZQUNaLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7U0FDcEMsQ0FBQTtJQUNILENBQUM7U0FBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE9BQU87WUFDTCxHQUFHLEVBQUUsS0FBSztZQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7U0FDckMsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxxQ0FBcUM7QUFDckMsTUFBTSxVQUFVLHNCQUFzQjtJQUlwQyxPQUFPLFFBQVEsQ0FDYixJQUFJLENBQ0YsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUMsRUFDbkQsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUM5QixHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FDekMsRUFDRCxJQUFJLENBQ0YsaUJBQWlCLENBQ2YscUNBQXFDLEVBQ3JDLHVCQUF1QixDQUN4QixFQUNELFFBQVEsRUFBRSxFQUNWLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUN4QyxFQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FDckIsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsRUFDakQsT0FBTyxDQUNMLGdCQUFnQixDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxFQUNwRCxnQkFBZ0IsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FDeEQsRUFDRCxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFDaEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUNkLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxJQUE2QztJQUU3QyxPQUFPLElBQUksQ0FDVCxrQkFBa0IsRUFBRSxFQUNwQixrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEVBQ2pFLFdBQVcsQ0FDVCxJQUFJLENBQ0Ysa0JBQWtCLENBQ2hCLGFBQWEsRUFDYixjQUFjLEVBQ2QscUJBQXFCLENBQ3RCLEVBQ0QsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUNiLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFDOUIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQy9CLENBQ0YsRUFDRCxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQ2Isa0JBQWtCLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUM3QyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQ2IsZUFBZSxFQUFFLENBQ2xCLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUM5Qyx5QkFBaUM7SUFFakMsUUFBUSx5QkFBeUIsRUFBRSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxPQUFPO1lBQ1YsT0FBTyx5QkFBeUIsQ0FBQTtRQUNsQztZQUNFLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBa0I7SUFDckQsT0FBTyxJQUFJLENBQ1QsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLEVBQzdDLHNCQUFzQixFQUFFLENBQ3pCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFrQjtJQUN6QyxPQUFPLElBQUksQ0FDVCxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUMzRCxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQzlCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBYyxFQUFFLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQzNELENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWtCO0lBQ3RELE9BQU8sSUFBSSxDQUNULGlCQUFpQixDQUFDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxFQUMzRCxtQkFBbUIsRUFBRSxDQUN0QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFrQjtJQUNwRCxPQUFPLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBa0I7SUFDcEQsT0FBTyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUN0RCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWtCO0lBQ3RELE9BQU8seUJBQXlCLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDekQsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFrQjtJQUNsRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQzNFLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQWtCO0lBQzlDLE9BQU8sSUFBSSxDQUNULGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLGtCQUFrQixDQUFDLEVBQzNELGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFDOUIsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDdkQsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixNQUFrQixFQUNsQixZQUFnQztJQUVoQyxPQUFPLElBQUksQ0FDVCxrQkFBa0IsRUFBRSxFQUNwQixpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLEVBQ2pFLCtCQUErQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQ3hCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsTUFBa0IsRUFDbEIsWUFBZ0M7SUFFaEMsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLEVBQUUsRUFDcEIsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxFQUN2QywrQkFBK0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQ3pELEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUM5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBa0I7SUFDN0MsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDNUQsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FDOUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBa0I7SUFDeEQsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLEVBQUUsRUFDcEIsT0FBTyxDQUNMLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFDekMsbUJBQW1CLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQ2pELEVBQ0QsWUFBWSxFQUFFLEVBQ2QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQzVELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQzlCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQseUJBQXlCO0FBQ3pCLE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBa0I7SUFDOUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQTtJQUV4QixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FDdEMsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsVUFBVSxDQUNYLENBQUE7SUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUNmLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxFQUNqRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ1QsT0FBTztRQUNMLEVBQUU7UUFDRixHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ3BCLENBQUE7QUFDSCxDQUFDO0FBRUQsdUJBQXVCO0FBQ3ZCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFrQjtJQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQ2YsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsRUFDN0MsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlELENBQUMsTUFBTSxDQUFDLENBQUE7SUFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQ3BCLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLEVBQ3RDLGFBQWEsQ0FDZCxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ1QsT0FBTyxJQUFJLENBQ1QsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEVBQ2xDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ2QsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FDekIsK0JBQStCLENBQXNCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLE9BQU87WUFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsS0FBSztZQUNMLElBQUk7WUFDSixZQUFZO1NBQ0YsQ0FBQTtJQUNkLENBQUMsQ0FBQyxDQUNILENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFrQjtJQUM3QyxPQUFPLElBQUksQ0FDVCxrQkFBa0IsRUFBRSxFQUNwQixrQkFBa0IsQ0FBQyx5QkFBeUIsRUFBRSxpQkFBaUIsQ0FBQyxFQUNoRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFDMUIsWUFBWSxFQUFFLENBQ2YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQWtCO0lBQzNDLE9BQU8sSUFBSSxDQUNULGtCQUFrQixFQUFFLEVBQ3BCLGdCQUFnQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFDckMsYUFBYSxFQUFFLENBQ2hCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUN6QixrQkFBa0IsRUFBRSxFQUNwQixtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FDdEQsQ0FBQTtBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFrQjtJQUNyRCxPQUFPLElBQUksQ0FDVCxjQUFjLEVBQ2QsUUFBUSxDQUFDLHVCQUF1QixFQUFFLENBQUMsRUFDbkMsWUFBWSxFQUFFLEVBQ2QsWUFBWSxFQUFFLENBQ2YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBa0I7SUFDeEQsT0FBTyxJQUFJLENBQ1QsY0FBYyxFQUNkLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLEVBQ3RDLFlBQVksRUFBRSxDQUNmLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQWtCO0lBQ3JELE9BQU8sSUFBSSxDQUNULGNBQWMsRUFDZCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxFQUNuQyxZQUFZLEVBQUUsQ0FDZixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBa0I7SUFDN0MsT0FBTyxJQUFJLENBQ1QsY0FBYyxFQUNkLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUMzQixZQUFZLEVBQUUsQ0FDZixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELGVBQWU7QUFDZixNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQWtCO0lBQzlDLE9BQU8sSUFBSSxDQUNULGtCQUFrQixFQUFFLEVBQ3BCLG1CQUFtQixDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxFQUNyRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDckIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLE1BQWtCO0lBRWxCLE9BQU8sSUFBSSxDQUNULGtCQUFrQixFQUFFLEVBQ3BCLGlCQUFpQixDQUNmLCtCQUErQixFQUMvQixzQ0FBc0MsQ0FDdkMsRUFDRCxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQzlCLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUN0QyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBa0I7SUFDOUMsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLEVBQUUsRUFDcEIsbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEVBQ2pELFFBQVEsQ0FDTixPQUFPLENBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUN4RSxDQUNGLEVBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsR0FBRztRQUNILEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztLQUNwQyxDQUFDLENBQUMsQ0FDSixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQWtCLEVBQ2xCLFlBQWdDO0lBRWhDLE9BQU8sSUFBSSxDQUNULGlCQUFpQixDQUNmLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLENBQ2hCLEVBQ0QsK0JBQStCLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUN4RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDNUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBa0I7SUFDcEQsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLEVBQUUsRUFDcEIsaUJBQWlCLENBQ2YseUJBQXlCLEVBQ3pCLCtCQUErQixDQUNoQyxFQUNELHNCQUFzQixFQUFFLEVBQ3hCLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxDQUN2RCxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkI7SUFJM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtJQUMzRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQ3pCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUNoQyxzQkFBc0IsRUFBRSxDQUN6QixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FDNUIsaUJBQWlCLENBQUMsY0FBYyxFQUFFLDJCQUEyQixDQUFDLEVBQzlELGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FDL0IsQ0FBQTtJQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FDcEIsaUJBQWlCLEVBQ2pCLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxLQUFLLGFBQWEsQ0FBQyxDQUMxRCxDQUFBO0lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUNsQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFDNUIsK0JBQStCLENBQTZCLE1BQU0sQ0FBQyxDQUNwRSxDQUFBO0lBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUN6QixnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUNuQywrQkFBK0IsQ0FDN0IsYUFBYSxFQUNiLEVBQUUsQ0FDSCxDQUNGLENBQUE7SUFDRCxPQUFPLElBQUksQ0FDVCxrQkFBa0IsQ0FDaEIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQixZQUFZLEVBQ1osdUJBQXVCLENBQ3hCLEVBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFDMUUsUUFBUSxDQUNOLENBQUMsQ0FDQyxNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxFQUN4QixDQUFDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxFQUN2QyxFQUFFLEVBQUU7UUFDSCxNQUFNLFlBQVksR0FBRztZQUNuQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLHVCQUF1QjtTQUMzQixDQUFBO1FBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU07Z0JBQ1osR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNyQixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLFlBQVk7YUFDYixDQUFBO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPO2dCQUNMLElBQUksRUFBRSxVQUFVO2dCQUNoQixHQUFHLEVBQUUsR0FBRztnQkFDUixxQkFBcUIsRUFBRSxRQUFRO2dCQUMvQixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLFlBQVk7YUFDYixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FDRixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQjtJQUl6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FDbEIsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQzVCLCtCQUErQixDQUE2QixNQUFNLENBQUMsQ0FDcEUsQ0FBQTtJQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FDekIsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsRUFDbkMsK0JBQStCLENBQzdCLGFBQWEsRUFDYixFQUFFLENBQ0gsQ0FDRixDQUFBO0lBQ0QsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLENBQ2hCLHFCQUFxQixFQUNyQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUNaLHVCQUF1QixDQUN4QixFQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUNsRCxRQUFRLENBQ04sQ0FBQyxDQUNDLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxFQUN4QixDQUFDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxFQUN2QyxFQUFFLEVBQUU7UUFDSCxNQUFNLFlBQVksR0FBRztZQUNuQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLHVCQUF1QjtTQUMzQixDQUFBO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNO1lBQ1osR0FBRyxFQUFFLEdBQUc7WUFDUixHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckIsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ25DLFlBQVk7U0FDYixDQUFBO0lBQ0gsQ0FBQyxDQUNGLENBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBa0I7SUFDcEQsSUFBSSxrQkFBbUUsQ0FBQTtJQUN2RSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0UsQ0FBQztTQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLGtCQUFrQixHQUFHLDZCQUE2QixFQUFFLENBQUE7SUFDdEQsQ0FBQztTQUFNLENBQUM7UUFDTixrQkFBa0IsR0FBRywyQkFBMkIsRUFBRSxDQUFBO0lBQ3BELENBQUM7SUFDRCxPQUFPLElBQUksQ0FDVCxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQyxFQUNqRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFDNUIsWUFBWSxFQUFFLENBQ2YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBa0I7SUFDcEQsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLEVBQUUsRUFDcEIsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxFQUN4RSxRQUFRLENBQ04sT0FBTyxDQUNMLGlCQUFpQixDQUNmLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osZ0JBQWdCLENBQ2pCLEVBQ0QsaUJBQWlCLENBQ2YsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixpQkFBaUIsQ0FDbEIsQ0FDRixDQUNGLEVBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRTtRQUNqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxJQUFJLENBQ1QsT0FBTyxDQUNMLElBQUksQ0FDRixnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsRUFDNUMsUUFBUSxFQUFFLEVBQ1YsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3ZELEVBQ0QsSUFBSSxDQUNGLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxFQUMxQyxRQUFRLEVBQUUsRUFDVixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDdkQsQ0FDRixFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQixLQUFLO2dCQUNMLEdBQUc7YUFDSixDQUFDLENBQUMsQ0FDSixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2IsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsRUFDM0MsUUFBUSxFQUFFLEVBQ1YsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3RELEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQyxDQUNKLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBa0I7SUFDbkQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFrQixFQUFZLEVBQUU7UUFDdkQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQTtRQUN4QixPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQ3RDLGlCQUFpQixFQUNqQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzVDLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDWCxDQUFDLENBQUE7SUFFRCxNQUFNLFdBQVcsR0FBRyxDQUNsQixNQUFrQixFQUNnQixFQUFFO1FBQ3BDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDeEIsT0FBTyxJQUFJLENBQ1QsT0FBTyxDQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQ25FLENBQ0YsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNYLENBQUMsQ0FBQTtJQUVELE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsTUFBa0IsRUFDVyxFQUFFO1FBQy9CLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM5QixPQUFPLElBQUksQ0FDVCxpQkFBaUIsQ0FDZiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLFVBQVUsQ0FDWCxFQUNELCtCQUErQixDQUFDLGFBQWEsQ0FBQyxDQUMvQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ1gsQ0FBQyxDQUFBO0lBRUQsT0FBTyxJQUFJLENBQ1Qsa0JBQWtCLEVBQUUsRUFDcEIsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxFQUMxRSxRQUFRLENBQ04sT0FBTyxDQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxFQUNqRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsOEJBQThCLENBQUMsRUFBRSxXQUFXLENBQUMsRUFDbkUsSUFBSSxDQUNGLGdCQUFnQixDQUFDLDhCQUE4QixDQUFDLEVBQ2hELGtCQUFrQixDQUNuQixDQUNGLENBQ0YsRUFDRCxXQUFXLENBQ1QsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FDM0UsRUFDRCxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3pELE9BQU87WUFDTCxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDN0IsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuQyxZQUFZO1NBQ2IsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUNILENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWtCO0lBQ25ELE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELE9BQU8sSUFBSSxDQUNULG1CQUFtQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFDeEMsUUFBUSxDQUNOLElBQUksQ0FDRixnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNwQyxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQzlCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQzlELENBQ0YsRUFDRCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNoQixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUF3QixFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUNoRSxFQUNELEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUN2RSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFrQjtJQUNwRCxPQUFPLElBQUksQ0FDVCxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEVBQ3BDLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFDOUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3JFLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQWtCO0lBQ3ZELE9BQU8sSUFBSSxDQUNULGtCQUFrQixFQUFFLEVBQ3BCLGlCQUFpQixDQUNmLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsRUFDRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnRUcmFuc2xhdGlvbnMsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVHJhbnNsYXRpb25zLFxuICBMYW5ndWFnZUNvZGUsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBPbmxpbmVMaW5rUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSZXVzZVR5cGUsXG4gIFJvbGUsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSxcbiAgVXBkYXRlRnJlcXVlbmN5LFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIGZpcnN0Q2hpbGRFbGVtZW50LFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IGZ1bGxOYW1lVG9QYXJ0cyB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlIH0gZnJvbSAnLi91dGlscy9rZXl3b3JkLm1hcHBlcidcbmltcG9ydCB7IGdldFJvbGVGcm9tUm9sZUNvZGUgfSBmcm9tICcuL3V0aWxzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL3V0aWxzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQgeyBnZXRMYW5nMkZyb21MYW5nMyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYy9saWIvbGFuZ3VhZ2UtY29kZXMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZVR5cGUsIGdldFJldXNlVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9yZXNvdXJjZS10eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIHN0cmluZ1xuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6TWltZUZpbGVUeXBlJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGVkIHZhbHVlcyB3aWxsIGFsc28gYmUgY29sbGVjdGVkIGluIHRoZSB0cmFuc2xhdGlvbnMgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPFQgZXh0ZW5kcyBNb2RlbFRyYW5zbGF0aW9ucz4oXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICB0cmFuc2xhdGlvbnM/OiBUXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBbc3RyaW5nLCBUXT4ge1xuICByZXR1cm4gY29tYmluZShcbiAgICBwaXBlKFxuICAgICAgZmFsbGJhY2soXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSlcbiAgICAgICksXG4gICAgICByZWFkVGV4dCgpXG4gICAgKSxcbiAgICAoZWwpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRWYWx1ZXMgPSBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICdnbWQ6UFRfRnJlZVRleHQnLFxuICAgICAgICAnZ21kOnRleHRHcm91cCcsXG4gICAgICAgICdnbWQ6TG9jYWxpc2VkQ2hhcmFjdGVyU3RyaW5nJ1xuICAgICAgKShlbClcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc1NhZmUgPSB0cmFuc2xhdGlvbnMgPz8gKHt9IGFzIFQpXG4gICAgICBpZiAoIXRyYW5zbGF0ZWRWYWx1ZXMubGVuZ3RoKSByZXR1cm4gdHJhbnNsYXRpb25zU2FmZVxuICAgICAgY29uc3QgdmFsdWVUcmFuc2xhdGlvbnM6IEZpZWxkVHJhbnNsYXRpb24gPSB0cmFuc2xhdGVkVmFsdWVzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIHRyYW5zbGF0aW9uRWwpID0+IHtcbiAgICAgICAgICBjb25zdCBsYW5nID0gcmVhZEF0dHJpYnV0ZSgnbG9jYWxlJykodHJhbnNsYXRpb25FbClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXiMvLCAnJylcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlYWRUZXh0KCkodHJhbnNsYXRpb25FbClcbiAgICAgICAgICBpZiAoIWxhbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLnByZXYsIFtsYW5nXTogdmFsdWUgfVxuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKVxuICAgICAgdHJhbnNsYXRpb25zU2FmZVtmaWVsZE5hbWVdID0ge1xuICAgICAgICAuLi50cmFuc2xhdGlvbnNTYWZlW2ZpZWxkTmFtZV0sXG4gICAgICAgIC4uLnZhbHVlVHJhbnNsYXRpb25zLFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uc1NhZmVcbiAgICB9XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRlVGltZSgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBEYXRlPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRhdGVUaW1lJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRhdGUnLCBmYWxzZSlcbiAgICApLFxuICAgIHJlYWRUZXh0KCksXG4gICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWNpbWFsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIG51bWJlcj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGVjaW1hbCcsIGZhbHNlKSxcbiAgICByZWFkVGV4dCgpLFxuICAgIG1hcCgobnVtYmVyU3RyKSA9PiAobnVtYmVyU3RyID8gTnVtYmVyKG51bWJlclN0cikgOiBudWxsKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFVybCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBVUkw+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6VVJMJywgZmFsc2UpLCByZWFkVGV4dCgpKVxuICBjb25zdCBnZXRDaGFyYWN0ZXJTdHJpbmcgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgcmVhZFRleHQoKVxuICApXG4gIGNvbnN0IGdldEFuY2hvciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKSxcbiAgICByZWFkQXR0cmlidXRlKCd4bGluazpocmVmJylcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhnZXRVcmwsIGdldEFuY2hvciwgZ2V0Q2hhcmFjdGVyU3RyaW5nKSxcbiAgICBtYXAoKHVybFN0cikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVUkwodXJsU3RyKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSB7XG4gIHJldHVybiBmYWxsYmFjayhleHRyYWN0VXJsKCksICgpID0+IG5ldyBVUkwoJ2h0dHA6Ly9taXNzaW5nJykpXG59XG5cbi8vIGZyb20gZ21kOnJvbGVcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Um9sZSgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBSb2xlPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9Sb2xlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0Um9sZUZyb21Sb2xlQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpDSV9SZXNwb25zaWJsZVBhcnR5XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE9yZ2FuaXphdGlvbigpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgT3JnYW5pemF0aW9uXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOmNvbnRhY3RJbmZvJyxcbiAgICAgICdnbWQ6Q0lfQ29udGFjdCcsXG4gICAgICAnZ21kOm9ubGluZVJlc291cmNlJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpsaW5rYWdlJ1xuICAgICksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBleHRyYWN0VXJsKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm9yZ2FuaXNhdGlvbk5hbWUnLCBmYWxzZSksXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T3JnYW5pemF0aW9uVHJhbnNsYXRpb25zPignbmFtZScpXG4gICAgICApLFxuICAgICAgZ2V0VXJsXG4gICAgKSxcbiAgICBtYXAoKFtbbmFtZSwgdHJhbnNsYXRpb25zXSwgd2Vic2l0ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgLi4uKHdlYnNpdGUgJiYgeyB3ZWJzaXRlIH0pLFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHlcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW5kaXZpZHVhbCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBJbmRpdmlkdWFsPiB7XG4gIGNvbnN0IGdldFJvbGUgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpyb2xlJyksIGV4dHJhY3RSb2xlKCkpXG4gIGNvbnN0IGdldFBvc2l0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0TmFtZVBhcnRzID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6aW5kaXZpZHVhbE5hbWUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChmdWxsTmFtZSkgPT4ge1xuICAgICAgaWYgKCFmdWxsTmFtZSkgcmV0dXJuIFtdXG4gICAgICByZXR1cm4gZnVsbE5hbWVUb1BhcnRzKGZ1bGxOYW1lKVxuICAgIH0pXG4gIClcbiAgY29uc3QgZ2V0T3JnYW5pemF0aW9uID0gZXh0cmFjdE9yZ2FuaXphdGlvbigpXG4gIGNvbnN0IGdldENvbnRhY3RSb290ID0gZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjb250YWN0SW5mbycsICdnbWQ6Q0lfQ29udGFjdCcpXG4gIGNvbnN0IGdldEVtYWlsID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZW1haWwpID0+IChlbWFpbCA9PT0gbnVsbCA/ICdtaXNzaW5nQG1pc3NpbmcuY29tJyA6IGVtYWlsKSlcbiAgKVxuICBjb25zdCBnZXRBZGRyZXNzID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmFkZHJlc3MnLCAnZ21kOkNJX0FkZHJlc3MnKSxcbiAgICBjb21iaW5lKFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlbGl2ZXJ5UG9pbnQnLCBmYWxzZSksXG4gICAgICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICAgICAgKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmNpdHknLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb3N0YWxDb2RlJywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Y291bnRyeScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICAgICksXG4gICAgbWFwKChwYXJ0cykgPT4gcGFydHMuZmlsdGVyKChwKSA9PiAhIXApLmpvaW4oJywgJykpXG4gIClcbiAgY29uc3QgZ2V0UGhvbmUgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6cGhvbmUnLCAnZ21kOkNJX1RlbGVwaG9uZScsICdnbWQ6dm9pY2UnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjb21iaW5lKFxuICAgICAgZ2V0Um9sZSxcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0TmFtZVBhcnRzLFxuICAgICAgZ2V0T3JnYW5pemF0aW9uLFxuICAgICAgZ2V0RW1haWwsXG4gICAgICBnZXRBZGRyZXNzLFxuICAgICAgZ2V0UGhvbmVcbiAgICApLFxuICAgIG1hcChcbiAgICAgIChbXG4gICAgICAgIHJvbGUsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBbZmlyc3ROYW1lLCBsYXN0TmFtZV0sXG4gICAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIHBob25lLFxuICAgICAgXSkgPT4gKHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIHJvbGUsXG4gICAgICAgIG9yZ2FuaXphdGlvbixcbiAgICAgICAgLi4uKHBvc2l0aW9uICYmIHsgcG9zaXRpb24gfSksXG4gICAgICAgIC4uLihmaXJzdE5hbWUgJiYgeyBmaXJzdE5hbWUgfSksXG4gICAgICAgIC4uLihsYXN0TmFtZSAmJiB7IGxhc3ROYW1lIH0pLFxuICAgICAgICAuLi4oYWRkcmVzcyAmJiB7IGFkZHJlc3MgfSksXG4gICAgICAgIC4uLihwaG9uZSAmJiB7IHBob25lIH0pLFxuICAgICAgfSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTdGF0dXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUmVjb3JkU3RhdHVzPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9Qcm9ncmVzc0NvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFN0YXR1c0Zyb21TdGF0dXNDb2RlKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGVnYWxDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pbmRleE9mKCdsaWNlbnNlJykgPT09IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpXG4gICAgICApXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTZWN1cml0eUNvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnLCAnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPdGhlckNvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX0NvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGljZW5zZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID4gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICAgIClcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG5jb25zdCBnZXRNaW1lVHlwZSA9IHBpcGUoXG4gIGZpbmRQYXJlbnQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25Gb3JtYXQnLCAnZ21kOk1EX0Zvcm1hdCcsICdnbWQ6bmFtZScpLFxuICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gIG1hcChtYXRjaE1pbWVUeXBlKVxuKVxuXG4vKipcbiAqIEV4dHJhY3Qgb25saW5lIHJlc291cmNlcyBmcm9tIGFuIE1EX0Rpc3RyaWJ1dGlvbiBlbGVtZW50XG4gKiBAcGFyYW0gZ2V0TWltZVR5cGVGbiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBmcm9tIGEgZ21kOnRyYW5zZmVyT3B0aW9ucyBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YXNldE9ubGluZVJlc291cmNlcyhcbiAgZ2V0TWltZVR5cGVGbjogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgc3RyaW5nPlxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgRGF0YXNldE9ubGluZVJlc291cmNlW10+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzU2VydmljZSA9IHBpcGUoXG4gICAgZ2V0UHJvdG9jb2wsXG4gICAgbWFwKChwcm90b2NvbCkgPT4gcHJvdG9jb2wgIT09ICdvdGhlcicpXG4gIClcbiAgY29uc3QgZ2V0SXNEb3dubG9hZCA9IHBpcGUoXG4gICAgY29tYmluZShnZXRJc1NlcnZpY2UsIGdldE9ubGluZUZ1bmN0aW9uLCBnZXRQcm90b2NvbFN0ciksXG4gICAgbWFwKFxuICAgICAgKFtpc1NlcnZpY2UsIG9ubGluZUZ1bmN0aW9uLCBwcm90b2NvbFN0cl0pID0+XG4gICAgICAgICghaXNTZXJ2aWNlICYmIG9ubGluZUZ1bmN0aW9uID09PSAnZG93bmxvYWQnKSB8fFxuICAgICAgICAvZG93bmxvYWQvaS50ZXN0KHByb3RvY29sU3RyKVxuICAgIClcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oJ2Rlc2NyaXB0aW9uJylcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZ2V0SXNTZXJ2aWNlLFxuICAgICAgICBnZXRJc0Rvd25sb2FkLFxuICAgICAgICBnZXRQcm90b2NvbCxcbiAgICAgICAgZ2V0VXJsLFxuICAgICAgICBnZXROYW1lLFxuICAgICAgICBnZXREZXNjcmlwdGlvbixcbiAgICAgICAgZ2V0TWltZVR5cGVGblxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICBpc1NlcnZpY2UsXG4gICAgICAgIGlzRG93bmxvYWQsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICAgIG1pbWVUeXBlLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gICAgICAgICAgLi4ubmFtZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAuLi5kZXNjcmlwdGlvblRyYW5zbGF0aW9ucyxcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgYWNjZXNzU2VydmljZVByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgaWRlbnRpZmllckluU2VydmljZTogbmFtZSB9KSwgLy8gc2hvdWxkIHdlIGtlZXAgdGhlIGlkZW50aWZpZXJJblNlcnZpY2U/IHJlYWQtd3JpdGUgZHVwbGljYXRlIHdpdGggbmFtZVxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzRG93bmxvYWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Rvd25sb2FkJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICAuLi4obWltZVR5cGUgJiYgeyBtaW1lVHlwZSB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tQ3VzdG9tUGVyaW9kKFxuICBpc29QZXJpb2Q6IHN0cmluZ1xuKTogVXBkYXRlRnJlcXVlbmN5Q3VzdG9tIHtcbiAgaWYgKCFpc29QZXJpb2QpIHJldHVybiBudWxsXG4gIGNvbnN0IG1hdGNoZXMgPSBpc29QZXJpb2QubWF0Y2goXG4gICAgL14tP1AoPzooWzAtOV0rKVkpPyg/OihbMC05XSspTSk/KD86KFswLTldKylEKT9UPyg/OihbMC05XSspSCk/L1xuICApXG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIG51bGxcbiAgY29uc3QgeWVhcnMgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCkgfHwgMFxuICBjb25zdCBtb250aHMgPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMCkgfHwgMFxuICBjb25zdCBkYXlzID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTApIHx8IDBcbiAgY29uc3QgaG91cnMgPSBwYXJzZUludChtYXRjaGVzWzRdLCAxMCkgfHwgMFxuICBpZiAoeWVhcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKG1vbnRocyA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKG1vbnRocykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd5ZWFyJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgxMiAvIG1vbnRocyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cyA+PSAxICYmIGRheXMgPD0gNykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd3ZWVrJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCg3IC8gZGF5cyAtIDAuMDAwMSksIC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgJ2V2ZXJ5IDIgZGF5cycgPSAnMyB0aW1lcyBwZXIgd2VlaydcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdtb250aCcsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMzAgLyBkYXlzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoaG91cnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnZGF5JyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgyNCAvIGhvdXJzKSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gZnJvbSBnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFVwZGF0ZUZyZXF1ZW5jeVxuPiB7XG4gIHJldHVybiBmYWxsYmFjayhcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX01haW50ZW5hbmNlRnJlcXVlbmN5Q29kZScpLFxuICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21GcmVxdWVuY3lDb2RlKVxuICAgICksXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJ1xuICAgICAgKSxcbiAgICAgIHJlYWRUZXh0KCksXG4gICAgICBtYXAoZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZClcbiAgICApLFxuICAgIG1hcCgoKSA9PiAndW5rbm93bicpXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIFdpbGwgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgZXhpc3RzLCBub3QgcmVhZGluZyB0aGUgdHlwZSBvZiB0aGUgcmVjb3JkXG4gKiAodGhpcyBhbGxvd3MgdXNpbmcgdGhpcyBmdW5jdGlvbiBpbiBvdGhlciBzaW1pbGFyIHNjaGVtYXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSWRlbnRpZmljYXRpb24oKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDppZGVudGlmaWNhdGlvbkluZm8nLCBmYWxzZSksXG4gICAgY29tYmluZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJywgZmFsc2UpXG4gICAgKSxcbiAgICBmaWx0ZXJBcnJheSgoZWwpID0+IGVsICE9PSBudWxsKSxcbiAgICBnZXRBdEluZGV4KDApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoXG4gIHR5cGU6ICdjcmVhdGlvbicgfCAncmV2aXNpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6ZGF0ZScpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZScsXG4gICAgICAgICAgJ2dtZDpkYXRlVHlwZScsXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGdldEF0SW5kZXgoMCksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICApXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOkNJX0RhdGUnLCAnZ21kOmRhdGUnKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3REYXRlVGltZSgpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXRpYWxSZXByZXNlbnRhdGlvbkZyb21Db2RlKFxuICBzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlOiBzdHJpbmdcbik6IFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUgfCBudWxsIHtcbiAgc3dpdGNoIChzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlKSB7XG4gICAgY2FzZSAnZ3JpZCc6XG4gICAgY2FzZSAndmVjdG9yJzpcbiAgICBjYXNlICd0aW4nOlxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICBjYXNlICdwb2ludCc6XG4gICAgICByZXR1cm4gc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVW5pcXVlSWRlbnRpZmllcihyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZUlkZW50aWZpZXInLCBmYWxzZSksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtpbmQocm9vdEVsOiBYbWxFbGVtZW50KTogUmVjb3JkS2luZCB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKHNjb3BlQ29kZSk6IFJlY29yZEtpbmQgPT4gZ2V0UmVzb3VyY2VUeXBlKHNjb3BlQ29kZSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE93bmVyT3JnYW5pemF0aW9uKHJvb3RFbDogWG1sRWxlbWVudCk6IE9yZ2FuaXphdGlvbiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdCcsICdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgIGV4dHJhY3RPcmdhbml6YXRpb24oKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZVVwZGF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdyZXZpc2lvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZUNyZWF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdjcmVhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZVB1Ymxpc2hlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlY29yZFVwZGF0ZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkYXRlU3RhbXAnKSwgZXh0cmFjdERhdGVUaW1lKCkpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXVzZVR5cGUocm9vdEVsOiBYbWxFbGVtZW50KTogUmV1c2VUeXBlIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcCgoc2NvcGVDb2RlKTogUmV1c2VUeXBlID0+IGdldFJldXNlVHlwZShzY29wZUNvZGUpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUaXRsZShcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygndGl0bGUnLCB0cmFuc2xhdGlvbnMpLFxuICAgIG1hcCgoW3RpdGxlXSkgPT4gdGl0bGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEFic3RyYWN0KFxuICByb290RWw6IFhtbEVsZW1lbnQsXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6YWJzdHJhY3QnLCBmYWxzZSksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnYWJzdHJhY3QnLCB0cmFuc2xhdGlvbnMpLFxuICAgIG1hcCgoW2Fic3RyYWN0XSkgPT4gYWJzdHJhY3QpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbnRhY3RzKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpjb250YWN0JywgZmFsc2UpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0c0ZvclJlc291cmNlKHJvb3RFbDogWG1sRWxlbWVudCk6IEluZGl2aWR1YWxbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpwb2ludE9mQ29udGFjdCcsIGZhbHNlKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknLCBmYWxzZSkpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RJbmRpdmlkdWFsKCkpXG4gICkocm9vdEVsKVxufVxuXG4vLyBmcm9tIGdtZDp0aGVzYXVydXNOYW1lXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRoZXNhdXJ1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBUaGVzYXVydXNNb2RlbCB7XG4gIGlmICghcm9vdEVsKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGZpbmRJZGVudGlmaWVyID0gZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgJ2dtZDpDSV9DaXRhdGlvbicsXG4gICAgJ2dtZDppZGVudGlmaWVyJyxcbiAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICdnbWQ6Y29kZSdcbiAgKVxuICBjb25zdCBpZCA9IHBpcGUoZmluZElkZW50aWZpZXIsIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSkocm9vdEVsKVxuICBjb25zdCB1cmwgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0VXJsKCkpKHJvb3RFbClcbiAgY29uc3QgbmFtZSA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gIH1cbn1cblxuLy8gZnJvbSBnbWQ6TURfS2V5d29yZHNcbmV4cG9ydCBmdW5jdGlvbiByZWFkS2V5d29yZEdyb3VwKHJvb3RFbDogWG1sRWxlbWVudCk6IEtleXdvcmRbXSB7XG4gIGNvbnN0IHR5cGUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgIG1hcCgodmFsdWVzKSA9PiBnZXRLZXl3b3JkVHlwZUZyb21LZXl3b3JkVHlwZUNvZGUodmFsdWVzWzBdKSlcbiAgKShyb290RWwpXG4gIGNvbnN0IHRoZXNhdXJ1cyA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDp0aGVzYXVydXNOYW1lJyksXG4gICAgcmVhZFRoZXNhdXJ1c1xuICApKHJvb3RFbClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmtleXdvcmQnKSxcbiAgICBtYXBBcnJheSgoZWwpID0+IHtcbiAgICAgIGNvbnN0IFtsYWJlbCwgdHJhbnNsYXRpb25zXSA9XG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8S2V5d29yZFRyYW5zbGF0aW9ucz4oJ2xhYmVsJykoZWwpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4odGhlc2F1cnVzID8geyB0aGVzYXVydXMgfSA6IHt9KSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgIH0gYXMgS2V5d29yZFxuICAgIH0pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmRzKHJvb3RFbDogWG1sRWxlbWVudCk6IEtleXdvcmRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnLCAnZ21kOk1EX0tleXdvcmRzJyksXG4gICAgbWFwQXJyYXkocmVhZEtleXdvcmRHcm91cCksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3RhdHVzKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZFN0YXR1cyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpzdGF0dXMnLCBmYWxzZSksXG4gICAgZXh0cmFjdFN0YXR1cygpXG4gICkocm9vdEVsKVxufVxuXG5jb25zdCBnZXRDb25zdHJhaW50cyA9IHBpcGUoXG4gIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsIGZhbHNlKVxuKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExlZ2FsQ29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdExlZ2FsQ29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU2VjdXJpdHlDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0U2VjdXJpdHlDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdGhlckNvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RPdGhlckNvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpY2Vuc2VzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMaWNlbnNlcygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuLy8gbm90IHVzZWQgeWV0XG5leHBvcnQgZnVuY3Rpb24gcmVhZElzb1RvcGljcyhyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9Ub3BpY0NhdGVnb3J5Q29kZScsIHRydWUpLFxuICAgIG1hcEFycmF5KHJlYWRUZXh0KCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pOiBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlIHwgbnVsbCB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJyxcbiAgICAgICdnbWQ6TURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFNwYXRpYWxSZXByZXNlbnRhdGlvbkZyb21Db2RlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdmVydmlld3Mocm9vdEVsOiBYbWxFbGVtZW50KTogR3JhcGhpY092ZXJ2aWV3W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JywgZmFsc2UpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZU5hbWUnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZmlsZURlc2NyaXB0aW9uJyksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbdXJsLCBkZXNjcmlwdGlvbl0pID0+ICh7XG4gICAgICB1cmwsXG4gICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICB9KSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGluZWFnZShcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmRhdGFRdWFsaXR5SW5mbycsXG4gICAgICAnZ21kOkRRX0RhdGFRdWFsaXR5JyxcbiAgICAgICdnbWQ6bGluZWFnZScsXG4gICAgICAnZ21kOkxJX0xpbmVhZ2UnLFxuICAgICAgJ2dtZDpzdGF0ZW1lbnQnXG4gICAgKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCdsaW5lYWdlJywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFtsaW5lYWdlXSkgPT4gbGluZWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVXBkYXRlRnJlcXVlbmN5KHJvb3RFbDogWG1sRWxlbWVudCk6IFVwZGF0ZUZyZXF1ZW5jeSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyxcbiAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvbidcbiAgICApLFxuICAgIGV4dHJhY3RVcGRhdGVGcmVxdWVuY3koKSxcbiAgICBtYXAoKHVwZGF0ZUZyZXF1ZW5jeSkgPT4gdXBkYXRlRnJlcXVlbmN5IHx8ICd1bmtub3duJylcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0UHJvdG9jb2xTdHIgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldFByb3RvY29sID0gcGlwZShnZXRQcm90b2NvbFN0ciwgbWFwKG1hdGNoUHJvdG9jb2wpKVxuICBjb25zdCBnZXRPbmxpbmVGdW5jdGlvbiA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpXG4gIClcbiAgY29uc3QgZ2V0SXNMaW5rID0gcGlwZShcbiAgICBnZXRPbmxpbmVGdW5jdGlvbixcbiAgICBtYXAoKG9ubGluZUZ1bmN0aW9uKSA9PiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2luZm9ybWF0aW9uJylcbiAgKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oXG4gICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAge31cbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShjb21iaW5lKGdldElzTGluaywgZ2V0UHJvdG9jb2wsIGdldFVybCwgZ2V0TmFtZSwgZ2V0RGVzY3JpcHRpb24pKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbXG4gICAgICAgIGlzTGluayxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHVybCxcbiAgICAgICAgW25hbWUsIG5hbWVUcmFuc2xhdGlvbnNdLFxuICAgICAgICBbZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uVHJhbnNsYXRpb25zXSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGluaykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2VuZHBvaW50JyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgYWNjZXNzU2VydmljZVByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJldXNlT25saW5lUmVzb3VyY2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBPbmxpbmVMaW5rUmVzb3VyY2VbXVxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXROYW1lID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgKVxuICBjb25zdCBnZXREZXNjcmlwdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oXG4gICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAge31cbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShjb21iaW5lKGdldFVybCwgZ2V0TmFtZSwgZ2V0RGVzY3JpcHRpb24pKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbXG4gICAgICAgIHVybCxcbiAgICAgICAgW25hbWUsIG5hbWVUcmFuc2xhdGlvbnNdLFxuICAgICAgICBbZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uVHJhbnNsYXRpb25zXSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE9ubGluZVJlc291cmNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBPbmxpbmVSZXNvdXJjZVtdIHtcbiAgbGV0IGdldE9ubGluZVJlc291cmNlczogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgT25saW5lUmVzb3VyY2VbXT5cbiAgaWYgKHJlYWRLaW5kKHJvb3RFbCkgPT09ICdkYXRhc2V0Jykge1xuICAgIGdldE9ubGluZVJlc291cmNlcyA9IChlbCkgPT4gZXh0cmFjdERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoZ2V0TWltZVR5cGUpKGVsKVxuICB9IGVsc2UgaWYgKHJlYWRLaW5kKHJvb3RFbCkgPT09ICdzZXJ2aWNlJykge1xuICAgIGdldE9ubGluZVJlc291cmNlcyA9IGV4dHJhY3RTZXJ2aWNlT25saW5lUmVzb3VyY2VzKClcbiAgfSBlbHNlIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSBleHRyYWN0UmV1c2VPbmxpbmVSZXNvdXJjZXMoKVxuICB9XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLCAnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIG1hcEFycmF5KGdldE9ubGluZVJlc291cmNlcyksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGVtcG9yYWxFeHRlbnRzKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcsICdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyxcbiAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgJ2dtbDpUaW1lUGVyaW9kJ1xuICAgICAgICApLFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyxcbiAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgJ2dtbDpUaW1lSW5zdGFudCdcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtwZXJpb2RFbCwgaW5zdGFudEVsXSkgPT4ge1xuICAgICAgaWYgKHBlcmlvZEVsKSB7XG4gICAgICAgIHJldHVybiBwaXBlKFxuICAgICAgICAgIGNvbWJpbmUoXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6YmVnaW5Qb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgICAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIG1hcCgoW3N0YXJ0LCBlbmRdKSA9PiAoe1xuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQsXG4gICAgICAgICAgfSkpXG4gICAgICAgICkocGVyaW9kRWwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6dGltZVBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpLFxuICAgICAgICAgIG1hcCgoZGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0OiBkYXRlLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKGluc3RhbnRFbClcbiAgICAgIH1cbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgY29uc3QgZXh0cmFjdEdlb21ldHJ5ID0gKHJvb3RFbDogWG1sRWxlbWVudCk6IEdlb21ldHJ5ID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb2x5Z29uJywgZmFsc2UpLFxuICAgICAgZmlyc3RDaGlsZEVsZW1lbnQsXG4gICAgICBtYXAoKGVsKSA9PiAoZWwgPyByZWFkR2VvbWV0cnkoZWwpIDogbnVsbCkpXG4gICAgKShyb290RWwpXG4gIH1cblxuICBjb25zdCBleHRyYWN0QkJveCA9IChcbiAgICByb290RWw6IFhtbEVsZW1lbnRcbiAgKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY29tYmluZShcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6d2VzdEJvdW5kTG9uZ2l0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpzb3V0aEJvdW5kTGF0aXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmVhc3RCb3VuZExvbmdpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bm9ydGhCb3VuZExhdGl0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpXG4gICAgICApXG4gICAgKShyb290RWwpXG4gIH1cblxuICBjb25zdCBleHRyYWN0RGVzY3JpcHRpb24gPSAoXG4gICAgcm9vdEVsOiBYbWxFbGVtZW50XG4gICk6IFtzdHJpbmcsIE1vZGVsVHJhbnNsYXRpb25zXSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBbbnVsbCwge31dXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpnZW9ncmFwaGljSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAgICdnbWQ6Y29kZSdcbiAgICAgICksXG4gICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCdkZXNjcmlwdGlvbicpXG4gICAgKShyb290RWwpXG4gIH1cblxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcsICdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOkVYX0JvdW5kaW5nUG9seWdvbicpLCBleHRyYWN0R2VvbWV0cnkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljQm91bmRpbmdCb3gnKSwgZXh0cmFjdEJCb3gpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICBleHRyYWN0RGVzY3JpcHRpb25cbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICAoW2dlb21ldHJ5LCBiYm94LCBbZGVzY3JpcHRpb25dXSkgPT4gISFnZW9tZXRyeSB8fCAhIWJib3ggfHwgISFkZXNjcmlwdGlvblxuICAgICksXG4gICAgbWFwQXJyYXkoKFtnZW9tZXRyeSwgYmJveCwgW2Rlc2NyaXB0aW9uLCB0cmFuc2xhdGlvbnNdXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKGdlb21ldHJ5ICYmIHsgZ2VvbWV0cnkgfSksXG4gICAgICAgIC4uLihiYm94ICYmIHsgYmJveCB9KSxcbiAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgIH1cbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdGhlckxhbmd1YWdlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBMYW5ndWFnZUNvZGVbXSB7XG4gIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6bG9jYWxlJywgZmFsc2UpLFxuICAgIG1hcEFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnbGFuOkxhbmd1YWdlQ29kZScpLFxuICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgIG1hcCgobGFuZykgPT4gZ2V0TGFuZzJGcm9tTGFuZzMobGFuZz8udG9Mb3dlckNhc2UoKSkgPz8gbGFuZylcbiAgICAgIClcbiAgICApLFxuICAgIG1hcCgobGFuZ3VhZ2VzKSA9PlxuICAgICAgbGFuZ3VhZ2VzLmZpbHRlcigobGFuZyk6IGxhbmcgaXMgTGFuZ3VhZ2VDb2RlID0+IGxhbmcgIT09IG51bGwpXG4gICAgKSxcbiAgICBtYXAoKGxhbmd1YWdlcykgPT4gKGxhbmd1YWdlcy5sZW5ndGggPyBsYW5ndWFnZXMgOiBbZGVmYXVsdExhbmd1YWdlXSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZERlZmF1bHRMYW5ndWFnZShyb290RWw6IFhtbEVsZW1lbnQpOiBMYW5ndWFnZUNvZGUge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGFuZ3VhZ2UnLCBmYWxzZSksXG4gICAgZmluZENoaWxkRWxlbWVudCgnbGFuOkxhbmd1YWdlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKGxhbmcpID0+IChsYW5nID8gZ2V0TGFuZzJGcm9tTGFuZzMobGFuZy50b0xvd2VyQ2FzZSgpKSA6IG51bGwpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmNpdGF0aW9uJyxcbiAgICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICAgJ2dtZDppZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAnZ21kOmNvZGUnXG4gICAgKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG4iXX0=
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5REFBeUQsQ0FBQTtBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRXhFLE1BQU0sVUFBVSxzQkFBc0I7SUFJcEMsT0FBTyxJQUFJLENBQ1QsUUFBUSxDQUNOLGdCQUFnQixDQUFDLHFCQUFxQixF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QUFrQixFQUFFLEVBQ3BCLGlCQUFpQixDQUNmLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsRUFDRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnRUcmFuc2xhdGlvbnMsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVHJhbnNsYXRpb25zLFxuICBMYW5ndWFnZUNvZGUsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBPbmxpbmVMaW5rUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSZXVzZVR5cGUsXG4gIFJvbGUsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSxcbiAgVXBkYXRlRnJlcXVlbmN5LFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIGZpcnN0Q2hpbGRFbGVtZW50LFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IGZ1bGxOYW1lVG9QYXJ0cyB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlIH0gZnJvbSAnLi91dGlscy9rZXl3b3JkLm1hcHBlcidcbmltcG9ydCB7IGdldFJvbGVGcm9tUm9sZUNvZGUgfSBmcm9tICcuL3V0aWxzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL3V0aWxzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQgeyB0b0xhbmcyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjL2xpYi9sYW5ndWFnZS1jb2RlcydcbmltcG9ydCB7IGdldFJlc291cmNlVHlwZSwgZ2V0UmV1c2VUeXBlIH0gZnJvbSAnLi4vY29tbW9uL3Jlc291cmNlLXR5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENoYXJhY3RlclN0cmluZygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgc3RyaW5nXG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpNaW1lRmlsZVR5cGUnLCBmYWxzZSlcbiAgICApLFxuICAgIHJlYWRUZXh0KClcbiAgKVxufVxuXG4vKipcbiAqIFRyYW5zbGF0ZWQgdmFsdWVzIHdpbGwgYWxzbyBiZSBjb2xsZWN0ZWQgaW4gdGhlIHRyYW5zbGF0aW9ucyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8VCBleHRlbmRzIE1vZGVsVHJhbnNsYXRpb25zPihcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9ucz86IFRcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFtzdHJpbmcsIFRdPiB7XG4gIHJldHVybiBjb21iaW5lKFxuICAgIHBpcGUoXG4gICAgICBmYWxsYmFjayhcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214OkFuY2hvcicsIGZhbHNlKVxuICAgICAgKSxcbiAgICAgIHJlYWRUZXh0KClcbiAgICApLFxuICAgIChlbCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZFZhbHVlcyA9IGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgJ2dtZDpQVF9GcmVlVGV4dCcsXG4gICAgICAgICdnbWQ6dGV4dEdyb3VwJyxcbiAgICAgICAgJ2dtZDpMb2NhbGlzZWRDaGFyYWN0ZXJTdHJpbmcnXG4gICAgICApKGVsKVxuICAgICAgY29uc3QgdHJhbnNsYXRpb25zU2FmZSA9IHRyYW5zbGF0aW9ucyA/PyAoe30gYXMgVClcbiAgICAgIGlmICghdHJhbnNsYXRlZFZhbHVlcy5sZW5ndGgpIHJldHVybiB0cmFuc2xhdGlvbnNTYWZlXG4gICAgICBjb25zdCB2YWx1ZVRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbiA9IHRyYW5zbGF0ZWRWYWx1ZXMucmVkdWNlKFxuICAgICAgICAocHJldiwgdHJhbnNsYXRpb25FbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhbmcgPSByZWFkQXR0cmlidXRlKCdsb2NhbGUnKSh0cmFuc2xhdGlvbkVsKVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eIy8sICcnKVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVhZFRleHQoKSh0cmFuc2xhdGlvbkVsKVxuICAgICAgICAgIGlmICghbGFuZykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4ucHJldiwgW2xhbmddOiB2YWx1ZSB9XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgICB0cmFuc2xhdGlvbnNTYWZlW2ZpZWxkTmFtZV0gPSB7XG4gICAgICAgIC4uLnRyYW5zbGF0aW9uc1NhZmVbZmllbGROYW1lXSxcbiAgICAgICAgLi4udmFsdWVUcmFuc2xhdGlvbnMsXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJhbnNsYXRpb25zU2FmZVxuICAgIH1cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGVUaW1lKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIERhdGU+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGF0ZVRpbWUnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286RGF0ZScsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKSxcbiAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERlY2ltYWwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgbnVtYmVyPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEZWNpbWFsJywgZmFsc2UpLFxuICAgIHJlYWRUZXh0KCksXG4gICAgbWFwKChudW1iZXJTdHIpID0+IChudW1iZXJTdHIgPyBOdW1iZXIobnVtYmVyU3RyKSA6IG51bGwpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VXJsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFVSTD4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpVUkwnLCBmYWxzZSksIHJlYWRUZXh0KCkpXG4gIGNvbnN0IGdldENoYXJhY3RlclN0cmluZyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkNoYXJhY3RlclN0cmluZycsIGZhbHNlKSxcbiAgICByZWFkVGV4dCgpXG4gIClcbiAgY29uc3QgZ2V0QW5jaG9yID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZhbGxiYWNrKGdldFVybCwgZ2V0QW5jaG9yLCBnZXRDaGFyYWN0ZXJTdHJpbmcpLFxuICAgIG1hcCgodXJsU3RyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmxTdHIpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1hbmRhdG9yeVVybCgpIHtcbiAgcmV0dXJuIGZhbGxiYWNrKGV4dHJhY3RVcmwoKSwgKCkgPT4gbmV3IFVSTCgnaHR0cDovL21pc3NpbmcnKSlcbn1cblxuLy8gZnJvbSBnbWQ6cm9sZVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSb2xlKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJvbGU+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1JvbGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRSb2xlRnJvbVJvbGVDb2RlKVxuICApXG59XG5cbi8vIGZyb20gZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHlcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3JnYW5pemF0aW9uKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBPcmdhbml6YXRpb25cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6Y29udGFjdEluZm8nLFxuICAgICAgJ2dtZDpDSV9Db250YWN0JyxcbiAgICAgICdnbWQ6b25saW5lUmVzb3VyY2UnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOmxpbmthZ2UnXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGV4dHJhY3RVcmwoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPcmdhbml6YXRpb25UcmFuc2xhdGlvbnM+KCduYW1lJylcbiAgICAgICksXG4gICAgICBnZXRVcmxcbiAgICApLFxuICAgIG1hcCgoW1tuYW1lLCB0cmFuc2xhdGlvbnNdLCB3ZWJzaXRlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi4od2Vic2l0ZSAmJiB7IHdlYnNpdGUgfSksXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmRpdmlkdWFsKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIEluZGl2aWR1YWw+IHtcbiAgY29uc3QgZ2V0Um9sZSA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnJvbGUnKSwgZXh0cmFjdFJvbGUoKSlcbiAgY29uc3QgZ2V0UG9zaXRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwb3NpdGlvbk5hbWUnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXROYW1lUGFydHMgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAoKGZ1bGxOYW1lKSA9PiB7XG4gICAgICBpZiAoIWZ1bGxOYW1lKSByZXR1cm4gW11cbiAgICAgIHJldHVybiBmdWxsTmFtZVRvUGFydHMoZnVsbE5hbWUpXG4gICAgfSlcbiAgKVxuICBjb25zdCBnZXRPcmdhbml6YXRpb24gPSBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgY29uc3QgZ2V0Q29udGFjdFJvb3QgPSBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJywgJ2dtZDpDSV9Db250YWN0JylcbiAgY29uc3QgZ2V0RW1haWwgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCksXG4gICAgbWFwKChlbWFpbCkgPT4gKGVtYWlsID09PSBudWxsID8gJ21pc3NpbmdAbWlzc2luZy5jb20nIDogZW1haWwpKVxuICApXG4gIGNvbnN0IGdldEFkZHJlc3MgPSBwaXBlKFxuICAgIGdldENvbnRhY3RSb290LFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6YWRkcmVzcycsICdnbWQ6Q0lfQWRkcmVzcycpLFxuICAgIGNvbWJpbmUoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVsaXZlcnlQb2ludCcsIGZhbHNlKSxcbiAgICAgICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICAgICApLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Y2l0eScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc3RhbENvZGUnLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpjb3VudHJ5JywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgKSxcbiAgICBtYXAoKHBhcnRzKSA9PiBwYXJ0cy5maWx0ZXIoKHApID0+ICEhcCkuam9pbignLCAnKSlcbiAgKVxuICBjb25zdCBnZXRQaG9uZSA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpwaG9uZScsICdnbWQ6Q0lfVGVsZXBob25lJywgJ2dtZDp2b2ljZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNvbWJpbmUoXG4gICAgICBnZXRSb2xlLFxuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXROYW1lUGFydHMsXG4gICAgICBnZXRPcmdhbml6YXRpb24sXG4gICAgICBnZXRFbWFpbCxcbiAgICAgIGdldEFkZHJlc3MsXG4gICAgICBnZXRQaG9uZVxuICAgICksXG4gICAgbWFwKFxuICAgICAgKFtcbiAgICAgICAgcm9sZSxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIFtmaXJzdE5hbWUsIGxhc3ROYW1lXSxcbiAgICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgICBlbWFpbCxcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgcGhvbmUsXG4gICAgICBdKSA9PiAoe1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgcm9sZSxcbiAgICAgICAgb3JnYW5pemF0aW9uLFxuICAgICAgICAuLi4ocG9zaXRpb24gJiYgeyBwb3NpdGlvbiB9KSxcbiAgICAgICAgLi4uKGZpcnN0TmFtZSAmJiB7IGZpcnN0TmFtZSB9KSxcbiAgICAgICAgLi4uKGxhc3ROYW1lICYmIHsgbGFzdE5hbWUgfSksXG4gICAgICAgIC4uLihhZGRyZXNzICYmIHsgYWRkcmVzcyB9KSxcbiAgICAgICAgLi4uKHBob25lICYmIHsgcGhvbmUgfSksXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0YXR1cygpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBSZWNvcmRTdGF0dXM+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgZmFsc2UpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzLmluZGV4T2YoJ2xpY2Vuc2UnKSA9PT0gLTEpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJylcbiAgICAgIClcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE90aGVyQ29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfQ29uc3RyYWludHMnLCAnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6cmVzb3VyY2VDb25zdHJhaW50c1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMaWNlbnNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsIGZhbHNlKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcy5pbmRleE9mKCdsaWNlbnNlJykgPiAtMSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKVxuICAgICAgKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbmNvbnN0IGdldE1pbWVUeXBlID0gcGlwZShcbiAgZmluZFBhcmVudCgnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcsICdnbWQ6TURfRm9ybWF0JywgJ2dtZDpuYW1lJyksXG4gIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgbWFwKG1hdGNoTWltZVR5cGUpXG4pXG5cbi8qKlxuICogRXh0cmFjdCBvbmxpbmUgcmVzb3VyY2VzIGZyb20gYW4gTURfRGlzdHJpYnV0aW9uIGVsZW1lbnRcbiAqIEBwYXJhbSBnZXRNaW1lVHlwZUZuIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGZyb20gYSBnbWQ6dHJhbnNmZXJPcHRpb25zIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhc2V0T25saW5lUmVzb3VyY2VzKFxuICBnZXRNaW1lVHlwZUZuOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBzdHJpbmc+XG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBEYXRhc2V0T25saW5lUmVzb3VyY2VbXT4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0UHJvdG9jb2xTdHIgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldFByb3RvY29sID0gcGlwZShnZXRQcm90b2NvbFN0ciwgbWFwKG1hdGNoUHJvdG9jb2wpKVxuICBjb25zdCBnZXRPbmxpbmVGdW5jdGlvbiA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpXG4gIClcbiAgY29uc3QgZ2V0SXNTZXJ2aWNlID0gcGlwZShcbiAgICBnZXRQcm90b2NvbCxcbiAgICBtYXAoKHByb3RvY29sKSA9PiBwcm90b2NvbCAhPT0gJ290aGVyJylcbiAgKVxuICBjb25zdCBnZXRJc0Rvd25sb2FkID0gcGlwZShcbiAgICBjb21iaW5lKGdldElzU2VydmljZSwgZ2V0T25saW5lRnVuY3Rpb24sIGdldFByb3RvY29sU3RyKSxcbiAgICBtYXAoXG4gICAgICAoW2lzU2VydmljZSwgb25saW5lRnVuY3Rpb24sIHByb3RvY29sU3RyXSkgPT5cbiAgICAgICAgKCFpc1NlcnZpY2UgJiYgb25saW5lRnVuY3Rpb24gPT09ICdkb3dubG9hZCcpIHx8XG4gICAgICAgIC9kb3dubG9hZC9pLnRlc3QocHJvdG9jb2xTdHIpXG4gICAgKVxuICApXG4gIGNvbnN0IGdldE5hbWUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICApXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignZGVzY3JpcHRpb24nKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBnZXRJc1NlcnZpY2UsXG4gICAgICAgIGdldElzRG93bmxvYWQsXG4gICAgICAgIGdldFByb3RvY29sLFxuICAgICAgICBnZXRVcmwsXG4gICAgICAgIGdldE5hbWUsXG4gICAgICAgIGdldERlc2NyaXB0aW9uLFxuICAgICAgICBnZXRNaW1lVHlwZUZuXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIChbXG4gICAgICAgIGlzU2VydmljZSxcbiAgICAgICAgaXNEb3dubG9hZCxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHVybCxcbiAgICAgICAgW25hbWUsIG5hbWVUcmFuc2xhdGlvbnNdLFxuICAgICAgICBbZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uVHJhbnNsYXRpb25zXSxcbiAgICAgICAgbWltZVR5cGUsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBhY2Nlc3NTZXJ2aWNlUHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBpZGVudGlmaWVySW5TZXJ2aWNlOiBuYW1lIH0pLCAvLyBzaG91bGQgd2Uga2VlcCB0aGUgaWRlbnRpZmllckluU2VydmljZT8gcmVhZC13cml0ZSBkdXBsaWNhdGUgd2l0aCBuYW1lXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEb3dubG9hZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIC4uLihtaW1lVHlwZSAmJiB7IG1pbWVUeXBlIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21DdXN0b21QZXJpb2QoXG4gIGlzb1BlcmlvZDogc3RyaW5nXG4pOiBVcGRhdGVGcmVxdWVuY3lDdXN0b20ge1xuICBpZiAoIWlzb1BlcmlvZCkgcmV0dXJuIG51bGxcbiAgY29uc3QgbWF0Y2hlcyA9IGlzb1BlcmlvZC5tYXRjaChcbiAgICAvXi0/UCg/OihbMC05XSspWSk/KD86KFswLTldKylNKT8oPzooWzAtOV0rKUQpP1Q/KD86KFswLTldKylIKT8vXG4gIClcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gbnVsbFxuICBjb25zdCB5ZWFycyA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSB8fCAwXG4gIGNvbnN0IG1vbnRocyA9IHBhcnNlSW50KG1hdGNoZXNbMl0sIDEwKSB8fCAwXG4gIGNvbnN0IGRheXMgPSBwYXJzZUludChtYXRjaGVzWzNdLCAxMCkgfHwgMFxuICBjb25zdCBob3VycyA9IHBhcnNlSW50KG1hdGNoZXNbNF0sIDEwKSB8fCAwXG4gIGlmICh5ZWFycykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICd5ZWFyJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9udGhzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ21vbnRoJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogMSxcbiAgICB9XG4gIH0gZWxzZSBpZiAobW9udGhzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDEyIC8gbW9udGhzKSxcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGF5cyA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdkYXknLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzID49IDEgJiYgZGF5cyA8PSA3KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3dlZWsnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDcgLyBkYXlzIC0gMC4wMDAxKSwgLy8gdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCAnZXZlcnkgMiBkYXlzJyA9ICczIHRpbWVzIHBlciB3ZWVrJ1xuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ21vbnRoJyxcbiAgICAgIHVwZGF0ZWRUaW1lczogTWF0aC5yb3VuZCgzMCAvIGRheXMpLFxuICAgIH1cbiAgfSBlbHNlIGlmIChob3Vycykge1xuICAgIHJldHVybiB7XG4gICAgICBwZXI6ICdkYXknLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDI0IC8gaG91cnMpLFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBmcm9tIGdtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFVwZGF0ZUZyZXF1ZW5jeSgpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgVXBkYXRlRnJlcXVlbmN5XG4+IHtcbiAgcmV0dXJuIGZhbGxiYWNrKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJyksXG4gICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICBtYXAoZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUZyZXF1ZW5jeUNvZGUpXG4gICAgKSxcbiAgICBwaXBlKFxuICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6dXNlckRlZmluZWRNYWludGVuYW5jZUZyZXF1ZW5jeScsXG4gICAgICAgICdndHM6VE1fUGVyaW9kRHVyYXRpb24nXG4gICAgICApLFxuICAgICAgcmVhZFRleHQoKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tQ3VzdG9tUGVyaW9kKVxuICAgICksXG4gICAgbWFwKCgpID0+ICd1bmtub3duJylcbiAgKVxufVxuXG4vKipcbiAqIExvb2tzIGZvciBzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uIG9yIGdtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24gZWxlbWVudFxuICogV2lsbCBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBleGlzdHMsIG5vdCByZWFkaW5nIHRoZSB0eXBlIG9mIHRoZSByZWNvcmRcbiAqICh0aGlzIGFsbG93cyB1c2luZyB0aGlzIGZ1bmN0aW9uIGluIG90aGVyIHNpbWlsYXIgc2NoZW1hcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGZhbHNlKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbicsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ3NydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24nLCBmYWxzZSlcbiAgICApLFxuICAgIGZpbHRlckFycmF5KChlbCkgPT4gZWwgIT09IG51bGwpLFxuICAgIGdldEF0SW5kZXgoMClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZShcbiAgdHlwZTogJ2NyZWF0aW9uJyB8ICdyZXZpc2lvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDpkYXRlJyksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgJ2dtZDpDSV9EYXRlJyxcbiAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAnZ21kOkNJX0RhdGVUeXBlQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0QXRJbmRleCgwKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHlwZSlcbiAgICAgIClcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6Q0lfRGF0ZScsICdnbWQ6ZGF0ZScpLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZXh0cmFjdERhdGVUaW1lKClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhdGlhbFJlcHJlc2VudGF0aW9uRnJvbUNvZGUoXG4gIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGU6IHN0cmluZ1xuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICBzd2l0Y2ggKHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGUpIHtcbiAgICBjYXNlICdncmlkJzpcbiAgICBjYXNlICd2ZWN0b3InOlxuICAgIGNhc2UgJ3Rpbic6XG4gICAgY2FzZSAndGFibGUnOlxuICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgIHJldHVybiBzcGF0aWFsUmVwcmVzZW50YXRpb25Db2RlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVbmlxdWVJZGVudGlmaWVyKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlSWRlbnRpZmllcicsIGZhbHNlKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkS2luZChyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRLaW5kIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcCgoc2NvcGVDb2RlKTogUmVjb3JkS2luZCA9PiBnZXRSZXNvdXJjZVR5cGUoc2NvcGVDb2RlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3duZXJPcmdhbml6YXRpb24ocm9vdEVsOiBYbWxFbGVtZW50KTogT3JnYW5pemF0aW9uIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDpjb250YWN0JywgJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JyksXG4gICAgZXh0cmFjdE9yZ2FuaXphdGlvbigpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlVXBkYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlQ3JlYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIGV4dHJhY3RJZGVudGlmaWNhdGlvbkRhdGUoJ2NyZWF0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlUHVibGlzaGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVjb3JkVXBkYXRlZChyb290RWw6IFhtbEVsZW1lbnQpOiBEYXRlIHtcbiAgcmV0dXJuIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmRhdGVTdGFtcCcpLCBleHRyYWN0RGF0ZVRpbWUoKSkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJldXNlVHlwZShyb290RWw6IFhtbEVsZW1lbnQpOiBSZXVzZVR5cGUge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmhpZXJhcmNoeUxldmVsJywgJ2dtZDpNRF9TY29wZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChzY29wZUNvZGUpOiBSZXVzZVR5cGUgPT4gZ2V0UmV1c2VUeXBlKHNjb3BlQ29kZSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRpdGxlKFxuICByb290RWw6IFhtbEVsZW1lbnQsXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCd0aXRsZScsIHRyYW5zbGF0aW9ucyksXG4gICAgbWFwKChbdGl0bGVdKSA9PiB0aXRsZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQWJzdHJhY3QoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDphYnN0cmFjdCcsIGZhbHNlKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKCdhYnN0cmFjdCcsIHRyYW5zbGF0aW9ucyksXG4gICAgbWFwKChbYWJzdHJhY3RdKSA9PiBhYnN0cmFjdClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29udGFjdHMocm9vdEVsOiBYbWxFbGVtZW50KTogSW5kaXZpZHVhbFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmNvbnRhY3QnLCBmYWxzZSksXG4gICAgbWFwQXJyYXkoZmluZENoaWxkRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknLCBmYWxzZSkpLFxuICAgIG1hcEFycmF5KGV4dHJhY3RJbmRpdmlkdWFsKCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvbnRhY3RzRm9yUmVzb3VyY2Uocm9vdEVsOiBYbWxFbGVtZW50KTogSW5kaXZpZHVhbFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgY29tYmluZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpjb250YWN0JywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnBvaW50T2ZDb250YWN0JywgZmFsc2UpXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScsIGZhbHNlKSksXG4gICAgbWFwQXJyYXkoZXh0cmFjdEluZGl2aWR1YWwoKSlcbiAgKShyb290RWwpXG59XG5cbi8vIGZyb20gZ21kOnRoZXNhdXJ1c05hbWVcbmV4cG9ydCBmdW5jdGlvbiByZWFkVGhlc2F1cnVzKHJvb3RFbDogWG1sRWxlbWVudCk6IFRoZXNhdXJ1c01vZGVsIHtcbiAgaWYgKCFyb290RWwpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZmluZElkZW50aWZpZXIgPSBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAnZ21kOkNJX0NpdGF0aW9uJyxcbiAgICAnZ21kOmlkZW50aWZpZXInLFxuICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgJ2dtZDpjb2RlJ1xuICApXG4gIGNvbnN0IGlkID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKShyb290RWwpXG4gIGNvbnN0IHVybCA9IHBpcGUoZmluZElkZW50aWZpZXIsIGV4dHJhY3RVcmwoKSkocm9vdEVsKVxuICBjb25zdCBuYW1lID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgfVxufVxuXG4vLyBmcm9tIGdtZDpNRF9LZXl3b3Jkc1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3JkR3JvdXAocm9vdEVsOiBYbWxFbGVtZW50KTogS2V5d29yZFtdIHtcbiAgY29uc3QgdHlwZSA9IHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0tleXdvcmRUeXBlQ29kZScpLFxuICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgbWFwKCh2YWx1ZXMpID0+IGdldEtleXdvcmRUeXBlRnJvbUtleXdvcmRUeXBlQ29kZSh2YWx1ZXNbMF0pKVxuICApKHJvb3RFbClcbiAgY29uc3QgdGhlc2F1cnVzID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOnRoZXNhdXJ1c05hbWUnKSxcbiAgICByZWFkVGhlc2F1cnVzXG4gICkocm9vdEVsKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6a2V5d29yZCcpLFxuICAgIG1hcEFycmF5KChlbCkgPT4ge1xuICAgICAgY29uc3QgW2xhYmVsLCB0cmFuc2xhdGlvbnNdID1cbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxLZXl3b3JkVHJhbnNsYXRpb25zPignbGFiZWwnKShlbClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGVzYXVydXMgPyB7IHRoZXNhdXJ1cyB9IDoge30pLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgfSBhcyBLZXl3b3JkXG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkS2V5d29yZHMocm9vdEVsOiBYbWxFbGVtZW50KTogS2V5d29yZFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycsICdnbWQ6TURfS2V5d29yZHMnKSxcbiAgICBtYXBBcnJheShyZWFkS2V5d29yZEdyb3VwKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTdGF0dXMocm9vdEVsOiBYbWxFbGVtZW50KTogUmVjb3JkU3RhdHVzIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnN0YXR1cycsIGZhbHNlKSxcbiAgICBleHRyYWN0U3RhdHVzKClcbiAgKShyb290RWwpXG59XG5cbmNvbnN0IGdldENvbnN0cmFpbnRzID0gcGlwZShcbiAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJywgZmFsc2UpXG4pXG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGVnYWxDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGVnYWxDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTZWN1cml0eUNvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RTZWN1cml0eUNvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE90aGVyQ29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdE90aGVyQ29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGljZW5zZXMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdExpY2Vuc2VzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG4vLyBub3QgdXNlZCB5ZXRcbmV4cG9ydCBmdW5jdGlvbiByZWFkSXNvVG9waWNzKHJvb3RFbDogWG1sRWxlbWVudCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJywgdHJ1ZSksXG4gICAgbWFwQXJyYXkocmVhZFRleHQoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByb290RWw6IFhtbEVsZW1lbnRcbik6IFNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUgfCBudWxsIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoZ2V0U3BhdGlhbFJlcHJlc2VudGF0aW9uRnJvbUNvZGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE92ZXJ2aWV3cyhyb290RWw6IFhtbEVsZW1lbnQpOiBHcmFwaGljT3ZlcnZpZXdbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnLCBmYWxzZSksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFt1cmwsIGRlc2NyaXB0aW9uXSkgPT4gKHtcbiAgICAgIHVybCxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgIH0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaW5lYWdlKFxuICByb290RWw6IFhtbEVsZW1lbnQsXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zXG4pOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6ZGF0YVF1YWxpdHlJbmZvJyxcbiAgICAgICdnbWQ6RFFfRGF0YVF1YWxpdHknLFxuICAgICAgJ2dtZDpsaW5lYWdlJyxcbiAgICAgICdnbWQ6TElfTGluZWFnZScsXG4gICAgICAnZ21kOnN0YXRlbWVudCdcbiAgICApLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ2xpbmVhZ2UnLCB0cmFuc2xhdGlvbnMpLFxuICAgIG1hcCgoW2xpbmVhZ2VdKSA9PiBsaW5lYWdlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVcGRhdGVGcmVxdWVuY3kocm9vdEVsOiBYbWxFbGVtZW50KTogVXBkYXRlRnJlcXVlbmN5IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnJlc291cmNlTWFpbnRlbmFuY2UnLFxuICAgICAgJ2dtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uJ1xuICAgICksXG4gICAgZXh0cmFjdFVwZGF0ZUZyZXF1ZW5jeSgpLFxuICAgIG1hcCgodXBkYXRlRnJlcXVlbmN5KSA9PiB1cGRhdGVGcmVxdWVuY3kgfHwgJ3Vua25vd24nKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTZXJ2aWNlT25saW5lUmVzb3VyY2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBTZXJ2aWNlT25saW5lUmVzb3VyY2VbXVxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXRQcm90b2NvbFN0ciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnByb3RvY29sJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0UHJvdG9jb2wgPSBwaXBlKGdldFByb3RvY29sU3RyLCBtYXAobWF0Y2hQcm90b2NvbCkpXG4gIGNvbnN0IGdldE9ubGluZUZ1bmN0aW9uID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJylcbiAgKVxuICBjb25zdCBnZXRJc0xpbmsgPSBwaXBlKFxuICAgIGdldE9ubGluZUZ1bmN0aW9uLFxuICAgIG1hcCgob25saW5lRnVuY3Rpb24pID0+IG9ubGluZUZ1bmN0aW9uID09PSAnaW5mb3JtYXRpb24nKVxuICApXG4gIGNvbnN0IGdldE5hbWUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICApXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPihcbiAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICB7fVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZ2V0SXNMaW5rLCBnZXRQcm90b2NvbCwgZ2V0VXJsLCBnZXROYW1lLCBnZXREZXNjcmlwdGlvbikpLFxuICAgIG1hcEFycmF5KFxuICAgICAgKFtcbiAgICAgICAgaXNMaW5rLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdXJsLFxuICAgICAgICBbbmFtZSwgbmFtZVRyYW5zbGF0aW9uc10sXG4gICAgICAgIFtkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25UcmFuc2xhdGlvbnNdLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gICAgICAgICAgLi4ubmFtZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAuLi5kZXNjcmlwdGlvblRyYW5zbGF0aW9ucyxcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMaW5rKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgLi4uKG5hbWUgJiYgeyBuYW1lIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZW5kcG9pbnQnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBhY2Nlc3NTZXJ2aWNlUHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UmV1c2VPbmxpbmVSZXNvdXJjZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIE9ubGluZUxpbmtSZXNvdXJjZVtdXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldE5hbWUgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICApXG4gIGNvbnN0IGdldERlc2NyaXB0aW9uID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPihcbiAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICB7fVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICApLFxuICAgIG1hcEFycmF5KGNvbWJpbmUoZ2V0VXJsLCBnZXROYW1lLCBnZXREZXNjcmlwdGlvbikpLFxuICAgIG1hcEFycmF5KFxuICAgICAgKFtcbiAgICAgICAgdXJsLFxuICAgICAgICBbbmFtZSwgbmFtZVRyYW5zbGF0aW9uc10sXG4gICAgICAgIFtkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25UcmFuc2xhdGlvbnNdLFxuICAgICAgXSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gICAgICAgICAgLi4ubmFtZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAuLi5kZXNjcmlwdGlvblRyYW5zbGF0aW9ucyxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT25saW5lUmVzb3VyY2VzKHJvb3RFbDogWG1sRWxlbWVudCk6IE9ubGluZVJlc291cmNlW10ge1xuICBsZXQgZ2V0T25saW5lUmVzb3VyY2VzOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBPbmxpbmVSZXNvdXJjZVtdPlxuICBpZiAocmVhZEtpbmQocm9vdEVsKSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgZ2V0T25saW5lUmVzb3VyY2VzID0gKGVsKSA9PiBleHRyYWN0RGF0YXNldE9ubGluZVJlc291cmNlcyhnZXRNaW1lVHlwZSkoZWwpXG4gIH0gZWxzZSBpZiAocmVhZEtpbmQocm9vdEVsKSA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgZ2V0T25saW5lUmVzb3VyY2VzID0gZXh0cmFjdFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoKVxuICB9IGVsc2Uge1xuICAgIGdldE9ubGluZVJlc291cmNlcyA9IGV4dHJhY3RSZXVzZU9ubGluZVJlc291cmNlcygpXG4gIH1cbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsICdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gICAgbWFwQXJyYXkoZ2V0T25saW5lUmVzb3VyY2VzKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUZW1wb3JhbEV4dGVudHMocm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmV4dGVudCcsICdnbWQ6RVhfRXh0ZW50JywgJ2dtZDp0ZW1wb3JhbEVsZW1lbnQnKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICdnbWQ6RVhfVGVtcG9yYWxFeHRlbnQnLFxuICAgICAgICAgICdnbWQ6ZXh0ZW50JyxcbiAgICAgICAgICAnZ21sOlRpbWVQZXJpb2QnXG4gICAgICAgICksXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICdnbWQ6RVhfVGVtcG9yYWxFeHRlbnQnLFxuICAgICAgICAgICdnbWQ6ZXh0ZW50JyxcbiAgICAgICAgICAnZ21sOlRpbWVJbnN0YW50J1xuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW3BlcmlvZEVsLCBpbnN0YW50RWxdKSA9PiB7XG4gICAgICBpZiAocGVyaW9kRWwpIHtcbiAgICAgICAgcmV0dXJuIHBpcGUoXG4gICAgICAgICAgY29tYmluZShcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtbDpiZWdpblBvc2l0aW9uJywgZmFsc2UpLFxuICAgICAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgICAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWw6ZW5kUG9zaXRpb24nLCBmYWxzZSksXG4gICAgICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgbWFwKChbc3RhcnQsIGVuZF0pID0+ICh7XG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGVuZCxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKShwZXJpb2RFbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwaXBlKFxuICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtbDp0aW1lUG9zaXRpb24nLCBmYWxzZSksXG4gICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICBtYXAoKGRhdGVTdHIpID0+IChkYXRlU3RyID8gbmV3IERhdGUoZGF0ZVN0cikgOiBudWxsKSksXG4gICAgICAgICAgbWFwKChkYXRlKSA9PiAoe1xuICAgICAgICAgICAgc3RhcnQ6IGRhdGUsXG4gICAgICAgICAgfSkpXG4gICAgICAgICkoaW5zdGFudEVsKVxuICAgICAgfVxuICAgIH0pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNwYXRpYWxFeHRlbnRzKHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBjb25zdCBleHRyYWN0R2VvbWV0cnkgPSAocm9vdEVsOiBYbWxFbGVtZW50KTogR2VvbWV0cnkgPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnBvbHlnb24nLCBmYWxzZSksXG4gICAgICBmaXJzdENoaWxkRWxlbWVudCxcbiAgICAgIG1hcCgoZWwpID0+IChlbCA/IHJlYWRHZW9tZXRyeShlbCkgOiBudWxsKSlcbiAgICApKHJvb3RFbClcbiAgfVxuXG4gIGNvbnN0IGV4dHJhY3RCQm94ID0gKFxuICAgIHJvb3RFbDogWG1sRWxlbWVudFxuICApOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDp3ZXN0Qm91bmRMb25naXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOnNvdXRoQm91bmRMYXRpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZWFzdEJvdW5kTG9uZ2l0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpub3J0aEJvdW5kTGF0aXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSlcbiAgICAgIClcbiAgICApKHJvb3RFbClcbiAgfVxuXG4gIGNvbnN0IGV4dHJhY3REZXNjcmlwdGlvbiA9IChcbiAgICByb290RWw6IFhtbEVsZW1lbnRcbiAgKTogW3N0cmluZywgTW9kZWxUcmFuc2xhdGlvbnNdID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIFtudWxsLCB7fV1cbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOmdlb2dyYXBoaWNJZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpjb2RlJ1xuICAgICAgKSxcbiAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ2Rlc2NyaXB0aW9uJylcbiAgICApKHJvb3RFbClcbiAgfVxuXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmV4dGVudCcsICdnbWQ6RVhfRXh0ZW50JywgJ2dtZDpnZW9ncmFwaGljRWxlbWVudCcpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfQm91bmRpbmdQb2x5Z29uJyksIGV4dHJhY3RHZW9tZXRyeSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOkVYX0dlb2dyYXBoaWNCb3VuZGluZ0JveCcpLCBleHRyYWN0QkJveCksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21kOkVYX0dlb2dyYXBoaWNEZXNjcmlwdGlvbicpLFxuICAgICAgICAgIGV4dHJhY3REZXNjcmlwdGlvblxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIChbZ2VvbWV0cnksIGJib3gsIFtkZXNjcmlwdGlvbl1dKSA9PiAhIWdlb21ldHJ5IHx8ICEhYmJveCB8fCAhIWRlc2NyaXB0aW9uXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW2dlb21ldHJ5LCBiYm94LCBbZGVzY3JpcHRpb24sIHRyYW5zbGF0aW9uc11dKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4oZ2VvbWV0cnkgJiYgeyBnZW9tZXRyeSB9KSxcbiAgICAgICAgLi4uKGJib3ggJiYgeyBiYm94IH0pLFxuICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgfVxuICAgIH0pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE90aGVyTGFuZ3VhZ2VzKHJvb3RFbDogWG1sRWxlbWVudCk6IExhbmd1YWdlQ29kZVtdIHtcbiAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gcmVhZERlZmF1bHRMYW5ndWFnZShyb290RWwpXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpsb2NhbGUnLCBmYWxzZSksXG4gICAgbWFwQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdsYW46TGFuZ3VhZ2VDb2RlJyksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKChsYW5nKSA9PiB0b0xhbmcyKGxhbmc/LnRvTG93ZXJDYXNlKCkpID8/IGxhbmcpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGxhbmd1YWdlcykgPT5cbiAgICAgIGxhbmd1YWdlcy5maWx0ZXIoKGxhbmcpOiBsYW5nIGlzIExhbmd1YWdlQ29kZSA9PiBsYW5nICE9PSBudWxsKVxuICAgICksXG4gICAgbWFwKChsYW5ndWFnZXMpID0+IChsYW5ndWFnZXMubGVuZ3RoID8gbGFuZ3VhZ2VzIDogW2RlZmF1bHRMYW5ndWFnZV0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmxhbmd1YWdlJywgZmFsc2UpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2xhbjpMYW5ndWFnZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChsYW5nKSA9PiAobGFuZyA/IHRvTGFuZzIobGFuZy50b0xvd2VyQ2FzZSgpKSA6IG51bGwpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZXNvdXJjZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOmNpdGF0aW9uJyxcbiAgICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICAgJ2dtZDppZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6TURfSWRlbnRpZmllcicsXG4gICAgICAnZ21kOmNvZGUnXG4gICAgKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKShyb290RWwpXG59XG4iXX0=