gamma-app-controller 1.0.1

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 (120) hide show
  1. package/README.md +24 -0
  2. package/esm2020/gamma-app-controller.mjs +2 -0
  3. package/esm2020/lib/application-controller/app.http.service.mjs +24 -0
  4. package/esm2020/lib/application-controller/application-content.service.mjs +482 -0
  5. package/esm2020/lib/application-controller/application-controller.module.mjs +324 -0
  6. package/esm2020/lib/application-controller/application-dataset-call.service.mjs +321 -0
  7. package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +390 -0
  8. package/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +349 -0
  9. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-json/create-dataset-json.component.mjs +148 -0
  10. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +167 -0
  11. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/sqlFormatter.mjs +17 -0
  12. package/esm2020/lib/application-controller/application-dataset-component/dataset-mongo/dataset-mongo.component.mjs +57 -0
  13. package/esm2020/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.mjs +409 -0
  14. package/esm2020/lib/application-controller/application-dataset-component/dataset-rest-api/dataset-rest-api.component.mjs +61 -0
  15. package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +186 -0
  16. package/esm2020/lib/application-controller/application-view-components/application-views/application-views.component.mjs +134 -0
  17. package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +559 -0
  18. package/esm2020/lib/application-controller/common-header/common-header.component.mjs +33 -0
  19. package/esm2020/lib/application-controller/common.mjs +1207 -0
  20. package/esm2020/lib/application-controller/environment.mjs +26 -0
  21. package/esm2020/lib/application-controller/kpi-comon-service.mjs +537 -0
  22. package/esm2020/lib/application-controller/kpi-service.mjs +108 -0
  23. package/esm2020/lib/application-controller/loading/loading.component.mjs +16 -0
  24. package/esm2020/lib/application-controller/loading/loadingModule.mjs +28 -0
  25. package/esm2020/lib/application-controller/moment-helper.mjs +4 -0
  26. package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +977 -0
  27. package/esm2020/lib/application-controller/page-controller/page-controller/page-controller.component.mjs +172 -0
  28. package/esm2020/lib/application-controller/page-templates/cdr-config/cdr-config.component.mjs +227 -0
  29. package/esm2020/lib/application-controller/page-templates/dynamic-route-service.mjs +22 -0
  30. package/esm2020/lib/application-controller/shared/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.mjs +118 -0
  31. package/esm2020/lib/application-controller/shared/advanced-component/app-advance-header/app-header.component.mjs +181 -0
  32. package/esm2020/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.mjs +71 -0
  33. package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +266 -0
  34. package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +159 -0
  35. package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.mjs +144 -0
  36. package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/contentSafeHtml.mjs +20 -0
  37. package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +168 -0
  38. package/esm2020/lib/application-controller/shared/advanced-component/gamma-today-previous/gamma-today-previous.component.mjs +74 -0
  39. package/esm2020/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +118 -0
  40. package/esm2020/lib/application-controller/shared/api.service.mjs +117 -0
  41. package/esm2020/lib/application-controller/shared/app-title/app-title.component.mjs +67 -0
  42. package/esm2020/lib/application-controller/shared/gamam-widget/gamam-widget.component.mjs +37 -0
  43. package/esm2020/lib/application-controller/shared/gamma-advance-filter/gamma-advance-filter.component.mjs +229 -0
  44. package/esm2020/lib/application-controller/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +144 -0
  45. package/esm2020/lib/application-controller/shared/kpi-comon-service.mjs +537 -0
  46. package/esm2020/lib/application-controller/shared/loader/loader.component.mjs +14 -0
  47. package/esm2020/lib/application-controller/shared/loading/loading.component.mjs +16 -0
  48. package/esm2020/lib/application-controller/shared/loading/loadingModule.mjs +28 -0
  49. package/esm2020/lib/application-controller/shared/safeHtmlPipe.mjs +20 -0
  50. package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +294 -0
  51. package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +287 -0
  52. package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +255 -0
  53. package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +269 -0
  54. package/esm2020/lib/gamma-app-controller.component.mjs +16 -0
  55. package/esm2020/lib/gamma-app-controller.module.mjs +43 -0
  56. package/esm2020/lib/gamma-app-controller.service.mjs +20 -0
  57. package/esm2020/lib/icons.module.mjs +23 -0
  58. package/esm2020/public-api.mjs +49 -0
  59. package/fesm2015/gamma-app-controller.mjs +10250 -0
  60. package/fesm2015/gamma-app-controller.mjs.map +1 -0
  61. package/fesm2020/gamma-app-controller.mjs +10248 -0
  62. package/fesm2020/gamma-app-controller.mjs.map +1 -0
  63. package/index.d.ts +2 -0
  64. package/lib/application-controller/app.http.service.d.ts +15 -0
  65. package/lib/application-controller/application-content.service.d.ts +79 -0
  66. package/lib/application-controller/application-controller.module.d.ts +51 -0
  67. package/lib/application-controller/application-dataset-call.service.d.ts +20 -0
  68. package/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.d.ts +55 -0
  69. package/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.d.ts +121 -0
  70. package/lib/application-controller/application-dataset-component/create-dataset-json/create-dataset-json.component.d.ts +38 -0
  71. package/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.d.ts +42 -0
  72. package/lib/application-controller/application-dataset-component/create-dataset-sql/sqlFormatter.d.ts +7 -0
  73. package/lib/application-controller/application-dataset-component/dataset-mongo/dataset-mongo.component.d.ts +21 -0
  74. package/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.d.ts +62 -0
  75. package/lib/application-controller/application-dataset-component/dataset-rest-api/dataset-rest-api.component.d.ts +22 -0
  76. package/lib/application-controller/application-filter/application-filter.component.d.ts +36 -0
  77. package/lib/application-controller/application-view-components/application-views/application-views.component.d.ts +47 -0
  78. package/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.d.ts +73 -0
  79. package/lib/application-controller/common-header/common-header.component.d.ts +15 -0
  80. package/lib/application-controller/common.d.ts +148 -0
  81. package/lib/application-controller/environment.d.ts +25 -0
  82. package/lib/application-controller/kpi-comon-service.d.ts +14 -0
  83. package/lib/application-controller/kpi-service.d.ts +6 -0
  84. package/lib/application-controller/loading/loading.component.d.ts +9 -0
  85. package/lib/application-controller/loading/loadingModule.d.ts +10 -0
  86. package/lib/application-controller/moment-helper.d.ts +3 -0
  87. package/lib/application-controller/page-controller/page-config/page-config.component.d.ts +188 -0
  88. package/lib/application-controller/page-controller/page-controller/page-controller.component.d.ts +47 -0
  89. package/lib/application-controller/page-templates/cdr-config/cdr-config.component.d.ts +44 -0
  90. package/lib/application-controller/page-templates/dynamic-route-service.d.ts +8 -0
  91. package/lib/application-controller/shared/advanced-component/advance-widget-header-filter/advance-widget-header-filter.component.d.ts +33 -0
  92. package/lib/application-controller/shared/advanced-component/app-advance-header/app-header.component.d.ts +43 -0
  93. package/lib/application-controller/shared/advanced-component/gamm-single-number-card/gamm-single-number-card.component.d.ts +20 -0
  94. package/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.d.ts +51 -0
  95. package/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +32 -0
  96. package/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.d.ts +31 -0
  97. package/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/contentSafeHtml.d.ts +10 -0
  98. package/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.d.ts +26 -0
  99. package/lib/application-controller/shared/advanced-component/gamma-today-previous/gamma-today-previous.component.d.ts +21 -0
  100. package/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.d.ts +29 -0
  101. package/lib/application-controller/shared/api.service.d.ts +26 -0
  102. package/lib/application-controller/shared/app-title/app-title.component.d.ts +28 -0
  103. package/lib/application-controller/shared/gamam-widget/gamam-widget.component.d.ts +20 -0
  104. package/lib/application-controller/shared/gamma-advance-filter/gamma-advance-filter.component.d.ts +45 -0
  105. package/lib/application-controller/shared/gamma-bread-crumbs/bread-crumbs.component.d.ts +32 -0
  106. package/lib/application-controller/shared/kpi-comon-service.d.ts +14 -0
  107. package/lib/application-controller/shared/loader/loader.component.d.ts +8 -0
  108. package/lib/application-controller/shared/loading/loading.component.d.ts +9 -0
  109. package/lib/application-controller/shared/loading/loadingModule.d.ts +10 -0
  110. package/lib/application-controller/shared/safeHtmlPipe.d.ts +10 -0
  111. package/lib/application-controller/support-components/dash-chart/dash-chart.component.d.ts +83 -0
  112. package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +67 -0
  113. package/lib/application-controller/support-components/geo-map/geo-map.component.d.ts +70 -0
  114. package/lib/application-controller/support-components/table-with-bar/table-with-bar.component.d.ts +70 -0
  115. package/lib/gamma-app-controller.component.d.ts +5 -0
  116. package/lib/gamma-app-controller.module.d.ts +10 -0
  117. package/lib/gamma-app-controller.service.d.ts +7 -0
  118. package/lib/icons.module.d.ts +11 -0
  119. package/package.json +33 -0
  120. package/public-api.d.ts +48 -0
@@ -0,0 +1,1207 @@
1
+ import { Injectable } from "@angular/core";
2
+ import "rxjs";
3
+ import moment from './moment-helper';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ import * as i2 from "ngx-toastr";
7
+ import * as i3 from "@angular/platform-browser";
8
+ export class CommonService {
9
+ constructor(http, toastr, sanitizer) {
10
+ this.http = http;
11
+ this.toastr = toastr;
12
+ this.sanitizer = sanitizer;
13
+ this.G_DEFAULT_START_DATE = moment().subtract("30", "days").format("YYYY-MM-DD");
14
+ this.G_DEFAULT_END_DATE = moment().format("YYYY-MM-DD");
15
+ this.defaultCurrentDate = moment().format("YYYY-MM-DD_hh:mm:ss:SS");
16
+ this.defaultCurrentDateMillis = moment().format("YYYYMMDDhhmmssSS");
17
+ this.kpiUrlObjectContainer = [];
18
+ this.GlOBAL_AUTO_RELOADING_TIME_SET = 300000;
19
+ this.breadCumbsListArray = [];
20
+ this.globalDocLink = "http://203.215.33.222:33001/product/Pronto/kpi/RS2002";
21
+ this.btnPrimaryBlue = "text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
22
+ this.btnPrimaryBlueSm = "text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded text-sm px-3 py-1.5 mr-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
23
+ this.btnSecondaryAlternet = "py-2.5 px-5 mr-2 mb-2 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700";
24
+ this.BtnDarkBlack = "text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700";
25
+ this.BtnLightWhite = "text-gray-900 bg-white border border-gray-300 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600 dark:focus:ring-gray-700";
26
+ this.btnSuccessGreen = "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800";
27
+ this.btnDangerRed = "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900";
28
+ this.btnDangerRedSm = "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded text-sm px-3 py-1.5 mr-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900";
29
+ this.btnWarningYellow = "focus:outline-none text-black bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 font-medium rounded text-sm px-5 py-2.5 mr-2 mb-2 dark:focus:ring-yellow-900";
30
+ this.btnOthersPurple = "focus:outline-none text-white bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300 font-medium rounded text-sm px-5 py-2.5 mb-2 dark:bg-purple-600 dark:hover:bg-purple-700 dark:focus:ring-purple-900";
31
+ this.inputOne = "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500";
32
+ this.btn_success_lg = "cursor-pointer focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded text-sm px-5 py-5 mr-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800";
33
+ this.btn_success_md = "cursor-pointer focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded text-sm px-3 py-3 mr-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800";
34
+ this.btn_success_sm = "cursor-pointer focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded text-sm px-1 py-1 mr-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800";
35
+ this.btn_primary_lg = "cursor-pointer text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded text-sm px-5 py-5 mr-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
36
+ this.btn_primary_md = "cursor-pointer text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded text-sm px-3 py-3 mr-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
37
+ this.btn_primary_sm = "cursor-pointer text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded text-sm px-1 py-1 mr-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
38
+ this.badge_primary_sm = "cursor-pointer text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded text-sm inline px-0.5 py-0.5 mr-1 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
39
+ this.btn_danger_lg = "cursor-pointer focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded text-sm px-5 py-5 mr-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900";
40
+ this.btn_danger_md = "cursor-pointer focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded text-sm px-3 py-3 mr-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900";
41
+ this.btn_danger_sm = "cursor-pointer focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded text-sm px-1 py-1 mr-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900";
42
+ this.btn_warning_lg = "cursor-pointer focus:outline-none text-black bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 font-medium rounded text-sm px-5 py-5 mr-2 dark:focus:ring-yellow-900";
43
+ this.btn_warning_md = "cursor-pointer focus:outline-none text-black bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 font-medium rounded text-sm px-3 py-3 mr-2 dark:focus:ring-yellow-900";
44
+ this.btn_warning_sm = "cursor-pointer focus:outline-none text-black bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 font-medium rounded text-sm px-1 py-1 mr-2 dark:focus:ring-yellow-900";
45
+ this.btn_dark_lg = "cursor-pointer text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded text-sm px-5 py-5 mr-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700";
46
+ this.btn_dark_md = "cursor-pointer text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded text-sm px-3 py-3 mr-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700";
47
+ this.btn_dark_sm = "cursor-pointer text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded text-sm px-1 py-1 mr-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700";
48
+ this.btn_light_lg = "ms-3 text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600";
49
+ this.btn_light_md = "ms-3 text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-3 py-3 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600";
50
+ this.btn_light_sm = "ms-3 text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-1 py-1 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600";
51
+ this.btnDarkBlack = "cursor-pointer text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded text-sm px-5 py-2.5 mr-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700";
52
+ this.btnLightWhite = "cursor-pointer text-gray-900 bg-white border border-gray-300 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium rounded text-sm px-5 py-2.5 mr-2 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600 dark:focus:ring-gray-700";
53
+ this.btnPrimaryBlue_sm = "cursor-pointer text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-small rounded text-sm px-2 py-1.5 mr-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800";
54
+ this.getKey = (obj) => {
55
+ const keys = Object.keys(obj);
56
+ return keys.find(key => key !== "event_date");
57
+ };
58
+ }
59
+ ngOnInit() { }
60
+ chartRenderNew(caption) {
61
+ let charts = {};
62
+ charts["baseFont"] = "Verdana";
63
+ charts["caption"] = "";
64
+ charts["subCaption"] = caption;
65
+ charts["subcaptionFontColor"] = "#d4d0d0";
66
+ charts["xAxisName"] = "";
67
+ charts["yAxisName"] = "";
68
+ charts["pYAxisName"] = "";
69
+ charts["sYAxisName"] = "";
70
+ charts["showValues"] = "0";
71
+ charts["numberPrefix"] = "";
72
+ charts["paletteColors"] =
73
+ "#1e88e5,#f44336,#1aaf5d,#1fb622,#7e00b0,#E74C3C,#AAB7B8,#D35400,#273746,#17A589,#273746,";
74
+ charts["plotGradientColor"] = "";
75
+ charts['bgColor'] = '#424242';
76
+ charts["BgAlpha"] = "100";
77
+ charts["baseFontColor"] = "#fff";
78
+ charts["canvasBgAlpha"] = "0";
79
+ charts["showBorder"] = "0";
80
+ charts["showCanvasBorder"] = "0";
81
+ charts["usePlotGradientColor"] = "0";
82
+ charts["plotBorderAlpha"] = "10";
83
+ charts["legendBorderAlpha"] = "0";
84
+ charts["legendBgAlpha"] = "0";
85
+ charts["legendShadow"] = "0";
86
+ charts["showHoverEffect"] = "1";
87
+ charts["valueFontColor"] = "#000000";
88
+ charts["rotateValues"] = "1";
89
+ charts["placeValuesInside"] = "1";
90
+ charts["divlineColor"] = "#6699cc";
91
+ charts["divLineIsDashed"] = "0";
92
+ charts["divLineDashLen"] = "0";
93
+ charts["divLineGapLen"] = "0";
94
+ charts["divLineAlpha"] = "60";
95
+ charts["showAlternateVGridColor"] = "0";
96
+ charts['canvasBgColor'] = '#424242';
97
+ charts["captionFontSize"] = "12";
98
+ charts["subcaptionFontSize"] = "10";
99
+ charts["exportEnabled"] = "1";
100
+ charts["exportFormats"] = "PNG|JPG";
101
+ charts["exportFileName"] = new Date().getTime();
102
+ charts["slantLabels"] = "0";
103
+ charts["showCanvasBorder"] = "0";
104
+ charts["showAlternateHGridColor"] = "0";
105
+ charts["toolTipColor"] = "#ffffff";
106
+ charts["toolTipBorderThickness"] = "0";
107
+ charts["toolTipBgColor"] = "#000000";
108
+ charts["toolTipBgAlpha"] = "80";
109
+ charts["toolTipBorderRadius"] = "2";
110
+ charts["toolTipPadding"] = "5";
111
+ charts["outCnvBaseFontSize"] = "9";
112
+ charts["labelDisplay"] = "rotate";
113
+ charts["drawCrossLine"] = "0";
114
+ charts["theme"] = this.fusionThemeName;
115
+ return charts;
116
+ }
117
+ getNewmscombidy2d(pYAxisName, sYAxisName) {
118
+ let charts = {};
119
+ charts["baseFont"] = "Verdana";
120
+ charts["caption"] = "";
121
+ charts["subCaption"] = "";
122
+ charts["subcaptionFontColor"] = "#d4d0d0";
123
+ charts["xAxisName"] = "";
124
+ charts["yAxisName"] = "";
125
+ charts["pYAxisName"] = pYAxisName;
126
+ charts["sYAxisName"] = sYAxisName;
127
+ charts["showValues"] = "0";
128
+ charts["numberPrefix"] = "";
129
+ charts["paletteColors"] =
130
+ "#1e88e5,#f44336,#1aaf5d,#cfe320,#7e00b0,#E74C3C,#AAB7B8,#D35400,#273746,#17A589,#273746, ";
131
+ charts["plotGradientColor"] = "";
132
+ charts['bgColor'] = '#1e293b';
133
+ charts["BgAlpha"] = "100";
134
+ charts["baseFontColor"] = "#fff";
135
+ charts["showBorder"] = "0";
136
+ charts["showCanvasBorder"] = "0";
137
+ charts["usePlotGradientColor"] = "0";
138
+ charts["plotBorderAlpha"] = "10";
139
+ charts["legendBorderAlpha"] = "0";
140
+ charts["legendBgAlpha"] = "0";
141
+ charts["legendShadow"] = "0";
142
+ charts["showHoverEffect"] = "1";
143
+ charts["valueFontColor"] = "#000000";
144
+ charts["rotateValues"] = "1";
145
+ charts["placeValuesInside"] = "1";
146
+ charts["divlineColor"] = "#6699cc";
147
+ charts["divLineIsDashed"] = "0";
148
+ charts["divLineDashLen"] = "0";
149
+ charts["divLineGapLen"] = "0";
150
+ charts["divLineAlpha"] = "60";
151
+ charts["showAlternateVGridColor"] = "0";
152
+ charts['canvasBgColor'] = '#1e293b';
153
+ charts["captionFontSize"] = "10";
154
+ charts["subcaptionFontSize"] = "10";
155
+ charts["exportEnabled"] = "1";
156
+ charts["exportFormats"] = "PNG|JPG";
157
+ charts["exportFileName"] = new Date().getTime();
158
+ charts["labelDisplay"] = "";
159
+ charts["slantLabels"] = "0";
160
+ charts["showCanvasBorder"] = "0";
161
+ charts["showAlternateHGridColor"] = "0";
162
+ charts["toolTipColor"] = "#ffffff";
163
+ charts["toolTipBorderThickness"] = "0";
164
+ charts["toolTipBgColor"] = "#000000";
165
+ charts["toolTipBgAlpha"] = "80";
166
+ charts["toolTipFontSize"] = "12";
167
+ charts["toolTipBorderRadius"] = "2";
168
+ charts["toolTipPadding"] = "5";
169
+ charts["labelDisplay"] = "rotate";
170
+ charts["outCnvBaseFontSize"] = "9";
171
+ charts["drawCrossLine"] = "0";
172
+ charts["theme"] = this.fusionThemeName;
173
+ return charts;
174
+ }
175
+ JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {
176
+ let arrData = typeof JSONData != "object" ? JSON.parse(JSONData) : JSONData;
177
+ let CSV = "";
178
+ CSV += ReportTitle + "\r\n\n";
179
+ if (ShowLabel) {
180
+ let row = "";
181
+ for (let index in arrData[0]) {
182
+ row += index + ",";
183
+ }
184
+ row = row.slice(0, -1);
185
+ CSV += row + "\r\n";
186
+ }
187
+ for (let i = 0; i < arrData.length; i++) {
188
+ let row = "";
189
+ for (let index in arrData[i]) {
190
+ row += '"' + arrData[i][index] + '",';
191
+ }
192
+ row.slice(0, row.length - 1);
193
+ CSV += row + "\r\n";
194
+ }
195
+ if (CSV == "") {
196
+ alert("Invalid data");
197
+ return;
198
+ }
199
+ let fileName = "report_";
200
+ fileName += ReportTitle.replace(/ /g, " ");
201
+ let uri = "data:text/csv;charset=utf-8,%EF%BB%BF" + encodeURI(CSV);
202
+ let link = document.createElement("a");
203
+ link.href = uri;
204
+ if (ReportTitle === "Datasource Missing Files") {
205
+ link.download = fileName + "_" + this.defaultCurrentDateMillis + ".txt";
206
+ }
207
+ else {
208
+ link.download = fileName + "_" + this.defaultCurrentDateMillis + ".csv";
209
+ }
210
+ document.body.appendChild(link);
211
+ link.click();
212
+ document.body.removeChild(link);
213
+ }
214
+ createHtml(width, data, color) {
215
+ return ('<div style="display: inline"> ' +
216
+ '<div class="no-padding" style="float:left; width: ' +
217
+ width +
218
+ "%; background-color: " +
219
+ color +
220
+ "; " +
221
+ 'height: 15px; position: relative;"></div>' +
222
+ '<div class="no-padding bar" style="float: left">' +
223
+ data +
224
+ "</div>" +
225
+ "</div>");
226
+ }
227
+ scaleNumber(inputY, yMin, yMax, xMin, xMax) {
228
+ if (yMin == yMax) {
229
+ if (inputY == yMin) {
230
+ return xMax;
231
+ }
232
+ return xMin;
233
+ }
234
+ else {
235
+ let percent = (inputY - yMin) / (yMax - yMin);
236
+ return percent * (xMax - xMin) + xMin;
237
+ }
238
+ }
239
+ ThousandSeparator(value) {
240
+ if (Number(value)) {
241
+ if (value > 0 && value < 1) {
242
+ return value;
243
+ }
244
+ return Number(value).toLocaleString();
245
+ }
246
+ return value;
247
+ }
248
+ reformatNumberWithThousandSeparator(value) {
249
+ if (Number(value)) {
250
+ if (value > 0 && value < 1) {
251
+ return value;
252
+ }
253
+ return Number(value).toLocaleString();
254
+ }
255
+ return value;
256
+ }
257
+ reformatNumberWithThousandSeparatorV2(value, exp) {
258
+ if (exp == undefined) {
259
+ exp = 0;
260
+ }
261
+ if (Number(value)) {
262
+ if (value > 0 && value < 1) {
263
+ return this.roundOffTillTwo(value, exp);
264
+ }
265
+ return Number(value).toLocaleString(undefined, {
266
+ maximumFractionDigits: exp,
267
+ });
268
+ }
269
+ return value;
270
+ }
271
+ reformatNumberWithThousandSeparatorV3(value, exp) {
272
+ let val;
273
+ if (exp == undefined) {
274
+ exp = 0;
275
+ }
276
+ if (Number(value)) {
277
+ val = value.toFixed(exp);
278
+ }
279
+ else if (value == 0) {
280
+ val = value.toFixed(exp);
281
+ }
282
+ else {
283
+ val = "NAN";
284
+ }
285
+ return Number(val).toLocaleString(undefined, {
286
+ maximumFractionDigits: exp,
287
+ minimumFractionDigits: exp,
288
+ });
289
+ }
290
+ reformatNumberWithThousandSeparatorV4(value, exp = 0) {
291
+ let val;
292
+ const numericValue = Number(value);
293
+ if (!isNaN(numericValue)) {
294
+ val = numericValue.toFixed(exp);
295
+ }
296
+ else {
297
+ if (value == "-") {
298
+ val = "-";
299
+ return val;
300
+ }
301
+ else {
302
+ val = "NAN";
303
+ return val;
304
+ }
305
+ }
306
+ return Number(val).toLocaleString(undefined, {
307
+ maximumFractionDigits: exp,
308
+ minimumFractionDigits: exp,
309
+ });
310
+ }
311
+ reformatNumberWithThousandSeparatorV5(value, exp = 0) {
312
+ let val;
313
+ const numericValue = Number(value);
314
+ if (!isNaN(numericValue)) {
315
+ val = numericValue.toFixed(exp);
316
+ }
317
+ else {
318
+ if (value == "-") {
319
+ val = "-";
320
+ return NaN;
321
+ }
322
+ else {
323
+ return NaN;
324
+ }
325
+ }
326
+ return Number(val);
327
+ }
328
+ reformatNumberWithThousandSeparatorIfrsType(value, exp = 0) {
329
+ let val;
330
+ const numericValue = Number(value);
331
+ if (!isNaN(numericValue)) {
332
+ val = numericValue.toFixed(exp);
333
+ }
334
+ else {
335
+ val = "-";
336
+ return val;
337
+ }
338
+ return Number(val).toLocaleString(undefined, {
339
+ maximumFractionDigits: exp,
340
+ minimumFractionDigits: exp,
341
+ });
342
+ }
343
+ foramteValueForAmount(value, exp) {
344
+ let val;
345
+ if (exp === undefined) {
346
+ exp = 0;
347
+ }
348
+ value = Number(value) / 10000;
349
+ if (isFinite(value)) {
350
+ val = value.toFixed(exp);
351
+ }
352
+ else {
353
+ val = "0";
354
+ }
355
+ return Number(val).toLocaleString(undefined, {
356
+ maximumFractionDigits: exp,
357
+ minimumFractionDigits: exp,
358
+ });
359
+ }
360
+ foramteValueForCharge(value, exp) {
361
+ let val;
362
+ if (exp === undefined) {
363
+ exp = 0;
364
+ }
365
+ value = Number(value) / 10000;
366
+ if (isFinite(value)) {
367
+ val = value.toFixed(exp);
368
+ }
369
+ else {
370
+ val = "0";
371
+ }
372
+ return Number(val).toLocaleString(undefined, {
373
+ maximumFractionDigits: exp,
374
+ minimumFractionDigits: exp,
375
+ });
376
+ }
377
+ foramteValueForMoU(value, exp) {
378
+ let val;
379
+ if (exp === undefined) {
380
+ exp = 0;
381
+ }
382
+ value = Number(value) / 60;
383
+ if (isFinite(value)) {
384
+ val = value.toFixed(exp);
385
+ }
386
+ else {
387
+ val = "0";
388
+ }
389
+ return Number(val).toLocaleString(undefined, {
390
+ maximumFractionDigits: exp,
391
+ minimumFractionDigits: exp,
392
+ });
393
+ }
394
+ abbreviateNumber(number) {
395
+ let SI_POSTFIXES = ["", "K", "M", "B", "T"];
396
+ let tier = (Math.log10(Math.abs(number)) / 3) | 0;
397
+ if (tier == 0) {
398
+ return this.roundOffTillTwo(number, 2);
399
+ }
400
+ let postfix = SI_POSTFIXES[tier];
401
+ let scale = Math.pow(10, tier * 3);
402
+ let scaled = number / scale;
403
+ let formatted = scaled.toFixed(1) + "";
404
+ if (/\.0$/.test(formatted)) {
405
+ formatted = formatted.substr(0, formatted.length - 2);
406
+ }
407
+ return formatted + postfix;
408
+ }
409
+ createVarianceHtmlForCount(width, data1, data2) {
410
+ let columnColor = "";
411
+ let columnData = data1 - data2;
412
+ if (columnData > 0) {
413
+ columnColor = "#fd0000";
414
+ }
415
+ else {
416
+ columnColor = "#db1500";
417
+ }
418
+ return ('<div style="display: inline"> ' +
419
+ '<div class="no-padding" style="float:left; width: ' +
420
+ width +
421
+ "%; background-color: " +
422
+ columnColor +
423
+ "; " +
424
+ 'height: 15px; position: relative;"></div>' +
425
+ '<div class="no-padding" style="float: left">' +
426
+ this.reformatNumberWithThousandSeparator(columnData) +
427
+ "</div>" +
428
+ "</div>");
429
+ }
430
+ roundOffTillTwo(value, exp) {
431
+ if (typeof exp === "undefined" || +exp === 0) {
432
+ return Math.round(value);
433
+ }
434
+ value = +value;
435
+ exp = +exp;
436
+ if (isNaN(value) || !(typeof exp === "number" && exp % 1 === 0)) {
437
+ return NaN;
438
+ }
439
+ value = value.toString().split("e");
440
+ value = Math.round(+(value[0] + "e" + (value[1] ? +value[1] + exp : exp)));
441
+ value = value.toString().split("e");
442
+ return +(value[0] + "e" + (value[1] ? +value[1] - exp : -exp));
443
+ }
444
+ getmapChartDetailHolder(val) {
445
+ this.mapChartDetailHolder = val;
446
+ }
447
+ get_percentage_change(prev, now) {
448
+ let perc = undefined;
449
+ if (prev !== 0) {
450
+ perc = ((now - prev) / prev) * 100;
451
+ perc = this.roundOffTillTwo(perc, 2);
452
+ }
453
+ else if (now !== 0) {
454
+ perc = 100;
455
+ }
456
+ let badge_label = "";
457
+ if (perc === undefined) {
458
+ perc = "<b class='wig-na'> NA</b>";
459
+ badge_label = "<b>" + perc + "</b>";
460
+ }
461
+ else if (perc > 0) {
462
+ badge_label =
463
+ '<span><b class="green-badge"> +' +
464
+ perc +
465
+ '<i class="fa fa-chevron-up" ></i></b></span>';
466
+ }
467
+ else {
468
+ badge_label =
469
+ '<span><b class="r-bg"> ' +
470
+ perc +
471
+ '<i class="fa fa-chevron-down" ></i></b><span>';
472
+ }
473
+ return badge_label;
474
+ }
475
+ getLabel(attr_name) {
476
+ let label_name = "";
477
+ if (attr_name != undefined) {
478
+ if (attr_name.indexOf("-") > 0) {
479
+ attr_name = attr_name.replace(/-/g, " ");
480
+ }
481
+ else if (attr_name.indexOf("_") > 0) {
482
+ attr_name = attr_name.replace(/_/g, " ");
483
+ }
484
+ else {
485
+ attr_name = attr_name.replace(/([A-Z])/g, " $1");
486
+ }
487
+ label_name = this.capitaliseWord(attr_name);
488
+ }
489
+ return label_name;
490
+ }
491
+ capitaliseWord(content) {
492
+ let ret = "";
493
+ let text = content, tokens = text.split(" ").filter(function (t) {
494
+ return t != "";
495
+ }), res = [], i, len, component;
496
+ for (i = 0, len = tokens.length; i < len; i++) {
497
+ component = tokens[i];
498
+ res.push(component.substring(0, 1).toUpperCase());
499
+ res.push(component.substring(1));
500
+ res.push(" ");
501
+ }
502
+ ret += res.join("");
503
+ return ret;
504
+ }
505
+ convertToSpaceSeparatedCapitalized(input) {
506
+ return input
507
+ .replace(/_/g, ' ')
508
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
509
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
510
+ .replace(/\b\w/g, firstChar => firstChar.toUpperCase());
511
+ }
512
+ capitalizeFirstLetter(text) {
513
+ return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
514
+ }
515
+ formatMillisec(value) {
516
+ let millisecInDay = 86400000;
517
+ let millisecInHour = 3600000;
518
+ let millisecInMin = 60000;
519
+ let millisecInSec = 1000;
520
+ if (value >= millisecInDay) {
521
+ let dayValue = value / 86400000;
522
+ let day = dayValue.toFixed(1);
523
+ if (day === "1") {
524
+ return day + " day";
525
+ }
526
+ else {
527
+ return day + " days";
528
+ }
529
+ }
530
+ else if (value >= millisecInHour) {
531
+ let hour = value / 3600000;
532
+ return hour + " hr";
533
+ }
534
+ else if (value >= millisecInMin) {
535
+ let min = value / 60000;
536
+ return min + " min";
537
+ }
538
+ else if (value >= millisecInSec) {
539
+ let sec = value / 1000;
540
+ return sec + " sec";
541
+ }
542
+ else if (value < 1000) {
543
+ return value + " mil";
544
+ }
545
+ }
546
+ formatBytes(bytes, decimals) {
547
+ if (bytes == 0) {
548
+ return "0 Byte";
549
+ }
550
+ let k = 1024;
551
+ let dm = decimals;
552
+ if (decimals == undefined || decimals == "") {
553
+ dm = 2;
554
+ }
555
+ let sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
556
+ let i = Math.floor(Math.log(bytes) / Math.log(k));
557
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
558
+ }
559
+ formatBytesv2(bytes, decimals) {
560
+ if (bytes == 0) {
561
+ return "0";
562
+ }
563
+ if (bytes == "No Data") {
564
+ return "No Data";
565
+ }
566
+ let k = 1024;
567
+ let dm = decimals;
568
+ if (decimals == undefined || decimals == "") {
569
+ dm = 2;
570
+ }
571
+ let sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
572
+ let i = Math.floor(Math.log(bytes) / Math.log(k));
573
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
574
+ }
575
+ formatBytsToKb(bytes, decimals) {
576
+ if (bytes == 0) {
577
+ return "0";
578
+ }
579
+ let k = 1024;
580
+ let dm = decimals;
581
+ if (decimals == undefined || decimals == "") {
582
+ dm = 2;
583
+ }
584
+ let i = bytes / k;
585
+ let v = Number(i).toLocaleString(undefined, { maximumFractionDigits: dm });
586
+ return v;
587
+ }
588
+ formatBytsToGb(bytes, decimals) {
589
+ if (bytes == 0) {
590
+ return "0";
591
+ }
592
+ let g = 1024 * 1024 * 1024;
593
+ let dm = decimals;
594
+ if (decimals == undefined || decimals == "") {
595
+ dm = 2;
596
+ }
597
+ let i = bytes / g;
598
+ let v = Number(i).toLocaleString(undefined, { maximumFractionDigits: dm });
599
+ return v;
600
+ }
601
+ reformatNumber(value) {
602
+ let newValue = "";
603
+ newValue = value;
604
+ if (value >= 1000) {
605
+ let suffixes = ["", "K", "M", "B", "T"];
606
+ let suffixNum = Math.floor(("" + value).length / 3);
607
+ let shortValue;
608
+ for (let precision = 2; precision >= 1; precision--) {
609
+ shortValue = parseFloat((suffixNum != 0
610
+ ? value / Math.pow(1000, suffixNum)
611
+ : value).toPrecision(precision));
612
+ let dotLessShortValue = (shortValue + "").replace("a-z A-Z 0-9", "");
613
+ if (dotLessShortValue.length <= 2) {
614
+ break;
615
+ }
616
+ }
617
+ newValue = shortValue + suffixes[suffixNum];
618
+ }
619
+ return newValue;
620
+ }
621
+ ifNullUndefined(data) {
622
+ if (data == null || data == undefined) {
623
+ return " ";
624
+ }
625
+ return data;
626
+ }
627
+ getVarianceOfMou(value1, value2) {
628
+ let variance;
629
+ variance = Math.abs(value1 - value2);
630
+ return variance;
631
+ }
632
+ getVarianceOfCount(value1, value2) {
633
+ let variance;
634
+ variance = Math.abs(value1 - value2);
635
+ return variance;
636
+ }
637
+ getPercentageMou(value1, value2) {
638
+ let percentageValue;
639
+ if (value1 <= 0) {
640
+ percentageValue = "NA";
641
+ }
642
+ else {
643
+ let percentage = ((value1 - value2) * 100) / value1;
644
+ percentageValue = Math.abs(this.roundOffTillTwo(percentage, 2));
645
+ }
646
+ return percentageValue;
647
+ }
648
+ getPercentageCount(value1, value2) {
649
+ let percentage;
650
+ if (value1 <= 0) {
651
+ percentage += "NA";
652
+ }
653
+ else {
654
+ percentage = ((value1 - value2) * 100) / value1;
655
+ }
656
+ let percentageValue = Math.abs(this.roundOffTillTwo(percentage, 2));
657
+ return percentageValue;
658
+ }
659
+ getColorCodeSpan(data) {
660
+ if (data >= -1 && data <= 1) {
661
+ if (data == 0) {
662
+ return (Math.abs(data) +
663
+ " <i class='fa fa-lg fa-check-circle text-green-400'></i>");
664
+ }
665
+ else {
666
+ return (this.reformatNumberWithThousandSeparator(Math.abs(data)) +
667
+ " <i class='fa fa-lg fa-arrow-circle-up text-green-400'></i>");
668
+ }
669
+ }
670
+ else if (data < -1 || data > 1) {
671
+ if (data > 0) {
672
+ return (this.reformatNumberWithThousandSeparator(Math.abs(data)) +
673
+ " <i class='fa fa-lg fa-arrow-circle-up text-red-500'></i>");
674
+ }
675
+ else {
676
+ return (this.reformatNumberWithThousandSeparator(Math.abs(data)) +
677
+ " <i class='fa fa-lg fa-arrow-circle-down text-red-500 '></i>");
678
+ }
679
+ }
680
+ else if (data == "NA" || data == isNaN(data)) {
681
+ return "NA";
682
+ }
683
+ else {
684
+ return (this.reformatNumberWithThousandSeparator(Math.abs(data)) +
685
+ " <i class='fa fa-lg fa-arrow-circle-down text-red-500 '></i>");
686
+ }
687
+ }
688
+ get_operator_color_code_map() {
689
+ return {
690
+ AFGAT: "#d1d2d4",
691
+ AFGAW: "#f47a20",
692
+ AFGEA: "#b7cc87",
693
+ AFGAR: "#ffcb05",
694
+ AFGTD: "#fbb6c2",
695
+ };
696
+ }
697
+ getOperatorByKey() {
698
+ return {
699
+ AFGAT: "AFTEL",
700
+ AFGAW: "AWCC",
701
+ AFGEA: "ETISALAT",
702
+ AFGAR: "MTNAF",
703
+ AFGTD: "ROSHAN",
704
+ };
705
+ }
706
+ getOperatorBylogo() {
707
+ return {
708
+ AFGAT: "data:image/png;base64,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",
709
+ AFGAW: "data:image/png;base64,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",
710
+ AFGEA: "data:image/png;base64,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",
711
+ AFGAR: "data:image/png;base64,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",
712
+ AFGTD: "data:image/png;base64,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",
713
+ };
714
+ }
715
+ getOperatorProfile(opName) {
716
+ let operator_profile = {
717
+ AFGAW: {
718
+ name: 'Afghan Telecom',
719
+ mobile: "",
720
+ address: "4th Floor Post Parcel Building Mohammad Jan Khan Watt Kabul Afghanistan ",
721
+ email: ""
722
+ },
723
+ AFGAT: {
724
+ name: 'Afghan Wireless Communication Company',
725
+ mobile: "",
726
+ address: "Shar-e-Naw, Charayee Hahi Yaqob",
727
+ email: ""
728
+ },
729
+ AFGEA: {
730
+ name: 'Etisalat Afghanistan',
731
+ mobile: "0700 830 830",
732
+ address: "Darulaman Road, Hajari Najari, Kabul, Afghanistan",
733
+ email: ""
734
+ },
735
+ AFGAR: {
736
+ name: 'MTN Afghanistan',
737
+ mobile: "",
738
+ address: "Park Plaza, Opposite Park-e-Shahr-e-Naw, Kabul, Afghanistan",
739
+ email: ""
740
+ },
741
+ AFGTD: {
742
+ name: 'Roshan/Telecom Development Company Afghanistan Corp.',
743
+ mobile: "",
744
+ address: "House#13 Main Street, Wazir Akbar Khan, Kabul Afghanistan",
745
+ email: ""
746
+ }
747
+ };
748
+ return operator_profile[opName];
749
+ }
750
+ isEmptyOrNullOrUndefinedForNan(data) {
751
+ if (data == null || data == undefined) {
752
+ return 0;
753
+ }
754
+ else {
755
+ return data;
756
+ }
757
+ }
758
+ getabsoluteVal(data) {
759
+ return Math.abs(data);
760
+ }
761
+ returnNullValueIfEmptyOrUndefined(value) {
762
+ if (value == undefined || value == "") {
763
+ return null;
764
+ }
765
+ else {
766
+ return value;
767
+ }
768
+ }
769
+ customValueSorter(value1, value2) {
770
+ if (!value1 && value2) {
771
+ return -1;
772
+ }
773
+ if (!value1 && !value2) {
774
+ return 0;
775
+ }
776
+ if (value1 && !value2) {
777
+ return 1;
778
+ }
779
+ const v1 = convertString(value1);
780
+ const v2 = convertString(value2);
781
+ if (v1 > v2) {
782
+ return 1;
783
+ }
784
+ else if (v1 < v2) {
785
+ return -1;
786
+ }
787
+ function convertString(value) {
788
+ if (typeof value === "string") {
789
+ let out;
790
+ out = value;
791
+ out = out.replace("MB", "");
792
+ out = out.replace("GB", "");
793
+ out = out.replace("TB", "");
794
+ out = out.replaceAll(",", "");
795
+ return parseFloat(out);
796
+ }
797
+ return value;
798
+ }
799
+ return 0;
800
+ }
801
+ customValueSorterForBar(valueOne, valueTwo) {
802
+ const parser1 = new DOMParser();
803
+ const parser2 = new DOMParser();
804
+ const docOne = parser1.parseFromString(valueOne, 'text/html');
805
+ const docTwo = parser2.parseFromString(valueTwo, 'text/html');
806
+ const valueElement = docOne.querySelector('.bar');
807
+ const numberTextOne = Number(valueElement.textContent.trim().replace(/,/g, ''));
808
+ const valueElementTwo = docTwo.querySelector('.bar');
809
+ const numberTextTwo = Number(valueElementTwo.textContent.trim().replace(/,/g, ''));
810
+ if (!numberTextOne && numberTextTwo) {
811
+ return -1;
812
+ }
813
+ if (!numberTextOne && !numberTextTwo) {
814
+ return 0;
815
+ }
816
+ if (numberTextOne && !numberTextTwo) {
817
+ return 1;
818
+ }
819
+ const v1 = convertString(numberTextOne);
820
+ const v2 = convertString(numberTextTwo);
821
+ if (v1 > v2) {
822
+ return 1;
823
+ }
824
+ else if (v1 < v2) {
825
+ return -1;
826
+ }
827
+ function convertString(value) {
828
+ if (typeof value === "string") {
829
+ let out;
830
+ out = value;
831
+ out = out.replace("MB", "");
832
+ out = out.replace("GB", "");
833
+ out = out.replace("TB", "");
834
+ out = out.replaceAll(",", "");
835
+ return parseFloat(out);
836
+ }
837
+ return value;
838
+ }
839
+ return 0;
840
+ }
841
+ onExcelExporting(e, excel_data, report_name) {
842
+ this.JSONToCSVConvertor(excel_data, report_name, true);
843
+ e.cancel = true;
844
+ }
845
+ removeHtmlContentFromData(columns, rows) {
846
+ rows.forEach(function (row) {
847
+ let rowValues = row.values;
848
+ for (let i = 0; i < rowValues.length; i++) {
849
+ if (rowValues[i] != undefined) {
850
+ if (rowValues[i].toString().includes("</i>"))
851
+ rowValues[i] = rowValues[i].replace(/[^0-9\.\,]/g, "");
852
+ }
853
+ }
854
+ });
855
+ }
856
+ customizeExcelCell(options) {
857
+ if (options.value && typeof options.value === "string") {
858
+ const numericString = options.value.replace(/,/g, '');
859
+ if (!isNaN(Number(numericString))) {
860
+ options.value = Number(numericString);
861
+ }
862
+ }
863
+ }
864
+ removeHtmlForJobsummaryContentFromData(columns, rows) {
865
+ rows.forEach(function (row) {
866
+ let rowValues = row.values;
867
+ for (let i = 0; i < rowValues.length; i++) {
868
+ if (rowValues[i] != undefined) {
869
+ if (rowValues[i].toString().includes("</span>"))
870
+ rowValues[i] = rowValues[i].replace(/<\/?[^>]+>/g, '').trim();
871
+ }
872
+ }
873
+ });
874
+ }
875
+ getDaysBetweenDates(start, end, dayName) {
876
+ let result = [];
877
+ let days = { sun: 0, mon: 1, tue: 2, wed: 3, thu: 4, fri: 5, sat: 6 };
878
+ let day = days[dayName.toLowerCase().substr(0, 3)];
879
+ let current = new Date(start);
880
+ current.setDate(current.getDate() + ((day - current.getDay() + 7) % 7));
881
+ while (current < new Date(end)) {
882
+ result.push(new Date(+current));
883
+ current.setDate(current.getDate() + 7);
884
+ }
885
+ return result;
886
+ }
887
+ getAllSeviceApiJson(apiJsonObject) {
888
+ let service_api;
889
+ service_api = {
890
+ requestId: apiJsonObject.requestId,
891
+ filter: {
892
+ conditionGroup: {
893
+ connector: "and",
894
+ conditions: [
895
+ {
896
+ sourceName: "startDate",
897
+ targetName: "record_date",
898
+ operator: "greaterThanOrEqualsTo",
899
+ type: "string",
900
+ value: apiJsonObject.startDate,
901
+ enrichClz: "com.gamma.components.apiautomation.enrichment.ApiGenericEnrichment",
902
+ enrichMethod: "convertNarrowStringToShortString",
903
+ },
904
+ {
905
+ sourceName: "endDate",
906
+ targetName: "record_date",
907
+ operator: "lessThanOrEqualsTo",
908
+ type: "string",
909
+ value: apiJsonObject.endDate,
910
+ enrichClz: "com.gamma.components.apiautomation.enrichment.ApiGenericEnrichment",
911
+ enrichMethod: "convertNarrowStringToShortString",
912
+ },
913
+ ],
914
+ },
915
+ },
916
+ };
917
+ if (apiJsonObject.srvType != undefined || apiJsonObject.srvType != null) {
918
+ service_api.filter.conditionGroup.conditions.push({
919
+ sourceName: "srvType",
920
+ targetName: "srv_type",
921
+ operator: apiJsonObject.srvTypeOperator,
922
+ type: "string",
923
+ value: apiJsonObject.srvType,
924
+ });
925
+ }
926
+ if (apiJsonObject.recordType != undefined || apiJsonObject.recordType != null) {
927
+ service_api.filter.conditionGroup.conditions.push({
928
+ "sourceName": "recordType",
929
+ "targetName": "record_type",
930
+ "operator": "equals",
931
+ "type": "string",
932
+ "value": apiJsonObject.recordType
933
+ });
934
+ }
935
+ if (apiJsonObject.sourceValue != undefined ||
936
+ apiJsonObject.sourceValue != null) {
937
+ service_api.filter.conditionGroup.conditions.push({
938
+ sourceName: "source",
939
+ targetName: "source",
940
+ operator: "equals",
941
+ type: "string",
942
+ value: apiJsonObject.sourceValue,
943
+ });
944
+ }
945
+ if (apiJsonObject.inTrunkValue != undefined ||
946
+ apiJsonObject.inTrunkValue != null) {
947
+ service_api.filter.conditionGroup.conditions.push({
948
+ sourceName: "inTrunk",
949
+ targetName: "in_trunk",
950
+ operator: "equals",
951
+ type: "string",
952
+ value: apiJsonObject.inTrunkValue,
953
+ });
954
+ }
955
+ if (apiJsonObject.outTrunkValue != undefined ||
956
+ apiJsonObject.outTrunkValue != null) {
957
+ service_api.filter.conditionGroup.conditions.push({
958
+ sourceName: "outTrunk",
959
+ targetName: "out_trunk",
960
+ operator: "equals",
961
+ type: "string",
962
+ value: apiJsonObject.outTrunkValue,
963
+ });
964
+ }
965
+ if (apiJsonObject.eventType != undefined ||
966
+ apiJsonObject.eventType != null) {
967
+ service_api.filter.conditionGroup.conditions.push({
968
+ sourceName: "eventTypeKey",
969
+ targetName: "event_type",
970
+ operator: apiJsonObject.eventType.length > 1 ? "in" : "equals",
971
+ type: "string",
972
+ value: apiJsonObject.eventType,
973
+ });
974
+ }
975
+ if (apiJsonObject.event != undefined ||
976
+ apiJsonObject.event != null) {
977
+ service_api.filter.conditionGroup.conditions.push({
978
+ "sourceName": "event_type",
979
+ "targetName": "event_type",
980
+ "operator": "equals",
981
+ "type": "string",
982
+ "value": apiJsonObject.event
983
+ });
984
+ }
985
+ if (apiJsonObject.direction != undefined ||
986
+ apiJsonObject.direction != null) {
987
+ service_api.filter.conditionGroup.conditions.push({
988
+ sourceName: "direction",
989
+ targetName: "direction",
990
+ operator: "equals",
991
+ type: "string",
992
+ value: apiJsonObject.direction,
993
+ });
994
+ }
995
+ if (apiJsonObject.country != undefined || apiJsonObject.country != null) {
996
+ service_api.filter.conditionGroup.conditions.push({
997
+ sourceName: "country",
998
+ targetName: "country",
999
+ operator: "equals",
1000
+ type: "string",
1001
+ value: apiJsonObject.country,
1002
+ });
1003
+ }
1004
+ if (apiJsonObject.apn != undefined || apiJsonObject.apn != null) {
1005
+ service_api.filter.conditionGroup.conditions.push({
1006
+ sourceName: "apn",
1007
+ targetName: "apn",
1008
+ operator: "equals",
1009
+ type: "string",
1010
+ value: apiJsonObject.apn,
1011
+ });
1012
+ }
1013
+ if (apiJsonObject.nwCallType != undefined ||
1014
+ apiJsonObject.nwCallType != null) {
1015
+ service_api.filter.conditionGroup.conditions.push({
1016
+ sourceName: "nwCallType",
1017
+ targetName: "nw_call_type",
1018
+ operator: "equals",
1019
+ type: "string",
1020
+ value: apiJsonObject.nwCallType,
1021
+ });
1022
+ }
1023
+ if (apiJsonObject.ratingGroup != undefined ||
1024
+ apiJsonObject.ratingGroup != null) {
1025
+ service_api.filter.conditionGroup.conditions.push({
1026
+ sourceName: "ratingGroup",
1027
+ targetName: "rating_group",
1028
+ operator: "equals",
1029
+ type: "string",
1030
+ value: apiJsonObject.ratingGroup,
1031
+ });
1032
+ }
1033
+ if (apiJsonObject.terminationValue != undefined ||
1034
+ apiJsonObject.terminationValue != null) {
1035
+ service_api.filter.conditionGroup.conditions.push({
1036
+ sourceName: "terminationCode",
1037
+ targetName: "term_code",
1038
+ operator: "notequals",
1039
+ type: "string",
1040
+ value: apiJsonObject.terminationValue,
1041
+ });
1042
+ }
1043
+ if (apiJsonObject.cellIdValue != undefined ||
1044
+ apiJsonObject.cellIdValue != null) {
1045
+ service_api.filter.conditionGroup.conditions.push({
1046
+ sourceName: "cellId",
1047
+ targetName: "cell_id",
1048
+ operator: "notequals",
1049
+ type: "string",
1050
+ value: apiJsonObject.cellIdValue,
1051
+ });
1052
+ }
1053
+ return service_api;
1054
+ }
1055
+ primeryRendomeId(length) {
1056
+ let mask = "";
1057
+ mask += "0123456789";
1058
+ let result = "";
1059
+ for (var i = length; i > 0; --i)
1060
+ result += mask[Math.round(Math.random() * (mask.length - 1))];
1061
+ return result;
1062
+ }
1063
+ chartTooltip(a, b, c, d) {
1064
+ return '<table width=100% height=30 border=0 style=\'font-size: 13px\'>' +
1065
+ '<tr><td style=\'text-align: left; color: white\'> ' + a + ':' + b + '</td></tr>' +
1066
+ '<tr><td style=\'text-align: left; color: white; padding-top: 5px\'> ' + c + ':' + d + '</td></tr>' +
1067
+ '</table>';
1068
+ }
1069
+ convertToTitleCase(value) {
1070
+ const words = value.split(/(?=[A-Z])|_/);
1071
+ const capitalizedWords = words.map(word => word.charAt(0).toUpperCase() + word.slice(1));
1072
+ const result = capitalizedWords.join(' ');
1073
+ return result;
1074
+ }
1075
+ formatKeyValuePairs(keys, values) {
1076
+ if (keys.length !== values.length) {
1077
+ throw new Error('Keys and values arrays must have the same length');
1078
+ }
1079
+ const formattedPairs = [];
1080
+ for (let i = 0; i < keys.length; i++) {
1081
+ const key = this.convertToTitleCase(keys[i]);
1082
+ const value = values[i];
1083
+ formattedPairs.push(`${key} = ${value}`);
1084
+ }
1085
+ const result = formattedPairs.join(' | ');
1086
+ return result;
1087
+ }
1088
+ getValuesByKey(obj, keys) {
1089
+ const values = [];
1090
+ for (const key of keys) {
1091
+ if (key in obj) {
1092
+ values.push(obj[key]);
1093
+ }
1094
+ else {
1095
+ values.push('');
1096
+ }
1097
+ }
1098
+ return values;
1099
+ }
1100
+ transformHeaderAsKeyName(mainobj) {
1101
+ return Object.keys(mainobj).map(key => {
1102
+ return {
1103
+ visible: true,
1104
+ dataField: key,
1105
+ caption: key
1106
+ };
1107
+ });
1108
+ }
1109
+ formatDecimalValuesForCdrDataTable(dataSource) {
1110
+ return dataSource.map(item => {
1111
+ let newItem = {};
1112
+ Object.keys(item).forEach(key => {
1113
+ let value = item[key];
1114
+ let numValue = Number(value);
1115
+ if (!isNaN(numValue)) {
1116
+ if (numValue % 1 !== 0) {
1117
+ newItem[key] = this.reformatNumberWithThousandSeparatorV3(numValue, 2);
1118
+ }
1119
+ else {
1120
+ newItem[key] = value;
1121
+ }
1122
+ }
1123
+ else {
1124
+ newItem[key] = value;
1125
+ }
1126
+ });
1127
+ return newItem;
1128
+ });
1129
+ }
1130
+ generateSampleData(startDate, endDate, fields) {
1131
+ let dataset = [];
1132
+ let currentDate = moment(startDate);
1133
+ const endDateMoment = moment(endDate);
1134
+ while (currentDate <= endDateMoment) {
1135
+ let record = {};
1136
+ for (const field of fields) {
1137
+ if (field === 'recordDate') {
1138
+ record[field] = currentDate.format('YYYY-MM-DD');
1139
+ }
1140
+ else {
1141
+ record[field] = this.getRendomNumberWithdecimals(3, 0);
1142
+ }
1143
+ }
1144
+ dataset.push(record);
1145
+ currentDate = currentDate.add(1, 'days');
1146
+ }
1147
+ return dataset;
1148
+ }
1149
+ getRendomNumberWithdecimals(length, exp) {
1150
+ let mask = "";
1151
+ mask += "0123456789";
1152
+ let result = "";
1153
+ for (var i = length; i > 0; --i)
1154
+ result += mask[Math.round(Math.random() * (mask.length - 1))];
1155
+ return this.reformatNumberWithThousandSeparatorV4(result, exp);
1156
+ }
1157
+ formatTimestamp(timestamp) {
1158
+ const numericTimestamp = parseInt(timestamp, 10);
1159
+ return moment(numericTimestamp).format('dddd, DD MMMM YYYY HH:mm:ss.SSS [GMT]ZZ');
1160
+ }
1161
+ formatDurationFromMilisecond(milliseconds) {
1162
+ let totalSeconds = Math.floor(milliseconds / 1000);
1163
+ let seconds = totalSeconds % 60;
1164
+ let totalMinutes = Math.floor(totalSeconds / 60);
1165
+ let minutes = totalMinutes % 60;
1166
+ let hours = Math.floor(totalMinutes / 60);
1167
+ let result = [];
1168
+ if (hours > 0) {
1169
+ result.push(`${hours} hour${hours > 1 ? 's' : ''}`);
1170
+ }
1171
+ if (minutes > 0) {
1172
+ result.push(`${minutes} minute${minutes > 1 ? 's' : ''}`);
1173
+ }
1174
+ if (seconds > 0 || result.length === 0) {
1175
+ result.push(`${seconds} second${seconds > 1 ? 's' : ''}`);
1176
+ }
1177
+ return result.join(' ');
1178
+ }
1179
+ removeDuplicates(jobArray, context) {
1180
+ const seen = new Set();
1181
+ return jobArray.filter(item => {
1182
+ const duplicate = seen.has(item[context]);
1183
+ seen.add(item[context]);
1184
+ return !duplicate;
1185
+ });
1186
+ }
1187
+ convertString(input) {
1188
+ let result = input
1189
+ .replace(/_/g, ' ')
1190
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
1191
+ .replace(/\b([a-z])/g, function (match) {
1192
+ return match.toUpperCase();
1193
+ });
1194
+ result = result.replace(/([A-Z]{2,})/g, function (match) {
1195
+ return match.toUpperCase();
1196
+ });
1197
+ return result;
1198
+ return result;
1199
+ }
1200
+ }
1201
+ CommonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, deps: [{ token: i1.HttpClient }, { token: i2.ToastrService }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
1202
+ CommonService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, providedIn: "root" });
1203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, decorators: [{
1204
+ type: Injectable,
1205
+ args: [{ providedIn: "root" }]
1206
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ToastrService }, { type: i3.DomSanitizer }]; } });
1207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sTUFBTSxDQUFDO0FBRWQsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3JDLE1BQU0sT0FBTyxhQUFhO0lBcUZ0QixZQUFvQixJQUFnQixFQUFVLE1BQXFCLEVBQVUsU0FBdUI7UUFBaEYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBbkZwRyx5QkFBb0IsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RSx1QkFBa0IsR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsdUJBQWtCLEdBQUcsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDL0QsNkJBQXdCLEdBQUcsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFJeEQsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBRTNCLG1DQUE4QixHQUFHLE1BQU0sQ0FBQztRQUMvQyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFNekIsa0JBQWEsR0FBRyx1REFBdUQsQ0FBQztRQUtqRSxtQkFBYyxHQUNqQixpTkFBaU4sQ0FBQztRQUMvTSxxQkFBZ0IsR0FDbkIsaU5BQWlOLENBQUM7UUFDL00seUJBQW9CLEdBQ3ZCLHFVQUFxVSxDQUFDO1FBQ25VLGlCQUFZLEdBQ2Ys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QUFRO1lBQ1IsUUFBUSxDQUNYLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHO1FBQ3RCLElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRTtZQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFDRCxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFFWCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDN0QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUdELEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUczRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBRztR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RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUdELGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU9ELGFBQWEsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxNQUFNLEdBQUcsS0FBSzthQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7YUFDbkMsT0FBTyxDQUFDLFlBQVksRUFBRSxVQUFVLEtBQUs7WUFDbEMsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsVUFBVSxLQUFLO1lBQ25ELE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7UUFFZCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOzswR0EvL0NRLGFBQWE7OEdBQWIsYUFBYSxjQURBLE1BQU07MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgXCJyeGpzXCI7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSBcIm5neC10b2FzdHJcIjtcbmltcG9ydCBtb21lbnQgZnJvbSAnLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG4vLyBkZWNsYXJlIGxldCAkO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XG4gICAga3BpTGlzdERhdGFPYmplY3Q6IGFueTtcbiAgICBHX0RFRkFVTFRfU1RBUlRfREFURSA9IG1vbWVudCgpLnN1YnRyYWN0KFwiMzBcIiwgXCJkYXlzXCIpLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgR19ERUZBVUxUX0VORF9EQVRFID0gbW9tZW50KCkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICBkZWZhdWx0Q3VycmVudERhdGUgPSBtb21lbnQoKS5mb3JtYXQoXCJZWVlZLU1NLUREX2hoOm1tOnNzOlNTXCIpO1xuICAgIGRlZmF1bHRDdXJyZW50RGF0ZU1pbGxpcyA9IG1vbWVudCgpLmZvcm1hdChcIllZWVlNTUREaGhtbXNzU1NcIik7XG4gICAgZ2xvYmFsX2xvYWRpbmc6IGFueTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRPcGVyYXRvcjogYW55O1xuICAgIHB1YmxpYyBLcGlJZDogYW55O1xuICAgIHB1YmxpYyBrcGlVcmxPYmplY3RDb250YWluZXIgPSBbXTtcbiAgICBwdWJsaWMgYWxsS3BpYnJvd3NlckRldGFpbENvbnRhaW5lcjogYW55O1xuICAgIHB1YmxpYyBHbE9CQUxfQVVUT19SRUxPQURJTkdfVElNRV9TRVQgPSAzMDAwMDA7XG4gICAgYnJlYWRDdW1ic0xpc3RBcnJheSA9IFtdO1xuICAgIGJyZWFkQ3VtYnNMaXN0SWQ6IGFueTtcbiAgICBwdWJsaWMgY3VycmVudFVybDogYW55O1xuICAgIGdsb2JhbF9rcGlfbmFtZTogYW55O1xuICAgIC8vIHNlbGVjdFBpY2tlclJlZnJlc2ggPSAkKCcuc2VsZWN0cGlja2VyJykuc2VsZWN0cGlja2VyKCdyZWZyZXNoJyk7XG4gICAgLy8gc2VsZWN0UGlja2VyRGVzdG9yeSA9IFwiJCgnLnNlbGVjdHBpY2tlcicpLnNlbGVjdHBpY2tlcignZGVzdHJveScpXCI7XG4gICAgZ2xvYmFsRG9jTGluayA9IFwiaHR0cDovLzIwMy4yMTUuMzMuMjIyOjMzMDAxL3Byb2R1Y3QvUHJvbnRvL2twaS9SUzIwMDJcIjtcbiAgICBtYXBDaGFydERldGFpbEhvbGRlciE6IG9iamVjdDtcbiAgICBmdXNpb25UaGVtZU5hbWU6IGFueTtcblxuICAgIC8vYnV0dG9ucyBzdGFydFxuICAgIHB1YmxpYyBidG5QcmltYXJ5Qmx1ZSA9XG4gICAgICAgIFwidGV4dC13aGl0ZSBiZy1ibHVlLTcwMCBob3ZlcjpiZy1ibHVlLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ibHVlLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS0yLjUgbXItMiBtYi0yIGRhcms6YmctYmx1ZS02MDAgZGFyazpob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZGFyazpmb2N1czpyaW5nLWJsdWUtODAwXCI7XG4gICAgcHVibGljIGJ0blByaW1hcnlCbHVlU20gPVxuICAgICAgICBcInRleHQtd2hpdGUgYmctYmx1ZS03MDAgaG92ZXI6YmctYmx1ZS04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctYmx1ZS0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTMgcHktMS41IG1yLTIgbWItMiBkYXJrOmJnLWJsdWUtNjAwIGRhcms6aG92ZXI6YmctYmx1ZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGRhcms6Zm9jdXM6cmluZy1ibHVlLTgwMFwiO1xuICAgIHB1YmxpYyBidG5TZWNvbmRhcnlBbHRlcm5ldCA9XG4gICAgICAgIFwicHktMi41IHB4LTUgbXItMiBtYi0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBmb2N1czpvdXRsaW5lLW5vbmUgYmctd2hpdGUgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJnLWdyYXktMTAwIGhvdmVyOnRleHQtYmx1ZS03MDAgZm9jdXM6ei0xMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmF5LTIwMCBkYXJrOmZvY3VzOnJpbmctZ3JheS03MDAgZGFyazpiZy1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS00MDAgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpob3Zlcjp0ZXh0LXdoaXRlIGRhcms6aG92ZXI6YmctZ3JheS03MDBcIjtcbiAgICBwdWJsaWMgQnRuRGFya0JsYWNrID1cbiAgICAgICAgXCJ0ZXh0LXdoaXRlIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktOTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmF5LTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS0yLjUgbXItMiBtYi0yIGRhcms6YmctZ3JheS04MDAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCBkYXJrOmZvY3VzOnJpbmctZ3JheS03MDAgZGFyazpib3JkZXItZ3JheS03MDBcIjtcbiAgICBwdWJsaWMgQnRuTGlnaHRXaGl0ZSA9XG4gICAgICAgIFwidGV4dC1ncmF5LTkwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGZvY3VzOm91dGxpbmUtbm9uZSBob3ZlcjpiZy1ncmF5LTEwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmF5LTIwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS0yLjUgbXItMiBtYi0yIGRhcms6YmctZ3JheS04MDAgZGFyazp0ZXh0LXdoaXRlIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6aG92ZXI6YmctZ3JheS03MDAgZGFyazpob3Zlcjpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpyaW5nLWdyYXktNzAwXCI7XG4gICAgcHVibGljIGJ0blN1Y2Nlc3NHcmVlbiA9XG4gICAgICAgIFwiZm9jdXM6b3V0bGluZS1ub25lIHRleHQtd2hpdGUgYmctZ3JlZW4tNzAwIGhvdmVyOmJnLWdyZWVuLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmVlbi0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTUgcHktMi41IG1yLTIgbWItMiBkYXJrOmJnLWdyZWVuLTYwMCBkYXJrOmhvdmVyOmJnLWdyZWVuLTcwMCBkYXJrOmZvY3VzOnJpbmctZ3JlZW4tODAwXCI7XG4gICAgcHVibGljIGJ0bkRhbmdlclJlZCA9XG4gICAgICAgIFwiZm9jdXM6b3V0bGluZS1ub25lIHRleHQtd2hpdGUgYmctcmVkLTcwMCBob3ZlcjpiZy1yZWQtODAwIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLXJlZC0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTUgcHktMi41IG1yLTIgbWItMiBkYXJrOmJnLXJlZC02MDAgZGFyazpob3ZlcjpiZy1yZWQtNzAwIGRhcms6Zm9jdXM6cmluZy1yZWQtOTAwXCI7XG4gICAgcHVibGljIGJ0bkRhbmdlclJlZFNtID1cbiAgICAgICAgXCJmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC13aGl0ZSBiZy1yZWQtNzAwIGhvdmVyOmJnLXJlZC04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctcmVkLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtMyBweS0xLjUgbXItMiBtYi0yIGRhcms6YmctcmVkLTYwMCBkYXJrOmhvdmVyOmJnLXJlZC03MDAgZGFyazpmb2N1czpyaW5nLXJlZC05MDBcIjtcbiAgICBwdWJsaWMgYnRuV2FybmluZ1llbGxvdyA9XG4gICAgICAgIFwiZm9jdXM6b3V0bGluZS1ub25lIHRleHQtYmxhY2sgYmcteWVsbG93LTQwMCBob3ZlcjpiZy15ZWxsb3ctNTAwIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLXllbGxvdy0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTUgcHktMi41IG1yLTIgbWItMiBkYXJrOmZvY3VzOnJpbmcteWVsbG93LTkwMFwiO1xuICAgIHB1YmxpYyBidG5PdGhlcnNQdXJwbGUgPVxuICAgICAgICBcImZvY3VzOm91dGxpbmUtbm9uZSB0ZXh0LXdoaXRlIGJnLXB1cnBsZS03MDAgaG92ZXI6YmctcHVycGxlLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1wdXJwbGUtMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQgdGV4dC1zbSBweC01IHB5LTIuNSBtYi0yIGRhcms6YmctcHVycGxlLTYwMCBkYXJrOmhvdmVyOmJnLXB1cnBsZS03MDAgZGFyazpmb2N1czpyaW5nLXB1cnBsZS05MDBcIjtcbiAgICBwdWJsaWMgaW5wdXRPbmUgPSBcImJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWdyYXktOTAwIHRleHQtc20gcm91bmRlZC1sZyBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBwLTIuNSBkYXJrOmJnLWdyYXktNzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6cGxhY2Vob2xkZXItZ3JheS00MDAgZGFyazp0ZXh0LXdoaXRlIGRhcms6Zm9jdXM6cmluZy1ibHVlLTUwMCBkYXJrOmZvY3VzOmJvcmRlci1ibHVlLTUwMFwiO1xuICAgIC8vYnV0dG9ucyBlbmRcblxuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLVN1Y2Nlc3MgL2dyZWVuIEJ1dHRvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBwdWJsaWMgYnRuX3N1Y2Nlc3NfbGcgPSBcImN1cnNvci1wb2ludGVyIGZvY3VzOm91dGxpbmUtbm9uZSB0ZXh0LXdoaXRlIGJnLWdyZWVuLTcwMCBob3ZlcjpiZy1ncmVlbi04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctZ3JlZW4tMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQgdGV4dC1zbSBweC01IHB5LTUgbXItMiAgZGFyazpiZy1ncmVlbi02MDAgZGFyazpob3ZlcjpiZy1ncmVlbi03MDAgZGFyazpmb2N1czpyaW5nLWdyZWVuLTgwMFwiO1xuICAgIHB1YmxpYyBidG5fc3VjY2Vzc19tZCA9IFwiY3Vyc29yLXBvaW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIHRleHQtd2hpdGUgYmctZ3JlZW4tNzAwIGhvdmVyOmJnLWdyZWVuLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmVlbi0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTMgcHktMyBtci0yICBkYXJrOmJnLWdyZWVuLTYwMCBkYXJrOmhvdmVyOmJnLWdyZWVuLTcwMCBkYXJrOmZvY3VzOnJpbmctZ3JlZW4tODAwXCI7XG4gICAgcHVibGljIGJ0bl9zdWNjZXNzX3NtID0gXCJjdXJzb3ItcG9pbnRlciBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC13aGl0ZSBiZy1ncmVlbi03MDAgaG92ZXI6YmctZ3JlZW4tODAwIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLWdyZWVuLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtMSBweS0xIG1yLTIgIGRhcms6YmctZ3JlZW4tNjAwIGRhcms6aG92ZXI6YmctZ3JlZW4tNzAwIGRhcms6Zm9jdXM6cmluZy1ncmVlbi04MDBcIjtcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUHJpbWFyeS8gQmx1ZSBCdXR0b25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIGJ0bl9wcmltYXJ5X2xnID0gXCJjdXJzb3ItcG9pbnRlciB0ZXh0LXdoaXRlIGJnLWJsdWUtNzAwIGhvdmVyOmJnLWJsdWUtODAwIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLWJsdWUtMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQgdGV4dC1zbSBweC01IHB5LTUgbXItMiBkYXJrOmJnLWJsdWUtNjAwIGRhcms6aG92ZXI6YmctYmx1ZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGRhcms6Zm9jdXM6cmluZy1ibHVlLTgwMFwiO1xuICAgIHB1YmxpYyBidG5fcHJpbWFyeV9tZCA9IFwiY3Vyc29yLXBvaW50ZXIgdGV4dC13aGl0ZSBiZy1ibHVlLTcwMCBob3ZlcjpiZy1ibHVlLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ibHVlLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtMyBweS0zIG1yLTIgZGFyazpiZy1ibHVlLTYwMCBkYXJrOmhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS04MDBcIjtcbiAgICBwdWJsaWMgYnRuX3ByaW1hcnlfc20gPSBcImN1cnNvci1wb2ludGVyIHRleHQtd2hpdGUgYmctYmx1ZS03MDAgaG92ZXI6YmctYmx1ZS04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctYmx1ZS0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTEgcHktMSBtci0yIGRhcms6YmctYmx1ZS02MDAgZGFyazpob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZGFyazpmb2N1czpyaW5nLWJsdWUtODAwXCI7XG4gICAgcHVibGljIGJhZGdlX3ByaW1hcnlfc20gPSBcImN1cnNvci1wb2ludGVyIHRleHQtd2hpdGUgYmctYmx1ZS03MDAgaG92ZXI6YmctYmx1ZS04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctYmx1ZS0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIGlubGluZSBweC0wLjUgcHktMC41IG1yLTEgZGFyazpiZy1ibHVlLTYwMCBkYXJrOmhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS04MDBcIjtcblxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGFuZ2VyLyBSZWQgQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHB1YmxpYyBidG5fZGFuZ2VyX2xnID0gXCJjdXJzb3ItcG9pbnRlciBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC13aGl0ZSBiZy1yZWQtNzAwIGhvdmVyOmJnLXJlZC04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctcmVkLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS01IG1yLTIgZGFyazpiZy1yZWQtNjAwIGRhcms6aG92ZXI6YmctcmVkLTcwMCBkYXJrOmZvY3VzOnJpbmctcmVkLTkwMFwiO1xuICAgIHB1YmxpYyBidG5fZGFuZ2VyX21kID0gXCJjdXJzb3ItcG9pbnRlciBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC13aGl0ZSBiZy1yZWQtNzAwIGhvdmVyOmJnLXJlZC04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctcmVkLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtMyBweS0zIG1yLTIgZGFyazpiZy1yZWQtNjAwIGRhcms6aG92ZXI6YmctcmVkLTcwMCBkYXJrOmZvY3VzOnJpbmctcmVkLTkwMFwiO1xuICAgIHB1YmxpYyBidG5fZGFuZ2VyX3NtID0gXCJjdXJzb3ItcG9pbnRlciBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC13aGl0ZSBiZy1yZWQtNzAwIGhvdmVyOmJnLXJlZC04MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctcmVkLTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtMSBweS0xIG1yLTIgZGFyazpiZy1yZWQtNjAwIGRhcms6aG92ZXI6YmctcmVkLTcwMCBkYXJrOmZvY3VzOnJpbmctcmVkLTkwMFwiO1xuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVdhcm5pbmcvIFllbGxvdyBCdXR0b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIGJ0bl93YXJuaW5nX2xnID0gXCJjdXJzb3ItcG9pbnRlciBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC1ibGFjayBiZy15ZWxsb3ctNDAwIGhvdmVyOmJnLXllbGxvdy01MDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmcteWVsbG93LTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS01IG1yLTIgZGFyazpmb2N1czpyaW5nLXllbGxvdy05MDBcIjtcbiAgICBwdWJsaWMgYnRuX3dhcm5pbmdfbWQgPSBcImN1cnNvci1wb2ludGVyIGZvY3VzOm91dGxpbmUtbm9uZSB0ZXh0LWJsYWNrIGJnLXllbGxvdy00MDAgaG92ZXI6YmcteWVsbG93LTUwMCBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy15ZWxsb3ctMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQgdGV4dC1zbSBweC0zIHB5LTMgbXItMiBkYXJrOmZvY3VzOnJpbmcteWVsbG93LTkwMFwiO1xuICAgIHB1YmxpYyBidG5fd2FybmluZ19zbSA9IFwiY3Vyc29yLXBvaW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIHRleHQtYmxhY2sgYmcteWVsbG93LTQwMCBob3ZlcjpiZy15ZWxsb3ctNTAwIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLXllbGxvdy0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTEgcHktMSBtci0yIGRhcms6Zm9jdXM6cmluZy15ZWxsb3ctOTAwXCI7XG5cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXJlc2V0LyBHcmF5IEJ1dHRvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIGJ0bl9kYXJrX2xnID0gXCJjdXJzb3ItcG9pbnRlciB0ZXh0LXdoaXRlIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktOTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmF5LTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS01IG1yLTIgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmhvdmVyOmJnLWdyYXktNzAwIGRhcms6Zm9jdXM6cmluZy1ncmF5LTcwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiO1xuICAgIHB1YmxpYyBidG5fZGFya19tZCA9IFwiY3Vyc29yLXBvaW50ZXIgdGV4dC13aGl0ZSBiZy1ncmF5LTgwMCBob3ZlcjpiZy1ncmF5LTkwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctZ3JheS0zMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTMgcHktMyBtci0yIGRhcms6YmctZ3JheS04MDAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCBkYXJrOmZvY3VzOnJpbmctZ3JheS03MDAgZGFyazpib3JkZXItZ3JheS03MDBcIjtcbiAgICBwdWJsaWMgYnRuX2Rhcmtfc20gPSBcImN1cnNvci1wb2ludGVyIHRleHQtd2hpdGUgYmctZ3JheS04MDAgaG92ZXI6YmctZ3JheS05MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLWdyYXktMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQgdGV4dC1zbSBweC0xIHB5LTEgbXItMiBkYXJrOmJnLWdyYXktODAwIGRhcms6aG92ZXI6YmctZ3JheS03MDAgZGFyazpmb2N1czpyaW5nLWdyYXktNzAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXCI7XG5cblxuICAgIHB1YmxpYyBidG5fbGlnaHRfbGcgPSBcIm1zLTMgdGV4dC1ncmF5LTUwMCBiZy13aGl0ZSBob3ZlcjpiZy1ncmF5LTEwMCBmb2N1czpyaW5nLTQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctYmx1ZS0zMDAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHRleHQtc20gZm9udC1tZWRpdW0gcHgtNSBweS01IGhvdmVyOnRleHQtZ3JheS05MDAgZm9jdXM6ei0xMCBkYXJrOmJnLWdyYXktNzAwIGRhcms6dGV4dC1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTUwMCBkYXJrOmhvdmVyOnRleHQtd2hpdGUgZGFyazpob3ZlcjpiZy1ncmF5LTYwMCBkYXJrOmZvY3VzOnJpbmctZ3JheS02MDBcIjtcbiAgICBwdWJsaWMgYnRuX2xpZ2h0X21kID0gXCJtcy0zIHRleHQtZ3JheS01MDAgYmctd2hpdGUgaG92ZXI6YmctZ3JheS0xMDAgZm9jdXM6cmluZy00IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLWJsdWUtMzAwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHB4LTMgcHktMyBob3Zlcjp0ZXh0LWdyYXktOTAwIGZvY3VzOnotMTAgZGFyazpiZy1ncmF5LTcwMCBkYXJrOnRleHQtZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS01MDAgZGFyazpob3Zlcjp0ZXh0LXdoaXRlIGRhcms6aG92ZXI6YmctZ3JheS02MDAgZGFyazpmb2N1czpyaW5nLWdyYXktNjAwXCI7XG4gICAgcHVibGljIGJ0bl9saWdodF9zbSA9IFwibXMtMyB0ZXh0LWdyYXktNTAwIGJnLXdoaXRlIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOnJpbmctNCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy1ibHVlLTMwMCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgdGV4dC1zbSBmb250LW1lZGl1bSBweC0xIHB5LTEgaG92ZXI6dGV4dC1ncmF5LTkwMCBmb2N1czp6LTEwIGRhcms6YmctZ3JheS03MDAgZGFyazp0ZXh0LWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNTAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZSBkYXJrOmhvdmVyOmJnLWdyYXktNjAwIGRhcms6Zm9jdXM6cmluZy1ncmF5LTYwMFwiO1xuXG5cbiAgICBwdWJsaWMgYnRuRGFya0JsYWNrID0gXCJjdXJzb3ItcG9pbnRlciB0ZXh0LXdoaXRlIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktOTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTQgZm9jdXM6cmluZy1ncmF5LTMwMCBmb250LW1lZGl1bSByb3VuZGVkIHRleHQtc20gcHgtNSBweS0yLjUgbXItMiBkYXJrOmJnLWdyYXktODAwIGRhcms6aG92ZXI6YmctZ3JheS03MDAgZGFyazpmb2N1czpyaW5nLWdyYXktNzAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXCI7XG4gICAgcHVibGljIGJ0bkxpZ2h0V2hpdGUgPSBcImN1cnNvci1wb2ludGVyIHRleHQtZ3JheS05MDAgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBmb2N1czpvdXRsaW5lLW5vbmUgaG92ZXI6YmctZ3JheS0xMDAgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctZ3JheS0yMDAgZm9udC1tZWRpdW0gcm91bmRlZCB0ZXh0LXNtIHB4LTUgcHktMi41IG1yLTIgIGRhcms6YmctZ3JheS04MDAgZGFyazp0ZXh0LXdoaXRlIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6aG92ZXI6YmctZ3JheS03MDAgZGFyazpob3Zlcjpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpyaW5nLWdyYXktNzAwXCI7XG4gICAgLy8gc21hbGwgYnV0dG9uXG4gICAgcHVibGljIGJ0blByaW1hcnlCbHVlX3NtID0gXCJjdXJzb3ItcG9pbnRlciB0ZXh0LXdoaXRlIGJnLWJsdWUtNzAwIGhvdmVyOmJnLWJsdWUtODAwIGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLWJsdWUtMzAwIGZvbnQtc21hbGwgcm91bmRlZCB0ZXh0LXNtIHB4LTIgcHktMS41IG1yLTIgZGFyazpiZy1ibHVlLTYwMCBkYXJrOmhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBkYXJrOmZvY3VzOnJpbmctYmx1ZS04MDBcIjtcblxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSwgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XG5cbiAgICBuZ09uSW5pdCgpIHsgfVxuXG4gICAgY2hhcnRSZW5kZXJOZXcoY2FwdGlvbjogYW55KSB7XG4gICAgICAgIGxldCBjaGFydHM6IGFueSA9IHt9O1xuICAgICAgICBjaGFydHNbXCJiYXNlRm9udFwiXSA9IFwiVmVyZGFuYVwiO1xuICAgICAgICBjaGFydHNbXCJjYXB0aW9uXCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzW1wic3ViQ2FwdGlvblwiXSA9IGNhcHRpb247XG4gICAgICAgIGNoYXJ0c1tcInN1YmNhcHRpb25Gb250Q29sb3JcIl0gPSBcIiNkNGQwZDBcIjtcbiAgICAgICAgY2hhcnRzW1wieEF4aXNOYW1lXCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzW1wieUF4aXNOYW1lXCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzW1wicFlBeGlzTmFtZVwiXSA9IFwiXCI7XG4gICAgICAgIGNoYXJ0c1tcInNZQXhpc05hbWVcIl0gPSBcIlwiO1xuICAgICAgICBjaGFydHNbXCJzaG93VmFsdWVzXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcIm51bWJlclByZWZpeFwiXSA9IFwiXCI7XG4gICAgICAgIGNoYXJ0c1tcInBhbGV0dGVDb2xvcnNcIl0gPVxuICAgICAgICAgICAgXCIjMWU4OGU1LCNmNDQzMzYsIzFhYWY1ZCwjMWZiNjIyLCM3ZTAwYjAsI0U3NEMzQywjQUFCN0I4LCNEMzU0MDAsIzI3Mzc0NiwjMTdBNTg5LCMyNzM3NDYsXCI7XG4gICAgICAgIGNoYXJ0c1tcInBsb3RHcmFkaWVudENvbG9yXCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzWydiZ0NvbG9yJ10gPSAnIzQyNDI0Mic7XG4gICAgICAgIGNoYXJ0c1tcIkJnQWxwaGFcIl0gPSBcIjEwMFwiO1xuICAgICAgICBjaGFydHNbXCJiYXNlRm9udENvbG9yXCJdID0gXCIjZmZmXCI7XG4gICAgICAgIGNoYXJ0c1tcImNhbnZhc0JnQWxwaGFcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wic2hvd0JvcmRlclwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJzaG93Q2FudmFzQm9yZGVyXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInVzZVBsb3RHcmFkaWVudENvbG9yXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInBsb3RCb3JkZXJBbHBoYVwiXSA9IFwiMTBcIjtcbiAgICAgICAgY2hhcnRzW1wibGVnZW5kQm9yZGVyQWxwaGFcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wibGVnZW5kQmdBbHBoYVwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJsZWdlbmRTaGFkb3dcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wic2hvd0hvdmVyRWZmZWN0XCJdID0gXCIxXCI7XG4gICAgICAgIGNoYXJ0c1tcInZhbHVlRm9udENvbG9yXCJdID0gXCIjMDAwMDAwXCI7XG4gICAgICAgIGNoYXJ0c1tcInJvdGF0ZVZhbHVlc1wiXSA9IFwiMVwiO1xuICAgICAgICBjaGFydHNbXCJwbGFjZVZhbHVlc0luc2lkZVwiXSA9IFwiMVwiO1xuICAgICAgICBjaGFydHNbXCJkaXZsaW5lQ29sb3JcIl0gPSBcIiM2Njk5Y2NcIjtcbiAgICAgICAgY2hhcnRzW1wiZGl2TGluZUlzRGFzaGVkXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcImRpdkxpbmVEYXNoTGVuXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcImRpdkxpbmVHYXBMZW5cIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wiZGl2TGluZUFscGhhXCJdID0gXCI2MFwiO1xuICAgICAgICBjaGFydHNbXCJzaG93QWx0ZXJuYXRlVkdyaWRDb2xvclwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbJ2NhbnZhc0JnQ29sb3InXSA9ICcjNDI0MjQyJztcbiAgICAgICAgY2hhcnRzW1wiY2FwdGlvbkZvbnRTaXplXCJdID0gXCIxMlwiO1xuICAgICAgICBjaGFydHNbXCJzdWJjYXB0aW9uRm9udFNpemVcIl0gPSBcIjEwXCI7XG4gICAgICAgIGNoYXJ0c1tcImV4cG9ydEVuYWJsZWRcIl0gPSBcIjFcIjtcbiAgICAgICAgY2hhcnRzW1wiZXhwb3J0Rm9ybWF0c1wiXSA9IFwiUE5HfEpQR1wiO1xuICAgICAgICBjaGFydHNbXCJleHBvcnRGaWxlTmFtZVwiXSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjaGFydHNbXCJzbGFudExhYmVsc1wiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJzaG93Q2FudmFzQm9yZGVyXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInNob3dBbHRlcm5hdGVIR3JpZENvbG9yXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInRvb2xUaXBDb2xvclwiXSA9IFwiI2ZmZmZmZlwiO1xuICAgICAgICBjaGFydHNbXCJ0b29sVGlwQm9yZGVyVGhpY2tuZXNzXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInRvb2xUaXBCZ0NvbG9yXCJdID0gXCIjMDAwMDAwXCI7XG4gICAgICAgIGNoYXJ0c1tcInRvb2xUaXBCZ0FscGhhXCJdID0gXCI4MFwiO1xuICAgICAgICBjaGFydHNbXCJ0b29sVGlwQm9yZGVyUmFkaXVzXCJdID0gXCIyXCI7XG4gICAgICAgIGNoYXJ0c1tcInRvb2xUaXBQYWRkaW5nXCJdID0gXCI1XCI7XG4gICAgICAgIGNoYXJ0c1tcIm91dENudkJhc2VGb250U2l6ZVwiXSA9IFwiOVwiO1xuICAgICAgICBjaGFydHNbXCJsYWJlbERpc3BsYXlcIl0gPSBcInJvdGF0ZVwiO1xuICAgICAgICBjaGFydHNbXCJkcmF3Q3Jvc3NMaW5lXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInRoZW1lXCJdID0gdGhpcy5mdXNpb25UaGVtZU5hbWU7XG4gICAgICAgIHJldHVybiBjaGFydHM7XG4gICAgfVxuXG4gICAgZ2V0TmV3bXNjb21iaWR5MmQocFlBeGlzTmFtZTogYW55LCBzWUF4aXNOYW1lOiBhbnkpIHtcbiAgICAgICAgbGV0IGNoYXJ0czogYW55ID0ge307XG4gICAgICAgIGNoYXJ0c1tcImJhc2VGb250XCJdID0gXCJWZXJkYW5hXCI7XG4gICAgICAgIGNoYXJ0c1tcImNhcHRpb25cIl0gPSBcIlwiO1xuICAgICAgICBjaGFydHNbXCJzdWJDYXB0aW9uXCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzW1wic3ViY2FwdGlvbkZvbnRDb2xvclwiXSA9IFwiI2Q0ZDBkMFwiO1xuICAgICAgICBjaGFydHNbXCJ4QXhpc05hbWVcIl0gPSBcIlwiO1xuICAgICAgICBjaGFydHNbXCJ5QXhpc05hbWVcIl0gPSBcIlwiO1xuICAgICAgICBjaGFydHNbXCJwWUF4aXNOYW1lXCJdID0gcFlBeGlzTmFtZTtcbiAgICAgICAgY2hhcnRzW1wic1lBeGlzTmFtZVwiXSA9IHNZQXhpc05hbWU7XG4gICAgICAgIGNoYXJ0c1tcInNob3dWYWx1ZXNcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wibnVtYmVyUHJlZml4XCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzW1wicGFsZXR0ZUNvbG9yc1wiXSA9XG4gICAgICAgICAgICBcIiMxZTg4ZTUsI2Y0NDMzNiwjMWFhZjVkLCNjZmUzMjAsIzdlMDBiMCwjRTc0QzNDLCNBQUI3QjgsI0QzNTQwMCwjMjczNzQ2LCMxN0E1ODksIzI3Mzc0NiwgXCI7XG4gICAgICAgIGNoYXJ0c1tcInBsb3RHcmFkaWVudENvbG9yXCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzWydiZ0NvbG9yJ10gPSAnIzFlMjkzYic7XG4gICAgICAgIGNoYXJ0c1tcIkJnQWxwaGFcIl0gPSBcIjEwMFwiO1xuICAgICAgICBjaGFydHNbXCJiYXNlRm9udENvbG9yXCJdID0gXCIjZmZmXCI7XG4gICAgICAgIGNoYXJ0c1tcInNob3dCb3JkZXJcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wic2hvd0NhbnZhc0JvcmRlclwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJ1c2VQbG90R3JhZGllbnRDb2xvclwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJwbG90Qm9yZGVyQWxwaGFcIl0gPSBcIjEwXCI7XG4gICAgICAgIGNoYXJ0c1tcImxlZ2VuZEJvcmRlckFscGhhXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcImxlZ2VuZEJnQWxwaGFcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wibGVnZW5kU2hhZG93XCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInNob3dIb3ZlckVmZmVjdFwiXSA9IFwiMVwiO1xuICAgICAgICBjaGFydHNbXCJ2YWx1ZUZvbnRDb2xvclwiXSA9IFwiIzAwMDAwMFwiO1xuICAgICAgICBjaGFydHNbXCJyb3RhdGVWYWx1ZXNcIl0gPSBcIjFcIjtcbiAgICAgICAgY2hhcnRzW1wicGxhY2VWYWx1ZXNJbnNpZGVcIl0gPSBcIjFcIjtcbiAgICAgICAgY2hhcnRzW1wiZGl2bGluZUNvbG9yXCJdID0gXCIjNjY5OWNjXCI7XG4gICAgICAgIGNoYXJ0c1tcImRpdkxpbmVJc0Rhc2hlZFwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJkaXZMaW5lRGFzaExlblwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJkaXZMaW5lR2FwTGVuXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcImRpdkxpbmVBbHBoYVwiXSA9IFwiNjBcIjtcbiAgICAgICAgY2hhcnRzW1wic2hvd0FsdGVybmF0ZVZHcmlkQ29sb3JcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzWydjYW52YXNCZ0NvbG9yJ10gPSAnIzFlMjkzYic7XG4gICAgICAgIGNoYXJ0c1tcImNhcHRpb25Gb250U2l6ZVwiXSA9IFwiMTBcIjtcbiAgICAgICAgY2hhcnRzW1wic3ViY2FwdGlvbkZvbnRTaXplXCJdID0gXCIxMFwiO1xuICAgICAgICBjaGFydHNbXCJleHBvcnRFbmFibGVkXCJdID0gXCIxXCI7XG4gICAgICAgIGNoYXJ0c1tcImV4cG9ydEZvcm1hdHNcIl0gPSBcIlBOR3xKUEdcIjtcbiAgICAgICAgY2hhcnRzW1wiZXhwb3J0RmlsZU5hbWVcIl0gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY2hhcnRzW1wibGFiZWxEaXNwbGF5XCJdID0gXCJcIjtcbiAgICAgICAgY2hhcnRzW1wic2xhbnRMYWJlbHNcIl0gPSBcIjBcIjtcbiAgICAgICAgY2hhcnRzW1wic2hvd0NhbnZhc0JvcmRlclwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJzaG93QWx0ZXJuYXRlSEdyaWRDb2xvclwiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJ0b29sVGlwQ29sb3JcIl0gPSBcIiNmZmZmZmZcIjtcbiAgICAgICAgY2hhcnRzW1widG9vbFRpcEJvcmRlclRoaWNrbmVzc1wiXSA9IFwiMFwiO1xuICAgICAgICBjaGFydHNbXCJ0b29sVGlwQmdDb2xvclwiXSA9IFwiIzAwMDAwMFwiO1xuICAgICAgICBjaGFydHNbXCJ0b29sVGlwQmdBbHBoYVwiXSA9IFwiODBcIjtcbiAgICAgICAgY2hhcnRzW1widG9vbFRpcEZvbnRTaXplXCJdID0gXCIxMlwiO1xuICAgICAgICBjaGFydHNbXCJ0b29sVGlwQm9yZGVyUmFkaXVzXCJdID0gXCIyXCI7XG4gICAgICAgIGNoYXJ0c1tcInRvb2xUaXBQYWRkaW5nXCJdID0gXCI1XCI7XG4gICAgICAgIGNoYXJ0c1tcImxhYmVsRGlzcGxheVwiXSA9IFwicm90YXRlXCI7XG4gICAgICAgIGNoYXJ0c1tcIm91dENudkJhc2VGb250U2l6ZVwiXSA9IFwiOVwiO1xuICAgICAgICBjaGFydHNbXCJkcmF3Q3Jvc3NMaW5lXCJdID0gXCIwXCI7XG4gICAgICAgIGNoYXJ0c1tcInRoZW1lXCJdID0gdGhpcy5mdXNpb25UaGVtZU5hbWU7XG5cbiAgICAgICAgcmV0dXJuIGNoYXJ0cztcbiAgICB9XG5cbiAgICAvLyBqc29uIHRvIGNzdiBjb252ZXJ0b3JcbiAgICBKU09OVG9DU1ZDb252ZXJ0b3IoSlNPTkRhdGEsIFJlcG9ydFRpdGxlLCBTaG93TGFiZWwpIHtcbiAgICAgICAgLy9JZiBKU09ORGF0YSBpcyBub3QgYW4gb2JqZWN0IHRoZW4gSlNPTi5wYXJzZSB3aWxsIHBhcnNlIHRoZSBKU09OIHN0cmluZyBpbiBhbiBPYmplY3RcbiAgICAgICAgbGV0IGFyckRhdGEgPSB0eXBlb2YgSlNPTkRhdGEgIT0gXCJvYmplY3RcIiA/IEpTT04ucGFyc2UoSlNPTkRhdGEpIDogSlNPTkRhdGE7XG5cbiAgICAgICAgbGV0IENTViA9IFwiXCI7XG4gICAgICAgIC8vU2V0IFJlcG9ydCB0aXRsZSBpbiBmaXJzdCByb3cgb3IgbGluZVxuXG4gICAgICAgIENTViArPSBSZXBvcnRUaXRsZSArIFwiXFxyXFxuXFxuXCI7XG5cbiAgICAgICAgLy9UaGlzIGNvbmRpdGlvbiB3aWxsIGdlbmVyYXRlIHRoZSBMYWJlbC9IZWFkZXJcbiAgICAgICAgaWYgKFNob3dMYWJlbCkge1xuICAgICAgICAgICAgbGV0IHJvdyA9IFwiXCI7XG5cbiAgICAgICAgICAgIC8vVGhpcyBsb29wIHdpbGwgZXh0cmFjdCB0aGUgbGFiZWwgZnJvbSAxc3QgaW5kZXggb2Ygb24gYXJyYXlcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4IGluIGFyckRhdGFbMF0pIHtcbiAgICAgICAgICAgICAgICAvL05vdyBjb252ZXJ0IGVhY2ggdmFsdWUgdG8gc3RyaW5nIGFuZCBjb21tYS1zZXByYXRlZFxuICAgICAgICAgICAgICAgIHJvdyArPSBpbmRleCArIFwiLFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByb3cgPSByb3cuc2xpY2UoMCwgLTEpO1xuXG4gICAgICAgICAgICAvL2FwcGVuZCBMYWJlbCByb3cgd2l0aCBsaW5lIGJyZWFrXG4gICAgICAgICAgICBDU1YgKz0gcm93ICsgXCJcXHJcXG5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vMXN0IGxvb3AgaXMgdG8gZXh0cmFjdCBlYWNoIHJvd1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyckRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByb3cgPSBcIlwiO1xuXG4gICAgICAgICAgICAvLzJuZCBsb29wIHdpbGwgZXh0cmFjdCBlYWNoIGNvbHVtbiBhbmQgY29udmVydCBpdCBpbiBzdHJpbmcgY29tbWEtc2VwcmF0ZWRcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4IGluIGFyckRhdGFbaV0pIHtcbiAgICAgICAgICAgICAgICByb3cgKz0gJ1wiJyArIGFyckRhdGFbaV1baW5kZXhdICsgJ1wiLCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvdy5zbGljZSgwLCByb3cubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgICAgIC8vYWRkIGEgbGluZSBicmVhayBhZnRlciBlYWNoIHJvd1xuICAgICAgICAgICAgQ1NWICs9IHJvdyArIFwiXFxyXFxuXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQ1NWID09IFwiXCIpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiSW52YWxpZCBkYXRhXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9HZW5lcmF0ZSBhIGZpbGUgbmFtZVxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBcInJlcG9ydF9cIjtcbiAgICAgICAgLy90aGlzIHdpbGwgcmVtb3ZlIHRoZSBibGFuay1zcGFjZXMgZnJvbSB0aGUgdGl0bGUgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiB1bmRlcnNjb3JlXG4gICAgICAgIGZpbGVOYW1lICs9IFJlcG9ydFRpdGxlLnJlcGxhY2UoLyAvZywgXCIgXCIpO1xuXG4gICAgICAgIC8vSW5pdGlhbGl6ZSBmaWxlIGZvcm1hdCB5b3Ugd2FudCBjc3Ygb3IgeGxzXG4gICAgICAgIGxldCB1cmkgPSBcImRhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwlRUYlQkIlQkZcIiArIGVuY29kZVVSSShDU1YpO1xuXG4gICAgICAgIC8vIE5vdyB0aGUgbGl0dGxlIHRyaWNreSBwYXJ0LlxuICAgICAgICAvLyB5b3UgY2FuIHVzZSBlaXRoZXI+PiB3aW5kb3cub3Blbih1cmkpO1xuICAgICAgICAvLyBidXQgdGhpcyB3aWxsIG5vdCB3b3JrIGluIHNvbWUgYnJvd3NlcnNcbiAgICAgICAgLy8gb3IgeW91IHdpbGwgbm90IGdldCB0aGUgY29ycmVjdCBmaWxlIGV4dGVuc2lvblxuXG4gICAgICAgIC8vdGhpcyB0cmljayB3aWxsIGdlbmVyYXRlIGEgdGVtcCA8YSAvPiB0YWdcbiAgICAgICAgbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgbGluay5ocmVmID0gdXJpO1xuXG4gICAgICAgIGlmIChSZXBvcnRUaXRsZSA9PT0gXCJEYXRhc291cmNlIE1pc3NpbmcgRmlsZXNcIikge1xuICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lICsgXCJfXCIgKyB0aGlzLmRlZmF1bHRDdXJyZW50RGF0ZU1pbGxpcyArIFwiLnR4dFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lICsgXCJfXCIgKyB0aGlzLmRlZmF1bHRDdXJyZW50RGF0ZU1pbGxpcyArIFwiLmNzdlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zZXQgdGhlIHZpc2liaWxpdHkgaGlkZGVuIHNvIGl0IHdpbGwgbm90IGVmZmVjdCBvbiB5b3VyIHdlYi1sYXlvdXRcblxuICAgICAgICAvL3RoaXMgcGFydCB3aWxsIGFwcGVuZCB0aGUgYW5jaG9yIHRhZyBhbmQgcmVtb3ZlIGl0IGFmdGVyIGF1dG9tYXRpYyBjbGlja1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuXG4gICAgLy8gaHRtbCBmb3IgY29sb3IgYmFyXG4gICAgY3JlYXRlSHRtbCh3aWR0aCwgZGF0YSwgY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICc8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lXCI+ICcgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJuby1wYWRkaW5nXCIgc3R5bGU9XCJmbG9hdDpsZWZ0OyB3aWR0aDogJyArXG4gICAgICAgICAgICB3aWR0aCArXG4gICAgICAgICAgICBcIiU7IGJhY2tncm91bmQtY29sb3I6IFwiICtcbiAgICAgICAgICAgIGNvbG9yICtcbiAgICAgICAgICAgIFwiOyBcIiArXG4gICAgICAgICAgICAnaGVpZ2h0OiAxNXB4OyBwb3NpdGlvbjogcmVsYXRpdmU7XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cIm5vLXBhZGRpbmcgYmFyXCIgc3R5bGU9XCJmbG9hdDogbGVmdFwiPicgK1xuICAgICAgICAgICAgZGF0YSArXG4gICAgICAgICAgICBcIjwvZGl2PlwiICtcbiAgICAgICAgICAgIFwiPC9kaXY+XCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBzY2FsZSBmb3IgY29sb3JiYXJcbiAgICBzY2FsZU51bWJlcihpbnB1dFksIHlNaW4sIHlNYXgsIHhNaW4sIHhNYXgpIHtcbiAgICAgICAgaWYgKHlNaW4gPT0geU1heCkge1xuICAgICAgICAgICAgaWYgKGlucHV0WSA9PSB5TWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHhNYXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geE1pbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwZXJjZW50ID0gKGlucHV0WSAtIHlNaW4pIC8gKHlNYXggLSB5TWluKTtcbiAgICAgICAgICAgIHJldHVybiBwZXJjZW50ICogKHhNYXggLSB4TWluKSArIHhNaW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aG91c2VuZCBzZXBhcmV0b3JcbiAgICBUaG91c2FuZFNlcGFyYXRvcih2YWx1ZSkge1xuICAgICAgICBpZiAoTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID4gMCAmJiB2YWx1ZSA8IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3IodmFsdWUpIHtcbiAgICAgICAgaWYgKE51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IDAgJiYgdmFsdWUgPCAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWMih2YWx1ZSwgZXhwKSB7XG4gICAgICAgIGlmIChleHAgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleHAgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiAwICYmIHZhbHVlIDwgMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdW5kT2ZmVGlsbFR3byh2YWx1ZSwgZXhwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZXhwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCBleHApIHtcblxuICAgICAgICBsZXQgdmFsO1xuICAgICAgICBpZiAoZXhwID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXhwID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsdWUudG9GaXhlZChleHApO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IDApIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbHVlLnRvRml4ZWQoZXhwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IFwiTkFOXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBleHAsXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGV4cCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjQodmFsdWUsIGV4cCA9IDApIHtcbiAgICAgICAgbGV0IHZhbDtcblxuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIGEgbnVtYmVyIGlmIGl0J3Mgbm90IGFscmVhZHkgb25lXG4gICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICAgICAgaWYgKCFpc05hTihudW1lcmljVmFsdWUpKSB7IC8vIENoZWNrIGlmIHRoZSBjb252ZXJzaW9uIHJlc3VsdCBpcyBhIG51bWJlclxuICAgICAgICAgICAgdmFsID0gbnVtZXJpY1ZhbHVlLnRvRml4ZWQoZXhwKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLVwiKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gXCItXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICB2YWwgPSBcIk5BTlwiO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWw7IC8vIEVhcmx5IHJldHVybiBhcyBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMgbm90IG1lYW5pbmdmdWxcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIC8vIEZvcm1hdCB0aGUgbnVtYmVyIHdpdGggdGhvdXNhbmQgc2VwYXJhdG9yIGFuZCBzcGVjaWZpZWQgZGVjaW1hbCBwbGFjZXNcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBleHAsXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGV4cCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGZvciBudW1iZXIgcmV0dXJuXG4gICAgcmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWNSh2YWx1ZSwgZXhwID0gMCkge1xuICAgICAgICBsZXQgdmFsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gYSBudW1iZXIgaWYgaXQncyBub3QgYWxyZWFkeSBvbmVcbiAgICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzTmFOKG51bWVyaWNWYWx1ZSkpIHsgLy8gQ2hlY2sgaWYgdGhlIGNvbnZlcnNpb24gcmVzdWx0IGlzIGEgbnVtYmVyXG4gICAgICAgICAgICB2YWwgPSBudW1lcmljVmFsdWUudG9GaXhlZChleHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLVwiKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gXCItXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gUmV0dXJuIE5hTiB0byBpbmRpY2F0ZSBhbiBpbnZhbGlkIG51bWJlclxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTmFOOyAvLyBSZXR1cm4gTmFOIHRvIGluZGljYXRlIGFuIGludmFsaWQgbnVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgYmFjayB0byBhIG51bWJlclxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCk7XG4gICAgfVxuXG4gICAgcmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JJZnJzVHlwZSh2YWx1ZSwgZXhwID0gMCkge1xuICAgICAgICBsZXQgdmFsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gYSBudW1iZXIgaWYgaXQncyBub3QgYWxyZWFkeSBvbmVcbiAgICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzTmFOKG51bWVyaWNWYWx1ZSkpIHsgLy8gQ2hlY2sgaWYgdGhlIGNvbnZlcnNpb24gcmVzdWx0IGlzIGEgbnVtYmVyXG4gICAgICAgICAgICB2YWwgPSBudW1lcmljVmFsdWUudG9GaXhlZChleHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gXCItXCI7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcm1hdCB0aGUgbnVtYmVyIHdpdGggdGhvdXNhbmQgc2VwYXJhdG9yIGFuZCBzcGVjaWZpZWQgZGVjaW1hbCBwbGFjZXNcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBleHAsXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGV4cCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yYW10ZVZhbHVlRm9yQW1vdW50KHZhbHVlLCBleHApIHtcbiAgICAgICAgbGV0IHZhbDtcbiAgICAgICAgaWYgKGV4cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleHAgPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIERpdmlkZSB0aGUgdmFsdWUgYnkgMTAwMDAgYXQgdGhlIG91dHNldFxuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSkgLyAxMDAwMDtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzdWx0IGlzIGEgZmluaXRlIG51bWJlclxuICAgICAgICBpZiAoaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWx1ZS50b0ZpeGVkKGV4cCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaW5wdXQgb3IgdGhlIGRpdmlzaW9uIHJlc3VsdCBpcyBub3QgYSBudW1iZXIsIGhhbmRsZSBncmFjZWZ1bGx5XG4gICAgICAgICAgICB2YWwgPSBcIjBcIjsgLy8gRGVmYXVsdGluZyB0byBcIjBcIiB0byBlbnN1cmUgdGhlIHRvTG9jYWxlU3RyaW5nIGNhbGwgZG9lcyBub3QgZmFpbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsKS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZXhwLFxuICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBleHAsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmb3JhbXRlVmFsdWVGb3JDaGFyZ2UodmFsdWUsIGV4cCkge1xuICAgICAgICBsZXQgdmFsO1xuICAgICAgICBpZiAoZXhwID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4cCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGl2aWRlIHRoZSB2YWx1ZSBieSAxMDAwMCBhdCB0aGUgb3V0c2V0XG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKSAvIDEwMDAwO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXN1bHQgaXMgYSBmaW5pdGUgbnVtYmVyXG4gICAgICAgIGlmIChpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbHVlLnRvRml4ZWQoZXhwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBvciB0aGUgZGl2aXNpb24gcmVzdWx0IGlzIG5vdCBhIG51bWJlciwgaGFuZGxlIGdyYWNlZnVsbHlcbiAgICAgICAgICAgIHZhbCA9IFwiMFwiOyAvLyBEZWZhdWx0aW5nIHRvIFwiMFwiIHRvIGVuc3VyZSB0aGUgdG9Mb2NhbGVTdHJpbmcgY2FsbCBkb2VzIG5vdCBmYWlsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBleHAsXG4gICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGV4cCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZvcmFtdGVWYWx1ZUZvck1vVSh2YWx1ZSwgZXhwKSB7XG4gICAgICAgIGxldCB2YWw7XG4gICAgICAgIGlmIChleHAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXhwID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBEaXZpZGUgdGhlIHZhbHVlIGJ5IDEwMDAwIGF0IHRoZSBvdXRzZXRcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpIC8gNjA7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBhIGZpbml0ZSBudW1iZXJcbiAgICAgICAgaWYgKGlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsdWUudG9GaXhlZChleHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0IG9yIHRoZSBkaXZpc2lvbiByZXN1bHQgaXMgbm90IGEgbnVtYmVyLCBoYW5kbGUgZ3JhY2VmdWxseVxuICAgICAgICAgICAgdmFsID0gXCIwXCI7IC8vIERlZmF1bHRpbmcgdG8gXCIwXCIgdG8gZW5zdXJlIHRoZSB0b0xvY2FsZVN0cmluZyBjYWxsIGRvZXMgbm90IGZhaWxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCkudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGV4cCxcbiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZXhwLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYmJyZXZpYXRlTnVtYmVyKG51bWJlcikge1xuICAgICAgICBsZXQgU0lfUE9TVEZJWEVTID0gW1wiXCIsIFwiS1wiLCBcIk1cIiwgXCJCXCIsIFwiVFwiXTtcbiAgICAgICAgbGV0IHRpZXIgPSAoTWF0aC5sb2cxMChNYXRoLmFicyhudW1iZXIpKSAvIDMpIHwgMDtcbiAgICAgICAgaWYgKHRpZXIgPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91bmRPZmZUaWxsVHdvKG51bWJlciwgMik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBvc3RmaXggPSBTSV9QT1NURklYRVNbdGllcl07XG4gICAgICAgIGxldCBzY2FsZSA9IE1hdGgucG93KDEwLCB0aWVyICogMyk7XG4gICAgICAgIGxldCBzY2FsZWQgPSBudW1iZXIgLyBzY2FsZTtcbiAgICAgICAgbGV0IGZvcm1hdHRlZCA9IHNjYWxlZC50b0ZpeGVkKDEpICsgXCJcIjtcbiAgICAgICAgaWYgKC9cXC4wJC8udGVzdChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQuc3Vic3RyKDAsIGZvcm1hdHRlZC5sZW5ndGggLSAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkICsgcG9zdGZpeDtcbiAgICB9XG5cbiAgICBjcmVhdGVWYXJpYW5jZUh0bWxGb3JDb3VudCh3aWR0aCwgZGF0YTEsIGRhdGEyKSB7XG4gICAgICAgIGxldCBjb2x1bW5Db2xvciA9IFwiXCI7XG4gICAgICAgIGxldCBjb2x1bW5EYXRhID0gZGF0YTEgLSBkYXRhMjtcbiAgICAgICAgaWYgKGNvbHVtbkRhdGEgPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5Db2xvciA9IFwiI2ZkMDAwMFwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1uQ29sb3IgPSBcIiNkYjE1MDBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZVwiPiAnICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibm8tcGFkZGluZ1wiIHN0eWxlPVwiZmxvYXQ6bGVmdDsgd2lkdGg6ICcgK1xuICAgICAgICAgICAgd2lkdGggK1xuICAgICAgICAgICAgXCIlOyBiYWNrZ3JvdW5kLWNvbG9yOiBcIiArXG4gICAgICAgICAgICBjb2x1bW5Db2xvciArXG4gICAgICAgICAgICBcIjsgXCIgK1xuICAgICAgICAgICAgJ2hlaWdodDogMTVweDsgcG9zaXRpb246IHJlbGF0aXZlO1wiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJuby1wYWRkaW5nXCIgc3R5bGU9XCJmbG9hdDogbGVmdFwiPicgK1xuICAgICAgICAgICAgdGhpcy5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvcihjb2x1bW5EYXRhKSArXG4gICAgICAgICAgICBcIjwvZGl2PlwiICtcbiAgICAgICAgICAgIFwiPC9kaXY+XCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByb3VuZE9mZlRpbGxUd28odmFsdWUsIGV4cCkge1xuICAgICAgICBpZiAodHlwZW9mIGV4cCA9PT0gXCJ1bmRlZmluZWRcIiB8fCArZXhwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG4gICAgICAgIGV4cCA9ICtleHA7XG5cbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhKHR5cGVvZiBleHAgPT09IFwibnVtYmVyXCIgJiYgZXhwICUgMSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaGlmdFxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCJlXCIpO1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQoKyh2YWx1ZVswXSArIFwiZVwiICsgKHZhbHVlWzFdID8gK3ZhbHVlWzFdICsgZXhwIDogZXhwKSkpO1xuXG4gICAgICAgIC8vIFNoaWZ0IGJhY2tcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiZVwiKTtcbiAgICAgICAgcmV0dXJuICsodmFsdWVbMF0gKyBcImVcIiArICh2YWx1ZVsxXSA/ICt2YWx1ZVsxXSAtIGV4cCA6IC1leHApKTtcbiAgICB9XG5cbiAgICBnZXRtYXBDaGFydERldGFpbEhvbGRlcih2YWwpIHtcbiAgICAgICAgdGhpcy5tYXBDaGFydERldGFpbEhvbGRlciA9IHZhbDtcbiAgICB9XG5cblxuXG4gICAgZ2V0X3BlcmNlbnRhZ2VfY2hhbmdlKHByZXYsIG5vdykge1xuICAgICAgICBsZXQgcGVyYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHByZXYgIT09IDApIHtcbiAgICAgICAgICAgIHBlcmMgPSAoKG5vdyAtIHByZXYpIC8gcHJldikgKiAxMDA7XG4gICAgICAgICAgICBwZXJjID0gdGhpcy5yb3VuZE9mZlRpbGxUd28ocGVyYywgMik7XG4gICAgICAgIH0gZWxzZSBpZiAobm93ICE9PSAwKSB7XG4gICAgICAgICAgICBwZXJjID0gMTAwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBiYWRnZV9sYWJlbCA9IFwiXCI7XG4gICAgICAgIGlmIChwZXJjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBlcmMgPSBcIjxiIGNsYXNzPSd3aWctbmEnPiBOQTwvYj5cIjtcbiAgICAgICAgICAgIGJhZGdlX2xhYmVsID0gXCI8Yj5cIiArIHBlcmMgKyBcIjwvYj5cIjtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJjID4gMCkge1xuICAgICAgICAgICAgYmFkZ2VfbGFiZWwgPVxuICAgICAgICAgICAgICAgICc8c3Bhbj48YiBjbGFzcz1cImdyZWVuLWJhZGdlXCI+ICsnICtcbiAgICAgICAgICAgICAgICBwZXJjICtcbiAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXVwXCIgPjwvaT48L2I+PC9zcGFuPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYWRnZV9sYWJlbCA9XG4gICAgICAgICAgICAgICAgJzxzcGFuPjxiIGNsYXNzPVwici1iZ1wiPiAnICtcbiAgICAgICAgICAgICAgICBwZXJjICtcbiAgICAgICAgICAgICAgICAnPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIiA+PC9pPjwvYj48c3Bhbj4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYWRnZV9sYWJlbDtcbiAgICB9XG5cbiAgICBnZXRMYWJlbChhdHRyX25hbWUpIHtcbiAgICAgICAgbGV0IGxhYmVsX25hbWUgPSBcIlwiO1xuICAgICAgICBpZiAoYXR0cl9uYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGF0dHJfbmFtZS5pbmRleE9mKFwiLVwiKSA+IDApIHtcbiAgICAgICAgICAgICAgICBhdHRyX25hbWUgPSBhdHRyX25hbWUucmVwbGFjZSgvLS9nLCBcIiBcIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJfbmFtZS5pbmRleE9mKFwiX1wiKSA+IDApIHtcbiAgICAgICAgICAgICAgICBhdHRyX25hbWUgPSBhdHRyX25hbWUucmVwbGFjZSgvXy9nLCBcIiBcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF0dHJfbmFtZSA9IGF0dHJfbmFtZS5yZXBsYWNlKC8oW0EtWl0pL2csIFwiICQxXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWxfbmFtZSA9IHRoaXMuY2FwaXRhbGlzZVdvcmQoYXR0cl9uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWxfbmFtZTtcbiAgICB9XG5cbiAgICBjYXBpdGFsaXNlV29yZChjb250ZW50KSB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBsZXQgdGV4dCA9IGNvbnRlbnQsXG4gICAgICAgICAgICB0b2tlbnMgPSB0ZXh0LnNwbGl0KFwiIFwiKS5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdCAhPSBcIlwiO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICBjb21wb25lbnQ7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcmVzLnB1c2goY29tcG9uZW50LnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgIHJlcy5wdXNoKGNvbXBvbmVudC5zdWJzdHJpbmcoMSkpO1xuICAgICAgICAgICAgcmVzLnB1c2goXCIgXCIpOyAvLyBwdXQgc3BhY2UgYmFjayBpblxuICAgICAgICB9XG4gICAgICAgIHJldCArPSByZXMuam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9TcGFjZVNlcGFyYXRlZENhcGl0YWxpemVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dFxuICAgICAgICAgICAgLnJlcGxhY2UoL18vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMSAkMicpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFtBLVpdKShbQS1aXVthLXpdKS9nLCAnJDEgJDInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYlxcdy9nLCBmaXJzdENoYXIgPT4gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGNhcGl0YWxpemVGaXJzdExldHRlcih0ZXh0KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZm9ybWF0TWlsbGlzZWModmFsdWUpOiBhbnkge1xuICAgICAgICBsZXQgbWlsbGlzZWNJbkRheSA9IDg2NDAwMDAwO1xuICAgICAgICBsZXQgbWlsbGlzZWNJbkhvdXIgPSAzNjAwMDAwO1xuICAgICAgICBsZXQgbWlsbGlzZWNJbk1pbiA9IDYwMDAwO1xuICAgICAgICBsZXQgbWlsbGlzZWNJblNlYyA9IDEwMDA7XG5cbiAgICAgICAgaWYgKHZhbHVlID49IG1pbGxpc2VjSW5EYXkpIHtcbiAgICAgICAgICAgIGxldCBkYXlWYWx1ZSA9IHZhbHVlIC8gODY0MDAwMDA7XG4gICAgICAgICAgICBsZXQgZGF5ID0gZGF5VmFsdWUudG9GaXhlZCgxKTtcbiAgICAgICAgICAgIGlmIChkYXkgPT09IFwiMVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheSArIFwiIGRheVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5ICsgXCIgZGF5c1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IG1pbGxpc2VjSW5Ib3VyKSB7XG4gICAgICAgICAgICBsZXQgaG91ciA9IHZhbHVlIC8gMzYwMDAwMDtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgXCIgaHJcIjtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSBtaWxsaXNlY0luTWluKSB7XG4gICAgICAgICAgICBsZXQgbWluID0gdmFsdWUgLyA2MDAwMDtcbiAgICAgICAgICAgIHJldHVybiBtaW4gKyBcIiBtaW5cIjtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSBtaWxsaXNlY0luU2VjKSB7XG4gICAgICAgICAgICBsZXQgc2VjID0gdmFsdWUgLyAxMDAwO1xuICAgICAgICAgICAgcmV0dXJuIHNlYyArIFwiIHNlY1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMTAwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCIgbWlsXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtYXRCeXRlcyhieXRlcywgZGVjaW1hbHMpIHtcbiAgICAgICAgaWYgKGJ5dGVzID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBcIjAgQnl0ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBrID0gMTAyNDtcbiAgICAgICAgbGV0IGRtID0gZGVjaW1hbHM7XG4gICAgICAgIGlmIChkZWNpbWFscyA9PSB1bmRlZmluZWQgfHwgZGVjaW1hbHMgPT0gXCJcIikge1xuICAgICAgICAgICAgZG0gPSAyO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzaXplcyA9IFtcIkJ5dGVzXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIiwgXCJQQlwiLCBcIkVCXCIsIFwiWkJcIiwgXCJZQlwiXTtcbiAgICAgICAgbGV0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArIFwiIFwiICsgc2l6ZXNbaV07XG4gICAgfVxuXG4gICAgZm9ybWF0Qnl0ZXN2MihieXRlcywgZGVjaW1hbHMpIHtcblxuICAgICAgICBpZiAoYnl0ZXMgPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChieXRlcyA9PSBcIk5vIERhdGFcIikge1xuICAgICAgICAgICAgcmV0dXJuIFwiTm8gRGF0YVwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBrID0gMTAyNDtcbiAgICAgICAgbGV0IGRtID0gZGVjaW1hbHM7XG4gICAgICAgIGlmIChkZWNpbWFscyA9PSB1bmRlZmluZWQgfHwgZGVjaW1hbHMgPT0gXCJcIikge1xuICAgICAgICAgICAgZG0gPSAyO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzaXplcyA9IFtcIkJ5dGVzXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIiwgXCJQQlwiLCBcIkVCXCIsIFwiWkJcIiwgXCJZQlwiXTtcbiAgICAgICAgbGV0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArIFwiIFwiICsgc2l6ZXNbaV07XG4gICAgfVxuXG4gICAgZm9ybWF0Qnl0c1RvS2IoYnl0ZXMsIGRlY2ltYWxzKSB7XG4gICAgICAgIGlmIChieXRlcyA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIwXCI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGsgPSAxMDI0O1xuICAgICAgICBsZXQgZG0gPSBkZWNpbWFscztcbiAgICAgICAgaWYgKGRlY2ltYWxzID09IHVuZGVmaW5lZCB8fCBkZWNpbWFscyA9PSBcIlwiKSB7XG4gICAgICAgICAgICBkbSA9IDI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSBieXRlcyAvIGs7XG4gICAgICAgIC8vIHJldHVybiBwYXJzZUZsb2F0KGkpLnRvTG9jYWxlU3RyaW5nKCkudG9GaXhlZChkbSkgKyAnICcgKyAnS0InO1xuICAgICAgICBsZXQgdiA9IE51bWJlcihpKS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkbSB9KTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHYpXG4gICAgfVxuICAgIGZvcm1hdEJ5dHNUb0diKGJ5dGVzLCBkZWNpbWFscykge1xuICAgICAgICBpZiAoYnl0ZXMgPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBnID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuICAgICAgICBsZXQgZG0gPSBkZWNpbWFscztcbiAgICAgICAgaWYgKGRlY2ltYWxzID09IHVuZGVmaW5lZCB8fCBkZWNpbWFscyA9PSBcIlwiKSB7XG4gICAgICAgICAgICBkbSA9IDI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSBieXRlcyAvIGc7XG4gICAgICAgIC8vIHJldHVybiBwYXJzZUZsb2F0KGkpLnRvTG9jYWxlU3RyaW5nKCkudG9GaXhlZChkbSkgKyAnICcgKyAnS0InO1xuICAgICAgICBsZXQgdiA9IE51bWJlcihpKS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkbSB9KTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHYpXG4gICAgfVxuXG4gICAgcmVmb3JtYXROdW1iZXIodmFsdWUpIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gXCJcIjtcbiAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID49IDEwMDApIHtcbiAgICAgICAgICAgIGxldCBzdWZmaXhlcyA9IFtcIlwiLCBcIktcIiwgXCJNXCIsIFwiQlwiLCBcIlRcIl07XG4gICAgICAgICAgICBsZXQgc3VmZml4TnVtID0gTWF0aC5mbG9vcigoXCJcIiArIHZhbHVlKS5sZW5ndGggLyAzKTtcbiAgICAgICAgICAgIGxldCBzaG9ydFZhbHVlO1xuICAgICAgICAgICAgZm9yIChsZXQgcHJlY2lzaW9uID0gMjsgcHJlY2lzaW9uID49IDE7IHByZWNpc2lvbi0tKSB7XG4gICAgICAgICAgICAgICAgc2hvcnRWYWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgIChzdWZmaXhOdW0gIT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZSAvIE1hdGgucG93KDEwMDAsIHN1ZmZpeE51bSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKS50b1ByZWNpc2lvbihwcmVjaXNpb24pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsZXQgZG90TGVzc1Nob3J0VmFsdWUgPSAoc2hvcnRWYWx1ZSArIFwiXCIpLnJlcGxhY2UoXCJhLXogQS1aIDAtOVwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoZG90TGVzc1Nob3J0VmFsdWUubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3VmFsdWUgPSBzaG9ydFZhbHVlICsgc3VmZml4ZXNbc3VmZml4TnVtXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWZOdWxsVW5kZWZpbmVkKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiIFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGdldFZhcmlhbmNlT2ZNb3UodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICAgICAgbGV0IHZhcmlhbmNlO1xuICAgICAgICB2YXJpYW5jZSA9IE1hdGguYWJzKHZhbHVlMSAtIHZhbHVlMik7XG4gICAgICAgIHJldHVybiB2YXJpYW5jZTtcbiAgICB9XG5cbiAgICBnZXRWYXJpYW5jZU9mQ291bnQodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICAgICAgbGV0IHZhcmlhbmNlO1xuICAgICAgICB2YXJpYW5jZSA9IE1hdGguYWJzKHZhbHVlMSAtIHZhbHVlMik7XG4gICAgICAgIHJldHVybiB2YXJpYW5jZTtcbiAgICB9XG5cbiAgICBnZXRQZXJjZW50YWdlTW91KHZhbHVlMSwgdmFsdWUyKSB7XG4gICAgICAgIGxldCBwZXJjZW50YWdlVmFsdWU7XG4gICAgICAgIC8vIHZhbHVlMSA9IDQzNDQ1NjkuOTk4NTtcbiAgICAgICAgLy8gdmFsdWUyID0gNjU1ODk3OC45NDQ1O1xuICAgICAgICBpZiAodmFsdWUxIDw9IDApIHtcbiAgICAgICAgICAgIHBlcmNlbnRhZ2VWYWx1ZSA9IFwiTkFcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwZXJjZW50YWdlID0gKCh2YWx1ZTEgLSB2YWx1ZTIpICogMTAwKSAvIHZhbHVlMTtcbiAgICAgICAgICAgIHBlcmNlbnRhZ2VWYWx1ZSA9IE1hdGguYWJzKHRoaXMucm91bmRPZmZUaWxsVHdvKHBlcmNlbnRhZ2UsIDIpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdG10ICs9IHBlcmNlbnRhZ2UgKyBcIjxpIGNsYXNzID0nZmEgZmEtY2xvY2snPjwvaT5cIjtcblxuICAgICAgICByZXR1cm4gcGVyY2VudGFnZVZhbHVlO1xuICAgIH1cblxuICAgIGdldFBlcmNlbnRhZ2VDb3VudCh2YWx1ZTEsIHZhbHVlMikge1xuICAgICAgICBsZXQgcGVyY2VudGFnZTtcbiAgICAgICAgLy8gdmFsdWUxID0gNDM0NDU2OS45OTg1O1xuICAgICAgICAvLyB2YWx1ZTIgPSA2NTU4OTc4Ljk0NDU7XG4gICAgICAgIGlmICh2YWx1ZTEgPD0gMCkge1xuICAgICAgICAgICAgcGVyY2VudGFnZSArPSBcIk5BXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZXJjZW50YWdlID0gKCh2YWx1ZTEgLSB2YWx1ZTIpICogMTAwKSAvIHZhbHVlMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdG10ICs9IHBlcmNlbnRhZ2UgKyBcIjxpIGNsYXNzID0nZmEgZmEtY2xvY2snPjwvaT5cIjtcbiAgICAgICAgbGV0IHBlcmNlbnRhZ2VWYWx1ZSA9IE1hdGguYWJzKHRoaXMucm91bmRPZmZUaWxsVHdvKHBlcmNlbnRhZ2UsIDIpKTtcbiAgICAgICAgcmV0dXJuIHBlcmNlbnRhZ2VWYWx1ZTtcbiAgICB9XG4gICAgLy8gZm9yIGNoYW5naW5nIHNwYW4gY29sb3IgY29kZVxuICAgIGdldENvbG9yQ29kZVNwYW4oZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSA+PSAtMSAmJiBkYXRhIDw9IDEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhkYXRhKSArXG4gICAgICAgICAgICAgICAgICAgIFwiIDxpIGNsYXNzPSdmYSBmYS1sZyBmYS1jaGVjay1jaXJjbGUgdGV4dC1ncmVlbi00MDAnPjwvaT5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3IoTWF0aC5hYnMoZGF0YSkpICtcbiAgICAgICAgICAgICAgICAgICAgXCIgPGkgY2xhc3M9J2ZhIGZhLWxnIGZhLWFycm93LWNpcmNsZS11cCB0ZXh0LWdyZWVuLTQwMCc+PC9pPlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIDwgLTEgfHwgZGF0YSA+IDEpIHtcbiAgICAgICAgICAgIGlmIChkYXRhID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3IoTWF0aC5hYnMoZGF0YSkpICtcbiAgICAgICAgICAgICAgICAgICAgXCIgPGkgY2xhc3M9J2ZhIGZhLWxnIGZhLWFycm93LWNpcmNsZS11cCB0ZXh0LXJlZC01MDAnPjwvaT5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3IoTWF0aC5hYnMoZGF0YSkpICtcbiAgICAgICAgICAgICAgICAgICAgXCIgPGkgY2xhc3M9J2ZhIGZhLWxnIGZhLWFycm93LWNpcmNsZS1kb3duIHRleHQtcmVkLTUwMCAnPjwvaT5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSBcIk5BXCIgfHwgZGF0YSA9PSBpc05hTihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiTkFcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvcihNYXRoLmFicyhkYXRhKSkgK1xuICAgICAgICAgICAgICAgIFwiIDxpIGNsYXNzPSdmYSBmYS1sZyBmYS1hcnJvdy1jaXJjbGUtZG93biB0ZXh0LXJlZC01MDAgJz48L2k+XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcGVyYXRvciBjb2xvciBtYXBcbiAgICBnZXRfb3BlcmF0b3JfY29sb3JfY29kZV9tYXAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBBRkdBVDogXCIjZDFkMmQ0XCIsXG4gICAgICAgICAgICBBRkdBVzogXCIjZjQ3YTIwXCIsXG4gICAgICAgICAgICBBRkdFQTogXCIjYjdjYzg3XCIsXG4gICAgICAgICAgICBBRkdBUjogXCIjZmZjYjA1XCIsXG4gICAgICAgICAgICBBRkdURDogXCIjZmJiNmMyXCIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JCeUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIEFGR0FUOiBcIkFGVEVMXCIsXG4gICAgICAgICAgICBBRkdBVzogXCJBV0NDXCIsXG4gICAgICAgICAgICBBRkdFQTogXCJFVElTQUxBVFwiLFxuICAgICAgICAgICAgQUZHQVI6IFwiTVROQUZcIixcbiAgICAgICAgICAgIEFGR1REOiBcIlJPU0hBTlwiLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JCeWxvZ28oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBBRkdBVDogXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUdRQUFBQkZDQVlBQUFDOEVrUEhBQUFBQVhOU1IwSUIyY2tzZndBQUFBbHdTRmx6QUFBdUl3QUFMaU1CZUtVL2RnQUFEeHRKUkVGVWVKenRYQW1VVk1VVlpSUFpGWkJGa2FVUmQ3YnBMdEVJWWx3dzVMaUZ4QzBSUlFRUm1HblVpTGdRRTR3eEtpNElCbEJFbU9seGlSRlI0eG9qcnJnU0dFWGpGa1ZRRWR3T0hoQkZaY205WGZjek5iLy8vejB6akV6cmRKMXpvYnZxVmRXcnVsV3ZxbDVWVDcxNk9SeTZUUzNyRXB0YTlwMHd1cmIxcWZNQmhIUUZFVnVFc2JXdHowOHlvR04zQXBMQXBZQ0prczBUc2gwQ09yWUY4TEk2ZVZxVWJKNlE3UkJpVXhhUmxObnE1R2VBSm1HeWVVSzJVMERuRGdVMkF5dUJ2Y0xrNmp3aHNhbExHcUxoZXdJbkFCY0NreXFKaWNBd29BL1FPSHM5WmIyQXo0Rk53UEZoY3JsT0NIVHFydmFmeTdVeFNBWnQ2Q2taOW1lbkVKa1dYbCs2aGZjQTVnQWZhZlJ1cVFhK0FFcEphblJEbHJSMDFwSHJ3dVIrQklRY0tkMldBVjFEWkU1eCt1YkFJQm0wczZQWFRpOFQ5L3R2S1hLRGJQdlZ3RVUrL04zcG9QWEFFeUp4QnJBQVdLdTBSVlEyckNHN1h2czg2NXd1MllWQXN4QkY2eDRobmFjdXJvOFBkeXZpSzAyL0ZnRUZOd05la2R3YW1wcHVqbm5DOXliQVNjQm5rbGtPdEk1b3pJa3lXYXVBZlVJVXJYdUU0Sjkyd0RlS3VEZUlEQlU4eU9tY1dZRXlOeXpaUVNiTGt6czVvakVGd0pmQTkyR3pxYTRTTWtwZjFnRnRJeXEvemVtYzBKMFIwbzZJV1ZjSDVlNkxrTnNaS0pQY1pTR0sxa2xDdkJGOWI1YkszNVBjSjFua3VFdjdTTElyczhqT2tkeUNycGhkQVlyV1NVSzgzYzRmczFUdW1iV3lMSEtkZ0hja3U2bk5KVS9YajVBZEtya1ZRQ3hBMFRwSnlISjlHWkdsOGcyU1c1UkZyalB3cmtkSTY0dWZpeUxFTzQ5c0JJNEpTSzhUaE1SOGhIeWlMNmRrcWZ3RHliMmZSVzVmcDh4c0pvdm5rVVdTdlNNZ2ZjOGNKK1EzbFNCa2FEWkNkTTJ3bFpCUFkxbDJSQ3A0dnVSNGFHd2ZJWGRjekc1bktUdS9FbzJhSWRtdnNVdHI3a3NiNkJBU09ZTnJJMENuSzZRYlRYVGdLUnp4NTBubVl5QVJJdE92T29TTWREb25HU0xUS0ZaeE56YXNFbzA2elpFZjZFczcxeGtFUjJjcmEzc0d6ZTZYcEY5WnQ2bExBbDBuU0pzbEdaN2hNczViM2FhVThSdzRxanFFdEhITUZuZFIvYkV6YXVDa053WE9qTm16aFRkcVdsV2lZWEVuendRbm5tdlJVc1ZUeC8yeWxiVzlRc3llM1NiSHl0ZlZlVEduTHh5NTdySHlIV2R4ekhkUVJwNkdzZ0llc1NzcVRZZ3FHQnl6cDNUUEp0NFBUQU51aUZrM3lucWxQUWNNQ01qZlg3SXVaanVFdktHNFZLeDhZMER3OU04dDhrMDVnQkxnTlVjM3oxWGtsNk9sV09iSUxQU2xjK1k4QUt4MlpDWldpUkIxS2c5K0w4YktEMzh1MXFnenU0ZmtIUnVRSncrN3k3d0hhRmxsUXRTeFBHVnp5MGVISTZmdU5VQWhZSUFkSS9JZEJkeVZ4MVp3Rm5Gak1BUm83blZTbFFuSmh4OHc1QW5Kc1pBbkpNZENucEFjQzNsQ2NpemtHaUZtWE9uZXdKMFdxY0RUNzA4NjVDQWgvWUV0RnFtT3RhM1BkZzk1UW5JczVBbkpzWkFuSk1kQ0dDSHg1Qngyemk3cW9GT0JRbUFzOEdzZ0RvUSs4ZWw5MW16a1RlMEltWDJCd2NCd1lDUndITkFYQ0h6WndsQlpRcERlSE9nQkhBNE1BODRDVGdBS29zcjNsZEVPNktkOEk0QXpnVit5M0VReTFUQWlYd3hJQUozMHZSR3dIM0F5VUNSZERnTXFQQnBKakVzMWxNN0hxeTlIU3YrWU9Wc1BlWUlJZ1VCajRIUmdNZkJOZVFkdHhWcmdGZUFNb0tsUDJUYkFST0JKNEJOZ3N5L3ZHdURmd0VHSnd0SXFFeUlpUmdQUEFCOENHMzNsZndrOEN4eHJ4cFZrdU1SVlJpZmdPdUIxWUwwdi95YVZPemxzMENGK05yQU9tQUcwQjZZQnEzMXQvUTRvQXdZcFQzZmdTdUFEMWVIS3JRREdvNzJOTWdpSkowdnJhYlI4Qld3QW5nZG1BbGNBMXdNUEF1K29JMzRMTlBBcHU3K0lZUHFid0R6Z2F1QWFZSUZEOEd0QXQyb1EwbDU1cWRzeTZYTXRjQlh3VDNVVTg2OEMrb1YwNkVDSHZCZUFXY3JQam4wSitGNzZUemJKMG95M3lvaS9UZm1YcUgzck5FQ21pK2g3Z0M4azh6bHdxTWpmb0lFOFIzM0p2SjlLam5XZWxrRUlJbmNHRm9sdEt0blNWU2FlVE5YWENLUDV5ZmdwQWVKMkFNWUFRNENPQllXM3VHazBZNmNaTzB0WWZzYk5ZelpDRXNrUzFrOFRlZ3pRTlQ2dXVFRjVXdG9rL0U2Tll4a3oraGJPeVNBRWNqUXhseHByZGlvOFkrV3NVSWR0MGNnOUlvS1FUZXJ3WVc0NWNhdmp6NTNCOFlVKy85VndHWkI1a2drN1VpUlJibWtRSVhzWU82MitCVEl1bWJZMWlMQ0hwVURHdzRac2hHUUxpV1FwTytOUmxjSFIzelI3cmd3ZER0RHM0U3k1TkNEOXRuSWRTNmNBZ2VzTjRsT08zR1QvNEU3ckN3dUQrS0Vld1VHRWRBRGUwQWkrTW1nV2JHdFFJNmpBWXdGcDI3ekxRdDRMdlJHSE1rSmZZMGJrM3gzNG44cVlHcER1RVVMek96Q29ETW1OY3dqcEZTRzNqeWVYU1lpZDluZWE4Z1g0UEZQSlhVdGxnNGhtK1FzQzBtcUNrRUtWOFJwRzRDN1Z5Ti9SMlBXUFpmd3RJTjBqaE90VTRFTnh5WTJRM0diTTNOQ0JEUjA3aHhLaWdpanduTU11Ri9qYmFVL2pSYVdCTzVjS0ZSVGU2cTFGWEVjbUFiY2F1NEE5QkR3dTI3eE5oR2dtL3dLNEJMZ1orSWV4Qy96anp1aU9KTVRZcmVyWnhpNnd4Y0I4bWRPRnBuejNGVVVJTnplQnozOGtkNmJrMWtiMWw4bEdpSVNhYThxOTV4Q3pSWTBkeFlVeHBQQSt4dHJ3RGI1OG0wWHNaL3EvV29RZ3ZndFFHbEErOGJYS1h4dEZpTEVMN3VLQS9CdVY5ek5UdnAyT0lvU212VU5FUjN1RXJBbVRrVngyUXJ5UXNBYzhidHU0NTE3bktQOEN6TnN1dm9JUE1uYkx1MFd5WE1nT1JSbnQ0MlBuTm5Ea3BsZUhFTVIxTStXbWhQWHdQTUNEWEtlQ3dwSkdqdHlrTUVLTVBaUjVuYzF6d2loanQrcHRDa2JQYmlDWnJzWnVxWE9QRUYvRzF1cGtyMEYzQWVsWGpPajB4cVo4OS9RcUVJOG9aMlkxQ1ptbXRKVkEzNGp5L3hKRUNPdzR0N3NmZW5WRDU0d1g5OHBQNHBmblBDRk9BZU5WQUxmR2h6dU5lRi94RjRibGpSZW11TTE3c0txRTRJRFdESEV2SzYwa05ydzRTci83Z3dqQjl3SE9ERDh1SWovTjdwb2ZFeUY5L0EzRC8zc0NIeWt1OU8rU0dIc0J0YktxaENUc0pxRk1hYUYvY01CWVg1RjNNUFFUY295ajk2RVJaVnpneU5VdUljYjZzZG9raWxKUkJaeXFBbmg0NnErNFhZRzNGSDhqUm5TR09UQzJVK2M2SnE4cWhGQ3ZwNVhHVFVPUWw2Q0pzVHN1cnpOOWhLUzRWbmorcHNEM3lZamZ5eUUrSndoaDRpUEcrb2U0cmR4WGNRUWJOTUtaQ1Z5YzI2UTd6SjVmU2hSUFZ3RVBmejJOUFdSeDlod0xQR1hzWWNyYjRWUjFEWm1vRHVWdWl1dEVYSHJSY1VldjZUeWxQU0xTS3hBU1Q2Yk41WDlVL3NmR2VubTdxd3kyODNTUndaM2xxbHdpNUIwSmNPcXZsb0xFcCtvUU5wYnJRRnRmd2Z2N1JoZTNqKytLUU9iaHpvaUhOdTZNdnEwR0lUeXcvY3RZSHhMMStGTGxyMUI1M0xMKzN0anp4U28vSVNwamdOcmt0VytGMnJaYU92N1hXT2RqYWE0UVFsOFQ5K25jMGRDRHVkUllVL1NtUmpZUFlLZVlnTk43bDVPbWVMNHdPaVdmbHNMTXg4V1lPNnMrcW9QT1NXNVoveFNnM0Q0YTZVQnE1NEIwSGdndmttNnZTN2NsNmlUcVRWOVdTMk85cnRjbkF2eEhpTzl0cklkM3NmS3pIQjZFNmZ6ckVSODlsekpEcEVmRzcxS01QWjh4N1FZZzlDR0dLWisxSlZrSWFldTFtWVFjSDdPL0wrOGNJTmhZd3J1bVIyZXl0RlhQVWNWUlphZEQzN0czZW5uYmExUTN6NXFwaWdHNmNMMW9KOTFhOVJtVDZkV05DajFQbWtRZFd5ay95Mm5LQVpVUCtaQVArWkFQK1pBUE5SemlJUThVZnZKQmUvWXEzNnBWb3g0ZXdIYjN4eGVNbkZuZkZLYnErMlIzQWw0MGpyOUp1NzNMdWEydVFaMjRBd3o5dXkzYk14aDdlSjVlVHdlckUydTRjQjUwTGpiT0dRQ2ZIek0rcHlQT0dhMTFyaG5oT2d2MUNJRmVnTjVPL2s0Nk00VDZvS3FoSjcwUnQvdDA0ak1tdXU5LzBFZDZQSHppakhTMDEyNWp2UTRiK1lIUFhrYlZjR1Y4V2NKVCtsRk9ISytGci9MSk5WSGpCMlVyTTJGZC8zeWRNYVFHOWVTZ2VkZ1h4NGQ4OURZY1VrTjEwREpNMS9WRStrR2VQdFBuTmoraDF5b0plL0cyaFJtZUFNNnRpY3E5RUUvT3JZOUtLL3hHWFNmenlEOEw2OGoreWxnM0RVL1BuYVJ3VTVteDRUV2xKOG82QjNqU0h4OVBwckwrM2NncTFLRm5QcW5POGdUY3drTm9JbG02WTZLb2RPc1BaQlAya0pvbWhLOEl6M2NLb0pPUU40UkRUWURib2ZLS3BLZSt1d2JjbkxhUjlqT2RmTDJNdlZlaFM0V3VGcjd6YXE1SEZuU0YzQzBUeGZ2dTFvbGtDYzBZWHlTT0NXazQweU1mWXhoN0xiMmY4NTErdFdlM2ZrK20yOTVQUlBISjdHNEZ5VlRvSDgrcFhEK2s5ZHBmbjl1Yjh1ZW5ySXQrdFc3OEhpOUt0Mjh6RStpc0crOFVRTWNmSFc3MGhnYTZxQ3VwQ0czaWVzOFdxK05uNlBNaHhyNzlZZ2ZmQk54bnJLUHdUOGJlbDlESlIwTHBiZWI5KytDQ1VjWGU0RGtucEQ0U212azJ0YUlNQjlseXowZG03UHZhaGZ5Y0dKZCszTWIwOTZVWC9WdExwZmVCUUt1Q3d1SnFrMlBzTytrQjNpRG5iU1UrUDVDZU5YbzRoODhiS2hBQ0lkcDAzalZjcnRIemFMd29WYTN0SjBZMFJ3QTlwNmVxTXBjUWprSmVwUmJxOWQ3ZXRxTktweHI3a0prUEdPam1QOHBZcis0RTVhTmIvYnlRQnQ5aEFqeXpQaG1hdlZlOVdlWVNZcXcvaTMzQng5SzA4ZHlCRGRkZzRYcElSK1JoMWVrTGxjL0J4U2V3ZlowNGxzL0hmQjMwZlIzL2Vkd2p4RmhQS3p1UkN4c2ZORDhWOXJxa2trcnd6djB5Zlo2MWxaQmsybVNkb2RGSTR2a205MjFnajBSUmVxU09Vd2Q0OXk3bnFBeDJXT0I2WjZ5Smcxa01IMEI5eDZUZkxmTk4yRHpsS2RwS1NGSDZpZXh1UmhkZitMK1padksxR2lEMFhCK3dEWDNCMmNGcmpjT2R1SjlwSmg2czcrdjVEOTliM2FOUnkwNWFKakk0a2lZWTYwNVBWQkY4aWpsWUhUcFVsZjNaMklmYkI2c3VYcWZTTFUvelJIUEZhMU9hQnFPT0dLL0J3VjFnYjloWWtraVhmbUZnZzVPbGc0eTlBK0U5eGpCalhmSDlWT2FSNm56dTlQaU02UUxwZEtKMEhLaDZEOUJJL29PeGwybThKK0dtNXlFTmtLTWxWOVgrWVBtODUvOVdBNVAxOElVT3QvWjhBOWE1NzVoaXRtOFRsZXFqanVJQ3lqTUpuOGZ6RG9QMi9EcFRmaGZ5aGc5QmNWNjhsMFl6MVZTTjV5NkRhOERiU2w4cUpjL1hvSGpWeWM4NmViUEgrNFl1aWZRRDcvUnpKTnJjd0x2L2dqRWwzdVhXWEJIdDZzSzZPTHQ0eTNnSWRqU05wRk1MWTAyZDIwYWFGWnJ0Q2VvYm1qbmFmejZEZWoxTHU4UGkzaGJCazZXYlZ4L3ZkQTZ6QXlyRkRjZkg5UnpGT0JONnFXTjRWY29MR3UrYWs2ZklIbFVBeStvRTgrUC9xUUliMTgzWWRZS05iQ2hsT0RyYUtLMkh5S3V3WTlLalpPN1ZJLy9rMDE3amJ1UnNZZU5vZnJxcnJuWW0vR0VmRjlldXFwZXk3WVBNZEVGUk1VMWFoeXIyZzRldTBLbHBYMnVPMnpwMU9RZm45RnFhNlRVdzlxRXlHZVUwblJvdm5MdE4yNzdhREVaMzdyV3R4ellGUGJmaEQydTRtRjVjMi9wVU4yQkU4bVRQOVdjbWY2OVIyL3BzVTlCMDUrN3JqcWpmMnVWNkFDbHNSOGE5ZkM2SC93TkF3cm4yL0ZtekxnQUFBQUJKUlU1RXJrSmdnZz09XCIsXG4gICAgICAgICAgICBBRkdBVzogXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUdRQUFBQ0xDQVlBQUFDWDhEd0RBQUFBQVhOU1IwSUIyY2tzZndBQUFBbHdTRmx6QUFBdUl3QUFMaU1CZUtVL2RnQUFKRjVKUkVGVWVKenRuUWRZRlZmYXgwVk4zTVN4VWtTUUl2YmV1MGFOZlpOdHlaWms5OXR2OTR2R0V0T01xOUhZRzJyc0dzVUdFVVFwaWdWcElpSVdOUGF1Mkh0WExDRnRFejNmLzUxejV0NXo1ODVjTG9pQ2hQTTgvMGZ2ek53cDV6Zi85ejN2dVplNXhZb1Z0YUpXMUlwYVVYdldyZUhLOHhVYnJqajMrL3JoWjhmVlgzNTJjYjJ3TTJGMVE4OHNxTFBzOUtkUWkxcGZueXFSMytkWTZGdVR5QXZGR2tkZThHa2NjV0ZtbzVYbnZ3VVUxaUQ4SEhTV0FRaXJDOVVKUGMwQWhOWCsrdFNCV2lFWlhXcUdaSlRNNy9NdWxLM1pxa3RlemFJdmhqYU51dmc5d0RCQVlZREM0QklWQ0Z6Q29ZU2UwWUF3dUlRQlNGcU40SXdHTllKUHV1VDNOUlNLMWpMbVNva1dNWmZiTmw5MTZadG0wWmNZZ0RCN0lPZFlmUldLblVzSUNBT1FLd0RTdjlyU2srWHkrM3BlNk5acTdkVjZMZGRjaVdnUmN5V3IrZXJMREZBWVhHSU9SZThTcUpZVnltTUFPVkp0eVlsL0JpdytVZVNXbkxSMnNkZEt0VmwvN2VQVzY2NmVBUlFHS0F3dVlRUkZkVW0wQUJJcGdGQXVjUkM2YW9aQXdSbXNldkJKQmlpUEFHUUZWRFcvcjdQQXR3N3hONHExajd2UnB0Mkc2enZhcnIvR0FJVnBRQkM2T0JBRGx6VFV1YVMrQmtTRUxza2xyUHBTUUZseWdnRkladFhGSi80VHNPaDRxZnkrN2dMWE9pWGRkdW1ZZUt2VmF3azMxd0RLejREQzJzWmVWNEhBSmN6T0pRSktFMEJwbkxNRUR5aXFTd2dJQXhBR0lPZXFManorbnYvQ1kwcCs5ME9CYUs4bjM2blFlZU9kd1oyU2JsM3ZtSENMZFlpL3lRZ0lYQUlvVnBlb1VHSUVGQldJZVlKdllKRGdUVnpDd1N3OC9uUFZoY2NpcXdZZHErY2ZkS3g0ZnZkSnZyU3VtKytWNnBKeWQyQ1hUWGVQQUFxRFN4aGN3dUFTUUxuQm9SaTZoSWN1ZllKdmxLTUVMMXl5eE9JU2dnSWR1d2Nvd1ZXRGpsYko3LzU1cnEzYmx2dk51cVptaGdQSzk0RENDQWhjWW9WQ0xvbTNkVW5ydFFhaEs5c0VmOFkrZENIQjE3QW1lTmtsQklRQnlHTUEyZSsvNEdqdnF2T1BGbTYzOU5qMm9GejNyUThXZFV1Ny8wdTNMWmtNUUZqWGxIc01MbUdhU3hDNmJGMUNVRlNYWExOeFNRc25oOEZ5Z3EvdEtIUlpYUUlvUjFuVkJkRDhvNGY5NXg5cGxkLzlsdWV0NTg1dnkvZElmelNveDQ2SDV3R0ZkZDk2bndFS2cwc0VsTHNxRkJ1WGFGQlVsemhJOEhxWE9KUGdiWWZCbGdSZmRaSEZKUllvQVBJZEZPWS83M0F0Nk1WMlRJOGREMXg2N256VXErZXViL2ZnM3llQXducHNmd2dnRDFRZ3Frc0lpdVFTRFFvSFlwdmdOU0NrRms0bWVMbUNyNXRkZ3JkeHlUSE5KUVNGK1g5MTVBNkFqUGFiZC9qVi9PN1hYTFh1V3pOcmQ5OTJmM25QOUlmZndTRk1GUUhaOFpCeGwzQW9YZldoQzBBNkd5UjRZNWRZYTVPbTBqQTQyd1J2TkF3V1VLb2FoeTRDd2dEa0NZRHM4NTk3NkMzZnVZZGVqTm5renZGWFgrMjY2ZFlIM2JiY3k2RFFCSmVvSU9BU0s1VHRHaFRiMEtWM0NVRXhHZ1pUZ20vcGFCanNJTUhYc2FuZ002d0pYZ05pbStBNUZLdExDQW9EbFB0K2N3OHQ5SnR6eUQrLys5dGhhNy9oY3MvT1NUZk9BQWpybG5xWGRVKzdoNDYvcjdwQ2hiRkxjb2tVdXV4Y29nMkRrK3hkWXBUZ3pTcDRVNWZZSmZpVE5xSEw0cElnblV2bVc0QXd1SVFCU0pidm5FT1QvV1lmTERoVC9NMGpNNHEzV25PK2VadjFsNkxieDExOTBqSHhPc0xPVGRZdDVUWnl4RDEwZWlZNjM5WWxQV3hDbHhNSlBwNURhWmZUQkc4eXoxWEhJTUhYQ05ZVmkvb0ViKzhTNXNlaE1BQTU0VHY3NEx2UUsva0tvMFZFaGx2TDZMUFRXcTI1OExEMXVrdm9zQ3Zvdkd2SUFUZlFxWERKNWpzNmx6eVNYR0lOWFhZSlhxdE5oRXM2NmhKOG0xamJlUzZuRS94eWgxUDBSaFc4Y1lMWEFZRkw3Z0RHTXNnclgwQTBERGxVc21uNGliN05JMDZkYUJWOTlrbXJtUE9JNnhmUVNaZlJhVmVaNXBLdTVCSTFkR2t1ZVdpYlMvUUpQdFUrd2V0ZGt1MDhsOEV3dUtIQk1MaU9Qc0VIMjg1em1ZVXVmMnVDSjEwQmxDR0E0Z2NvK1RPbDN5RGtjTk5Hb2NkU21vU2ZaTTFYWnJDV1VXZFlxMVhuR0Z5Q0RyckkybTY0akk2N2hvNkVTNUs1U3loMGNaY1loQzdLSlZybzBseGlrK0J2WjVmZ2YwQ0N2d2lYWEFDVTd4d21lTHNQc2h3bmVEdVhXRVBYRTcrdmpzUUJpR2UrUUtCV0syaXZXNTNGQjJiWER6bjhVOE5sUjFuajVTZFkweFdBRW5HS3RZd0dGSXRMS0hSZFJUSytqczZFU3phUlMrNXdsNWdsZU1rbFJoVzh5VEI0WSt2MTF6ckJKUzlyNTloeTllVVNBTklLUUZZZ3dUODJucUkvYTUvZ0RZYkIxZlR6WEFLSVB3OWRJd0hGNGJBM2E3ai9TMURlRDQycnp0MVZ1dnI4M2Y5Yk0yanZwZHFMOTdPNlN3K3hCbDhmWVhBSmF4SitnaldEUzFwRW5vWkx6Z29vRnhIakVicmlyN0pPaWNJbERoSjh6MndTL092Sk5nbitDVUxYT1FENWU3dTRHeStablRPQUZBZVFMZ0NTQ2lBL09Ec01ybVhtRW11Qy94bFFCZ0dLVFhoQ3h4ZUhXa0tUb1YzUVE0aEJ2MEFYb1Zqby95QlBLUGN3ZkdlbCsvdlAyYmttWU40M3JNYUNQYXpXd24yc3pwSURyRjd3SWFhNkpPeTQxU1VVdWxacm9Vc2srQVJLOE9RUzJ3VGZVM09KS3Z0aHNJbExma0tDbncrWCtEaDcvZ0R5Q29DOEJWMDFIUVk3bUtJUHNLL2dsd0tJSGtaNUtBejZUa0J3cExQUWUxRE9oOGxWcG0ydDR6TnorM0cvMmVsUDRCSUdsekM0aE5WZVJDNDV5QkM2dUV1V1cxMkNFWmV0UzZRRTMwMUw4RnVsQk8rb2dyZTY1QW1ncENEQmR3S1VYSVVBQUtrTUlHTUI1SUZwNk5JbGVMdlo0RVhIMHdIRlZ3ZWpNWFRFQ1JDeWZvUUNvVEpPWDREM2xOUnFWYWFtSGZhWnZvMzV6dHpCNEJLbXVtUytjTWxpNFJLRUx0VWxTUERON0Z4Q0NaNFBnenRKdzJBMWRHa0pYaG9HOTVUbXVTaDBkZVVKL21hWGxIdDlBQ1ZQWWpHQWVFRWI1Tzl6MVErenpuUFZOaDhHUDBZK2VWTUh3d002bFVNWXN1WTRkZEllNDVKS1ZnNU1TUU1VVnVYTHJjeG5CcURNU21ma2ttcGY3V1kxNEpKYWl5aDBjWmRvQ2I0WmhhN0lVOXdscTg5ak9Bb29TUERrRWtydzZqRFlVc0h6Qk8vQUpiZmdrakdBVWpFdlFPaWdGSU5EMmtLcEFQS2prL05jQndERk1xbUl6aXdMYlgwS0dLUW4wTyt5UFdIM2NVazlQQ2R1WWw2Qm01bjMxQzBNb1FzdTJjNzhaNU5MS0hUdDRhRkx1TVNhNEUrcW9hdGxsRWp3YTg1emw4UmVzUjBHeXdsZURJTjdXUlA4VDNCSkhLQjB5V3NRK2dhSFZJUUdBY2c1SlBnbjlSd1ZpMHRQenBUZmk0NThTeVRzcHdIQ2hNUE1QOHQzSGJLcWxOdll4RE1lRTVLWjU2UVU1ajJaWEpMRzFOQTFpNGV1YWwvWkp2ajZ3WWNkSi9qMVdvSy9ybGJ3M0NYNkNsNGRCbThGa0s2b1RWNDJQY0U4Ym5BSXlRTlFoZ0xJWFpNUHNoNGduL1NTMzRkT1RNa0RHSnIrWlhxQ3JpTmkyN2lPU1dUdTR6YXlTZ1l1UVlKblZlZHBDWDRmNDhQZ2cxYVhMRGNZQnErekRvUFZCSjlzbCtBZkFNUVhBSkp2UlJhQWxBQ1E1c2dsaVJnRy82TDdQdGRaaEM0L2JWc1JycHdaVVRtclVOTVRjeDBWUDVpQXVJMU5ZdTdqdVV1OHlDVlRoVXZrQkc4MkRBNDNId1ozU0xDWjUzb01sNnhIUHFuMVhIcmRpUWFIRkFlUVhuREpGV2tZdkFjdXNYeFNpQTU4SXc5aGtBNUJ4aldWNitqNCtRUkVoVUl1bWJDSlZTYVhVSUtmUmdsZXVJU0d3U0xCeThOZ09jR3JMaEhENEZieU1EamgrbU1rK0dTRXJ0OENTb0g4U0JRd3lrQjk0WklMZ0pJc3IwUG5EY2xqSU9jaDQ4R0w2K2lFcFJvUVY4MGxGTG9tYnhZdTJjcGRNcHU3UkUzdzBqQllEVjF3aVRYQjI3b0VDZjRtRXZ4a1ZQRGxuMHZQUG1VRGpMcUEwbDllaHM0YmxjZEFMa0h1aGljQUVMTXRRSVJMTEFsK2lrandjQWtsZUQ0TUZxSExiaGg4M0hhZWEvVzVMRUNaRENqVm4wdFBQc09HenV1ZHgwQXlzc3hHV29Bd1V3WmlsdUI5MUFTdnVVUlU4R2J6WEZHbnR5UEIvd21oNjdtTm5wNWx5K0xWZVY0Q29YckdPSFFEd0hROUVFcndta3U4REliQkRoTDhYU1Q0ZndCS29mdnF2NGo3ZVFWa25PbUJqSURZSi9ndGhnbGVtK2VxdlJDVi9Kd2RhWURpOUNUZ2k5YXkrRnhVWHNENEw5VEE5RUJtUUNqQmUwZ0ozdHRnR0V5aHE5cjBORmI1azFEbS9uN1FUTk9ERklLR1Rxd0ozYzBESVBPeUhFM0htd0tSRW56bFFOc0U3emNybmZsOXVZVjVEWWxrSG4wWE12YytDNWpiKzBFem5sdnY1RU5ESjdwazhXbjBINTRDeG1tb2dzTURZZGhyQ29RUGd6Y3k2enhYbWdyRmE5UjZWbWxnaUFwQzFmdEJ6TDF2MFBUbjFEZjUxdENacGFENXVZUnhGWG96MjRPNGprbVlaZ3BFU3ZDVmtlQXJqNGxqSGg4RVcwSDBDUkl3NEpKK2k2WTloejdKOXlhY01nQjZuQU1ZTk14MWJ2Z1BJRjg2QXFJT2cwZHVZQjZEVmtnZzdHQXc5LzZMcHo3anZpaFFEUjNjRElxQWJtYnhhWFdqNUgwc2kxZjVidko3ZmFidEt3a1pqMFRSNGVaQVJzVXp0OEZSdk5NbEdHN3ZjeGdlVmhqTVk4Q1NLYytsSndwUXkrS2ZxMWZKNGxQek02QklLRlJBYUF1VjFyOEhJSXBEN3hFVXc1Mmk0NmNhaHFyUFk1ajdnS1U2VjFoaGFNN3c0REFReXBaT2Z1WTlrTTlOM05tbVg3Unc0djIvZ1lLZ2ZZNkFUTEdCTVNLV3VYMFVhZ2ZDRElZN2g4RThCZ2IvR29BRVFGdWdONkFjZmNTTTdldEFTUkNERHB1Q0JZUkFDNGhCSzNtSEc4QncxMkQwVzhnOGJKMUJNRmlsRDM4MVFESkZwOTRRZC91Zm9KcFFCUTJTQ0VzS1ZCMzZHN1FTK2xHOEx4c2dvK0lEemNLVGJsaHJGS1l3L0NVWUlhelNSeUdGSG9qdmwzc0NmS2Z0ellTWTFMbWtxMUF5RkFKOUJTMkJZcUdMdXUwMEhZR001L25jK3k4Sk5BV2hoMEVnREdGOHpTcDl2S3p3QTVrS0lGUDNaQUlNSXlnR1lKeVZBeUI5Rmt3MGcrRW13ZENIS1lMaFlZWEJLbjBTK2lzQXNodEFkbWNDQ2xNbHdQamtITXhSeVBocEVtWkFMREEwRUhvWUgwa3dQZzFsbm9QQ0NqK1FLZDhFUUFDeW0zRlp3ZmprekRFT2dVd3dEVk95SzdRRS9tRXc1UXVBQUl4UExEQlk1YytXRjM0Z2szY0YrRTRHa0NuZk1DNTdNRTZHc21NMEJEWThpQzJRSUdNWUJFTExHY1l3bU5mZzhNSVBKQkJBQW5kbEFnd0RHR1lCWStDWWJFS1pReURqYllhMXR0VzNkVmlyZytHcHdSZ2N6cnorczRKNUQxbFo2SUg0VE5vWjRCTzRNOU0zY0NjREdDNFpqSkZqTEhCc2dCeUhqUDhVRGpER3lRV2ZVWTJoRDFPZWtqTzhBYVBLa0pYTVoyakVyd0JJZW9EdnBQUk0vTXQ4VkNnQ2pKT09rY0NZQXdHTWNTWlRJV0pZR3l5TnBLUXdCV2NRRE8raGdQRjVCUE1kRmxub2dWU1ptQjRBcVVCOENZb0JHRCtBOGNzZXpBbmZhZnVNSDBhQWZESFd6Qm1WYkllMTNCazhYM0JuV0dCRU1iL2gwWVVlaVBlRTdRRlFacFdKT3hqQXNDb2FsT3pBMklleUU1QUprSDZMeGhvNXc4TU9ScGdLbzdJUmpDK2ltZitJVllVZWlOZjRiUUZlNDdkbkFnb2pPUXZHSUpTZGdFeUE5Rjg4eHQyOCtyYUJZZXVNU09ZN1BJcjVBMGJWa2F0WXdLalZoUi9JdUswQlVLYlh1RzBNY0pqVFlFVHlseHh6RW1Ec3B1YlZCbWVNdG5kR2lBTVlFUllZZmxZWXJOcVlOWVVlU09XeFd3TXFBd2pFdkZRUm1PMTJZSHdjT0VhQU9Ra3dKa0ErV0RxNmtrR1k4clN0TVRDc0ZUQ0dSU0pmeU02SUlSaXMrdGkxaFI2STU5aTBnTXBqMHpJQmhubEN0bUFNSERQUkZveVAxVEVaZ0dQOHpVVWs3MUVPQ3o1ZVkraGdyQUtNMVFMR1dsWjkzRHBXWS95NlFnK2swcGd0QVZBbXdEQXVRTWtkbUF5NHhnVEloOEVqVldjNGdPRWp3cFFLWTRRdGpCcUFVWFBDZWxaellteWhCK0l4T2pVQXlnUVVwa3FBeVlWalRxSElOUDREVURoanBGSEI1MlV0K0t6T01JRlJhMklzcXoxcFE2RUg0allxTmNBZFFBQ0ZrVFF3bmhJWUp4MERJT2ttUUQ3K2VvUWRERFZuY0JpK0ZoalJMSUJnakRhRXdlb0V4djhLZ0d3T2dESWg1aTZnbUlJWnB3ZWpKWCtDc3VNMG9KUTFQSWpuSjZFakt1bW1RbFFZbjhzdytFZ3FZTFNhdkNVWUd3QWpqdFdkSE0vcVRra285RUJjUjZaVWhlNjVqVXhoN29CaUJxYVNDa1dFTWpzd2NNejQ3YWNCeHdUSW9MQXY1S2tRYThFWHFSVjhwakRxQkhJWTlhWW1zdnBmSmsxNnp2M3ozRnZGRVp0cXU0NUl5UUlVUmlJd2JnN0EyQ1IvV3pCbklPTmZiVUNOTWR4cEdPTk5ZRXpieUJwTVR5NzBYeVd0K0VWeUwrZ0p3RENBWWM2Q3FTU0JFWTRCa0szR1FKQXZocHRNaGZDQ1R3OWprZ1lqUVlLeGlUV2NtWkxhY0ZicWkvR1F5RnkwQ3NNM3VsVDRZbU5vaFMrU0dha2lLZmRnemtMR2YrSUhHTVBrcVJDMStqYUJVZHNHUmhKZ0pHc3dHR0RjYlRSblM2SDlPWWh5dzVKOHlnL2JlS3Y4OEkwQXN0RUtKWGRnQUNUTkdBaGNNY3hTWStpcmI3WGdzeGxKVWZLbWZNRmh6Q0FZbTFtajJhbXMwZHcwMW5qZXRrTDVoV3ZsODhSaVpUOVBuRmwyV0JJck4yeWpLaFhNY0E0bUY0NDVCeG4vV1FMeXhlZSt4bE1oS295YUUyS3R6dEJnVExlRjBaaGdmTFdOTlptLzQySFRoVHU3UGVmK2V1Wk5HWnJRdmN6bmlZOEFoWkhLNmNIazNESG5JR01nY01aUURtTzF6aG5yakoyaHdaaEZNTGFvTUpvQVJ0UDVPMWl6b0hUV2JOR3VyQlpMZHIvUk1uaHZ3WG1NYWk2Yk1pU3VlT2toOFYwQjVGdUlrY29JS0xrRkk0Ykw1MUZrR3YrZE9wTDNVR2RnMUhNRVl3SEIyTW1hTDlyRkFJTzFDdDc3cVBYWCsxZTFEVDNZcXUzeXd5OGttTkwvaWZPR2xwUWVFcGVwRElsbkFNTTBLTTZDY1JES3prUEdRRkI5RDVVbkNXdEtPYU91eFJrYkJZd1VCekMrMFdBd3dHQnRRZyt5ZHNzUHMvWXJqcTN0RUhIOGhmbGowTktmeFJZdlBUaDJZT25CRzI0RENOTUV0N0RjZ0NsdkRPYThxeGtRaktRK01xdStlY0duMWhoV0dITUFZOTVXd05qT1lTd0VqTVhmc0paTDkxaGd0QTBEakhEQVdIbU1kWWc0d2RwSG5meXAvZXBUVXpyRW5LblpZZTNaQXZrbjA4cW42OG9vZzliOVdSbTAvaXlnTUZXRE4zQkpZT0FZRlVxT3dOZ24vMU1BWXp5WFZXM3Myci9Zemt0WnBrSzBnaTliR0MwSVJvaUFBV2UwRHo5Q3p0QmdzQTZyVGpIQVlCM1duanZaTWZiQzI1M2pMam4vcUx0bjNNcDhzcllFVkVmNWRHMDRvSHdQS0F4UVZIRW9lUWpHR3NyMkFJcHh6UVlZQVJabjJGZmZyQUd2TVhRdzBtMmRFYklQTUE1WVlIU0FNOW9EUm9lb0RCa0dBd3dHR0Q5M1RieTZwL3ZHNnoxN2JMcVpyMjRwKy9FYUQyZ0pnTnlGR0tCQTY3ajBZQnc0SnJ0UVpqQmNYbXA2VWhqYUZvY3pEdGxVM3lKTU5kVERtQThZTkpKYXVNc0dScHRsZ0JGMnlBb2prbUJZbmZHYUZRYnJtbkNWZFV1NnhnQWpzMGZxN1RrOTArNVZmbzRNMUZiMm85VWx5MzBVODA3WmoyTU9RazhBaFJFUVRRN0JPSEJNRG5MTXZ4MmVJR0M4WVowS1NiYkFVQXUrT1VqZU9oZ3RER0VjVlhPR0NpTWF6bGdOR0dzQVk5MDUxZ2t3WG8rN3pPQU1CbWNRRE5ZajlRN3J1ZlVlNjduOXdYZTkwaCtONnJYcjIyY2V4c3A5dUFwYTNSbzZCQ2lNSzRZQml0QWFWdFpaTUxsM3pEMkFNZjQ4M1FKa2NrS0plbE9UOXFoaGFvYVlDckZXMzFUdzhScGpJUi9XMnNGWVFUQ09TekJPQ3hqbkFlT2lnSEdOdzBpeHd1aTEvUUhydGZNUnBENTdNYVBIdHZ0djk5aWE2ZmhrYzlFcWZCRGxVdUdENk5ybEIwYXZMRDl3MVE4QXd3QkYxYk1FWTVCam5nRE1QNXc2YVRqanpRYlROOTNSbk5GNGpnWmp1eFhHWXNBSTNzTmFDeGp0cEREVkFURGFXNXh4VmdmRDNobTJNQjZTVXhoZy9OSjl5NzBsM1ZKdTErbWFmQ3RQSG5SV1lVQlVHYWczb0p3SEZBWW9YQ29VUFpnWU96QlBFOHBldFFlekUzTHVqMGJoak9JTloyNStFelhHUTdYR21NZXI3NmE4K3ViTzBHb01GY1poRTJjQXhuckEyQUFZOFFKRzhnMDQ0NWFBa2FsMlBvR3d3cmhQTUZqM0xYZlZaek1DUm1ibnhPdnpYb3U3bXV1ZmdxallQOEtsWXYvSWR5c09pRHdJSUw5QURGQ0VKREFEYmNHVWV3ckhLQ2FPRVdCU0FDVm56dzZETTBvQ1JsODQ0eWFmQ3JGVzN5MlhTakNvNEVQT1FNRUhHQ2Z0dzVTQTBVMXpCc0hZd21IMDJnRVk2WGJPQUl4N0dnejFHWTJ2eFY5NzNDNzJ5dUUyNnk2KzAyYk5oUno5YUlwcnY1WCtidjBpd2x6N1J6d0VGRWFxTUlBVXhheGdvaDJDeVVQSFBBR1VYWUJTQThvUkQwdHJzbUJIbGFaQk96ZllWZC9MTE5VM2hyWEhlWTJod1ZoN2xuV0VNenB2dU1TNnhGOVJSMUlXWitETzc3bE53SkNjMFFQT29BY3NkMC9WbkhHVHdSbnFrN0hieFY1bWJkWmRZbTNvV2NDcnoxMXVGWFdtZDh2STB3N3Q3dEYzeGF2dWZWZk1kZSs3OGx1M3ZpdVpXejlTQklCb3lpMllYT2VZQndEekwwQjUrZ2U1d1JrdWdQRU9ZT3dBakYra3FSQXJqRldBRWFQQnVDREJ1TTVoYkpaaFBCUXdIbkVZOVB4ZUNVWVh3T2lrd3JncVlGd0VqQXVzTlQxNk51b01heEZ4aWg2MHVhZEoyUEYzR2k0N1l2T2RKbzgreTh0VTZoUGV1OUw3NGVjOTNsL0JBRWFWTzBHUndMZytQekEzQUdZV29PVDljeVlCb3pRS3Z1R0FjWTFYMzhlbDZ2czBML2cwR0FtU013Q2paNW9CakIwY2h1eU1MaHM1akE1eFZoaXRDUVk5VERQcXRBYUROVjErbkRVT1BmcWtRY2poN2ZXV0hQeHRRR0JxS1kvZVljMEE1QUNBUElZWW9LaktKekEvUW9rQVV4MVFubDNSMjNiNVlSY2s4QUE0WXlGZy9HQUhJODRLUXgxSmJiNE5HS2d4MFBGR01IcGdYWGQ2U1A4bUFTT0J3MmhMTU5ZQ1JndzU0NXo2Q1BNV0t6TlVHRTBBbzlHeW93d3dHR0N3T292Mi8xQjlWdnArcjgvVzNIZnZIY1k4U0gyV014Vktub0RKY2ZJL0RDaS9CWkRuOXlPVVNPQ2xFS2JlQm93RFJqQzRNOHhnUExEQ0lHZHNNbkNHRFF3S1U0QVJEaGhodGpEb3NZSzFndmF5R3ZOM3M0Qlo2Y3g3VkNLck5DQ0NRK205M0E2TUNrVVBwaCtYYXo4cmxPekJyRElDa3dVb1U4dDhISk4vTTlvZDFwMHIwVEgyd2o4QTR4R2ZDcmx1NDR4ZVNOYTkwdTFoZEJmT29HZkJkOWw0Z3p0akE1eXhYb054WHMwWlNON3FiMTNKTU9vSEgySjFseHdBakgyczVvSzk2dU1GQStidVl2NnowOVZIb3Z0TTI4cThSc1R6RGpkMWpEbVk3Sk8vb1dOV0FrcisvU2FWdm5WSnVPb0dHRE1CNDNhUFZCbkdJM3NZVzZ3d1hnZU1qZ25YV0hzVkJrWlM5RE1YaGpDT3FiOVhZb0d4VU1ENDZoc1ZCajJRMDNjR2gxRmw2aGJtSGJpWmVZNVBaaDVEMWpIM2ZyWmdMSERNUXBua21HeEMyYzhBczczY3dPZ2VnRklnUDBvb0JoaDFBU01SMWZkL0xURG9CMXZVR3NQV0dhOG5hVEN1Mk1Cb1pRUGpoQXFqMFRJQlk3RUdZNC82Tk5TcW1qTTBHRk1FakltYm1NZjRqZXBUOEZ4SEpUQzN6MktZT3pvL04yQk1ISE5OVlAzR2YvUmZrQnFxN1ZLQThFZkEyRzlYOEJHTVpBRUROUVk5RDk0Q2czNElKdG9Lb3lsZ05KYWRZUU1EenBpemsvbk4ybUhqREM4YkdMcG5mNDJJWTI2RFZqTjNnTWdSR052ay96MmdUQUVVUDZoZ3VzS3NBWVlMWUV3RWpQdDhLdVNPcGZwV1lRaG44R0d0Z0lGaGJmTVZnTEVjTUVJRmpLVUgxZWZMMTVKZ1ZMWEEyR1p4aGdYR09NQnc5S2pDMFhETWgxRXFsQnc2Wmpma2wvMlZGL0RXTGZXdUoycU1CYWkrYjRtcEVOWSs5b3FvdnJVYTQ0eFVZM0FZNmtoS2hVRWpxWDNxU0tyYVBGc1k5R1RVS2xOU21kZWtGQldHZTNZd1pJMkVZejVaWlJ2S2V0dUIrUy9BN0FhVTdsQ3VueUJYNEJxcTcrSUlVMTNoakMzdFlxLzgwbGFHRVcwUG8ySElFU3NNT0lNZVoyNERZenFjQVJqZUdvd0pISVpUSVBRYUhzc2QwMGR6ekhMTk1UY0FacXpIKytIUC9ZT3o1OVl3bW5vWjFmY0F3TGhvRDBPdHZxMHdwQnJEQW1QbUR2V3AyajZ5TTU0R2hxeGhBUE5CQkVINUVZb0ZtQmZtR3pKUDFaQXpYQUNqQ21ETUFJeDdXdlhOWVZDWU9tUUhnMzZ6aEdCWW5ER1p3NmcwSVJrd2twNGVCdGRqNUpkOWJoOUhkM2QvTHpSL2Y0bzd2eHBHVWdFbytIYnFwa0owTUhqQko0ZXB5bmtQSTh0MWRPSUExNUh4TCtTWCtmSzhZVmo3QmdxKzlOcUw5djljVTVzS0VUV0dIMVhmZ0tFV2ZKTTNjeGdvK3R6SDVnbU1POUEwMUNwdTJaL2xyNnpWWHJpM0FxcnZpZFhuNzc1SXY1bG9DeU5OTGZncVQ4d3pHRDlBcVhCRjE0b2o0d3ZrYjJFVmlPWTdMcmtZbk9FTkdGK2k0SHRrTXhXaUZuekp2UHArT2hqN2tTdTZRNy9PUEpHYkJsZVVCSXllZ0xFTk1KNVVGdFgzVXpyakVSd3hFU0J5L2ZuOHI3NVZuckNwT0p6eE8xVGZONTB1K0l3ME9tR1o2Nmg0NDE5REsybzViMjZqRTh1NjhoK2N1WklERUQ5QzZVallyMWNjdERxL0w2SHdOZHpseGRIQlRhRWdLRU1rWnFOYTRnYmNrT0k2TXE1dnhXSHJpMFpQejdxaDAwbmxvSHJRbTlBL29YOEJ4TnVBMEFJUXZNc1BYRmswY2lwcVJhMm9GYldpVnRTMHBuUVorU2RvdmFSUTZBK1EzZWZJV1BZWkZBa0ZRNVhFc3BGaTJXTElGWElYcjBrZmlXMCtGSytYUVY2NlkydmJ0cEdXdDRYV0NQM040RHcra041WFV5enJERVdKZFNYRnNqQ3h6UXk2SHJHTjlqNjdYOS9Fc2hMUXY2RkZrTjF2d0dPWkh6UVhHZ1JsMTYrMHIvR2lQeWRwNTJTMFlTK3hnYWJORURPUTNROUhpZzZpZFpsUWdGaVdJcGJkaG53aGYya2ZLOFUyNGVKMUZsUmIydDhvYWR1L1Nzdi9JaTBmWTNBZW9kTDZObUxaQ2ZINmtRVHBCN0dNMXIwSzlaYmVaL2ZBQXl6ckJOMlZ6MTIzZnBiMC90YWkwNXRBazBYZkpFSHpvWmVFRG9odGowREczL2ZGaXVrbUFFaS9TUDkvUWdmVHZYZHRBUWF5WHJ5K0FMbm5Fa2c5NkpKWVA4ZGcvUmRpM1graDZsQ0M2Q2U1RHc5UzUrY0dDTzNvTytta1NRT2hOOFJkUnEramRPOWRsOGRBUnVjaEVPcnczMEUrMG5iWkFzRy81UlIrbDJ0NkQ1b052U1l0MHh4WEdub1hha2ZBcEgxOUMvMzB0RUMraHdaQVU2UWQ5NGRlZ1k2TDEzUkJKYVQzYW5kaFhnRVprMWRBVEs3VkdTQjB2blRIUDNhZ2xicjlVcDdVb3NsaHFLRmlEZjI1QmtLZDgwZm9Qem9nbFB5T1Nzc1U2YjBiQ2lFUTBqNXB1WkY2NmZaYlgxbzNXeXlMZXhaQXdnU1VxOUt5Z2VKQ1NJZkVNZ3AxdzhReU9aa09nVDZYM3J0YmJQT05lUDJqd2tkbDJ2NWlwVzBYU3N1RGNnQmtrZGlua1g1MkFHU0dkRHp0N3I2dThJSE9VTVdhTHlrVTlaRzI3YTI3a1RhS1pZZWZCWkNDcU95QU9DTWpJRWFpME5WSkhDTThoOGZROU5SQS9sZmhJU2lyQU9vQjlIZURhNkI2NkpiQ2g2alo2UTRVTFRyb1gwNGNrMm9NRjRXSDdkeWNNem1yaERqZVRyRnN0eU1nVkl6TlU3aGxHd3FhMWFEYUpxb0Q5WUIrTDE1VC9Id2I2dWpnUFdhaVVWQXZzYzltME44VVBwN1gxdGNUKys0aVh0UFEwbTVHbDVaQlBnclBWOW5KRDNwRnZLKzhFK2ZvS1lEazlObzBWUkRIY2hISHAyVlY2YlVoa0p3MjdLZzVkRlBoT1lLcTJDOFZuaXdwREZUSndYNG9VVDlVK0IzYkhscXE4QmhQQTRWU1lwdFB4YjVQUWQ1NWNnR0ZyU20ySXg2YUh0a3UvaytkMlRnSCs1R3IzTDZLZFdSelRycXJWa3Y3YnZUc3J1b0ZidWlZTXRBNGhZYzVOeEd5Nk82bTBaZlRYMHdXNFlJS3JrQ0ZGMk1VOGxaQWY1SzI4UlA3L2l3bit5NXFSUzN2bTBpTWxEVGx3cStjU0xheWFrbnJLZm5UakttSHRJeVNvTC8wK2pmaWZTOUp5MmdXT0VCMy9GcDBQT20xSXQ3bm90dU9xdUxxMG10UFhlS3NLNWJSdWZsSXk3VHpKMGUvTExZdlpYQjlEUlErS3FLK3FLZzdka214WHQ2ZXBsSitJOVpUeE9nQU5WWEV3RUVzcHhGV0M0VlB2eGcvamRRQUNGWFY2ZEEvcFdWZEZWNGN5Vm9qTHZKajZEeDBEOXBMQnhQdm9kQTFXd2VOM3VjcExhTkp1VDJLTkFXdDhPSGhJZzJBdUlEcmltNmFXdUVqcmtURm12aHBadlV6OFgrNmdXaG8rV2NvUklSV0dqV21RcWVoWTFDR09KYW51T1pyMEdXRlR5SmVFdStubTRHSzRqL3FqbDFCNFVXdHZQMUpjWTNWUkQvY0VmdWs0cktzdVBrV1FEZkVPaW9ZMzNBR0NFMmlQUklYVzE0c280bkZLK0xraXd1NWlEc2pVM1FPM1dVakZGN04wM1pVbVMrVDlsdFQ0WW5aVzd5dXFQRENpRVpZcjB2YmFZT0R2NG5YN2NUcmwzVG5XVkZjWEN1RlQrNVJzWFZXcktzcjFqVVFuVDVic1U3OS9GbHNRd1ZobWpqbkFPZ01nZEVkZ3pxU3BqN2VOVGcyM1lUMURQcVBaaG0rRWpDOXRVNVgrRXpIQlFHZmprM2xRdlpmMmxQNFJPRk1RYnl6QklUdUJnL2R0dlFCVTVMMCtoVnhSNytxQVpFQTF0WUIrVDlvbDhMZFFCL3V5RUEyaXp2STFReUkySmJPa1Q1NDZxYndJdXVSQUU5VEdzbmlUallEUW82aHdqQlFBdUl2bmE4elFCcklONmhZUnpmeWwrTFk4Z1FzOWRVcEFjVDQ5MjhOTHBDb2txVmJpZ3NKbElEUXhkSmMwZ3doaXZWVXZhNFgyMUIxVDNOV2d3bWNBRUlYR1NJVW93RlJ1THVvTTZZcVBOYlNYTmlyRXBDM0ZCN0s2SE9SMXh3QW9VLzRhSzZMNXFjb3RHeFRlTlZObnhCT0ZzZlJBNGtWNXg4aWJySk9Bc2hEc2IrbFFnRk9BSW1SdG45YnJLTWlsOXk1U2VIbHdEc0NHTG4yb0xoeElrVmZPZjdlR0RiNGg3aXpxaWg4TGl0RDdJeUEzQk1BdElrMGJ4MlFmNHNUbytuN3hnSkltamloZDhTMkdwQXFvalBlRXEvcE9KMGtJRytJanFLWjR1RU9nTkJkdDErQTZDT09TUTQvcTFoRGhSNElPWEtzdUo1M0JiUUEwWW4wc2NOZmhGeWRBREpJMnI2QldFZWlCUDgvNGppVVgzcUs1WFNqVWw0YktPRFE4TjY0VWhkdm9BNmtlU0t5RnVVQ0tzUmVVOHhERmhWeVc2WFhCT0srd3FjNlRIT0l3cWRwYU44WHhMRUk0akxST1JxUWx3Vmc3Wk02SXlCVTJXY0tjQzNFWFVoM09zMGdhQjhlMllVc2hlY2NjdFFhY1p5OHpDRXUwdi9wWnFidkdVd1IvU3V2bzV1QlBsOHlmaWFLNkV5NjhGcmlSRWdVRG1JZEFQRVZGeDhpN3BKOTRtNzlqUU1nTlJRZVVvWkt4M2xUNFpPQ3Zob1E4UjRhTFduVCtFWkFhUEJBSVlCR1R4WEZzak9pNDdVaHFGa09JWUQwaVY1bkFZUkdjdVN5UHdoMWs0QlFUdml0RU0yNStRc2dIMG5iMHpWUTN0Z3MrdTJ2Q2c5THROKzN4ZlhTdWRLZ2llYnFhRUN6UVhIZ0VBbzU2M1RMWG9kMmlIOFRGZDE0WEd4REU0eGJCRzI2Njd5ay9ZMlR0cU5xbTBaQzlNMFJpcTkxcFhVMGJxZlBEem9KdUIya2RYOFY3N1A3ZG9iQzZ3VEtINE1VYTFLbHZEUksyb1lHS0JSK3lRbXJvSzVpK2N2aTdxVWhzYmM0aGl6NlhKeWNORmUzbkhKYmN3RktYcjVUZ1AyejZLdWpZdHRKNGp5YkNWQUh4VG9LVithUCtsUEVhRUczVEZ2dUl2NTE5TjVYNVBYYWU1elpsOEU2RjROMVpzZDIwVzJ2ZjYzdHQ1akJ2aTNub2xoSFM3TE1scnVZYlMvdHQ1VEpUVVRGWWNGL0pFZFJLMm9GcnYwLzFBbjFsL2xEYWxBQUFBQUFTVVZPUks1Q1lJST1cIixcbiAgICAgICAgICAgIEFGR0VBOiBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR1FBQUFDUUNBWUFBQUQrNGM1YkFBQUFBWE5TUjBJQjJja3Nmd0FBQUFsd1NGbHpBQUF1SXdBQUxpTUJlS1UvZGdBQUdVQkpSRUZVZUp6dFhRbDRWY1VWUm5HdEN5b3VVQVNrcmExYUpTVHN1NENDcmNwaUZhdTFkUVByQXExV2NHZ3BMdXlCQk1JV0Z0R1FsUVJDZ0xDR0pDekpCUkhRVnF1MkZxdlcxcTFmY1dGVEZPN3IrZC9NVFNZM2QxL2VlNkdaNy9zLzVkMDdjOC9NUDNQbXpKa3preVpOWEtiOHJYTlBKMXhIR0VISUpKUVQzaVljSUJ3alJBZ25DRjhSL2tQNE82R0tVRVJJSlR4TTZFdG9RempUN2ZjYlU1TW9DY0JsaEpHRU1zTFhvdUg5NEF0QjFEekNQWVNyQ1dmRnU2NEpuNmlSTGhROSswQUFKRmpoVzhJL0Nhc0lvd2hYRVU2SmQvMFRLbEdEWEVONE5XUWl6UEFaWVJ2aEthRWk0OTBjOFUzVUFQMk5Sc1d5TFZQVmhXc2ZWK2V1ZWxDZFZYUzNPblA1N2VxTWdxR0VJWkhvZjVmZmRpS3RjTGc2ZThVOTlNNElOWFB0YVBXRlRVK3J1UlhwcWsrQ01FL05KSHcvM20wVDgwU1ZUdExJeUt1Y0hYbCs0M2cxby9nK2RWcnVUOVNKV2IwajN0QW5NaTMzSmpXdDhBNTFYc2xENnBMMVQ2bEViclI4RDZwdFJ6NDNLbHFmOUNNbm4xdFJmOHJmT2lleWFOMlQ2bFJxUk84a1dHUFNzcjRSbEQ5cnhkM3E0blZqMVp6eW1XN0pPU1Rtbkg2RXB2RnV1MUFTVmV4WjlOeVp5Myttb2xlSFJZWVJKbWYzSjdVM1RKMi8raEgxeGMwVDNhaTQ0NFNkaE5HRVp2RnV3OEFTVmViY0Z6WTljMmhLOW9DWUVtR0dLVGszMGp3MFVsMVdOdFVOT1FjSjh3a1h4N3M5ZmFjRnF4OGRpVjRhYnlLTWtKby9PRHB5c3NxbU9DVUdpOVI4UWpmQ2FmRnVXOWVwZW05Uzh4bDV2VjZOZDhQYkFmTU8xT2xTTWpSeUsyYzVWV2ViQ01tRVUrUGR6bzZTc3E5OWswM1Z5UXVuNWZZS2JRSVBBekFJWUxIUnFIR2kwcjRoYkJibWZHSVRRNFMwTGFuc2VERGVEZXdIR1N2dkpVUGdPYWR6elRyQ3RmRnVkOE9FMFVHWW1MdXhjNE1hSFdhQWxRWnozY0g2QnVRVkU3b20xSWdoTXM0bnZMWjBUZGVUZ2hDWkdLeHRIQkJ6SkovNzZyNGJieTZpaWNqb1QxQXppN3VmVklSb2dIZGh3WnBSVG9qNW5EQWVwbis4Q1JsSGlNeGQwZU5FdkJzdlRFek5IVVFqWm93S0Q0UU5NZThUQnNhVGtPVWdaRTVSekFsUkp5L0Q2aHltYk8rWWpjNXBlVDlWRjVZKzRXVEVWQkRhNThmYVYwWms3QXliRUdyd3lNejhudXJpMWQzVVBESWVWbFYwVkV1M3A2Z2JxbElpR3ducmQ2U29hN1oyVkZkczZhVG1idWlpTHFIM01ncDdxTk56ZTBVbWhTUVRYOHRNc0JzeDJQR0UrLzg3c1NUa1BSQXliMlh3Y3dnYWRObTZMdXBtSlZtdDJ0cytndSs0d2ZZOVNSSGtYVm5lS1VwU2FsN1BRR1hFSWhQZVp3Zm04ajdDVDJKRnlBRlVQbk5WdDhBcWkxNjlrTXJic3JPRGF4S3NzSFYza3JxYVJ0TFN0VjNWSUJleGs3TUhST2FXak1TZWpSVXBod25qQ09lRVRjZ1JWQmFWRElvTVdtU3FRUkpoaEdvYWNWQjFpMHU2cVZDSlFjZytOV2RnWkZIcDcreEdDemJLT29SSnlGRlVNSWQwdCsrZVJnMVRYTkVwZERMMHFIaXBnNXE5dm90SzgxUWd4S1FYM2FsbWxVMjJJdVpMTVZyT0NJT1F6MUVwVEtoK0s1Sy9xWFBNeVpDeGcrWWNkSWowNWY3bm1rbkxybzhzV1BPWW5UVldTV2dWTkNIL1FtVmc5ZmdaK3JPVzkxRFJJUEVrcEE0eFpBaEFKbi9FOUluR0NXUnRubVExV3Q0bERBak1QS1lLdktZTmU2OFRKZWFOZFVSb3ZJblFBL01NUnN4MG53WUFyTEY1SmIrMklnV0JnZU9ESXFSTXE4RHNRbTg5aXRZd2FyVUhzemFXSXdaejVMU2NYcjdVV05yeTJ6RmFyRlJZYnI3Zm5Vb1MrRVZOY05qNlhnUXRpUFBjNFJUbHV6cW9XRy81V1d4aVIzWEorbkZXQzhvOWhKWitDSm1nQ2J4OHN6Y1hQQlp2OFc1c3A4QklobG1PUmFzZkZUWjc1VDAwNFp2dVdNSWYxc3NySVhkcXdtNm9TblpOeUpUc1hnMkdEQmxRWTM0WHcvQ0xJVUxIaEpTam1PeTlFTktlY0J4Q1Z1MXBIMTFMdUowLzR0MjRma1lMM0RKKzVoWkU2Q3haejh4VUdJTDY3czEzRTZOTWdqVW52S01KbVZIa2JtS0h3OUJEWXlEUHA0UmRoQUpDQm1FS0lZMndsTENlOEtiQzNUcWhFNzZwT2htTFNsOVJtUXZXUEdwbWhlR2t3QWpIcEpCQXB4QldhTUpoeGV0R0dEZ1BYVlQrWTlINFhSVytVMmtsMTZtaXMzUW1qQllrSFE2TGxHMHZKMFhtKzNLdzlva2czTlprSVlrQWk0ZmRqSkp4bW1BYnFsSmNDUVYzdW9NS2YwUElJVnpnV0Noak9jOGpQRUhZR3dZcFZUU3ZMUFpvYVdwSUw3elRqQlNFSTkzdHRLSzlaY0hjdUxrZG1Mei9KYmlmM094bFRpSE1GV290dUhsbG4zKy9YbXJCRUpyc3A1bk5LVU9kVk80U3doZWFVRzU2aVEwaDhKTU5DNW9NbmV3d1NoWXB3bXNkQ0NsNzNhdHVQWEE4d3lSNC9DT0N1YTRXbGNJOHNsTVRDSDZnQUZUV0NjSmRpc1U4RVRBeFB5WXNJWHdiRkRHWUgvMlFnZ0FMR2lsR2svMEhoTFoyRlVyVEJDbmYyVUYxYXY2aUo1bFVhQWNoZVBlMGRSMU9JOXhCZUNNSVFyQldlWDZOdnpsbFJzSFFTRTVGbXRGSVdXVnBlWkVBTjJtOUMzclVxYWNVRzFzR2xmbWFjR01NdWREWDVVekNOREZLZlUvMGJwY0Nla3pQdThWc056TFZxaEl3UTJ2V0kwNTFLTFpxRFNwU1JZajdBUnFTNFdiQ2gzNUpLVk9TMVJsNS9qYS8wb3Z1SXVzcnc4Z2NUckdxUUpZbXhCWlNXMDcyUnpLTVYrb3NodTF1bVVpV1ZnVEZMeW1yS3p2NjN2VEtXUGtyby9rRVI4T05qNFBUaCsvUkJJQ2w0VVJ0cGVZWityTDZ4YmpkTFJQSmN4R2gwZzhoVU9QelZ2aU56T2tUNGNGNjlmWlNualFUL0ZKRmNsVXNjNmEyakVKOFdzUzR6VzBUVkNpaHhBOHBjTDY2OWZYcGdRZ1hBOHNMcHJEeFVUejY4RDVOQUVSMU9QbEkyYzQ2N25jNEtoTW5tbHhLQ2wvcGwvc1pKVUZFNStBMG1NRmhvMGZNaEo0b0MrQmtXeGV4VXBMZ0IyUGN6cTRTeWRlTThLcFhValpXSi92YTROS3dZSFU5WnlRdWFEamZTT0FyRmNsY2RMS0xxSXMyU1doQ2tFakdqb1JqWGdpQmVrNHI4Qi9WQXRXVnZXVzZUQXIrZjVDWndIczBBUkM4WUZmNGtyb3UrRU14Ymw5UGllUWM2M1dVQkJWVU9JdE1ZZDBvTVE1ZFVhUnRYU0ROWnE4QTFwajAvckVZdDYybnBQQlZ2YWNWZlJBeGJCeDlvbGVWU0lTOGJpWnNKMWx0MmZsMHB1YjBpbXpiWFNjbXEwRWNReVk1SC9SQ1NEU0dMUkJDZWtmbWxZeVVDZm5XVE5DekNQczFBWnpzdGV2aXNpNktjZHQ2U2dwZm4zenFlbUt2U282ZWF3bUNFT3pMeTI0VksySG4xRXhrZTVJaU0yelVsbTduc01IYzJFT3lacm9sQk11Qm9BSzhvYlo0V0pFOUlWY1J2bktxdGhCa0p3bmRQWVp0Nml1UnJJUGNFbEpjNGQrTkltTk84WDJPQ01ISzloVk5DRGpZckZhcDBYbms1WnA1eEg1WExFRVNSclBpY2cvRjcrYVZIb2dmdGlWRUNEdGVFd0tMeERrMmJtaHBIdmxOak5yVGQxSzR1K2dMcDJUQXgrYzE1TmEwTStjT2lnaFA4TWQyd2liSndtQUJhRld3dEhzNE0wYnQ2VHVSckJjcjRraUdFMnkyMFJSZU1DWDdCdTNHdmRWT0JINUxFNlppVndkTFF1QU5GZSt1alVGYkJwSkkxallLMzFDekh4MkVKVDUzRUcwSXVjdUp3Sk5sb1RJc2h1c1VNZ1YzN0VrQ0tRaHlheWhya2I1T1J3ZDhkc0ZaVi9MOE93aWhRL3RNUGI0NmdWdksxbGFKelVZTlZyRkNKLzg0QnUzcE81R2NzNXlRc1pVV3ZxaytBclN0UUpNNndvTis2a2JvTFpwZzJQaEhnTFZaNFl0S29uNHQ0T2NodG1NZ2lXUzhrUENSSFJtb00rb1ZCaG1ja0NIcmlaRFQzUWgrdnl5Z1Zkd1dtYjlxTlg5dmRvaHRHVWhTZUJTa0pSbnc3aTRvN2g0S0VVQjZRYzhqeGVXZDNCMWRVUGkrOU1FYVhXcWp0alpXUlRlc0VFaWRzRGRUazJ5WEVUNnhVMU4rUTB1dGdETXFHNnFTRWJQc2JrTlA0WUYwbXpSQnQ5TUNjSnFGUHMzbDVpL21rVXREYWs5ZlNlRmhRcnV0eUtoOHFZTkt2VGUwa1lGdzNUSiswS21uMTBvTVU2VDk5aGRMemZjRTV0YWF2N0c1anNKRklwbE9KN3hnUlFidVl2Rnp3c29PYVVTMElHT0ZaeTFDR2M4bS9GTVRHbWNxekQ1SWszNzBPYjAzTCtEMjlKVklublBra2E0SHRoRENuTHlCaFZSK0ZUOCtqcjBZZjM4TmdncVlMMDkyNlJaYm1ZZ2dGd1FtUkFRS3lkRk5NZGxMaHhWVlJPYTZsUm9PWXI0b0xLdnhaQ0I0NzVvZ0t0VmZyb2lWQnhqK0htRnQvVEtBOXZRak0xVFV3NHJCYWx5N0w4WC9CUVBtd0VJU0I0SEtkOVZjeEFNek96bW95bUhiODJPdFFsWWJWeEJFaEFkVkJ2SnhiL0oyVUhqUWQ3MFlYK3o2K1QwaWJRZDB5clhiVXVRei9POFJyZ3U2a3VseXhhdzJyc1RaRVNDbUcxWml2a05jUUwzSUVvd0lmMGZYN0lFMktkcFM3eEtlYXBqYVlWVDJDcm5IRlZpY2JZY3EyTTczU0piR1lrMGlKdTNIQ1ArUUd3TXl3S1VUdE50Y3J4RXc0dUJhMHQxcThSbmg5MHFZUnpNVWNUOEtBUFBOU2xBTVdiRW02UkdpUEZDbHR4SXFaTk9jMWhMUkRwTWU0aHdCaXhMbjNlRjRySzV2TUNBS3RIZFk5WlliWUx6OFlhc2p4Wm0xeHhVUTZ4WG8zWVVLRDhhNFQrSFI3YXBtTWFGeGNPMHRHaXNzSXVEMUxpenJwT0xTSGdQTERjYzY3ZzkxVk9nYUFwRi94elVCWHJBSUhNTm1EbnFxYURBRXAvbU8rMVg0V1paUkNuZlBST1dBQVlFTk1veUdNRnprQUc0VmVuNU5WeFU3b3laWFVVRTlUVlc0aHp5SXBuYmNJREFsYS9iYlMyMmlHN0dxRis5aTdrSHNzS3ZEUEFxL0RyMEZZVGlobVBBVjFrSFl2Y3ZkMkNXMHVRRVdHQ1pveUY5YTExcVNnYnBoRTI4TUlYNlhNQ3VTcHpUcTI4b3hkOGtqQUdKRFZiSk1DaXkxMWxhOVNPSCtwbllLdjR0bEllRUQ1SWVLd0FROW4xVFM1SkJVRXM2ODRDNUhUTkJTNElZZXg0VWF4a2l0SHlRZDY2VHdhSTJhalN1N2VGYzQ2blRSamZBZWIxVjQvTmNmQ0V5TW5zVUtQekx3UHVFWWVpWGNNTGpQRjBFV1laR0Fhd0VSVFFLejJPWm1QS3l5WnlqOE5vcTRIOXVyU2NLeStZc21LS3dwdTBwbnJ1cXVpdm5FZWcrQ0dnUnFNSnRJd09RWjF1UU1WYWVSc04xOEpBQzRpV0s3bUtndmorbjg0Q2FSWUttYTBOdTQyckp0QktpdkxLR1Q0ZUlHTmxTbG5NQkNDc1lCQ0FoclVzWk9KeUwxNGMybDBlcmtTaENjM1lmYjVaSjR0N1dqUklMMmtTdmcvd3hlNEFSRVIwSFd1aTdSRHVEZ2trN2NCckZicU5EckVuWWttQ1dodG1xT0hjUGlpVGNKT1BHRm85clkxYXcwWGlQbzhiVVlDUThwUENRb1lYYzVIU1V4d1VVcjUrUndUOURBT2dkSHM5RVo4SDJidVVBRExxekI1dEFEaE84bDFPVHNOMUZsK21rVlJVeFdXUHBmUHhkZ0l3bWp3TVZkd2JpZmVJSEM5MFVhUk15WXA2Unc5MFhOVFR3TFF2aExQZG9vd0tZWExDSUhWOUpDVldIZm9aVHdHOEsxRFc0KzhKTVV2cDZ3OWY2NkpRSGU0anhTUmJqZTFjRUlnS3NkaDR5d2pobW94SFBWSE85RWxYOVdheGluWjl2TlNNQUt2S2lzRS83VWhaT1JnTk5QK2NJMHhlbmhtTjQrbExCSjlNamFlY1FsRVh3a2RJYWJ3bTRrNFBsZkZYN3FxZTlKTlJrSG1SUWVkRllUU0RmTGdiTVBaNzB4SjVSWlg4S01aLzhtckZTNG03M04vOVZjNERVcC9MUlZUVVNIbVRzZUtnbitLTnlWYTJPZUlxS3dVSkNRRUZFckRTNVJ3ejJqTmFqZXI0VW92YXgxWGFPandXSmVlRnZoWG1Db3YvaDdUeHQ2b2thOFVXdGM3RlZBSFdHdEFCK1ZCUWxZb0dVVGVqU3Fvb0NUd2plUURqa3dUelVTY051Yjh4RDh4dVF1aVhua2RSTVNzQ24xamxCclY4ZGIxditiUkkwOVUwY0UvdUFZTGcwYm9BUWM0TkNZSENTRjM1MkwxZktmeFFTZDBxaVdUdExFeGsrd2V0YUowREEya1JwNm9vWStsL0FMd2g4Tm5sMURLQ0I4UmJneUh2STVUU1RmYVlSdWhCeEN1SDh0MUU4aTRVdzNoTkRyQ1g4blJBaFpCcytmRjg4aURZQ1FQTUp4d2tlSlRzakRCTU1KbjM3L2dkVGdSb1FzYTBDRXZDWGtURnhDU0xBTENmK0I2akY1bnRDRTBEZEhpbEU2Z1hBZUlVMzh1N1BCdXcyQ2tEdUVrSVpuMmhPWkVQcmUrUVJWZlBzVndnT1NMSGNhdk44Z0NIbEtDTG5VNUhraUUzS1I5TzJ0aEVla2Z3OHhlTDlCRVBLZ0VCSldVbXVENTRsTXlObUVaMkg5Q1d1dmsvajNiMkVaR3J6ZklBaTVXbGdlRUhTV3dmT0VKY1J0Q3BVUUt2QlVNYUZsaWg1eUtTRlYvUHRtRitXY1FYaERDUG9ab1pYdWVjd0lvZnhOeE1UY1d2VDRGRUo3d21YTVlsRnFVazY5cUphd0NXbEJPQ1ErOERyaFYxTERQT3V5clBGUzNsUzU4bUVUUW5uT0lpUVJ4aEMyRVQ0UjZqTWk0UXZDUStpRURzcUQxZmdId2kwR3owSWxwQlhocVBqQVM0UVJVZ1dNLy9TQ2VWbVhTWTF3bVBCRDZWa29oTkM3YlFtVENXOFRUdWdJTU1MWGhPdHR5dXhIK0ZTOGY3dkI4MUFKYVVhWVRwaEI2TUs0U3lDZGNYdmMxS3RMejVvUzZ0M3RRYjh0bHlxZkp2MGVLQ0dNdTJHZUpoeXhhSHdROUNYaFc5M3ZsbnFMbm8rVzNyM040SG5pVE9xQ2lKOFQzaVRzTjNqK0k5RUxJZkJCUW5QeHUweklRb044cG9UUXYrOGpkQlgvRDl4SytJZXVrVUVNVk5YdkNUZUlrZDlVNUlINitaUDBicnBOSGNNakJMMWNWaDErRStOenpvZENvSHFFaUhkV1N4VjZUdngycGZUYkRJTThWb1RBNk5qRHVIbDZDNnM3TjN3anZ0ZWJXZnZTSmlRS0lUY1R4cnJLWkYwZWV0NEJHMEw2c1ZwOURvT2hPZVBxVUt2azR3WjU3RVlJVnRKd1ozd212ZmMrNFNZcklxUXlmcGNvaEV3aWxMcktaRjJlRTBKZzhid2hWUW85L0JmU3YrdGR6dXlBa0FpcmRXOW9aRnpyUW02dmhBdzNlTzZMa0dMR25YNisvcGl3Vko0dEllSzl1NlJLVlJMV1NmK3U5NWN4SFJLaUFaTzBxMHRmZkJBU3JDK0xNbXdSUFN1UVB3N3BnaERvKzcreVdsTlRtK2ovelF3V1p5NEpjZjJuL0JLSmtMVWk4MlludXRaQmVZNElFZStPMFRVa3NOamtYYWVFd0l4MUhXU1JTSVNrU3ZwM21wZks2TXB6UXdqY01FZWx5a0hWR0Y1cDVJS1FsUjdsVGhoQ2VyTzZrK0hIakM4Q1lUNWU3d0YzaUY3cWhCRDR0K1QxUW9IRnU5blNlM0JaakpDUUt6MWJxM3ZtRkVWU0dTdHM2amhYZWpmd1NSMGI4cVhTQjRMRUt4YmZ4UnlTTDcyTFVXVzZIcUpuQzBLUzBTOEdCRXFJS0FEdWtiS0FCY1dvKzYzSjk3RHUyQ3E5QzdWMXE0Mk0zVm50eEo4b2dIK3NYckM0YjBKRUlWaXhZeE1KUTNlYlQyd2czRTg0MCtBN0Z6UGUyeFdCYXNKUVp1UDJwdWVuTUs1R01aZHMxR0cvYUFBUXRzWGd1Ui9BSEMvVkFXb1JhdDN3OWp6NnZaQ3dXN1REMlo0SWFjaUpjV01FaEpUWUVkdVlZcERFcUliYTZ4QnZXUnBUa3lnaDBPVkxXQURycU1ia016SHVYUzVuQWJsK0dwUFBKQWhwakxyWEVqVkdTOEtqak1kZC9jRGlQZXcwd2xYaWF0czNyTVQ0UnRxOWpPOStqZzY0N0w2RXNZVFkzL1JOSDUwbzJlV0RUZDVCNU1wZnhEc0o4UWVOUlVjNkxHUlNBaXozVE1JN290eVhneXJYalFCekhSQnlPdUU5OGM2WHNaYlJLSkVjYlZqdFFqTklRczVoZkVHWTBJUkFQU3dpckNROEVHc1pqVktESVlSeDN4YUVSUkNaWlh3U1BmOHVxK3Ywdzg3Zjl3anRDR2ZvM2oxVks5ZWtMT0FTa2Q4SWJZemtFZVcyTThtRDM4Mk9QNWdTd3JoWDRBb0xXUXpkSVl6dmhGN0xha09FL2l6bGFXV1V4NnhoRVhVeGl2RzRLemxBQUpFYWNCOE1OMmpnaGN6YXp3TXZibHVwZ3B1TjVoRHg3RkZKNzFvQlpad3I1WVczdU53bUQxejZPeG5mVzdjbFJCQzgxcWJNNDZMTUlVeXNmVVFiZm1TVGI0b1RNdUJPZnMrbUlEZ0s0ZE81UU1xMzBTWVBWczd0eGJ1blNkL1FFekthMVhYLzJ6bnpMcEx5UWoyODVUQXY1TGxOeW10R0NHUjl4V0daeUQ5WTVMdWMxWS92MGlQUGpvd2tIYXR3OUdHakJwRW9jT1NOSS94TmVsNGk5UWlFN1R3dWVvcjJISTYvcHdRR3N0cTRKM2xTUHlaOUgzUExKK0ozUktIa1NQbjFnTW1NcUhOOUhmRGJXSk04Q0YwdGxBaC9sWWsxaXhraFVydU1zU2d6bDlWR3piekd1S3BDdnNHTXh6OGZGTTgra1BJOWdXOWFrWUhHMEx5a0tOendyejZMankyVkduMlk3cmxiSzBzbTVDb3BMenkvdnUrS04vbCtzZmdHWXJUYWlkOThUZXFNSDBEVjJ1NGE2WGR2azdwZ1UydU1US3ZHb0djWFNCOVpwWHZtaDVET1V0NFN4OEs3VEt6dTVsWlA4WnRmUXVaSlpRNlVmdmRNaU5icklaVGxYOFZoUEhSZm0zVHgzNmJTTXorRVhDN2xSZVE1UWxBdjhUdFNoUHBBYkMrc3JGR1NDZ0Z1RU8rNElrU1VpY2FHOWZWclZqY2diNWowbm1kQ1hoS1ovaVVLYVNsNkxDd0hXRDJJR004aVZJaDN0SS92WTVKWDFTY2h3R1lwdjBZTUp1bzFoS21FWHhLU21YVmdkenZSU0JqcG14Z1B3a09qSE5PVjdaZ1FVZWFEb2t4c05NSFQ4Q0V6M3JXVWpRWFBoR2hud3FFRGp4dDh4TXlxR0tRcnh6TWg0dG5ab3NKT3JLUTVoR1pTWGxoRTA1bjlNUVBaK3JFa2hQRzU5V21YWlE2Vzhuc201RTNkQjBESzU0d0hxcUdIWVdUZ0FQeE14aTBPUkpQVXUvSE5MeUhpT2RZaW1PQkhpTyt0Wjl5NmcxclFtOFNWNG4za1M1T2VvNEYyRVdZeHJxWnVJM1JsL0V4S3VndENucEhJT0M3S1JFZUFlZjR6eHAya0xYVmxCa0pJaGNqMFg4S05oTzh6cnIvUlk5MlU0NXNRa3p4WW9DRVk0anJHVmRjQjZUc2c3enlwNHFvZ3dYRHVjVW9JNDQ3QmQxbXRSUVp6MWZEeXpUQUltYUUxRU1Iekg2Z1BpeEJkZm9CSjN4a2lPcENtYWhFeFkzWFVZSTVEUW1Ca2FKNktUV1lFRzVRWkNDRjlwUUt4SisxcGt5Y1doSWd5UmtyZkdjcnFybUVNdzArbHZCWE1HU0d3b0xTNVlabE5tV3VONnUySEVHQ0hWQ2dXVHo4MEc2SVc1V1JJWll3MGVjZnZDRUhQbFgxV1VHTlFaNW9hUS9TK29mT084WGxFTmxxc0NEbGZha3pJMjg2a3pDUlcxOXJTRTZJZFdNSTg2UHpDWjhiUGpzc21MVXhPK0tnUU1KQnBndUdzcnRuN1J5ay9Lb0dUU05Ebk9LM2JRcnhqWnZaaSszV3lHR1ZHd09JTDN1UjNwVy9nLzV1S0RsVWcvWTdKZDVqb1ZHMFpQK2I4R09QblJHU2p3RzVTWHl5OUN4TWZ4c0dQeFB2dzVPS1U3bjVkbVRJaHNQemVGci9ET0VCWTZwT01MeVg2TTROajFIcFM4TEVxNXR6QmgxN1pYTXFQM3ZxcHlidWxOb1E4NS9DYkdtQUI5cGZ5WHl3cUxMK0RSamltcTQvc0xMUWpwQm1ydTZWZ1ZxWjg0S2lPcXJhb0Y5UmhIZGVUR1Ntd1dOQ2pTMFVQUkxEMFFSTWdHTHVGbEJjbWFCOHBMOTQ1S3JCRDZqWDdoVUNIcGJ4VHhXOVd3SkUzbkkvSEJoY08rZXRsaDRyQWlJVDYxYlprSStMN2lCNkVzL1J5NmZzRFJMN1dyUFlFN2c1ZG1iQTAwYU1yV2UwWmZRQVQvbDdHbmE0Z0ZFc0hXR08zR01nMFRyd0xkWHBFYXBQN3RmZitCN09kVWQ2S1ZNSzBBQUFBQUVsRlRrU3VRbUNDXCIsXG4gICAgICAgICAgICBBRkdBUjogXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUdRQUFBQkxDQU1BQUFDeHh0S0ZBQUFBQVhOU1IwSUIyY2tzZndBQUFBbHdTRmx6QUFBdUl3QUFMaU1CZUtVL2RnQUFBcnRRVEZSRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRndOQXJnQUFBT2wwVWs1VEFCYzJVV2gzZ1lpT2tJbUNlR3BVT0JzQkRERmZsTDdjOS8vNDM4R1paRFVQSGx5bjIvejlyV01qQ0QrYjVQYnE0TmpUMGVuMXBFY0xBanVNL3FLRVowUW1Da0dmNGU1REJCQzFoazRUU2JEZGJoWVVmUFA1Z0RRdGVidHYrM0l2QndZcGE3cmplaEpHeXV1Uk9Ra3k1VlB5aFNIdHZab2RpeWd1MTlBNnd6emlEcFBzTXdNZ0JheHNaakFpUWxza1d0cldUWmRWZlhiRW5lYXk1L285U3pkSXVDcHdzOGwxdDhaL2xXSVI4ZEljTE85MG1GWVljUTNadkt2UHNaeU54VkNoSlY1QVYvQk02SzRaV1dHbUh4ckhvQlZLSjZWUDNzaVBmc0RWcjdiVXk4NVlsbDJxbzJtM2RLK2ZBQUFGUFVsRVFWUjRuTzNZZjFCVVJSd0E4TytpcFUwY0NYRXlnQ1Y0amlrSWpPaVVJQ3FjT0lOQjhYTlNCbFIralNERXIxSUpGSkFBQllrT0tXNUNTd2drRGtmb0dnSXFFQmdFcVhGTWc4VHB4OEVWVXNaaFJGNlRZbnJ0ZTNmQXZjZmVjY2MxL3RIYy9zSGJ0N3UzbjkzM1k5OStRZkFJRWpJaVJzU0lHQkVqWWtTbVcwNGxVSmlvY3VQL0hXSXgxYmtHVm1vb1lrLzFJdGZhaFBPWEtVSzN0RTVLQytLQSt4OWpsSEJWbDBzeGFvMXVNbXBzOFJYOFVtL0VEYUY3STZvOGIyS2NuaEZxVngrQ3d1YUhXMXY2WFA2V3FBcWNycnFpei9SQmRseTMvRlUxeEtXNDgwYU5Zd1N3Yzc3Z1BhaWE4QXNJTmVpS0JDUFVUUjAzWDlxRVB0ZnBDUXBGcUY5R2QzZjdpVDkwUVN4ZWJEWEJCKzhPUGtLVnVnaDBpc1FUYmxiZ2pCOUM1WE1pY2FnZlgrVkEvSnQzZEJhVUtjS3NQTzRjUGxwdktkR09iUHphQlQ4MnV4QXExbE5RcGlYL3hOWGdQZ01IVzdRZzlpRzlFdkMyUm9Yekl1aiswcXJ3UlF0WWNsd2prb0hPQUVTamQzVmRMb2hwNy9MVEFHdmRjelFnWGx2TGdUZnBtMjBJZ1ZNaXQxb084ZWdJRVFsYWN3YTRheDBQRzJnQW1EdTdpc0F5TklPQUhFY25BU1VYcUYrcUNJYytHTHhFWjR1K0FaQUVYNXVwVy9mNmdsQnd6YVdhQzY2QTgwQ2xPbFBTMHcwTFZrMHZFRE9JcGJtY00zeUVNWThkOWgvREd5VkRPTWNQd0hjeXlmVFlUTjNoVjJPYXdEUWxBV2RUNm1EcGhKUXhHV0Z2R3k5cy95ekVJcnNBc2d1WVRTa0VqbzVoK0xWYUlDR1E4MTB4RVhGSXpZTGNsbm8yWXVZc3lVTlJqSlpLaEpzYUNaVVoxTXVjWk5NUDBDZTlBeDdMQVhwN0tBUUs5eEFScUM2OUNVWGhiS1RtQUJRUHNXNDZqVUMwckcvYkI5UnBVanIrWS9mVUtPeWtYMmthZ2JkRGlRaUlVcUZrSnd1SkdQa1dUcjdDYXFoRW9QUjhGMmhFbGozWlNVVE9KMExndG1BbUVoU2VBTTkxRWhDdURIaURDbEFnRWlJOEpBY2J1MmRJU05UM0V1ODFHVXhFSElmZ1BYOENrcmtzRnVjNDBTVWt4REY1SDhCcEZFTkEwcW9WY0dJM0UybHVGVUUrNjc3VHlPaW5WT240d2ZlSmlOZEFPM0FPWmhFUWdWQnVHbnVBaWZCbFkzRHFKUkxTSk0yQnl1enRaS1R0clZYVVJBbElVd3c0Y2VxWkNIeXhGeDdjWjYyTU5QS2dDQS8wcDB3TkNKVGxJaUxTdWdlcU0zdFp5QWtCY0hOWk4wV0owRm1OQ0NRMGtCQ3hTU3pjbmdRV0VydjRISnl0cnRRZkNiSVN6MGJ5M2NLZ1BIbUlqVUJ0bWNSYmRGOS9CTElYQ21jaHEvOVV3RWRlVTJjekNEOHJGTXFlM3FyZWxOOWZEMTNLNzhKRnZLNWNwQllFdnFjbkNFWDBxR3doL0djcTAvMFFPanZWOTJUUUV6OEs2ZGVuTnhScTN4TkJ6UWc0SFhVSHcxUGNoa3dvNnl5ZFBsZi9Ncm9YQjhGbXo0bDBBNG44aFRVeVVJZzN6cFF3dnZFZnJnNEErS1J1Zmp1VnFYUTUvYTRFeW0yMnE3ME96TjFLbmhuK051MlNoZnZNbTBpTWFCWUNXSlZ0VWk5azdidlFGUUYrWUV3V1BaVE9pN0NZRU9CUmNsWjZaRENLMlR0SXQ4ZTlxSWZDSnRVeHZsZFB3YndqdVpTNkJMYlpEUlhNbXRsNzRhdnVkZFJ5Rk8rL3JqRk05dzJZZVJlUy9rSnRwanoyV3pteUswbTcrdERNZlhUUTRaY285L3RkSjhLaHZpSksrZXE5K1ZqRTdHcHlmQklsOHUxV1ZuZDRLRGhEeERaVDZUSXlPOXVpakx0UTNGZ3BxWW1tU012TzVGaFRtekxMdStNZnNxRTl6SWNkRWRpOXZNSjMrTm4yS2xXb3hXbm11MmlJbHJURWpHbGp1eVZxZTAxUWNNVmZwWlRXdXEzbklXSE1vdnhyNmxHamQxN2ZvUnNhZTlJZS9WbzBUdkw4WkZxYjRJRHN4K0VWdjBtMXRaZzdqby9rZXhha2hqaTFFYXBNUGRmN29UTHh3RnhkNlBvZkNaOTduQW51U28vQ3Vyc1hZTnRpOUh6VmpTRHBLVVhGM0QvVUJ6RW9HUkVqWWtTTWlCSDUzeVAvQW5QNjJsdm9XR0JzQUFBQUFFbEZUa1N1UW1DQ1wiLFxuICAgICAgICAgICAgQUZHVEQ6IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFRUFBQUFvQ0FZQUFBQ2hESmZYQUFBQUFYTlNSMElCMmNrc2Z3QUFBQWx3U0ZsekFBQUxFd0FBQ3hNQkFKcWNHQUFBQmZkSlJFRlVlSnp0bWd0TVYxVWN4L0V2UXFSamtKcXZiT3ZCWTdaaXkrd2hCZmJhVWtkbEdKbHJwVm5wY0QwWXEwa1BzQWRwV1paSk9XMXJ0YVhyWldJU2lITkthMlBydFRWRGhiU0FtdE02TTUwcmhHSFo5OGY5bnY0Lzd2OWUvZ1grdWNJNjIyZjhmNy96Ty9lYzMrK2VjKzY1djB0YzNBQXJKaTV6RC9ndTZIRUVXaVFBb0NIV25kd0Y3b2hwSjcwb0dOTXc4Q2lZRE5MQlVwQVVpNDZHZ2c1dzVKUmZ2SThGWThvQko4RW40SFgranMzTndvV3ZCTE5pY3ZFK0ZJd3BFWlNBeTBBYW1BZUc5RWZIaGFBS2pJcDVaOTc5SjROYVVLeDByNEIzbEx3QTFJQnpsZTVNc0FUVWVWQWdOcUhyMW9YQUkyQkd0RUZVYzlwTmo0R1BVUXY2eldiLzlVclhSbDBLNVEvMTBzRGZNV0FmZFY1OEtuWndQaDJjQkkzUzZIN0JaeEJiMlRDdlA1ejI2UDhhOXYrRjBuVlFkeGJsanluUG9mdzg1WjlBbWVoQkxpaW5mcXZZd2ZrTUJxRXB6a2JJWnhDMUFRY2gxeU1JOW82bVV0NUUrVTdLT3lqUGMxMnJ3QldFeklFY2hFN1hUUGlJOG0yVXQxRit5bld0MjZtdkZsa0ZvVEZhRU94eTJNQ3AxZCs4eGY1L1ZqbzdFNVpSUGt3NW5XTmVUUGxQVUtIYWZlQVRoRDNSZ2xEVHd3WnpPbEdoeG55R21oMWVWREVJR1JGQk1CNm5MK2krWk4xNjQ1elFUa2V1OExtQmw0TEhsWjNkT3pZekNGa013aTR4Ym1UbEV0ZEY3bFlCbXVEVjBVQXBHUCtGWUR0OUtSY2RuQzlnRUtyRjRBSFhkUG5GSmE4TzJvbi9XakRtNFdDTGNRNUhYNEcvNk1zQk1GcHM0SHdWZzFCa0crVVo1MlNvblc4QkpZRjYwOHVDY1dkNDNOaFZZS3pVdy9FOEJ1QjNrT3B1UE5JNEx5b1RBeG45S1N6d1lTcTRHb3pYZWpnOUJSeG5FT1lHTmI1QUNoeU9CeVdnRFhTQytVR1BxZDhLbkIwR0ZvRm1lMElFT1VHUEsrWUZUaWFCbVdBbE9BQk9nRm93RzhUKzlUdFdCWU1mQ3FhUlhKQUlSbEsrSGp3QktzRm5YUE1HYkFRTElqYS9nVm80clc4QXBlQUZVRWMyZ1RYVUx3UzNnRWxCai9mL01pQUxwazRyZDAyTlBFSStCNHZkOW5qdWpnTnZtUERiV3p2NEdqempQbDVEamdjdkFrUGJYOEZPNCtRS1I5TkdqclNTTFhyUG82OXp3RkZRNHpWMjZLZUQzK1IwNkZPL3d1L1VDOTE1NEhoWFcrNmM0bmc5Mktub3BMNVVOWnpOaHZZazFrU25qbENXdnpuSy9qbDFZcE5YM3diVmRnVnRiTTRnNGx1Q3ZCeXhydFdqTHNsMXhML1p3MmFqcWk5MDFWMWxmZEJCY0orczdxRituN29yN1d3b3laWng2b0tTcXQvQU9wa2h5ZFFmb2k1TjJhYUMrK3hKcmc5QldNZzZtMC9jWlZ6Wlp4Tk92UWtud0xXcXp1WXZ2KzhwQ0RkUjM4eEdyOXBHSU5GalVDRytiNGpOdmRRMXE2Qmx1ZHZRSnFlSElFeGhYWXRMTDh1c2xYVlp4bmxSa3QrelhIWTJyMkRyajlvYllweFBDNkpyMUVISTUvTlhtS3YyaW5JMnNxK2l5N3ljb2MxcTJxeWhQTWUxZkdSdmVCZk1WRzF5VmIwZnJhNSs1bE5mU1hrYTVkMTZOcWpsc01nNFdTWjdFMVBVY3VnV0JDOHE3QW5MaE44eXkvNUZFTllwM1VSUWFweTlvME01OWlUcmJVYTV6VVIrSTdDNWpoWjF2UkFkRVgweGc1aXJsc1d0eXRZbVVtVHB5SksxU2RnZHF0KzlPZ2pMd1ZMd0xGOHlSRGREWGZCcE5wSW5RWUpIQUdTSy9rQ2JmSjhnRFdkQXhPWVlCMllIRS9HbDJXczVxRm5nUjRPeXJiUXpnWEtLQ3F6Tm1uWGJHUDg1V3VKM3NkMFByQjdHWnh2bmNTUU42OEZGcXJOTFREZ3ArdzExQ1dDdGNUYk1xY3IyWWhOZW56b0kzM29Fd1c2TUxlcWFzdTlJa2tTK0w3aFRiVTIwejZQOVpoMEU2c1liSjdsaWc5WnRZMHhSUVVnQXU2bVg4MElpTHlEdjV3ZlZCZmFDUDVRc2EzSXNiU2VCSDEyMmRXcEoyTDNHN2dsZVFiamNxRDNCaERQSjYzMW1XcjZkclY0elFkbGxtdkE1cDJ0UDJBSU9nWkEyaEh3Qk9NeEF2Ry9yMFdnRWVOQkVydCtIWkVtNE9oc0NiZ1FyamJNK3JXMlI0UWFHditlRC9XQ1ZoMVB5TFZMVzcxckt5NDN6VHhvWlhrR2d6ZHZHT1kvSW8xZys1Y3RUSk5zbndQSy9EcjU3bkEzRTVKQ1RndXBLU0lJUlBUWVlyQVdPWjRPRERJUXNrYlRvclFaaGdlUEo0Q1crcHg4RFJTQStlc3RCV09ENEdQQWE2SkRqTkhoWUFoVDB1QUlwY0h3VWVBenM1K3g0a3htZUNhR0JuTDdxVFJHSFFRNG9BOXU1aWJhRFJtWjl0b0dYUVdIMHF3VlgvZ2JhYlA1Y0NSYUYyQUFBQUFCSlJVNUVya0pnZ2c9PVwiLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JQcm9maWxlKG9wTmFtZSkge1xuICAgICAgICBsZXQgb3BlcmF0b3JfcHJvZmlsZSA9IHtcbiAgICAgICAgICAgIEFGR0FXOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FmZ2hhbiBUZWxlY29tJyxcbiAgICAgICAgICAgICAgICBtb2JpbGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgYWRkcmVzczogXCI0dGggRmxvb3IgUG9zdCBQYXJjZWwgQnVpbGRpbmcgTW9oYW1tYWQgSmFuIEtoYW4gV2F0dCBLYWJ1bCBBZmdoYW5pc3RhbiBcIixcbiAgICAgICAgICAgICAgICBlbWFpbDogXCJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFGR0FUOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FmZ2hhbiBXaXJlbGVzcyBDb21tdW5pY2F0aW9uIENvbXBhbnknLFxuICAgICAgICAgICAgICAgIG1vYmlsZTogXCJcIixcbiAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIlNoYXItZS1OYXcsIENoYXJheWVlIEhhaGkgWWFxb2JcIixcbiAgICAgICAgICAgICAgICBlbWFpbDogXCJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFGR0VBOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0V0aXNhbGF0ICBBZmdoYW5pc3RhbicsXG4gICAgICAgICAgICAgICAgbW9iaWxlOiBcIjA3MDAgODMwIDgzMFwiLFxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiRGFydWxhbWFuIFJvYWQsIEhhamFyaSBOYWphcmksIEthYnVsLCBBZmdoYW5pc3RhblwiLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQUZHQVI6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTVROIEFmZ2hhbmlzdGFuJyxcbiAgICAgICAgICAgICAgICBtb2JpbGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgYWRkcmVzczogXCJQYXJrIFBsYXphLCBPcHBvc2l0ZSBQYXJrLWUtU2hhaHItZS1OYXcsIEthYnVsLCBBZmdoYW5pc3RhblwiLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQUZHVEQ6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUm9zaGFuL1RlbGVjb20gRGV2ZWxvcG1lbnQgQ29tcGFueSBBZmdoYW5pc3RhbiBDb3JwLicsXG4gICAgICAgICAgICAgICAgbW9iaWxlOiBcIlwiLFxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSG91c2UjMTMgTWFpbiBTdHJlZXQsIFdhemlyIEFrYmFyIEtoYW4sIEthYnVsIEFmZ2hhbmlzdGFuXCIsXG4gICAgICAgICAgICAgICAgZW1haWw6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcGVyYXRvcl9wcm9maWxlW29wTmFtZV07XG4gICAgfVxuXG5cblxuICAgIC8vIGNvbnZlcnRfbXNfcGF5bG9hZF9kYXRlX3RvX2xhdGVzdChkYXRhLCBzZXJpZXNLZXlzLCBkYXlLZXksIGRheUtleUZvcm1hdCwgZGF5S2V5T3JkZXJBc2MpIFxuICAgIC8vICAgICBpZiAoZGF0YSA9PSBudWxsIHx8IGRhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAoZGF5S2V5ID09IHVuZGVmaW5lZCB8fCBkYXlLZXkgPT0gbnVsbCkge1xuICAgIC8vICAgICAgICAgZGF5S2V5ID0gJ3JlY29yZERhdGUnO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmIChzZXJpZXNLZXlzID09IHVuZGVmaW5lZCB8fCBzZXJpZXNLZXlzID09IG51bGwpIHtcbiAgICAvLyAgICAgICAgIHNlcmllc0tleXMgPSAnc2VyaWVzJztDb21tb25TZXJ2aWNlXG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgaWYgKGRheUtleUZvcm1hdCA9PSB1bmRlZmluZWQgfHwgZGF5S2V5Rm9ybWF0ID09IG51bGwpIHtcbiAgICAvLyAgICAgICAgIGRheUtleUZvcm1hdCA9ICdZWVlZLU1NLUREJztcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAoZGF5S2V5T3JkZXJBc2MgPT0gdW5kZWZpbmVkIHx8IGRheUtleU9yZGVyQXNjID09IG51bGwpIHtcbiAgICAvLyAgICAgICAgIGRheUtleU9yZGVyQXNjID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuXG4gICAgLy8gICAgIGlmIChkYXRhWydyZXR1cm5Db2RlJ10gPT0gMjAwKSB7XG4gICAgLy8gICAgICAgICBsZXQgc2VyaWVzX2NvbnRhaW5lciA9IHt9O1xuICAgIC8vICAgICAgICAgbGV0IHBheWxvYWRBcnJheSA9IFtdO1xuICAgIC8vICAgICAgICAgaWYgKGRheUtleU9yZGVyQXNjKSB7XG4gICAgLy8gICAgICAgICAgICAgZGF0YVsnUGF5bG9hZCddLnJldmVyc2UoKTtcbiAgICAvLyAgICAgICAgIH1cblxuICAgIC8vICAgICAgICAgJC5lYWNoKGRhdGFbJ1BheWxvYWQnXSwgZnVuY3Rpb24gKGluZGV4LCByZWNvcmQpIHtcbiAgICAvLyAgICAgICAgICAgICBsZXQgcyA9ICcnO1xuICAgIC8vICAgICAgICAgICAgIGxldCBzYSA9IHNlcmllc0tleXMuc3BsaXQoJ3wnKTtcbiAgICAvLyAgICAgICAgICAgICAkLmVhY2goc2EsIGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHMgKz0gcmVjb3JkW3ZdO1xuICAgIC8vICAgICAgICAgICAgICAgICBzICs9ICcjJztcbiAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgICAgICBsZXQga2V5O1xuICAgIC8vICAgICAgICAgICAgIGlmIChzIGluIHNlcmllc19jb250YWluZXIpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAga2V5ID0gc2VyaWVzX2NvbnRhaW5lcltzXTtcbiAgICAvLyAgICAgICAgICAgICAgICAga2V5ID0gbW9tZW50KGtleSwgZGF5S2V5Rm9ybWF0KS5zdWJ0cmFjdCgxLCAnZGF5cycpLmZvcm1hdChkYXlLZXlGb3JtYXQpO1xuICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGtleSA9IG1vbWVudCgpLmZvcm1hdChkYXlLZXlGb3JtYXQpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICBzZXJpZXNfY29udGFpbmVyW3NdID0ga2V5O1xuICAgIC8vICAgICAgICAgICAgIHJlY29yZFtkYXlLZXldID0ga2V5O1xuICAgIC8vICAgICAgICAgICAgIHBheWxvYWRBcnJheS5wdXNoKHJlY29yZCk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgICAgIGlmIChkYXlLZXlPcmRlckFzYykge1xuICAgIC8vICAgICAgICAgICAgIHBheWxvYWRBcnJheS5yZXZlcnNlKCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICBkYXRhWydQYXlsb2FkJ10gPSBwYXlsb2FkQXJyYXk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIGRhdGE7XG4gICAgLy8gfVxuXG4gICAgaXNFbXB0eU9yTnVsbE9yVW5kZWZpbmVkRm9yTmFuKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldGFic29sdXRlVmFsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybk51bGxWYWx1ZUlmRW1wdHlPclVuZGVmaW5lZCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY3VzdG9tVmFsdWVTb3J0ZXIodmFsdWUxLCB2YWx1ZTIpOiBhbnkge1xuXG4gICAgLy8gICAgIC8vIEhhbmRsaW5nIG51bGwgdmFsdWVzXG4gICAgLy8gICAgIGlmICghdmFsdWUxICYmIHZhbHVlMikgeyByZXR1cm4gLTE7IH1cbiAgICAvLyAgICAgaWYgKCF2YWx1ZTEgJiYgIXZhbHVlMikgeyByZXR1cm4gMDsgfVxuICAgIC8vICAgICBpZiAodmFsdWUxICYmICF2YWx1ZTIpIHsgcmV0dXJuIDE7IH1cblxuICAgIC8vICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHN0cmluZ3MgYXJlIGVxdWl2YWxlbnQgaW4gdGhlIGN1cnJlbnQgbG9jYWxlXG4gICAgLy8gICAgIGxldCBvMSwgbzI7XG4gICAgLy8gICAgIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJykge1xuICAgIC8vICAgICAgICAgbzEgPSB2YWx1ZTEucmVwbGFjZSgnIE1CJywgJycpO1xuICAgIC8vICAgICAgICAgbzEgPSB2YWx1ZTEucmVwbGFjZSgnIEdCJywgJycpO1xuICAgIC8vICAgICAgICAgbzEgPSB2YWx1ZTEucmVwbGFjZSgnIFRCJywgJycpO1xuICAgIC8vICAgICAgICAgbzEgPSB2YWx1ZTEucmVwbGFjZSgnIEtCJywgJycpO1xuICAgIC8vICAgICAgICAgbzEgPSB2YWx1ZTEucmVwbGFjZSgnIEJ5dGUnLCAnJyk7XG4gICAgLy8gICAgICAgICBvMSA9IHZhbHVlMS5yZXBsYWNlKCcgQnl0ZXMnLCAnJyk7XG4gICAgLy8gICAgICAgICBvMiA9IHZhbHVlMi5yZXBsYWNlKCcgTUInLCAnJyk7XG4gICAgLy8gICAgICAgICBvMiA9IHZhbHVlMi5yZXBsYWNlKCcgR0InLCAnJyk7XG4gICAgLy8gICAgICAgICBvMiA9IHZhbHVlMi5yZXBsYWNlKCcgVEInLCAnJyk7XG4gICAgLy8gICAgICAgICBvMiA9IHZhbHVlMi5yZXBsYWNlKCcgS0InLCAnJyk7XG4gICAgLy8gICAgICAgICBvMiA9IHZhbHVlMi5yZXBsYWNlKCcgQnl0ZScsICcnKTtcbiAgICAvLyAgICAgICAgIG8yID0gdmFsdWUyLnJlcGxhY2UoJyBCeXRlcycsICcnKTtcbiAgICAvLyAgICAgICAgIG8xID0gbzEucmVwbGFjZUFsbCgnLCcsICcnKTtcbiAgICAvLyAgICAgICAgIG8yID0gbzIucmVwbGFjZUFsbCgnLCcsICcnKTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIG8xID0gdmFsdWUxO1xuICAgIC8vICAgICAgICAgbzIgPSB2YWx1ZTI7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc3QgdjEgPSBwYXJzZUZsb2F0KG8xKTtcbiAgICAvLyAgICAgY29uc3QgdjIgPSBwYXJzZUZsb2F0KG8yKTtcbiAgICAvLyAgICAgLy8gcmV0dXJuIHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XG4gICAgLy8gICAgIGlmICh2MSA+IHYyKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gMTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBlbHNlIGlmICh2MSA8IHYyKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gLTE7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIDA7XG4gICAgLy8gfVxuXG4gICAgY3VzdG9tVmFsdWVTb3J0ZXIodmFsdWUxLCB2YWx1ZTIpOiBhbnkge1xuXG4gICAgICAgIC8vIEhhbmRsaW5nIG51bGwgdmFsdWVzXG4gICAgICAgIGlmICghdmFsdWUxICYmIHZhbHVlMikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsdWUxICYmICF2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZTEgJiYgIXZhbHVlMikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBzdHJpbmdzIGFyZSBlcXVpdmFsZW50IGluIHRoZSBjdXJyZW50IGxvY2FsZVxuXG4gICAgICAgIGNvbnN0IHYxID0gY29udmVydFN0cmluZyh2YWx1ZTEpO1xuICAgICAgICBjb25zdCB2MiA9IGNvbnZlcnRTdHJpbmcodmFsdWUyKTtcbiAgICAgICAgLy8gcmV0dXJuIHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XG4gICAgICAgIGlmICh2MSA+IHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIGlmICh2MSA8IHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY29udmVydFN0cmluZyh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGxldCBvdXQ6IGFueTtcbiAgICAgICAgICAgICAgICBvdXQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBvdXQgPSBvdXQucmVwbGFjZShcIk1CXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIG91dCA9IG91dC5yZXBsYWNlKFwiR0JcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgb3V0ID0gb3V0LnJlcGxhY2UoXCJUQlwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBvdXQgPSBvdXQucmVwbGFjZUFsbChcIixcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQob3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjdXN0b21WYWx1ZVNvcnRlckZvckJhcih2YWx1ZU9uZSwgdmFsdWVUd28pIHtcblxuICAgICAgICBjb25zdCBwYXJzZXIxID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICBjb25zdCBwYXJzZXIyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICBjb25zdCBkb2NPbmUgPSBwYXJzZXIxLnBhcnNlRnJvbVN0cmluZyh2YWx1ZU9uZSwgJ3RleHQvaHRtbCcpO1xuICAgICAgICBjb25zdCBkb2NUd28gPSBwYXJzZXIyLnBhcnNlRnJvbVN0cmluZyh2YWx1ZVR3bywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlRWxlbWVudCA9IGRvY09uZS5xdWVyeVNlbGVjdG9yKCcuYmFyJyk7XG4gICAgICAgIGNvbnN0IG51bWJlclRleHRPbmUgPSBOdW1iZXIodmFsdWVFbGVtZW50LnRleHRDb250ZW50LnRyaW0oKS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgIGNvbnN0IHZhbHVlRWxlbWVudFR3byA9IGRvY1R3by5xdWVyeVNlbGVjdG9yKCcuYmFyJyk7XG4gICAgICAgIGNvbnN0IG51bWJlclRleHRUd28gPSBOdW1iZXIodmFsdWVFbGVtZW50VHdvLnRleHRDb250ZW50LnRyaW0oKS5yZXBsYWNlKC8sL2csICcnKSk7XG5cbiAgICAgICAgaWYgKCFudW1iZXJUZXh0T25lICYmIG51bWJlclRleHRUd28pIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW51bWJlclRleHRPbmUgJiYgIW51bWJlclRleHRUd28pIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXJUZXh0T25lICYmICFudW1iZXJUZXh0VHdvKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHN0cmluZ3MgYXJlIGVxdWl2YWxlbnQgaW4gdGhlIGN1cnJlbnQgbG9jYWxlXG5cbiAgICAgICAgY29uc3QgdjEgPSBjb252ZXJ0U3RyaW5nKG51bWJlclRleHRPbmUpO1xuICAgICAgICBjb25zdCB2MiA9IGNvbnZlcnRTdHJpbmcobnVtYmVyVGV4dFR3byk7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xuICAgICAgICBpZiAodjEgPiB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAodjEgPCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgb3V0OiBhbnk7XG4gICAgICAgICAgICAgICAgb3V0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgb3V0ID0gb3V0LnJlcGxhY2UoXCJNQlwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBvdXQgPSBvdXQucmVwbGFjZShcIkdCXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIG91dCA9IG91dC5yZXBsYWNlKFwiVEJcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgb3V0ID0gb3V0LnJlcGxhY2VBbGwoXCIsXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICB9XG5cbiAgICAvLyBmb3JtYXRUb0J5dGUodmFsdWUsIHNpemUpIHtcbiAgICAvLyAgICAgbGV0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xuICAgIC8vICAgICBsZXQgaW5kZXggPSBzaXplcy5maW5kSW5kZXgoeCA9PiB4ID09PSBzaXplKTtcblxuICAgIC8vICAgICBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgLy8gfVxuXG4gICAgb25FeGNlbEV4cG9ydGluZyhlLCBleGNlbF9kYXRhLCByZXBvcnRfbmFtZSkge1xuICAgICAgICB0aGlzLkpTT05Ub0NTVkNvbnZlcnRvcihleGNlbF9kYXRhLCByZXBvcnRfbmFtZSwgdHJ1ZSk7XG4gICAgICAgIGUuY2FuY2VsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVIdG1sQ29udGVudEZyb21EYXRhKGNvbHVtbnMsIHJvd3MpIHtcbiAgICAgICAgLy8gLnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKTtcblxuICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgICAgICAgICAgbGV0IHJvd1ZhbHVlcyA9IHJvdy52YWx1ZXM7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1ZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChyb3dWYWx1ZXNbaV0gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3dWYWx1ZXNbaV0udG9TdHJpbmcoKS5pbmNsdWRlcyhcIjwvaT5cIikpXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZXNbaV0gPSByb3dWYWx1ZXNbaV0ucmVwbGFjZSgvW14wLTlcXC5cXCxdL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3VzdG9taXplRXhjZWxDZWxsKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudmFsdWUgJiYgdHlwZW9mIG9wdGlvbnMudmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWVyaWNTdHJpbmcgPSBvcHRpb25zLnZhbHVlLnJlcGxhY2UoLywvZywgJycpO1xuICAgICAgICAgICAgaWYgKCFpc05hTihOdW1iZXIobnVtZXJpY1N0cmluZykpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy52YWx1ZSA9IE51bWJlcihudW1lcmljU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUh0bWxGb3JKb2JzdW1tYXJ5Q29udGVudEZyb21EYXRhKGNvbHVtbnMsIHJvd3MpIHtcbiAgICAgICAgLy8gLnJlcGxhY2UoLzxcXC8/W14+XSsoPnwkKS9nLCBcIlwiKTtcbiAgICAgICAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIGxldCByb3dWYWx1ZXMgPSByb3cudmFsdWVzO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocm93VmFsdWVzW2ldICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm93VmFsdWVzW2ldLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCI8L3NwYW4+XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcm93VmFsdWVzW2ldID0gcm93VmFsdWVzW2ldLnJlcGxhY2UoLzxcXC8/W14+XSs+L2csICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0RGF5c0JldHdlZW5EYXRlcyhzdGFydCwgZW5kLCBkYXlOYW1lKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGRheXMgPSB7IHN1bjogMCwgbW9uOiAxLCB0dWU6IDIsIHdlZDogMywgdGh1OiA0LCBmcmk6IDUsIHNhdDogNiB9O1xuICAgICAgICBsZXQgZGF5ID0gZGF5c1tkYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3Vic3RyKDAsIDMpXTtcbiAgICAgICAgLy8gQ29weSBzdGFydCBkYXRlXG4gICAgICAgIGxldCBjdXJyZW50ID0gbmV3IERhdGUoc3RhcnQpO1xuICAgICAgICAvLyBTaGlmdCB0byBuZXh0IG9mIHJlcXVpcmVkIGRheXNcbiAgICAgICAgY3VycmVudC5zZXREYXRlKGN1cnJlbnQuZ2V0RGF0ZSgpICsgKChkYXkgLSBjdXJyZW50LmdldERheSgpICsgNykgJSA3KSk7XG4gICAgICAgIC8vIFdoaWxlIGxlc3MgdGhhbiBlbmQgZGF0ZSwgYWRkIGRhdGVzIHRvIHJlc3VsdCBhcnJheVxuICAgICAgICB3aGlsZSAoY3VycmVudCA8IG5ldyBEYXRlKGVuZCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBEYXRlKCtjdXJyZW50KSk7XG4gICAgICAgICAgICBjdXJyZW50LnNldERhdGUoY3VycmVudC5nZXREYXRlKCkgKyA3KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEFsbFNldmljZUFwaUpzb24oYXBpSnNvbk9iamVjdCkge1xuICAgICAgICBsZXQgc2VydmljZV9hcGk6IGFueTtcbiAgICAgICAgc2VydmljZV9hcGkgPSB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGFwaUpzb25PYmplY3QucmVxdWVzdElkLFxuICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uR3JvdXA6IHtcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogXCJzdGFydERhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBcInJlY29yZF9kYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwiZ3JlYXRlclRoYW5PckVxdWFsc1RvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXBpSnNvbk9iamVjdC5zdGFydERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yaWNoQ2x6OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbS5nYW1tYS5jb21wb25lbnRzLmFwaWF1dG9tYXRpb24uZW5yaWNobWVudC5BcGlHZW5lcmljRW5yaWNobWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucmljaE1ldGhvZDogXCJjb252ZXJ0TmFycm93U3RyaW5nVG9TaG9ydFN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBcImVuZERhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBcInJlY29yZF9kYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwibGVzc1RoYW5PckVxdWFsc1RvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXBpSnNvbk9iamVjdC5lbmREYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucmljaENsejpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb20uZ2FtbWEuY29tcG9uZW50cy5hcGlhdXRvbWF0aW9uLmVucmljaG1lbnQuQXBpR2VuZXJpY0VucmljaG1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnJpY2hNZXRob2Q6IFwiY29udmVydE5hcnJvd1N0cmluZ1RvU2hvcnRTdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGFwaUpzb25PYmplY3Quc3J2VHlwZSAhPSB1bmRlZmluZWQgfHwgYXBpSnNvbk9iamVjdC5zcnZUeXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNlcnZpY2VfYXBpLmZpbHRlci5jb25kaXRpb25Hcm91cC5jb25kaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IFwic3J2VHlwZVwiLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IFwic3J2X3R5cGVcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogYXBpSnNvbk9iamVjdC5zcnZUeXBlT3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBpSnNvbk9iamVjdC5zcnZUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwaUpzb25PYmplY3QucmVjb3JkVHlwZSAhPSB1bmRlZmluZWQgfHwgYXBpSnNvbk9iamVjdC5yZWNvcmRUeXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNlcnZpY2VfYXBpLmZpbHRlci5jb25kaXRpb25Hcm91cC5jb25kaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIFwic291cmNlTmFtZVwiOiBcInJlY29yZFR5cGVcIixcbiAgICAgICAgICAgICAgICBcInRhcmdldE5hbWVcIjogXCJyZWNvcmRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIFwib3BlcmF0b3JcIjogXCJlcXVhbHNcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGFwaUpzb25PYmplY3QucmVjb3JkVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5zb3VyY2VWYWx1ZSAhPSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGFwaUpzb25PYmplY3Quc291cmNlVmFsdWUgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNlcnZpY2VfYXBpLmZpbHRlci5jb25kaXRpb25Hcm91cC5jb25kaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IFwic291cmNlXCIsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogXCJzb3VyY2VcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcXVhbHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcGlKc29uT2JqZWN0LnNvdXJjZVZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5pblRydW5rVmFsdWUgIT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBhcGlKc29uT2JqZWN0LmluVHJ1bmtWYWx1ZSAhPSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgc2VydmljZV9hcGkuZmlsdGVyLmNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgc291cmNlTmFtZTogXCJpblRydW5rXCIsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogXCJpbl90cnVua1wiLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxdWFsc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFwaUpzb25PYmplY3QuaW5UcnVua1ZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5vdXRUcnVua1ZhbHVlICE9IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5vdXRUcnVua1ZhbHVlICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXJ2aWNlX2FwaS5maWx0ZXIuY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBcIm91dFRydW5rXCIsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogXCJvdXRfdHJ1bmtcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcXVhbHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcGlKc29uT2JqZWN0Lm91dFRydW5rVmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcGlKc29uT2JqZWN0LmV2ZW50VHlwZSAhPSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGFwaUpzb25PYmplY3QuZXZlbnRUeXBlICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXJ2aWNlX2FwaS5maWx0ZXIuY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBcImV2ZW50VHlwZUtleVwiLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IFwiZXZlbnRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBhcGlKc29uT2JqZWN0LmV2ZW50VHlwZS5sZW5ndGggPiAxID8gXCJpblwiIDogXCJlcXVhbHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcGlKc29uT2JqZWN0LmV2ZW50VHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFwaUpzb25PYmplY3QuZXZlbnQgIT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBhcGlKc29uT2JqZWN0LmV2ZW50ICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXJ2aWNlX2FwaS5maWx0ZXIuY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBcInNvdXJjZU5hbWVcIjogXCJldmVudF90eXBlXCIsXG4gICAgICAgICAgICAgICAgXCJ0YXJnZXROYW1lXCI6IFwiZXZlbnRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIFwib3BlcmF0b3JcIjogXCJlcXVhbHNcIixcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGFwaUpzb25PYmplY3QuZXZlbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5kaXJlY3Rpb24gIT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBhcGlKc29uT2JqZWN0LmRpcmVjdGlvbiAhPSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgc2VydmljZV9hcGkuZmlsdGVyLmNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgc291cmNlTmFtZTogXCJkaXJlY3Rpb25cIixcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBcImRpcmVjdGlvblwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxdWFsc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFwaUpzb25PYmplY3QuZGlyZWN0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwaUpzb25PYmplY3QuY291bnRyeSAhPSB1bmRlZmluZWQgfHwgYXBpSnNvbk9iamVjdC5jb3VudHJ5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNlcnZpY2VfYXBpLmZpbHRlci5jb25kaXRpb25Hcm91cC5jb25kaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IFwiY291bnRyeVwiLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IFwiY291bnRyeVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxdWFsc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFwaUpzb25PYmplY3QuY291bnRyeSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcGlKc29uT2JqZWN0LmFwbiAhPSB1bmRlZmluZWQgfHwgYXBpSnNvbk9iamVjdC5hcG4gIT0gbnVsbCkge1xuICAgICAgICAgICAgc2VydmljZV9hcGkuZmlsdGVyLmNvbmRpdGlvbkdyb3VwLmNvbmRpdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgc291cmNlTmFtZTogXCJhcG5cIixcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBcImFwblwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxdWFsc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFwaUpzb25PYmplY3QuYXBuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5ud0NhbGxUeXBlICE9IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5ud0NhbGxUeXBlICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXJ2aWNlX2FwaS5maWx0ZXIuY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBcIm53Q2FsbFR5cGVcIixcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBcIm53X2NhbGxfdHlwZVwiLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxdWFsc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFwaUpzb25PYmplY3QubndDYWxsVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFwaUpzb25PYmplY3QucmF0aW5nR3JvdXAgIT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBhcGlKc29uT2JqZWN0LnJhdGluZ0dyb3VwICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXJ2aWNlX2FwaS5maWx0ZXIuY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBcInJhdGluZ0dyb3VwXCIsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogXCJyYXRpbmdfZ3JvdXBcIixcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcXVhbHNcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcGlKc29uT2JqZWN0LnJhdGluZ0dyb3VwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC50ZXJtaW5hdGlvblZhbHVlICE9IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC50ZXJtaW5hdGlvblZhbHVlICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXJ2aWNlX2FwaS5maWx0ZXIuY29uZGl0aW9uR3JvdXAuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBcInRlcm1pbmF0aW9uQ29kZVwiLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IFwidGVybV9jb2RlXCIsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwibm90ZXF1YWxzXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBpSnNvbk9iamVjdC50ZXJtaW5hdGlvblZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYXBpSnNvbk9iamVjdC5jZWxsSWRWYWx1ZSAhPSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGFwaUpzb25PYmplY3QuY2VsbElkVmFsdWUgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNlcnZpY2VfYXBpLmZpbHRlci5jb25kaXRpb25Hcm91cC5jb25kaXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IFwiY2VsbElkXCIsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogXCJjZWxsX2lkXCIsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwibm90ZXF1YWxzXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBpSnNvbk9iamVjdC5jZWxsSWRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlcnZpY2VfYXBpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc2FvbWUgcmVuZG9tZSBudW1iZXJcbiAgICBwcmltZXJ5UmVuZG9tZUlkKGxlbmd0aCkge1xuICAgICAgICBsZXQgbWFzayA9IFwiXCI7XG4gICAgICAgIG1hc2sgKz0gXCIwMTIzNDU2Nzg5XCI7XG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKVxuICAgICAgICAgICAgcmVzdWx0ICs9IG1hc2tbTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKG1hc2subGVuZ3RoIC0gMSkpXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuICAgIC8vIGZvciBjaGFydCB0b29sdGlwXG4gICAgY2hhcnRUb29sdGlwKGE6IGFueSwgYjogYW55LCBjOiBhbnksIGQ6IGFueSk6IGFueSB7XG4gICAgICAgIHJldHVybiAnPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTMwIGJvcmRlcj0wICBzdHlsZT1cXCdmb250LXNpemU6IDEzcHhcXCc+JyArXG4gICAgICAgICAgICAnPHRyPjx0ZCBzdHlsZT1cXCd0ZXh0LWFsaWduOiBsZWZ0OyBjb2xvcjogd2hpdGVcXCc+ICcgKyBhICsgJzonICsgYiArICc8L3RkPjwvdHI+JyArXG4gICAgICAgICAgICAnPHRyPjx0ZCBzdHlsZT1cXCd0ZXh0LWFsaWduOiBsZWZ0OyBjb2xvcjogd2hpdGU7IHBhZGRpbmctdG9wOiA1cHhcXCc+ICcgKyBjICsgJzonICsgZCArICc8L3RkPjwvdHI+JyArXG4gICAgICAgICAgICAnPC90YWJsZT4nO1xuICAgIH1cblxuXG4gICAgY29udmVydFRvVGl0bGVDYXNlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHdvcmRzID0gdmFsdWUuc3BsaXQoLyg/PVtBLVpdKXxfLyk7XG4gICAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhcGl0YWxpemVkV29yZHMuam9pbignICcpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZm9ybWF0S2V5VmFsdWVQYWlycyhrZXlzLCB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleXMgYW5kIHZhbHVlcyBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkUGFpcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29udmVydFRvVGl0bGVDYXNlKGtleXNbaV0pO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICBmb3JtYXR0ZWRQYWlycy5wdXNoKGAke2tleX0gPSAke3ZhbHVlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVkUGFpcnMuam9pbignIHwgJyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVzQnlLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2gob2JqW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybUhlYWRlckFzS2V5TmFtZShtYWlub2JqOiBhbnkpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhtYWlub2JqKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICBjYXB0aW9uOiBrZXlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvcm1hdERlY2ltYWxWYWx1ZXNGb3JDZHJEYXRhVGFibGUoZGF0YVNvdXJjZSkge1xuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZS5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3SXRlbSA9IHt9O1xuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgIGxldCBudW1WYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG51bVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsdWUgJSAxICE9PSAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW1ba2V5XSA9IHRoaXMucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWMyhudW1WYWx1ZSwgMik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0l0ZW1ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVTYW1wbGVEYXRhKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcsIGZpZWxkczogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgICAgIGxldCBkYXRhc2V0ID0gW107XG4gICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IG1vbWVudChzdGFydERhdGUpO1xuICAgICAgICBjb25zdCBlbmREYXRlTW9tZW50ID0gbW9tZW50KGVuZERhdGUpO1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50RGF0ZSA8PSBlbmREYXRlTW9tZW50KSB7XG4gICAgICAgICAgICBsZXQgcmVjb3JkID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkID09PSAncmVjb3JkRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkXSA9IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFtmaWVsZF0gPSB0aGlzLmdldFJlbmRvbU51bWJlcldpdGhkZWNpbWFscygzLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFzZXQucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZS5hZGQoMSwgJ2RheXMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgIH1cbiAgICBnZXRSZW5kb21OdW1iZXJXaXRoZGVjaW1hbHMobGVuZ3RoLCBleHApIHtcbiAgICAgICAgbGV0IG1hc2sgPSBcIlwiO1xuICAgICAgICBtYXNrICs9IFwiMDEyMzQ1Njc4OVwiO1xuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSlcbiAgICAgICAgICAgIHJlc3VsdCArPSBtYXNrW01hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChtYXNrLmxlbmd0aCAtIDEpKV07XG4gICAgICAgIHJldHVybiB0aGlzLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjQocmVzdWx0LCBleHApO1xuICAgIH1cblxuICAgIGZvcm1hdFRpbWVzdGFtcCh0aW1lc3RhbXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG51bWVyaWNUaW1lc3RhbXAgPSBwYXJzZUludCh0aW1lc3RhbXAsIDEwKTtcbiAgICAgICAgcmV0dXJuIG1vbWVudChudW1lcmljVGltZXN0YW1wKS5mb3JtYXQoJ2RkZGQsIEREIE1NTU0gWVlZWSBISDptbTpzcy5TU1MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZvcm1hdER1cmF0aW9uRnJvbU1pbGlzZWNvbmQobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIGxldCB0b3RhbFNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBsZXQgc2Vjb25kcyA9IHRvdGFsU2Vjb25kcyAlIDYwO1xuICAgICAgICBsZXQgdG90YWxNaW51dGVzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyA2MCk7XG4gICAgICAgIGxldCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjA7XG4gICAgICAgIGxldCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChgJHtob3Vyc30gaG91ciR7aG91cnMgPiAxID8gJ3MnIDogJyd9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChgJHttaW51dGVzfSBtaW51dGUke21pbnV0ZXMgPiAxID8gJ3MnIDogJyd9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHMgPiAwIHx8IHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke3NlY29uZHN9IHNlY29uZCR7c2Vjb25kcyA+IDEgPyAncycgOiAnJ31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xuICAgIH1cblxuXG4gICAgcmVtb3ZlRHVwbGljYXRlcyhqb2JBcnJheSwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuICAgICAgICByZXR1cm4gam9iQXJyYXkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZHVwbGljYXRlID0gc2Vlbi5oYXMoaXRlbVtjb250ZXh0XSk7XG4gICAgICAgICAgICBzZWVuLmFkZChpdGVtW2NvbnRleHRdKTtcbiAgICAgICAgICAgIHJldHVybiAhZHVwbGljYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRLZXkgPSAob2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICByZXR1cm4ga2V5cy5maW5kKGtleSA9PiBrZXkgIT09IFwiZXZlbnRfZGF0ZVwiKTtcbiAgICB9O1xuXG4gICAgY29udmVydFN0cmluZyhpbnB1dCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gaW5wdXRcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYihbYS16XSkvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvKFtBLVpdezIsfSkvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxufVxuIl19