@gnwebsoft/ui 4.0.19 → 4.0.21
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.
- package/dist/{chunk-L6RP3OH2.js → chunk-BWEFHFD4.js} +8 -3
- package/dist/chunk-FMN47XRJ.cjs +1 -1
- package/dist/chunk-HDL5E7XD.js +523 -0
- package/dist/chunk-LUW7V5GI.cjs +1 -1
- package/dist/chunk-QYHJIPSZ.cjs +140 -0
- package/dist/chunk-RVGPXTBE.js +2535 -0
- package/dist/{chunk-3CHF3PN3.cjs → chunk-TQQUGQTW.cjs} +3 -3
- package/dist/chunk-UZ2KNGOF.cjs +523 -0
- package/dist/{chunk-HHW6W2LL.cjs → chunk-W5EM6HLW.cjs} +13 -8
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.js +1 -1
- package/dist/hooks/index.cjs +4 -5
- package/dist/hooks/index.js +1 -2
- package/dist/index.cjs +6 -7
- package/dist/index.js +4 -5
- package/dist/types/AsyncMultiSelectPayload.d.ts +5 -0
- package/dist/types/AsyncMultiSelectPayload.d.ts.map +1 -0
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/index.cjs +3 -3
- package/dist/utils/index.js +1 -1
- package/dist/utils/schemaTools.d.ts +133 -6
- package/dist/utils/schemaTools.d.ts.map +1 -1
- package/dist/wrappers/AsyncMultiSelect/types.d.ts +2 -2
- package/dist/wrappers/Field/index.d.ts +1 -1
- package/dist/wrappers/NumberFieldElement/NumberFieldElement.d.ts +3 -2
- package/dist/wrappers/NumberFieldElement/NumberFieldElement.d.ts.map +1 -1
- package/dist/wrappers/SelectMultiElement/SelectMultiElement.d.ts +2 -3
- package/dist/wrappers/SelectMultiElement/SelectMultiElement.d.ts.map +1 -1
- package/dist/wrappers/index.cjs +4 -4
- package/dist/wrappers/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-6PMJWQ4R.cjs +0 -239
- package/dist/chunk-LGGBLZJM.js +0 -239
- package/dist/chunk-ML5UQCRH.js +0 -2535
- package/dist/chunk-MVPLBJRK.cjs +0 -1
- package/dist/chunk-OJF67RNM.js +0 -1
- package/dist/chunk-Y3QTSDLJ.cjs +0 -140
- package/dist/types/AsyncSelectMultiPayload.d.ts +0 -5
- package/dist/types/AsyncSelectMultiPayload.d.ts.map +0 -1
- /package/dist/{chunk-GVWCGJ3F.js → chunk-PW777IOX.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useEnhancedTransform,
|
|
3
3
|
useTransform
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PW777IOX.js";
|
|
5
5
|
import {
|
|
6
6
|
readValueAsDate
|
|
7
7
|
} from "./chunk-FYU2OIMD.js";
|
|
@@ -2147,6 +2147,7 @@ var Component12 = function NumberFieldElement(props) {
|
|
|
2147
2147
|
variant,
|
|
2148
2148
|
onChange: customOnChange,
|
|
2149
2149
|
enableWarnings = process.env.NODE_ENV === "development",
|
|
2150
|
+
maxLength,
|
|
2150
2151
|
...rest
|
|
2151
2152
|
} = props;
|
|
2152
2153
|
const {
|
|
@@ -2174,7 +2175,7 @@ var Component12 = function NumberFieldElement(props) {
|
|
|
2174
2175
|
input: transform.input,
|
|
2175
2176
|
output: transform.output
|
|
2176
2177
|
} : void 0,
|
|
2177
|
-
fieldType: !transform ? type === "number" ? "number" : fieldType : void 0,
|
|
2178
|
+
fieldType: !transform ? type === "number" ? maxLength && maxLength > 5 ? "text" : "number" : fieldType : void 0,
|
|
2178
2179
|
// Auto-detect number type
|
|
2179
2180
|
defaultValue,
|
|
2180
2181
|
enableWarnings
|
|
@@ -2205,6 +2206,9 @@ var Component12 = function NumberFieldElement(props) {
|
|
|
2205
2206
|
}
|
|
2206
2207
|
},
|
|
2207
2208
|
onInput: (event) => {
|
|
2209
|
+
if (type === "number" && maxLength && event.target.value.length > maxLength) {
|
|
2210
|
+
event.target.value = event.target.value.slice(0, maxLength);
|
|
2211
|
+
}
|
|
2208
2212
|
if (typeof onInput === "function") {
|
|
2209
2213
|
onInput(event);
|
|
2210
2214
|
}
|
|
@@ -2226,6 +2230,7 @@ var Component12 = function NumberFieldElement(props) {
|
|
|
2226
2230
|
error: !!error,
|
|
2227
2231
|
helperText: error ? parseError ? parseError(error) : error.message : helperText,
|
|
2228
2232
|
inputRef: handleInputRef,
|
|
2233
|
+
slotProps: { htmlInput: { maxLength } },
|
|
2229
2234
|
variant: variant ? variant : "outlined"
|
|
2230
2235
|
}
|
|
2231
2236
|
);
|
|
@@ -2391,4 +2396,4 @@ export {
|
|
|
2391
2396
|
TimePickerElement2 as TimePickerElement,
|
|
2392
2397
|
Field
|
|
2393
2398
|
};
|
|
2394
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3dyYXBwZXJzL3R5cGVzL2NvbW1vbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvQXN5bmNNdWx0aVNlbGVjdC9Bc3luY011bHRpU2VsZWN0LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvQ2hlY2tib3hFbGVtZW50L0NoZWNrYm94RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0NoZWNrYm94R3JvdXAvQ2hlY2tib3hHcm91cC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0RhdGVQaWNrZXJFbGVtZW50L0RhdGVQaWNrZXJFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvRGF0ZVBpY2tlckVsZW1lbnRDb3JlLnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclZhbHVlLnRzIiwgIi4uL3NyYy93cmFwcGVycy9EYXRlUGlja2VyRWxlbWVudC9ob29rcy91c2VEYXRlUGlja2VyVmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclN0eWxlcy50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvdXRpbHMudHMiLCAiLi4vc3JjL3dyYXBwZXJzL1Bhc3N3b3JkRWxlbWVudC9QYXNzd29yZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9SYWRpb0J1dHRvbkdyb3VwL1JhZGlvQnV0dG9uR3JvdXAudHN4IiwgIi4uL3NyYy93cmFwcGVycy9TZWxlY3RDYXNjYWRlRWxlbWVudC9TZWxlY3RDYXNjYWRlRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdEVsZW1lbnQvU2VsZWN0RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdE11bHRpRWxlbWVudC9TZWxlY3RNdWx0aUVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UZXh0RmllbGRFbGVtZW50L1RleHRGaWVsZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UaW1lUGlja2VyRWxlbWVudC9UaW1lUGlja2VyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0FzeW5jU2VsZWN0L2luZGV4LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvTnVtYmVyRmllbGRFbGVtZW50L051bWJlckZpZWxkRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL09UUElucHV0RWxlbWVudC9PVFBJbnB1dEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9PVFBJbnB1dEVsZW1lbnQvSGVscGVyVGV4dC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0ZpZWxkL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvbW1vbiB0eXBlIGRlZmluaXRpb25zIGZvciB3cmFwcGVyIGNvbXBvbmVudHNcbiAqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIEJhc2Ugb3B0aW9uIHR5cGUgZm9yIHNlbGVjdC1iYXNlZCBjb21wb25lbnRzXG4gKlxuICogQHRlbXBsYXRlIFYgLSBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU9wdGlvbjxWID0gc3RyaW5nIHwgbnVtYmVyPiB7XG4gIC8qKlxuICAgKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uXG4gICAqL1xuICBMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIG9wdGlvblxuICAgKi9cbiAgVmFsdWU6IFY7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZsZXhpYmxlIG9wdGlvbiB0eXBlIHRoYXQgZXh0ZW5kcyBiYXNlIG9wdGlvbiB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRmxleGlibGVPcHRpb248XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IFQgJiBCYXNlT3B0aW9uO1xuXG4vKipcbiAqIE9wdGlvbiB0eXBlIHdpdGggY3VzdG9taXphYmxlIGtleSBuYW1lc1xuICogVXNlZnVsIGZvciBjb21wb25lbnRzIHRoYXQgYWNjZXB0IGN1c3RvbSBsYWJlbEZpZWxkL3ZhbHVlRmllbGQgcHJvcHNcbiAqXG4gKiBAdGVtcGxhdGUgVFZhbHVlS2V5IC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIHZhbHVlXG4gKiBAdGVtcGxhdGUgVExhYmVsS2V5IC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIGxhYmVsXG4gKiBAdGVtcGxhdGUgVERpc2FibGVkS2V5IC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIGRpc2FibGVkIGZsYWdcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEN1c3RvbUtleU9wdGlvbjxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSBSZWNvcmQ8VFZhbHVlS2V5LCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiAmXG4gIFJlY29yZDxUTGFiZWxLZXksIHN0cmluZz4gJlxuICBQYXJ0aWFsPFJlY29yZDxURGlzYWJsZWRLZXksIGJvb2xlYW4+PiAmXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIExlZ2FjeSBvcHRpb24gdHlwZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGNvZGVcbiAqIFVzZXMgVmFsdWUvTGFiZWwgbmFtaW5nIGNvbnZlbnRpb25cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQmFzZU9wdGlvbiBvciBGbGV4aWJsZU9wdGlvbiBpbnN0ZWFkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5T3B0aW9uIHtcbiAgLyoqXG4gICAqIERpc3BsYXkgbGFiZWwgZm9yIHRoZSBvcHRpb24gKGNhcGl0YWxpemVkIGtleSBuYW1lKVxuICAgKi9cbiAgTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gKGNhcGl0YWxpemVkIGtleSBuYW1lKVxuICAgKi9cbiAgVmFsdWU6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAqL1xuICBEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBvcHRpb25cbiAqXG4gKiBAcGFyYW0gVmFsdWUgLSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBvcHRpb24gb2JqZWN0XG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE9wdGlvbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEJhc2VPcHRpb24ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICdMYWJlbCcgaW4gdmFsdWUgJiZcbiAgICAnVmFsdWUnIGluIHZhbHVlICYmXG4gICAgdHlwZW9mICh2YWx1ZSBhcyBCYXNlT3B0aW9uKS5MYWJlbCA9PT0gJ3N0cmluZycgJiZcbiAgICAodHlwZW9mICh2YWx1ZSBhcyBCYXNlT3B0aW9uKS5WYWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgIHR5cGVvZiAodmFsdWUgYXMgQmFzZU9wdGlvbikuVmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIEJhc2VPcHRpb24pLlZhbHVlID09PSAnYm9vbGVhbicpXG4gICk7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIG5vcm1hbGl6ZSBvcHRpb25zIHRvIEJhc2VPcHRpb24gZm9ybWF0XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGFycmF5IHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIGxhYmVsRmllbGQgLSBDdXN0b20gbGFiZWwgZmllbGQgbmFtZSBpbiBvcHRpb24gb2JqZWN0c1xuICogQHBhcmFtIHZhbHVlRmllbGQgLSBDdXN0b20gdmFsdWUgZmllbGQgbmFtZSBpbiBvcHRpb24gb2JqZWN0c1xuICogQHJldHVybnMgTm9ybWFsaXplZCBvcHRpb25zIGFycmF5XG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBvcHRpb25zOiBUW10sXG4gIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJ1xuKTogQmFzZU9wdGlvbltdIHtcbiAgcmV0dXJuIG9wdGlvbnMubWFwKG9wdGlvbiA9PiAoe1xuICAgIExhYmVsOiBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGRdID8/ICcnKSxcbiAgICBWYWx1ZTogb3B0aW9uW3ZhbHVlRmllbGRdIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICBkaXNhYmxlZDogQm9vbGVhbihvcHRpb24uZGlzYWJsZWQpLFxuICB9KSk7XG59XG4iLCAiaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlLFxuICBDaXJjdWxhclByb2dyZXNzLFxuICBkZWJvdW5jZSxcbiAgR3JpZCxcbiAgVGV4dEZpZWxkLFxuICB1c2VUaGVtZSxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgbWF0Y2ggZnJvbSAnYXV0b3N1Z2dlc3QtaGlnaGxpZ2h0L21hdGNoJztcbmltcG9ydCBwYXJzZSBmcm9tICdhdXRvc3VnZ2VzdC1oaWdobGlnaHQvcGFyc2UnO1xuaW1wb3J0IFJlYWN0LCB7XG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZU1lbW8sXG4gIHVzZUVmZmVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIEZyYWdtZW50LFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEhUTUxBdHRyaWJ1dGVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHR5cGUgeyBBc3luY011bHRpU2VsZWN0RWxlbWVudFByb3BzLCBPcHRpb25PYmplY3QgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHR5cGUgeyBBc3luY1NlbGVjdE11bHRpUGF5bG9hZCB9IGZyb20gJ0AvdHlwZXMnO1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBBc3luY1NlbGVjdE11bHRpRWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KFxuICBwcm9wczogQXN5bmNNdWx0aVNlbGVjdEVsZW1lbnRQcm9wczxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBUT3B0aW9uXG4gID5cbikge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBjb250cm9sLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGxhYmVsLFxuICAgIHF1ZXJ5Rm4sXG4gICAgdmFyaWFudCxcbiAgICBsYWJlbEZpZWxkID0gJ0xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVGaWVsZCA9ICdWYWx1ZScgYXMgVFZhbHVlS2V5LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPHJlYWRvbmx5IFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3QgbG9hZGVkVmFsdWVzUmVmID0gdXNlUmVmPFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBpbml0aWFsTG9hZENvbXBsZXRlUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgLy8gU3RvcmUgc2VsZWN0ZWQgb3B0aW9ucyBpbiBhIHJlZiBzbyBFZmZlY3QgMiBjYW4gYWNjZXNzIHdpdGhvdXQgZGVwZW5kZW5jeVxuICBjb25zdCBzZWxlY3RlZE9wdGlvbnNSZWYgPSB1c2VSZWY8VE9wdGlvbltdPihbXSk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiAob3B0aW9uID8gU3RyaW5nKG9wdGlvblt2YWx1ZUZpZWxkXSkgOiAnJyksXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiAob3B0aW9uID8gU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkXSkgOiAnJyksXG4gICAgW2xhYmVsRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZmV0Y2hEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZGVib3VuY2UoXG4gICAgICAgIChcbiAgICAgICAgICBwYXlsb2FkOiBBc3luY1NlbGVjdE11bHRpUGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogKHJlc3VsdHM/OiByZWFkb25seSBUT3B0aW9uW10pID0+IHZvaWRcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgcXVlcnlGbihwYXlsb2FkKS50aGVuKGMgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soYyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBjICYmXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoKGMgYXMgeyBkYXRhOiByZWFkb25seSBUT3B0aW9uW10gfSkuZGF0YSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYyBhcyB7IGRhdGE6IHJlYWRvbmx5IFRPcHRpb25bXSB9KS5kYXRhIGFzIHJlYWRvbmx5IFRPcHRpb25bXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgYyAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KChjIGFzIHsgRGF0YTogcmVhZG9ubHkgVE9wdGlvbltdIH0pLkRhdGEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGMgYXMgeyBEYXRhOiByZWFkb25seSBUT3B0aW9uW10gfSkuRGF0YSBhcyByZWFkb25seSBUT3B0aW9uW11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgNDAwXG4gICAgICApLFxuICAgIFtxdWVyeUZuXVxuICApO1xuXG4gIC8vIFN5bmMgcmVmIHdoZW5ldmVyIHNlbGVjdGVkT3B0aW9ucyBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQgPSBzZWxlY3RlZE9wdGlvbnM7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICAvLyBFZmZlY3QgMTogU3luYyB3aXRoIGV4dGVybmFsIGZpZWxkLnZhbHVlIGNoYW5nZXMgZnJvbSByZWFjdC1ob29rLWZvcm0gKElOSVRJQUwgTE9BRCBPTkxZKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSA/IGZpZWxkLnZhbHVlIDogW107XG5cbiAgICAvLyBDaGVjayBpZiBpbml0aWFsIGxvYWQgaXMgY29tcGxldGUgYW5kIGN1cnJlbnQgZm9ybSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGxvYWRlZCBvbmVzLlxuICAgIC8vIElmIHNvLCBubyBuZWVkIHRvIHJlZmV0Y2ggZm9yIGluaXRpYWwgcG9wdWxhdGlvbi5cbiAgICBpZiAoXG4gICAgICBpbml0aWFsTG9hZENvbXBsZXRlUmVmLmN1cnJlbnQgJiZcbiAgICAgIEpTT04uc3RyaW5naWZ5KGZvcm1WYWx1ZXMpID09PSBKU09OLnN0cmluZ2lmeShsb2FkZWRWYWx1ZXNSZWYuY3VycmVudClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZm9ybSB2YWx1ZXMsIHJlc2V0IGFuZCBtYXJrIGluaXRpYWwgbG9hZCBhcyBjb21wbGV0ZS5cbiAgICBpZiAoZm9ybVZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgIGxvYWRlZFZhbHVlc1JlZi5jdXJyZW50ID0gW107XG4gICAgICBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgICBpbml0aWFsTG9hZENvbXBsZXRlUmVmLmN1cnJlbnQgPSB0cnVlOyAvLyBNYXJrIGFzIGNvbXBsZXRlIGFzIHRoZXJlJ3Mgbm90aGluZyB0byBmZXRjaFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSBwcm9jZWVkIGlmIGZvcm1WYWx1ZXMgYXJlIHByZXNlbnQgYW5kIHdlIGhhdmVuJ3QgY29tcGxldGVkIHRoZSBpbml0aWFsIGxvYWQgZm9yIHRoZXNlIHNwZWNpZmljIHZhbHVlc1xuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlLmN1cnJlbnQgPSB0cnVlO1xuICAgIC8vIFNldCBsb2FkZWRWYWx1ZXNSZWYgaW1tZWRpYXRlbHkgdG8gcHJldmVudCByZS10cmlnZ2VyaW5nIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbG9hZGVkVmFsdWVzUmVmLmN1cnJlbnQgPSBmb3JtVmFsdWVzO1xuICAgIC8vIE1hcmsgaW5pdGlhbCBsb2FkIGFzIGNvbXBsZXRlIHByb2FjdGl2ZWx5IGJlZm9yZSBmZXRjaGluZyB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzXG4gICAgaW5pdGlhbExvYWRDb21wbGV0ZVJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBudWxsLCBTZWxlY3RlZFZhbHVlOiBmb3JtVmFsdWVzIH0sIHJlc3VsdHMgPT4ge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBjb25zdCBmZXRjaGVkT3B0aW9ucyA9IHJlc3VsdHMgfHwgW107XG5cbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKFsuLi5mZXRjaGVkT3B0aW9uc10pO1xuICAgICAgICBzZXRPcHRpb25zKGZldGNoZWRPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICBpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbZmllbGQudmFsdWUsIGZldGNoRGF0YV0pO1xuXG4gIC8vIEVmZmVjdCAyOiBIYW5kbGUgdXNlciBzZWFyY2ggaW5wdXRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBEb24ndCBzZWFyY2ggZHVyaW5nIGluaXRpYWwgcG9wdWxhdGlvblxuICAgIGlmIChpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlLmN1cnJlbnQgfHwgIWluaXRpYWxMb2FkQ29tcGxldGVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGlucHV0IGlzIGVtcHR5LCBqdXN0IHNob3cgdGhlIHNlbGVjdGVkIG9wdGlvbnNcbiAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgIC8vIElmIG5vIG9wdGlvbnMgYXJlIHNlbGVjdGVkLCBjbGVhciB0aGUgb3B0aW9ucyB0byBkaXNwbGF5IFwibm9PcHRpb25zVGV4dFwiXG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNldE9wdGlvbnMoW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBzaG93IHRoZSBzZWxlY3RlZCBvcHRpb25zXG4gICAgICAgIHNldE9wdGlvbnMoc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuXG4gICAgICBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGZldGNoIGlmIHRoZSBpbnB1dCB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIGlmIChpbnB1dFZhbHVlID09PSBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcblxuICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBpbnB1dFZhbHVlLCBTZWxlY3RlZFZhbHVlOiBudWxsIH0sIHNlYXJjaFJlc3VsdHMgPT4ge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gc2VhcmNoUmVzdWx0cyB8fCBbXTtcbiAgICAgICAgLy8gVXNlIHJlZiB0byBnZXQgY3VycmVudCBzZWxlY3RlZCBvcHRpb25zIHdpdGhvdXQgYWRkaW5nIHRvIGRlcGVuZGVuY2llc1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbnNSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZC5tYXAob3B0ID0+IGdldE9wdGlvblZhbHVlKG9wdCkpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkID0gWy4uLmN1cnJlbnRTZWxlY3RlZF07XG5cbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbklkcy5oYXMoZ2V0T3B0aW9uVmFsdWUocmVzdWx0KSkpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRPcHRpb25zKGNvbWJpbmVkKTtcbiAgICAgICAgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQgPSBpbnB1dFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8vIENSSVRJQ0FMOiBSZW1vdmVkIHNlbGVjdGVkT3B0aW9ucyBmcm9tIGRlcGVuZGVuY2llcyAtIHVzZSByZWYgaW5zdGVhZFxuICB9LCBbaW5wdXRWYWx1ZSwgZmV0Y2hEYXRhLCBnZXRPcHRpb25WYWx1ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChfOiBTeW50aGV0aWNFdmVudCwgbmV3U2VsZWN0ZWRPcHRpb25zOiBUT3B0aW9uW10pID0+IHtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMobmV3U2VsZWN0ZWRPcHRpb25zKTtcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSBuZXdTZWxlY3RlZE9wdGlvbnMubWFwKGMgPT4gY1t2YWx1ZUZpZWxkXSk7XG5cbiAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IG5ld1ZhbHVlcyk7XG4gICAgbG9hZGVkVmFsdWVzUmVmLmN1cnJlbnQgPSBuZXdWYWx1ZXMgYXMgdW5rbm93biBhcyBUT3B0aW9uW107XG4gICAgc2V0T3B0aW9ucyhuZXdTZWxlY3RlZE9wdGlvbnMpO1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIC8vIENsZWFyIGxhc3Qgc2VhcmNoIHRlcm0gd2hlbiBzZWxlY3Rpb24gY2hhbmdlc1xuICAgIGxhc3RGZXRjaGVkU2VhcmNoVGVybVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgfTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGRpc2FibGVkID8/IGZhbHNlO1xuICB9LCBbZGlzYWJsZWRdKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIG11bHRpcGxlXG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgZ2V0T3B0aW9uTGFiZWw9e2dldE9wdGlvbkxhYmVsfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbCkgPT5cbiAgICAgICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZ2V0T3B0aW9uVmFsdWUodmFsKVxuICAgICAgfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHZhbHVlPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBmaWx0ZXJTZWxlY3RlZE9wdGlvbnNcbiAgICAgIGZpbHRlck9wdGlvbnM9e3ggPT4geH1cbiAgICAgIG5vT3B0aW9uc1RleHQ9XCJUeXBlIFNvbWV0aGluZy4uLlwiXG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBvbklucHV0Q2hhbmdlPXsoXywgbmV3SW5wdXRWYWx1ZSkgPT4gc2V0SW5wdXRWYWx1ZShuZXdJbnB1dFZhbHVlKX1cbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyd9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIElucHV0UHJvcHM9e3tcbiAgICAgICAgICAgIC4uLnBhcmFtcy5JbnB1dFByb3BzLFxuICAgICAgICAgICAgZW5kQWRvcm5tZW50OiAoXG4gICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtwYXJhbXMuSW5wdXRQcm9wcy5lbmRBZG9ybm1lbnR9XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiBpc0Rpc2FibGVkID8gJ2ZpbGxlZCcgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHJlbmRlck9wdGlvbj17KHByb3BzLCBvcHRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsga2V5LCAuLi5vcHRpb25Qcm9wcyB9ID1cbiAgICAgICAgICBwcm9wcyBhcyBIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiAmIHsga2V5OiBzdHJpbmcgfTtcbiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSBnZXRPcHRpb25MYWJlbChvcHRpb24pO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gbWF0Y2gob3B0aW9uTGFiZWwsIHN0YXRlLmlucHV0VmFsdWUsIHtcbiAgICAgICAgICBpbnNpZGVXb3JkczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGFyc2Uob3B0aW9uTGFiZWwsIG1hdGNoZXMpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGxpIGtleT17a2V5fSB7Li4ub3B0aW9uUHJvcHN9PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3BhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IHBhcnQuaGlnaGxpZ2h0ID8gNzAwIDogNDAwLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7cGFydC50ZXh0fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICAgIHsuLi5yZXN0fVxuICAgIC8+XG4gICk7XG59O1xuXG5jb25zdCBBc3luY1NlbGVjdE11bHRpRWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KHtcbiAgZ3JpZFByb3BzLFxuICAuLi5wcm9wc1xufTogQXN5bmNNdWx0aVNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFRPcHRpb25cbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICBpZiAoZ3JpZFByb3BzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxHcmlkXG4gICAgICAgIHsuLi57IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSwgLi4uZ3JpZFByb3BzIH19XG4gICAgICA+XG4gICAgICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlS2V5LCBUTGFiZWxLZXksIFRPcHRpb24+XG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9HcmlkPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlS2V5LCBUTGFiZWxLZXksIFRPcHRpb24+IHsuLi5wcm9wc30gLz5cbiAgKTtcbn07XG5cbkFzeW5jU2VsZWN0TXVsdGlFbGVtZW50LmRpc3BsYXlOYW1lID0gJ0FzeW5jU2VsZWN0TXVsdGknO1xuXG5leHBvcnQgeyBBc3luY1NlbGVjdE11bHRpRWxlbWVudCB9O1xuIiwgImltcG9ydCB7XG4gIENoZWNrYm94LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xMYWJlbCxcbiAgRm9ybUdyb3VwLFxuICBGb3JtSGVscGVyVGV4dCxcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmllbGRQYXRoLCBGaWVsZFZhbHVlcywgUGF0aFZhbHVlIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgeyB1c2VUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9ob29rcy91c2VUcmFuc2Zvcm0nO1xuXG5pbXBvcnQgdHlwZSB7IENoZWNrYm94RWxlbWVudFByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIENoZWNrYm94RWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPihwcm9wczogQ2hlY2tib3hFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBsYWJlbCxcbiAgICBsYWJlbFByb3BzLFxuICAgIGhlbHBlclRleHQsXG4gICAgcGFyc2VFcnJvcixcbiAgICB0cmFuc2Zvcm0sXG4gICAgZGlzYWJsZWQsXG4gICAgb25DaGFuZ2U6IGN1c3RvbU9uQ2hhbmdlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgZGlzYWJsZWQsXG4gIH0pO1xuXG4gIGlmIChmaWVsZC52YWx1ZSA9PSBudWxsIHx8IGZpZWxkLnZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgIGZpZWxkLm9uQ2hhbmdlKGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbU91dHB1dFRyYW5zZm9ybSA9IHRyYW5zZm9ybT8ub3V0cHV0O1xuXG4gIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VUcmFuc2Zvcm08VEZpZWxkVmFsdWVzLCBUTmFtZSwgYm9vbGVhbj4oe1xuICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBpbnB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8uaW5wdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybS5pbnB1dFxuICAgICAgICAgIDogdmFsdWUgPT4gISF2YWx1ZSxcbiAgICAgIG91dHB1dDpcbiAgICAgICAgdHlwZW9mIGN1c3RvbU91dHB1dFRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gKGV2ZW50T3JWYWx1ZSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEFkYXB0ZXI6IEV4dHJhY3QgZXZlbnQgYW5kIGNoZWNrZWQgZnJvbSB0aGUgY2hlY2tib3ggb25DaGFuZ2Ugc2lnbmF0dXJlXG4gICAgICAgICAgICAgIC8vIENoZWNrYm94RWxlbWVudCBwYXNzZXMgKGV2ZW50LCBjaGVja2VkKSwgYnV0IHVzZVRyYW5zZm9ybSBleHBlY3RzIChldmVudE9yVmFsdWUsIHZhbHVlKVxuICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50T3JWYWx1ZSBhcyBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IF92YWx1ZSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbU91dHB1dFRyYW5zZm9ybShldmVudCwgY2hlY2tlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiAoZXZlbnRPclZhbHVlLCBfdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGVmYXVsdDogZXh0cmFjdCBjaGVja2VkIHN0YXRlIGZyb20gdGhlIHNlY29uZCBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IF92YWx1ZSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWQgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgb25DaGFuZ2UoZXZlbnQsIGNoZWNrZWQpO1xuICAgIGlmICh0eXBlb2YgY3VzdG9tT25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1c3RvbU9uQ2hhbmdlKGV2ZW50LCBjaGVja2VkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlzcGxheUVycm9yOiBSZWFjdE5vZGUgPSBlcnJvclxuICAgID8gdHlwZW9mIHBhcnNlRXJyb3IgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcGFyc2VFcnJvcihlcnJvcilcbiAgICAgIDogZXJyb3IubWVzc2FnZVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxGb3JtQ29udHJvbCBlcnJvcj17ISFlcnJvcn0gZGlzYWJsZWQ9e2Rpc2FibGVkfT5cbiAgICAgIDxGb3JtR3JvdXAgcm93PlxuICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgIGxhYmVsPXtsYWJlbCB8fCAnJ31cbiAgICAgICAgICB7Li4ubGFiZWxQcm9wc31cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgIGNvbG9yPXtyZXN0LmNvbG9yIHx8ICdwcmltYXJ5J31cbiAgICAgICAgICAgICAgY2hlY2tlZD17dmFsdWV9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgcmVmPXtmaWVsZC5yZWZ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgeyhkaXNwbGF5RXJyb3IgfHwgaGVscGVyVGV4dCkgJiYgKFxuICAgICAgICA8Rm9ybUhlbHBlclRleHQgZXJyb3I9eyEhZXJyb3J9PlxuICAgICAgICAgIHtkaXNwbGF5RXJyb3IgfHwgaGVscGVyVGV4dH1cbiAgICAgICAgPC9Gb3JtSGVscGVyVGV4dD5cbiAgICAgICl9XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbi8qKlxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBDaGVja2JveCBjb21wb25lbnQgd2l0aCBhdXRvbWF0aWMgdmFsaWRhdGlvbiBhbmQgZ3JpZCBsYXlvdXQuXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBmdWxseSBpbnRlZ3JhdGVkIGNoZWNrYm94IGlucHV0IHRoYXQgd29ya3Mgc2VhbWxlc3NseSB3aXRoIHJlYWN0LWhvb2stZm9ybSxcbiAqIGluY2x1ZGluZyBhdXRvbWF0aWMgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIHZhbHVlIHRyYW5zZm9ybWF0aW9uLCBhbmQgb3B0aW9uYWwgR3JpZCB3cmFwcGVyIGZvciByZXNwb25zaXZlIGxheW91dHMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uIHdpdGggdXNlQ29udHJvbGxlclxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheSB3aXRoIGN1c3RvbSBwYXJzaW5nIHN1cHBvcnRcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gd2l0aCB1c2VUcmFuc2Zvcm0gaG9vayBmb3IgYm9vbGVhbiB2YWx1ZXNcbiAqIC0gQ3VzdG9taXphYmxlIGxhYmVsIGFuZCBwb3NpdGlvbmluZ1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyIHdpdGggcmVzcG9uc2l2ZSBkZXNpZ25cbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eSB3aXRoIGdlbmVyaWMgY29uc3RyYWludHNcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3VwcG9ydCB3aXRoIHByb3BlciB0aGVtaW5nXG4gKiAtIEhlbHBlciB0ZXh0IHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgY29udGV4dFxuICogLSBDdXN0b20gZXJyb3IgcGFyc2luZyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb25cbiAqIC0gU2ltcGxlIGJvb2xlYW4gdmFsdWUgaGFuZGxpbmcgd2l0aCBvcHRpb25hbCBjdXN0b20gdHJhbnNmb3Jtc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiYWNjZXB0VGVybXNcIlxuICogICBsYWJlbD1cIkkgYWdyZWUgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCB2YWxpZGF0aW9uIGFuZCBoZWxwZXIgdGV4dDpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwibmV3c2xldHRlclwiXG4gKiAgIGxhYmVsPVwiU3Vic2NyaWJlIHRvIG5ld3NsZXR0ZXJcIlxuICogICBoZWxwZXJUZXh0PVwiWW91IGNhbiB1bnN1YnNjcmliZSBhdCBhbnkgdGltZVwiXG4gKiAgIHJ1bGVzPXt7IHJlcXVpcmVkOiAnUGxlYXNlIGFjY2VwdCB0byBjb250aW51ZScgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIGdyaWQgbGF5b3V0IGFuZCBzdHlsaW5nOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJpc1B1YmxpY1wiXG4gKiAgIGxhYmVsPVwiTWFrZSB0aGlzIHB1YmxpY1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBsYWJlbFByb3BzPXt7IHN4OiB7IGZvbnRXZWlnaHQ6ICdib2xkJyB9IH19XG4gKiAgIHN4PXt7IGNvbG9yOiAncHJpbWFyeS5tYWluJyB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIHZhbHVlIHRyYW5zZm9ybWF0aW9uIChzdHJpbmcgdG8gYm9vbGVhbik6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInN0YXR1c1wiXG4gKiAgIGxhYmVsPVwiQWN0aXZlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPT09ICdhY3RpdmUnLFxuICogICAgIG91dHB1dDogKGNoZWNrZWQpID0+IGNoZWNrZWQgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSdcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogU2ltcGxlIGJvb2xlYW4gZmllbGQ6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImlzRW5hYmxlZFwiXG4gKiAgIGxhYmVsPVwiRW5hYmxlIGZlYXR1cmVcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBDdXN0b20gZXJyb3IgcGFyc2luZyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb246XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInRlcm1zXCJcbiAqICAgbGFiZWw9XCJBY2NlcHQgVGVybXNcIlxuICogICBwYXJzZUVycm9yPXsoZXJyb3IpID0+IHQoYHZhbGlkYXRpb24uJHtlcnJvci50eXBlfWAsIHsgZmllbGQ6ICdUZXJtcycgfSl9XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBDaGVja2JveEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IENoZWNrYm94RWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudDxURmllbGRWYWx1ZXMsIFROYW1lPiB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuZXhwb3J0IHsgQ2hlY2tib3hFbGVtZW50IH07XG5cbmV4cG9ydCB0eXBlIHsgQ2hlY2tib3hFbGVtZW50UHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbiIsICJpbXBvcnQgdHlwZSB7XG4gIENoZWNrYm94UHJvcHMsXG4gIEZvcm1Db250cm9sTGFiZWxQcm9wcyxcbiAgRm9ybUxhYmVsUHJvcHMsXG4gIEdyaWRQcm9wcyxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEZvcm1MYWJlbCxcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBDaGVja2JveEdyb3VwIGNvbXBvbmVudFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB2YWx1ZSBhcnJheSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5cbi8vIFR5cGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBhcyByYWRpbyBidXR0b24gdmFsdWVzXG50eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuLy8gQ29uc3RyYWludCB0byBlbnN1cmUgb3B0aW9uIG9iamVjdHMgaGF2ZSB0aGUgcmVxdWlyZWQga2V5c1xudHlwZSBPcHRpb25PYmplY3Q8XG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0gUmVjb3JkPFRWYWx1ZUtleSwgUHJpbWl0aXZlVmFsdWU+ICZcbiAgUmVjb3JkPFRMYWJlbEtleSwgc3RyaW5nPiAmXG4gIFBhcnRpYWw8UmVjb3JkPFREaXNhYmxlZEtleSwgYm9vbGVhbj4+O1xuXG5leHBvcnQgdHlwZSBDaGVja2JveEdyb3VwUHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPiA9IE9taXQ8Q2hlY2tib3hQcm9wcywgJ25hbWUnPiAmIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqL1xuICBuYW1lOiBUTmFtZTtcblxuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcblxuICAvKipcbiAgICogTGFiZWwgZm9yIHRoZSBjaGVja2JveCBncm91cFxuICAgKi9cbiAgbGFiZWw/OiBGb3JtQ29udHJvbExhYmVsUHJvcHNbJ2xhYmVsJ107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvcHMgZm9yIEZvcm1Db250cm9sTGFiZWxcbiAgICovXG4gIGxhYmVsUHJvcHM/OiBPbWl0PEZvcm1Db250cm9sTGFiZWxQcm9wcywgJ2xhYmVsJyB8ICdjb250cm9sJz47XG5cbiAgLyoqXG4gICAqIEdyaWQgbGF5b3V0IHByb3BzIGZvciB0aGUgd3JhcHBlclxuICAgKiBAZGVmYXVsdFZhbHVlIHsgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IH1cbiAgICovXG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcblxuICBvcHRpb25zOiBUT3B0aW9uW107XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZm9ybUxhYmVsUHJvcHM/OiBPbWl0PEZvcm1MYWJlbFByb3BzLCAncmVxdWlyZWQnIHwgJ2Vycm9yJz47XG5cbiAgbGFiZWxLZXk/OiBUTGFiZWxLZXk7XG4gIHZhbHVlS2V5PzogVFZhbHVlS2V5O1xuICBkaXNhYmxlZEtleT86IFREaXNhYmxlZEtleTtcbn07XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIENoZWNrYm94R3JvdXA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPihcbiAgcHJvcHM6IENoZWNrYm94R3JvdXBQcm9wczxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVE9wdGlvbixcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+XG4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBsYWJlbCxcbiAgICByZXF1aXJlZCxcbiAgICBmb3JtTGFiZWxQcm9wcyxcbiAgICBsYWJlbFByb3BzLFxuICAgIGxhYmVsS2V5ID0gJ0xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVLZXkgPSAnVmFsdWUnIGFzIFRWYWx1ZUtleSxcbiAgICBvcHRpb25zLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgZGlzYWJsZWQ6IHJlc3QuZGlzYWJsZWQsXG4gIH0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkVmFsdWVzQXNTdHJpbmcgPSAoXG4gICAgQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgPyBmaWVsZC52YWx1ZSA6IFtdXG4gICkubWFwKFN0cmluZyk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZFZhbHVlU3RyaW5nID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG5cbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkVmFsdWVzU3RyaW5nID0gaXNDaGVja2VkXG4gICAgICAgID8gWy4uLnNlbGVjdGVkVmFsdWVzQXNTdHJpbmcsIGNoYW5nZWRWYWx1ZVN0cmluZ11cbiAgICAgICAgOiBzZWxlY3RlZFZhbHVlc0FzU3RyaW5nLmZpbHRlcih2ID0+IHYgIT09IGNoYW5nZWRWYWx1ZVN0cmluZyk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnNBcmVOdW1lcmljID1cbiAgICAgICAgb3B0aW9ucy5sZW5ndGggPiAwICYmIHR5cGVvZiBvcHRpb25zWzBdW3ZhbHVlS2V5XSA9PT0gJ251bWJlcic7XG5cbiAgICAgIGlmIChvcHRpb25zQXJlTnVtZXJpYykge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXNBc051bWJlcnMgPSBuZXdTZWxlY3RlZFZhbHVlc1N0cmluZ1xuICAgICAgICAgIC5tYXAodiA9PiBwYXJzZUludCh2LCAxMCkpXG4gICAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTih2KSk7XG5cbiAgICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWVzQXNOdW1iZXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1NlbGVjdGVkVmFsdWVzU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmaWVsZCwgb3B0aW9ucywgdmFsdWVLZXksIHNlbGVjdGVkVmFsdWVzQXNTdHJpbmddXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybUNvbnRyb2wgZXJyb3I9eyEhZXJyb3J9PlxuICAgICAge2xhYmVsICYmIChcbiAgICAgICAgPEZvcm1MYWJlbCB7Li4uZm9ybUxhYmVsUHJvcHN9IHJlcXVpcmVkPXtyZXF1aXJlZH0gZXJyb3I9eyEhZXJyb3J9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9Gb3JtTGFiZWw+XG4gICAgICApfVxuICAgICAgPEZvcm1Hcm91cCByb3c+XG4gICAgICAgIHtvcHRpb25zICYmXG4gICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IChcbiAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgIGtleT17YCR7b3B0aW9uW3ZhbHVlS2V5XX1gfVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgICAgey4uLmxhYmVsUHJvcHN9XG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17cmVzdC5jb2xvciB8fCAncHJpbWFyeSd9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17b3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkVmFsdWVzQXNTdHJpbmcuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZyhvcHRpb25bdmFsdWVLZXldKVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAge2Vycm9yICYmIChcbiAgICAgICAgPEZvcm1IZWxwZXJUZXh0IGVycm9yPXshIWVycm9yfT57ZXJyb3IubWVzc2FnZX08L0Zvcm1IZWxwZXJUZXh0PlxuICAgICAgKX1cbiAgICA8L0Zvcm1Db250cm9sPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIENoZWNrYm94R3JvdXAgY29tcG9uZW50IGZvciBtdWx0aXBsZSBjaGVja2JveCBzZWxlY3Rpb24uXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBncm91cCBvZiBjaGVja2JveGVzIHRoYXQgd29yayBzZWFtbGVzc2x5IHdpdGggcmVhY3QtaG9vay1mb3JtLFxuICogbWFuYWdpbmcgYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgdmFsdWVzIHdpdGggYXV0b21hdGljIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBNdWx0aXBsZSBjaGVja2JveCBzZWxlY3Rpb24gd2l0aCBhcnJheSB2YWx1ZSBtYW5hZ2VtZW50XG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5XG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBEaXNhYmxlZCBzdGF0ZSBzdXBwb3J0XG4gKiAtIE5hTiB2YWxpZGF0aW9uIGZvciBudW1lcmljIHZhbHVlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94R3JvdXBcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInNlbGVjdGVkQ2F0ZWdvcmllc1wiXG4gKiAgIG9wdGlvbnM9e1tcbiAqICAgICB7IFZhbHVlOiAxLCBMYWJlbDogJ0NhdGVnb3J5IDEnIH0sXG4gKiAgICAgeyBWYWx1ZTogMiwgTGFiZWw6ICdDYXRlZ29yeSAyJyB9LFxuICogICAgIHsgVmFsdWU6IDMsIExhYmVsOiAnQ2F0ZWdvcnkgMycgfSxcbiAqICAgXX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gZ3JpZCBsYXlvdXQ6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEdyb3VwXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJwZXJtaXNzaW9uc1wiXG4gKiAgIG9wdGlvbnM9e3Blcm1pc3Npb25PcHRpb25zfVxuICogICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgZGlzYWJsZWQ9eyFoYXNFZGl0UGVybWlzc2lvbn1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdmFsdWUgYXJyYXkgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgQ2hlY2tib3hHcm91cEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogQ2hlY2tib3hHcm91cFByb3BzPFxuICBURmllbGRWYWx1ZXMsXG4gIFROYW1lLFxuICBUT3B0aW9uLFxuICBUVmFsdWVLZXksXG4gIFRMYWJlbEtleSxcbiAgVERpc2FibGVkS2V5XG4+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuQ2hlY2tib3hHcm91cEVsZW1lbnQuZGlzcGxheU5hbWUgPSAnQ2hlY2tib3hHcm91cCc7XG5cbmV4cG9ydCB7IENoZWNrYm94R3JvdXBFbGVtZW50IH07XG4iLCAiaW1wb3J0IHsgR3JpZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbn0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpZWxkVmFsdWVzLFxuICBGaWVsZFBhdGgsXG59IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcblxuaW1wb3J0IHsgRGF0ZVBpY2tlckVsZW1lbnRDb3JlIH0gZnJvbSBcIi4vRGF0ZVBpY2tlckVsZW1lbnRDb3JlXCI7XG5pbXBvcnQgdHlwZSB7IERhdGVQaWNrZXJFbGVtZW50UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgZnVsbHktZmVhdHVyZWQsIHR5cGUtc2FmZSBEYXRlUGlja2VyRWxlbWVudCBjb21wb25lbnQgZm9yIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBjb21iaW5lcyB0aGUgY29yZSBkYXRlIHBpY2tlciBmdW5jdGlvbmFsaXR5IHdpdGggb3B0aW9uYWwgR3JpZCBsYXlvdXQgd3JhcHBpbmcsXG4gKiBwcm92aWRpbmcgYSBjb21wbGV0ZSBzb2x1dGlvbiBmb3IgZm9ybS1iYXNlZCBkYXRlIHNlbGVjdGlvbiB3aXRoIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBzdXBwb3J0LlxuICpcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gXHVEODNDXHVERkFGICoqVHlwZSBTYWZldHkqKjogRnVsbCBUeXBlU2NyaXB0IGluZmVyZW5jZSBmb3IgZm9ybSBmaWVsZCB0eXBlcyBhbmQgZGF0ZSB2YWx1ZXNcbiAqIC0gXHVEODNEXHVERDI3ICoqUmVhY3QgSG9vayBGb3JtIEludGVncmF0aW9uKio6IFNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggcmVhY3QtaG9vay1mb3JtIHZhbGlkYXRpb25cbiAqIC0gXHVEODNDXHVERkE4ICoqVGhlbWluZyoqOiBBdXRvbWF0aWMgYWRhcHRhdGlvbiB0byBNVUkgdGhlbWUgd2l0aCBjdXN0b21pemFibGUgc3R5bGVzXG4gKiAtIFx1MjY3RiAqKkFjY2Vzc2liaWxpdHkqKjogV0NBRy1jb21wbGlhbnQgd2l0aCBwcm9wZXIgQVJJQSBhdHRyaWJ1dGVzIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gKiAtIFx1RDgzRFx1REU4MCAqKlBlcmZvcm1hbmNlKio6IE9wdGltaXplZCB3aXRoIG1lbW9pemF0aW9uIGFuZCBlZmZpY2llbnQgcmUtcmVuZGVyaW5nXG4gKiAtIFx1RDgzRFx1RENGMSAqKlJlc3BvbnNpdmUqKjogQnVpbHQtaW4gR3JpZCBsYXlvdXQgd2l0aCBjb25maWd1cmFibGUgYnJlYWtwb2ludHNcbiAqIC0gXHVEODNEXHVERUUxXHVGRTBGICoqVmFsaWRhdGlvbioqOiBDb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXNcbiAqIC0gXHVEODNEXHVERDA0ICoqVHJhbnNmb3JtYXRpb24qKjogRmxleGlibGUgdmFsdWUgdHJhbnNmb3JtYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBwaWNrZXIgZm9ybWF0c1xuICogLSBcdUQ4M0RcdURDREEgKipEZXZlbG9wZXIgRXhwZXJpZW5jZSoqOiBSaWNoIFR5cGVTY3JpcHQgSW50ZWxsaVNlbnNlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBhdXRvbWF0aWMgR3JpZCB3cmFwcGVyOlxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbiAqIGltcG9ydCB7IERhdGVQaWNrZXJFbGVtZW50IH0gZnJvbSAnQGdud2Vic29mdC91aS93cmFwcGVycyc7XG4gKlxuICogZnVuY3Rpb24gTXlGb3JtKCkge1xuICogICBjb25zdCB7IGNvbnRyb2wgfSA9IHVzZUZvcm08eyBiaXJ0aERhdGU6IHN0cmluZyB9PigpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgIG5hbWU9XCJiaXJ0aERhdGVcIlxuICogICAgICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgICAgIGxhYmVsPVwiRGF0ZSBvZiBCaXJ0aFwiXG4gKiAgICAgICByZXF1aXJlZFxuICogICAgIC8+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQWR2YW5jZWQgdXNhZ2Ugd2l0aCBjdXN0b20gdHJhbnNmb3JtYXRpb24gYW5kIHZhbGlkYXRpb246XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFkdmFuY2VkRm9ybSgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPHsgc3RhcnREYXRlOiBEYXRlIH0+KCk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxEYXRlUGlja2VyRWxlbWVudFxuICogICAgICAgbmFtZT1cInN0YXJ0RGF0ZVwiXG4gKiAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgbGFiZWw9XCJQcm9qZWN0IFN0YXJ0IERhdGVcIlxuICogICAgICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgICAgIGlucHV0OiAoZGF0ZVN0cmluZykgPT4gZGF0ZVN0cmluZyA/IG5ldyBEYXRlKGRhdGVTdHJpbmcpIDogbnVsbCxcbiAqICAgICAgICAgb3V0cHV0OiAoZGF0ZSkgPT4gZGF0ZSA/IGRhdGUudG9JU09TdHJpbmcoKSA6IG51bGxcbiAqICAgICAgIH19XG4gKiAgICAgICB2YWxpZGF0aW9uPXt7XG4gKiAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXG4gKiAgICAgICAgIG1heERhdGU6IGFkZFllYXJzKG5ldyBEYXRlKCksIDIpLFxuICogICAgICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gKiAgICAgICAgICAgbWluRGF0ZTogJ1N0YXJ0IGRhdGUgbXVzdCBiZSB0b2RheSBvciBsYXRlcicsXG4gKiAgICAgICAgICAgbWF4RGF0ZTogJ1N0YXJ0IGRhdGUgY2Fubm90IGJlIG1vcmUgdGhhbiAyIHllYXJzIGluIHRoZSBmdXR1cmUnXG4gKiAgICAgICAgIH1cbiAqICAgICAgIH19XG4gKiAgICAgICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgICAgIHN4PXt7XG4gKiAgICAgICAgICcmIC5NdWlJbnB1dExhYmVsLXJvb3QnOiB7XG4gKiAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnXG4gKiAgICAgICAgIH1cbiAqICAgICAgIH19XG4gKiAgICAgLz5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRob3V0IEdyaWQgd3JhcHBlciBmb3IgY3VzdG9tIGxheW91dHM6XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEN1c3RvbUxheW91dCgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPHsgZXZlbnREYXRlOiBzdHJpbmcgfT4oKTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPEJveCBkaXNwbGF5PVwiZmxleFwiIGdhcD17Mn0+XG4gKiAgICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgICAgbmFtZT1cImV2ZW50RGF0ZVwiXG4gKiAgICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgICAgICAgIGxhYmVsPVwiRXZlbnQgRGF0ZVwiXG4gKiAgICAgICAgIGdyaWRQcm9wcz17ZmFsc2V9IC8vIERpc2FibGVzIEdyaWQgd3JhcHBlclxuICogICAgICAgLz5cbiAqICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiPlN1Ym1pdDwvQnV0dG9uPlxuICogICAgIDwvQm94PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggbG9hZGluZyBzdGF0ZSBhbmQgY3VzdG9tIGVycm9yIGhhbmRsaW5nOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBMb2FkaW5nRm9ybSgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtKCk7XG4gKiAgIGNvbnN0IFtpc1ZhbGlkYXRpbmcsIHNldElzVmFsaWRhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxEYXRlUGlja2VyRWxlbWVudFxuICogICAgICAgbmFtZT1cImFwcG9pbnRtZW50RGF0ZVwiXG4gKiAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgbGFiZWw9XCJBcHBvaW50bWVudCBEYXRlXCJcbiAqICAgICAgIGxvYWRpbmc9e2lzVmFsaWRhdGluZ31cbiAqICAgICAgIExvYWRpbmdDb21wb25lbnQ9eygpID0+IDxDaXJjdWxhclByb2dyZXNzIHNpemU9ezIwfSAvPn1cbiAqICAgICAgIHBhcnNlRXJyb3I9eyhlcnJvcikgPT4ge1xuICogICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvcj8udHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAqICAgICAgICAgICByZXR1cm4gJ1RoaXMgZGF0ZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIGFwcG9pbnRtZW50JztcbiAqICAgICAgICAgfVxuICogICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnUGxlYXNlIHNlbGVjdCBhIHZhbGlkIGRhdGUnO1xuICogICAgICAgfX1cbiAqICAgICAvPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlIChpbmZlcnJlZCBmcm9tIGNvbnRyb2wpXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlIChpbmZlcnJlZCBmcm9tIG5hbWUgcHJvcClcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZSAoaW5mZXJyZWQgZnJvbSB0cmFuc2Zvcm0gZnVuY3Rpb25zKVxuICogQHRlbXBsYXRlIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmUgLSBXaGV0aGVyIGFjY2Vzc2libGUgZmllbGQgRE9NIHN0cnVjdHVyZSBpcyBlbmFibGVkXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIHdpdGggZnVsbCBUeXBlU2NyaXB0IGluZmVyZW5jZVxuICogQHBhcmFtIHJlZiAtIEZvcndhcmQgcmVmIGZvciB0aGUgcm9vdCBlbGVtZW50IChHcmlkIG9yIERhdGVQaWNrZXIgY29udGFpbmVyKVxuICogQHJldHVybnMgUmVuZGVyZWQgRGF0ZVBpY2tlckVsZW1lbnQgY29tcG9uZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKi9cbmNvbnN0IERhdGVQaWNrZXJFbGVtZW50ID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQsXG4gIERhdGVQaWNrZXJFbGVtZW50UHJvcHM8YW55LCBhbnksIGFueSwgYW55PlxuPig8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuPihcbiAgcHJvcHM6IERhdGVQaWNrZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlLCBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlPixcbiAgcmVmOiBSZWFjdC5SZWY8SFRNTERpdkVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGdyaWRQcm9wcyA9IHsgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IH0sXG4gICAgLi4uY29yZVByb3BzXG4gIH0gPSBwcm9wcztcblxuICAvLyBJZiBncmlkUHJvcHMgaXMgZXhwbGljaXRseSBmYWxzZSwgcmVuZGVyIHdpdGhvdXQgR3JpZCB3cmFwcGVyXG4gIGlmIChncmlkUHJvcHMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEYXRlUGlja2VyRWxlbWVudENvcmVcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHsuLi5jb3JlUHJvcHN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICAvLyBSZW5kZXIgd2l0aCBHcmlkIHdyYXBwZXIgZm9yIHJlc3BvbnNpdmUgbGF5b3V0XG4gIHJldHVybiAoXG4gICAgPEdyaWRcbiAgICAgIHJlZj17cmVmfVxuICAgICAgey4uLmdyaWRQcm9wc31cbiAgICA+XG4gICAgICA8RGF0ZVBpY2tlckVsZW1lbnRDb3JlXG4gICAgICAgIHsuLi5jb3JlUHJvcHN9XG4gICAgICAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn0pO1xuXG4vLyBTZXQgZGlzcGxheSBuYW1lIGZvciBSZWFjdCBEZXZlbG9wZXIgVG9vbHNcbkRhdGVQaWNrZXJFbGVtZW50LmRpc3BsYXlOYW1lID0gXCJEYXRlUGlja2VyRWxlbWVudFwiO1xuXG5leHBvcnQgeyBEYXRlUGlja2VyRWxlbWVudCB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlUGlja2VyRWxlbWVudDtcbiIsICJpbXBvcnQgeyB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycyc7XG5pbXBvcnQgdHlwZSB7XG4gIERhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIFBpY2tlckNoYW5nZUhhbmRsZXJDb250ZXh0LFxuICBQaWNrZXJWYWxpZERhdGUsXG59IGZyb20gJ0BtdWkveC1kYXRlLXBpY2tlcnMnO1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgdHlwZSB7IEZpZWxkVmFsdWVzLCBGaWVsZFBhdGggfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQge1xuICB1c2VEYXRlUGlja2VyVmFsdWUsXG4gIHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uLFxuICB1c2VEYXRlUGlja2VyU3R5bGVzLFxufSBmcm9tICcuL2hvb2tzJztcbmltcG9ydCB0eXBlIHsgRGF0ZVBpY2tlckVsZW1lbnRDb3JlUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgY29yZSBEYXRlUGlja2VyRWxlbWVudCBjb21wb25lbnQgd2l0aG91dCBHcmlkIHdyYXBwZXIuXG4gKlxuICogVGhpcyBpcyBhIGxpZ2h0d2VpZ2h0LCBwZXJmb3JtYW50IGRhdGUgcGlja2VyIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgc2VhbWxlc3NseVxuICogd2l0aCByZWFjdC1ob29rLWZvcm0gd2hpbGUgcHJvdmlkaW5nIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBzdXBwb3J0IGFuZFxuICogYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCBUeXBlU2NyaXB0IGluZmVyZW5jZSBmb3IgZm9ybSBmaWVsZCB0eXBlc1xuICogLSBBdXRvbWF0aWMgdmFsdWUgdHJhbnNmb3JtYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBwaWNrZXIgZm9ybWF0c1xuICogLSBDb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXNcbiAqIC0gVGhlbWUtYXdhcmUgc3R5bGluZyB3aXRoIGFjY2Vzc2liaWxpdHkgc3VwcG9ydFxuICogLSBQZXJmb3JtYW5jZSBvcHRpbWl6ZWQgd2l0aCBwcm9wZXIgbWVtb2l6YXRpb25cbiAqIC0gRm9yd2FyZCByZWYgc3VwcG9ydCBmb3IgYWR2YW5jZWQgdXNlIGNhc2VzXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlOlxuICogYGBgdHN4XG4gKiA8RGF0ZVBpY2tlckVsZW1lbnRDb3JlXG4gKiAgIG5hbWU9XCJiaXJ0aERhdGVcIlxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBsYWJlbD1cIkRhdGUgb2YgQmlydGhcIlxuICogICByZXF1aXJlZFxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbjpcbiAqIGBgYHRzeFxuICogPERhdGVQaWNrZXJFbGVtZW50Q29yZVxuICogICBuYW1lPVwic3RhcnREYXRlXCJcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbGFiZWw9XCJTdGFydCBEYXRlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6IChkYXRlU3RyaW5nKSA9PiBkYXRlU3RyaW5nID8gbmV3IERhdGUoZGF0ZVN0cmluZykgOiBudWxsLFxuICogICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBudWxsXG4gKiAgIH19XG4gKiAgIHZhbGlkYXRpb249e3tcbiAqICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxuICogICAgIGVycm9yTWVzc2FnZXM6IHtcbiAqICAgICAgIG1pbkRhdGU6ICdTdGFydCBkYXRlIG11c3QgYmUgdG9kYXkgb3IgbGF0ZXInXG4gKiAgICAgfVxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKiBAdGVtcGxhdGUgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSAtIFdoZXRoZXIgYWNjZXNzaWJsZSBmaWVsZCBET00gc3RydWN0dXJlIGlzIGVuYWJsZWRcbiAqL1xuY29uc3QgRGF0ZVBpY2tlckVsZW1lbnRDb3JlID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQsXG4gIERhdGVQaWNrZXJFbGVtZW50Q29yZVByb3BzPGFueSwgYW55LCBhbnksIGFueT5cbj4oXG4gIDxcbiAgICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICAgIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4gICAgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbiAgPihcbiAgICBwcm9wczogRGF0ZVBpY2tlckVsZW1lbnRDb3JlUHJvcHM8XG4gICAgICBURmllbGRWYWx1ZXMsXG4gICAgICBUTmFtZSxcbiAgICAgIFRWYWx1ZSxcbiAgICAgIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmVcbiAgICA+LFxuICAgIHJlZjogUmVhY3QuUmVmPEhUTUxEaXZFbGVtZW50PlxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIGNvbnRyb2wsXG4gICAgICBwYXJzZUVycm9yLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdmFsaWRhdGlvbixcbiAgICAgIGxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICB0ZXh0UmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgIGhlbHBlclRleHQsXG4gICAgICBpbnB1dFByb3BzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIGRhdGVQaWNrZXJQcm9wcyA9IHt9LFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCcsXG4gICAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gRXh0cmFjdCBEYXRlUGlja2VyLXNwZWNpZmljIHByb3BzXG4gICAgY29uc3Qge1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBpbnB1dFJlZjogZXh0ZXJuYWxJbnB1dFJlZixcbiAgICAgIG9uQ2xvc2UsXG4gICAgICAuLi5yZXN0RGF0ZVBpY2tlclByb3BzXG4gICAgfSA9IGRhdGVQaWNrZXJQcm9wcztcblxuICAgIC8vIFNldCB1cCBmb3JtIGNvbnRyb2xsZXJcbiAgICBjb25zdCB7IGZpZWxkLCBmaWVsZFN0YXRlIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICAgIG5hbWUsXG4gICAgICBjb250cm9sLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsIGFzIGFueSwgLy8gTGV0IHJlYWN0LWhvb2stZm9ybSBoYW5kbGUgdGhlIGRlZmF1bHQgdmFsdWUgdHlwaW5nXG4gICAgfSk7XG5cbiAgICAvLyBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBob29rXG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2U6IG9uVmFsdWVDaGFuZ2UgfSA9IHVzZURhdGVQaWNrZXJWYWx1ZSh7XG4gICAgICBmaWVsZCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRpb24gaG9va1xuICAgIGNvbnN0IHsgaGFzRXJyb3IsIGVycm9yTWVzc2FnZSwgaW52YWxpZCB9ID0gdXNlRGF0ZVBpY2tlclZhbGlkYXRpb24oe1xuICAgICAgZmllbGRTdGF0ZSxcbiAgICAgIHZhbGlkYXRpb24sXG4gICAgICBwYXJzZUVycm9yLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG5cbiAgICAvLyBTdHlsaW5nIGhvb2tcbiAgICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gdXNlRGF0ZVBpY2tlclN0eWxlcyh7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGhhc0Vycm9yLFxuICAgICAgbG9hZGluZyxcbiAgICAgIHRleHRSZWFkT25seSxcbiAgICB9KTtcblxuICAgIC8vIE1lcmdlIGlucHV0IHJlZnNcbiAgICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBleHRlcm5hbElucHV0UmVmKTtcblxuICAgIC8vIE1lbW9pemVkIGNoYW5nZSBoYW5kbGVyIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKFxuICAgICAgICBuZXdWYWx1ZTogVFZhbHVlIHwgbnVsbCxcbiAgICAgICAgY29udGV4dDogUGlja2VyQ2hhbmdlSGFuZGxlckNvbnRleHQ8RGF0ZVZhbGlkYXRpb25FcnJvcj5cbiAgICAgICkgPT4ge1xuICAgICAgICBvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICBbb25WYWx1ZUNoYW5nZV1cbiAgICApO1xuXG4gICAgLy8gTWVtb2l6ZWQgY2xvc2UgaGFuZGxlclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoLi4uYXJnczogUGFyYW1ldGVyczxOb25OdWxsYWJsZTx0eXBlb2Ygb25DbG9zZT4+KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZm9ybSBmaWVsZCBibHVyIGZvciB2YWxpZGF0aW9uXG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuXG4gICAgICAgIC8vIENhbGwgZXh0ZXJuYWwgb25DbG9zZSBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICAgIG9uQ2xvc2UoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgICBbZmllbGQub25CbHVyLCBvbkNsb3NlXVxuICAgICk7XG5cbiAgICAvLyBNZW1vaXplZCBibHVyIGhhbmRsZXIgZm9yIHRleHQgZmllbGRcbiAgICBjb25zdCBoYW5kbGVUZXh0RmllbGRCbHVyID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZXZlbnQ6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG5cbiAgICAgICAgLy8gQ2FsbCBleHRlcm5hbCBvbkJsdXIgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFByb3BzLm9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGlucHV0UHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICAgIFtmaWVsZC5vbkJsdXIsIGlucHV0UHJvcHMub25CbHVyXVxuICAgICk7XG5cbiAgICAvLyBNZW1vaXplZCBzbG90IHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICAgIGNvbnN0IG1lbW9pemVkU2xvdFByb3BzID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIC4uLnNsb3RQcm9wcyxcbiAgICAgICAgYWN0aW9uQmFyOiB7XG4gICAgICAgICAgYWN0aW9uczogWydjbGVhcicsICd0b2RheScsICdjYW5jZWwnLCAnYWNjZXB0J10gYXMgQXJyYXk8XG4gICAgICAgICAgICAnYWNjZXB0JyB8ICdjYW5jZWwnIHwgJ2NsZWFyJyB8ICduZXh0JyB8ICduZXh0T3JBY2NlcHQnIHwgJ3RvZGF5J1xuICAgICAgICAgID4sXG4gICAgICAgICAgLi4uc2xvdFByb3BzLmFjdGlvbkJhcixcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgICAgdmFyaWFudCxcbiAgICAgICAgICBvbkJsdXI6IGhhbmRsZVRleHRGaWVsZEJsdXIsXG4gICAgICAgICAgZXJyb3I6IGhhc0Vycm9yLFxuICAgICAgICAgIGhlbHBlclRleHQ6IGhhc0Vycm9yID8gZXJyb3JNZXNzYWdlIDogaGVscGVyVGV4dCxcbiAgICAgICAgICBpbnB1dFByb3BzOiB7XG4gICAgICAgICAgICByZWFkT25seTogdGV4dFJlYWRPbmx5LFxuICAgICAgICAgICAgJ2FyaWEtaW52YWxpZCc6IGludmFsaWQsXG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGhhc0Vycm9yID8gYCR7bmFtZX0tZXJyb3JgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wcy5pbnB1dFByb3BzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gQWRkIGxvYWRpbmcgaW5kaWNhdG9yIGlmIHByb3ZpZGVkXG4gICAgICAgICAgLi4uKGxvYWRpbmcgJiZcbiAgICAgICAgICAgIExvYWRpbmdDb21wb25lbnQgJiYge1xuICAgICAgICAgICAgICBJbnB1dFByb3BzOiB7XG4gICAgICAgICAgICAgICAgZW5kQWRvcm5tZW50OiA8TG9hZGluZ0NvbXBvbmVudCAvPixcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLklucHV0UHJvcHMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi5zbG90UHJvcHMudGV4dEZpZWxkLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBbXG4gICAgICAgIHNsb3RQcm9wcyxcbiAgICAgICAgaW5wdXRQcm9wcyxcbiAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICBoYW5kbGVUZXh0RmllbGRCbHVyLFxuICAgICAgICBoYXNFcnJvcixcbiAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICBoZWxwZXJUZXh0LFxuICAgICAgICB0ZXh0UmVhZE9ubHksXG4gICAgICAgIGludmFsaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgICBdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAvLyBTcHJlYWQgcmVzdCBwcm9wcyBmaXJzdCBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuXG4gICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgIHsuLi5yZXN0RGF0ZVBpY2tlclByb3BzfVxuICAgICAgICAvLyBDb3JlIHByb3BzXG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxuICAgICAgICBpbnB1dFJlZj17aGFuZGxlSW5wdXRSZWZ9XG4gICAgICAgIC8vIFVJIHByb3BzXG4gICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgLy8gU2xvdCBwcm9wc1xuICAgICAgICBzbG90UHJvcHM9e21lbW9pemVkU2xvdFByb3BzfVxuICAgICAgICAvLyBBY2Nlc3NpYmlsaXR5IHByb3BzXG4gICAgICAgIGFyaWEtaW52YWxpZD17aW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17aGFzRXJyb3IgPyBgJHtuYW1lfS1lcnJvcmAgOiB1bmRlZmluZWR9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbik7XG5cbi8vIFNldCBkaXNwbGF5IG5hbWUgZm9yIGRlYnVnZ2luZ1xuRGF0ZVBpY2tlckVsZW1lbnRDb3JlLmRpc3BsYXlOYW1lID0gJ0RhdGVQaWNrZXJFbGVtZW50Q29yZSc7XG5cbmV4cG9ydCB7IERhdGVQaWNrZXJFbGVtZW50Q29yZSB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlUGlja2VyRWxlbWVudENvcmU7XG4iLCAiaW1wb3J0IHR5cGUge1xuICBQaWNrZXJWYWxpZERhdGUsXG4gIERhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIFBpY2tlckNoYW5nZUhhbmRsZXJDb250ZXh0LFxufSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHsgdXNlTG9jYWxpemF0aW9uQ29udGV4dCB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFsc1wiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmllbGRWYWx1ZXMsXG4gIEZpZWxkUGF0aCxcbiAgUGF0aFZhbHVlLFxuICBVc2VDb250cm9sbGVyUmV0dXJuLFxufSBmcm9tIFwicmVhY3QtaG9vay1mb3JtXCI7XG5cbmltcG9ydCB0eXBlIHsgRGF0ZVRyYW5zZm9ybSB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIFR5cGUtc2FmZSBkYXRlIHZhbHVlIHJlYWRlciB0aGF0IGhhbmRsZXMgc3RyaW5nIHRvIGRhdGUgY29udmVyc2lvblxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZSBmcm9tIHRoZSBkYXRlIGFkYXB0ZXJcbiAqIEBwYXJhbSBhZGFwdGVyIC0gVGhlIGxvY2FsaXphdGlvbiBjb250ZXh0IGZyb20gTVVJIGRhdGUgcGlja2Vyc1xuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgKHN0cmluZywgZGF0ZSwgb3IgbnVsbClcbiAqIEByZXR1cm5zIFByb3Blcmx5IHR5cGVkIGRhdGUgdmFsdWUgb3IgbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZERhdGVQaWNrZXJWYWx1ZUFzRGF0ZTxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZT4oXG4gIGFkYXB0ZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZUxvY2FsaXphdGlvbkNvbnRleHQ+LFxuICB2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IFREYXRlIHwgdW5kZWZpbmVkXG4pOiBURGF0ZSB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVXNlIHRoZSBhZGFwdGVyIHRvIHBhcnNlIHRoZSBzdHJpbmcgaW50byBhIGRhdGVcbiAgICBjb25zdCBwYXJzZWREYXRlID0gYWRhcHRlci51dGlscy5kYXRlKHZhbHVlKTtcblxuICAgIHJldHVybiBwYXJzZWREYXRlIGFzIFREYXRlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsdWUgaG9va1xuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VEYXRlUGlja2VyVmFsdWVPcHRpb25zPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4ge1xuICAvKiogVGhlIGZpZWxkIGNvbnRyb2xsZXIgZnJvbSByZWFjdC1ob29rLWZvcm0gKi9cbiAgZmllbGQ6IFVzZUNvbnRyb2xsZXJSZXR1cm48VEZpZWxkVmFsdWVzLCBUTmFtZT5bXCJmaWVsZFwiXTtcbiAgLyoqIE9wdGlvbmFsIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyAqL1xuICB0cmFuc2Zvcm0/OiBEYXRlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT47XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsdWUgaG9va1xuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbHVlUmV0dXJuPFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZT4ge1xuICAvKiogVGhlIHRyYW5zZm9ybWVkIHZhbHVlIGZvciBkaXNwbGF5IGluIHRoZSBwaWNrZXIgKi9cbiAgdmFsdWU6IFRWYWx1ZSB8IG51bGw7XG4gIC8qKiBDaGFuZ2UgaGFuZGxlciBmb3IgcGlja2VyIHZhbHVlIHVwZGF0ZXMgKi9cbiAgb25DaGFuZ2U6IChcbiAgICB2YWx1ZTogVFZhbHVlIHwgbnVsbCxcbiAgICBjb250ZXh0OiBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dDxEYXRlVmFsaWRhdGlvbkVycm9yPlxuICApID0+IHZvaWQ7XG59XG5cbi8qKlxuICogSG9vayBmb3IgbWFuYWdpbmcgZGF0ZSBwaWNrZXIgdmFsdWUgdHJhbnNmb3JtYXRpb25zIHdpdGggdHlwZSBzYWZldHlcbiAqIFxuICogVGhpcyBob29rIGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gYmV0d2VlbiBmb3JtIGZpZWxkIHZhbHVlcyBhbmQgZGF0ZSBwaWNrZXIgdmFsdWVzLFxuICogYXBwbHlpbmcgY3VzdG9tIHRyYW5zZm9ybWF0aW9ucyB3aGlsZSBtYWludGFpbmluZyBzdHJpY3QgVHlwZVNjcmlwdCB0eXBpbmcuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIHN0cmluZyB0byBkYXRlIGNvbnZlcnNpb246XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VEYXRlUGlja2VyVmFsdWUoe1xuICogICBmaWVsZCxcbiAqICAgdHJhbnNmb3JtOiB7XG4gKiAgICAgaW5wdXQ6IChkYXRlU3RyaW5nKSA9PiBkYXRlU3RyaW5nID8gbmV3IERhdGUoZGF0ZVN0cmluZykgOiBudWxsLFxuICogICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBudWxsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBVc2FnZSB3aXRoIERheS5qcyBkYXRlczpcbiAqIGBgYHRzeFxuICogY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZURhdGVQaWNrZXJWYWx1ZSh7XG4gKiAgIGZpZWxkLFxuICogICB0cmFuc2Zvcm06IHtcbiAqICAgICBpbnB1dDogKGRhdGVTdHJpbmcpID0+IGRhdGVTdHJpbmcgPyBkYXlqcyhkYXRlU3RyaW5nKSA6IG51bGwsXG4gKiAgICAgb3V0cHV0OiAoZGF0ZSkgPT4gZGF0ZSA/IGRhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgOiBudWxsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiBcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdmFsdWUgdHJhbnNmb3JtYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHRyYW5zZm9ybWVkIHZhbHVlIGFuZCBjaGFuZ2UgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVBpY2tlclZhbHVlPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4oXG4gIG9wdGlvbnM6IFVzZURhdGVQaWNrZXJWYWx1ZU9wdGlvbnM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPlxuKTogVXNlRGF0ZVBpY2tlclZhbHVlUmV0dXJuPFRWYWx1ZT4ge1xuICBjb25zdCB7IGZpZWxkLCB0cmFuc2Zvcm0gfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGFkYXB0ZXIgPSB1c2VMb2NhbGl6YXRpb25Db250ZXh0KCk7XG5cbiAgLy8gVHJhbnNmb3JtIHRoZSBmaWVsZCB2YWx1ZSBmb3IgZGlzcGxheSBpbiB0aGUgcGlja2VyXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKTogVFZhbHVlIHwgbnVsbCA9PiB7XG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm0uaW5wdXQoZmllbGQudmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICAvLyBEZWZhdWx0IHRyYW5zZm9ybWF0aW9uOiBoYW5kbGUgc3RyaW5nIHRvIGRhdGUgY29udmVyc2lvblxuICAgIHJldHVybiByZWFkRGF0ZVBpY2tlclZhbHVlQXNEYXRlKGFkYXB0ZXIsIGZpZWxkLnZhbHVlKSBhcyBUVmFsdWUgfCBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2ZpZWxkLnZhbHVlLCB0cmFuc2Zvcm0/LmlucHV0LCBhZGFwdGVyXSk7XG5cbiAgLy8gQ3JlYXRlIGEgc3RhYmxlIGNoYW5nZSBoYW5kbGVyXG4gIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZhbHVlOiBUVmFsdWUgfCBudWxsLCBjb250ZXh0OiBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dDxEYXRlVmFsaWRhdGlvbkVycm9yPikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0/Lm91dHB1dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0cmFuc2Zvcm0ub3V0cHV0KG5ld1ZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgICBmaWVsZC5vbkNoYW5nZSh0cmFuc2Zvcm1lZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgdHJhbnNmb3JtYXRpb246IHN0b3JlIHRoZSBkYXRlIGFzLWlzXG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPik7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW2ZpZWxkLm9uQ2hhbmdlLCB0cmFuc2Zvcm0/Lm91dHB1dF1cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIG9uQ2hhbmdlLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VEYXRlUGlja2VyVmFsdWU7IiwgImltcG9ydCB0eXBlIHtcbiAgUGlja2VyVmFsaWREYXRlLFxuICBEYXRlVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmllbGRFcnJvcixcbiAgRmllbGRWYWx1ZXMsXG4gIEZpZWxkUGF0aCxcbiAgVXNlQ29udHJvbGxlclJldHVybixcbn0gZnJvbSBcInJlYWN0LWhvb2stZm9ybVwiO1xuXG5pbXBvcnQgdHlwZSB7IERhdGVQaWNrZXJWYWxpZGF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uIGhvb2tcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25PcHRpb25zPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4ge1xuICAvKiogVGhlIGZpZWxkIHN0YXRlIGZyb20gcmVhY3QtaG9vay1mb3JtIGNvbnRyb2xsZXIgKi9cbiAgZmllbGRTdGF0ZTogVXNlQ29udHJvbGxlclJldHVybjxURmllbGRWYWx1ZXMsIFROYW1lPltcImZpZWxkU3RhdGVcIl07XG4gIC8qKiBWYWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkYXRlIHBpY2tlciAqL1xuICB2YWxpZGF0aW9uPzogRGF0ZVBpY2tlclZhbGlkYXRpb25Db25maWc8VFZhbHVlPjtcbiAgLyoqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlciAqL1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yIHwgRGF0ZVZhbGlkYXRpb25FcnJvcikgPT4gUmVhY3ROb2RlO1xuICAvKiogVGhlIGN1cnJlbnQgZGF0ZSB2YWx1ZSBmb3IgdmFsaWRhdGlvbiAqL1xuICB2YWx1ZT86IFRWYWx1ZSB8IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbiBob29rXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25SZXR1cm4ge1xuICAvKiogV2hldGhlciB0aGUgZmllbGQgaGFzIGFueSB2YWxpZGF0aW9uIGVycm9ycyAqL1xuICBoYXNFcnJvcjogYm9vbGVhbjtcbiAgLyoqIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gZXJyb3IgKGZvcm0gb3IgZGF0ZS1zcGVjaWZpYykgKi9cbiAgZXJyb3I6IEZpZWxkRXJyb3IgfCBEYXRlVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuICAvKiogRm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UgZm9yIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlOiBSZWFjdE5vZGU7XG4gIC8qKiBXaGV0aGVyIHRoZSBmaWVsZCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlICovXG4gIGludmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBtZXNzYWdlcyBmb3IgY29tbW9uIGRhdGUgdmFsaWRhdGlvbiBzY2VuYXJpb3NcbiAqL1xuY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyA9IHtcbiAgaW52YWxpZERhdGU6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZVwiLFxuICBtaW5EYXRlOiBcIkRhdGUgbXVzdCBiZSBhZnRlciB0aGUgbWluaW11bSBhbGxvd2VkIGRhdGVcIixcbiAgbWF4RGF0ZTogXCJEYXRlIG11c3QgYmUgYmVmb3JlIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZVwiLFxuICBkaXNhYmxlZERhdGU6IFwiVGhpcyBkYXRlIGlzIG5vdCBhbGxvd2VkXCIsXG4gIHJlcXVpcmVkOiBcIlRoaXMgZmllbGQgaXMgcmVxdWlyZWRcIixcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogSG9vayBmb3IgbWFuYWdpbmcgZGF0ZSBwaWNrZXIgdmFsaWRhdGlvbiB3aXRoIGNvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmdcbiAqIFxuICogVGhpcyBob29rIGNlbnRyYWxpemVzIHZhbGlkYXRpb24gbG9naWMgZm9yIGRhdGUgcGlja2VycywgaGFuZGxpbmcgYm90aFxuICogcmVhY3QtaG9vay1mb3JtIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBkYXRlLXNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3JzXG4gKiBmcm9tIE1VSSBkYXRlIHBpY2tlcnMuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGZvcm0gdmFsaWRhdGlvbjpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBoYXNFcnJvciwgZXJyb3JNZXNzYWdlLCBpbnZhbGlkIH0gPSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbih7XG4gKiAgIGZpZWxkU3RhdGUsXG4gKiAgIHZhbGlkYXRpb246IHtcbiAqICAgICBtaW5EYXRlOiBkYXlqcygpLnN1YnRyYWN0KDEsICd5ZWFyJyksXG4gKiAgICAgbWF4RGF0ZTogZGF5anMoKS5hZGQoMSwgJ3llYXInKSxcbiAqICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gKiAgICAgICBtaW5EYXRlOiAnRGF0ZSBtdXN0IGJlIHdpdGhpbiB0aGUgbGFzdCB5ZWFyJyxcbiAqICAgICAgIG1heERhdGU6ICdEYXRlIGNhbm5vdCBiZSBtb3JlIHRoYW4gMSB5ZWFyIGluIHRoZSBmdXR1cmUnXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZVxuICogVXNhZ2Ugd2l0aCBjdXN0b20gZXJyb3IgcGFyc2VyOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IGhhc0Vycm9yLCBlcnJvck1lc3NhZ2UgfSA9IHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uKHtcbiAqICAgZmllbGRTdGF0ZSxcbiAqICAgcGFyc2VFcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAqICAgICAgIHJldHVybiBgRGF0ZSBFcnJvcjogJHtlcnJvcn1gO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnSW52YWxpZCBkYXRlJztcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIFxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVmFsaWRhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFZhbGlkYXRpb24gc3RhdGUgYW5kIGVycm9yIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbjxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KFxuICBvcHRpb25zOiBVc2VEYXRlUGlja2VyVmFsaWRhdGlvbk9wdGlvbnM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPlxuKTogVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25SZXR1cm4ge1xuICBjb25zdCB7IGZpZWxkU3RhdGUsIHZhbGlkYXRpb24sIHBhcnNlRXJyb3IsIHZhbHVlIH0gPSBvcHRpb25zO1xuXG4gIC8vIE1lbW9pemUgdmFsaWRhdGlvbiByZXN1bHRzIGZvciBwZXJmb3JtYW5jZVxuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBlcnJvcjogZmllbGRFcnJvciwgaW52YWxpZCB9ID0gZmllbGRTdGF0ZTtcbiAgICBcbiAgICAvLyBTdGFydCB3aXRoIGZvcm0gdmFsaWRhdGlvbiBlcnJvclxuICAgIGxldCBjdXJyZW50RXJyb3I6IEZpZWxkRXJyb3IgfCBEYXRlVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0gZmllbGRFcnJvcjtcbiAgICBcbiAgICAvLyBDaGVjayBkYXRlLXNwZWNpZmljIHZhbGlkYXRpb25zIGlmIG5vIGZvcm0gZXJyb3IgYW5kIHdlIGhhdmUgYSB2YWx1ZVxuICAgIGlmICghZmllbGRFcnJvciAmJiB2YWx1ZSAmJiB2YWxpZGF0aW9uKSB7XG4gICAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUsIHNob3VsZERpc2FibGVEYXRlLCBlcnJvck1lc3NhZ2VzIH0gPSB2YWxpZGF0aW9uO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBtaW5pbXVtIGRhdGVcbiAgICAgIGlmIChtaW5EYXRlICYmIHZhbHVlIDwgbWluRGF0ZSkge1xuICAgICAgICBjdXJyZW50RXJyb3IgPSB7XG4gICAgICAgICAgdHlwZTogJ21pbkRhdGUnLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZXM/Lm1pbkRhdGUgfHwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5taW5EYXRlLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgRGF0ZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgbWF4aW11bSBkYXRlXG4gICAgICBlbHNlIGlmIChtYXhEYXRlICYmIHZhbHVlID4gbWF4RGF0ZSkge1xuICAgICAgICBjdXJyZW50RXJyb3IgPSB7XG4gICAgICAgICAgdHlwZTogJ21heERhdGUnLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZXM/Lm1heERhdGUgfHwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5tYXhEYXRlLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgRGF0ZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZGlzYWJsZWQgZGF0ZVxuICAgICAgZWxzZSBpZiAoc2hvdWxkRGlzYWJsZURhdGUgJiYgc2hvdWxkRGlzYWJsZURhdGUodmFsdWUpKSB7XG4gICAgICAgIGN1cnJlbnRFcnJvciA9IHtcbiAgICAgICAgICB0eXBlOiAnZGlzYWJsZWREYXRlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VzPy5kaXNhYmxlZERhdGUgfHwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kaXNhYmxlZERhdGUsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBEYXRlVmFsaWRhdGlvbkVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBoYXNFcnJvciA9IEJvb2xlYW4oY3VycmVudEVycm9yKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaGFzRXJyb3IsXG4gICAgICBlcnJvcjogY3VycmVudEVycm9yLFxuICAgICAgaW52YWxpZDogaW52YWxpZCB8fCBoYXNFcnJvcixcbiAgICB9O1xuICB9LCBbZmllbGRTdGF0ZSwgdmFsaWRhdGlvbiwgdmFsdWVdKTtcblxuICAvLyBNZW1vaXplIGVycm9yIG1lc3NhZ2UgZm9ybWF0dGluZ1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSB1c2VNZW1vKCgpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVXNlIGN1c3RvbSBlcnJvciBwYXJzZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgcmV0dXJuIHBhcnNlRXJyb3IodmFsaWRhdGlvblJlc3VsdC5lcnJvcik7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBlcnJvciBtZXNzYWdlIGhhbmRsaW5nXG4gICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCdtZXNzYWdlJyBpbiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yICYmIHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBlcnJvciBtZXNzYWdlcyBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgaWYgKCd0eXBlJyBpbiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvclR5cGUgPSB2YWxpZGF0aW9uUmVzdWx0LmVycm9yLnR5cGU7XG5cbiAgICAgIHN3aXRjaCAoZXJyb3JUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5yZXF1aXJlZDtcbiAgICAgICAgY2FzZSAnbWluRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWluRGF0ZTtcbiAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWF4RGF0ZTtcbiAgICAgICAgY2FzZSAnZGlzYWJsZWREYXRlJzpcbiAgICAgICAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kaXNhYmxlZERhdGU7XG4gICAgICAgIGNhc2UgJ2ludmFsaWREYXRlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5pbnZhbGlkRGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5pbnZhbGlkRGF0ZTtcbiAgfSwgW3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IsIHBhcnNlRXJyb3JdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnZhbGlkYXRpb25SZXN1bHQsXG4gICAgZXJyb3JNZXNzYWdlLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbjsiLCAiaW1wb3J0IHR5cGUgeyBTeFByb3BzLCBUaGVtZSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHVzZURhdGVQaWNrZXJTdHlsZXMgaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJTdHlsZXNPcHRpb25zIHtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGEgdmFsaWRhdGlvbiBlcnJvciAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZSAqL1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHRleHQgaW5wdXQgaXMgcmVhZC1vbmx5ICovXG4gIHRleHRSZWFkT25seT86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gc3R5bGVzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMgKi9cbiAgc3g/OiBTeFByb3BzPFRoZW1lPjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIHVzZURhdGVQaWNrZXJTdHlsZXMgaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJTdHlsZXNSZXR1cm4ge1xuICAvKiogQ29tcHV0ZWQgc3R5bGVzIGZvciB0aGUgZGF0ZSBwaWNrZXIgY29tcG9uZW50ICovXG4gIHN4OiBTeFByb3BzPFRoZW1lPjtcbiAgLyoqIEFkZGl0aW9uYWwgY2xhc3MgbmFtZXMgZm9yIHN0eWxpbmcgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhvb2sgZm9yIG1hbmFnaW5nIHRoZW1lLWF3YXJlIGRhdGUgcGlja2VyIHN0eWxlcyB3aXRoIGNvbnNpc3RlbnQgZGVzaWduIHN5c3RlbSBpbnRlZ3JhdGlvblxuICogXG4gKiBUaGlzIGhvb2sgcHJvdmlkZXMgb3B0aW1pemVkLCBtZW1vaXplZCBzdHlsZXMgZm9yIGRhdGUgcGlja2VyIGNvbXBvbmVudHMgdGhhdCBhdXRvbWF0aWNhbGx5XG4gKiBhZGFwdCB0byB0aGUgY3VycmVudCBNVUkgdGhlbWUgYW5kIGNvbXBvbmVudCBzdGF0ZSAoZGlzYWJsZWQsIGVycm9yLCBsb2FkaW5nLCBldGMuKS5cbiAqIEl0IGVuc3VyZXMgY29uc2lzdGVudCBzdHlsaW5nIGFjcm9zcyBhbGwgZGF0ZSBwaWNrZXIgaW5zdGFuY2VzIHdoaWxlIGFsbG93aW5nIGN1c3RvbWl6YXRpb24uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBzeCB9ID0gdXNlRGF0ZVBpY2tlclN0eWxlcyh7XG4gKiAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICogICBoYXNFcnJvcjogISFlcnJvcixcbiAqICAgbG9hZGluZzogaXNMb2FkaW5nXG4gKiB9KTtcbiAqIFxuICogcmV0dXJuIDxEYXRlUGlja2VyIHN4PXtzeH0gLi4uIC8+O1xuICogYGBgXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBzdHlsZXM6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgc3ggfSA9IHVzZURhdGVQaWNrZXJTdHlsZXMoe1xuICogICBoYXNFcnJvcjogISFlcnJvcixcbiAqICAgc3g6IHtcbiAqICAgICAnJiAuTXVpSW5wdXRMYWJlbC1yb290Jzoge1xuICogICAgICAgY29sb3I6ICdwcmltYXJ5Lm1haW4nXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFN0eWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgQ29tcHV0ZWQgc3R5bGVzIGFuZCBjbGFzcyBuYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVBpY2tlclN0eWxlcyhcbiAgb3B0aW9uczogVXNlRGF0ZVBpY2tlclN0eWxlc09wdGlvbnMgPSB7fVxuKTogVXNlRGF0ZVBpY2tlclN0eWxlc1JldHVybiB7XG4gIGNvbnN0IHsgZGlzYWJsZWQsIGhhc0Vycm9yLCBsb2FkaW5nLCB0ZXh0UmVhZE9ubHksIHN4OiBjdXN0b21TeCB9ID0gb3B0aW9ucztcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIC8vIE1lbW9pemUgY29tcHV0ZWQgc3R5bGVzIGZvciBwZXJmb3JtYW5jZVxuICBjb25zdCBjb21wdXRlZFN4ID0gdXNlTWVtbygoKTogU3hQcm9wczxUaGVtZT4gPT4ge1xuICAgIGNvbnN0IGJhc2VTdHlsZXM6IFN4UHJvcHM8VGhlbWU+ID0ge1xuICAgICAgLy8gSW5wdXQgZmllbGQgc3R5bGluZ1xuICAgICAgXCImIC5NdWlPdXRsaW5lZElucHV0LXJvb3RcIjoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGRpc2FibGVkIFxuICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kIFxuICAgICAgICAgIDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICBcbiAgICAgICAgLy8gVHJhbnNpdGlvbiBmb3Igc21vb3RoIHN0YXRlIGNoYW5nZXNcbiAgICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFtcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICAgICAgJ2JvcmRlci1jb2xvcicsXG4gICAgICAgICAgJ2NvbG9yJ1xuICAgICAgICBdLCB7XG4gICAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0LFxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBFcnJvciBzdGF0ZSBzdHlsaW5nXG4gICAgICAgIC4uLihoYXNFcnJvciAmJiB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnJi5NdWktZm9jdXNlZCc6IHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICAgICAgICBib3hTaGFkb3c6IGAwIDAgMCAycHggJHt0aGVtZS5wYWxldHRlLmVycm9yLm1haW59MjVgLCAvLyAyNSBpcyAxNSUgb3BhY2l0eSBpbiBoZXhcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBMb2FkaW5nIHN0YXRlIHN0eWxpbmdcbiAgICAgICAgLi4uKGxvYWRpbmcgJiYge1xuICAgICAgICAgIG9wYWNpdHk6IDAuNyxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgIH0pLFxuICAgICAgfSxcblxuICAgICAgLy8gSW5wdXQgZWxlbWVudCBzdHlsaW5nXG4gICAgICBcIiYgLk11aUlucHV0QmFzZS1pbnB1dFwiOiB7XG4gICAgICAgIGN1cnNvcjogZGlzYWJsZWQgXG4gICAgICAgICAgPyBcIm5vdC1hbGxvd2VkXCIgXG4gICAgICAgICAgOiB0ZXh0UmVhZE9ubHkgXG4gICAgICAgICAgICA/IFwicG9pbnRlclwiIFxuICAgICAgICAgICAgOiBcInRleHRcIixcbiAgICAgICAgXG4gICAgICAgIC8vIFJlYWQtb25seSBzcGVjaWZpYyBzdHlsaW5nXG4gICAgICAgIC4uLih0ZXh0UmVhZE9ubHkgJiYgIWRpc2FibGVkICYmIHtcbiAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiLFxuICAgICAgICAgIGNhcmV0Q29sb3I6IFwidHJhbnNwYXJlbnRcIiwgLy8gSGlkZSB0ZXh0IGN1cnNvciBpbiByZWFkLW9ubHkgbW9kZVxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBMb2FkaW5nIHN0YXRlXG4gICAgICAgIC4uLihsb2FkaW5nICYmIHtcbiAgICAgICAgICBjdXJzb3I6IFwid2FpdFwiLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIFJlcXVpcmVkIGZpZWxkIGFzdGVyaXNrIHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpSW5wdXRMYWJlbC1hc3Rlcmlza1wiOiB7IFxuICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICBmb250U2l6ZTogXCIxLjJlbVwiLFxuICAgICAgfSxcblxuICAgICAgLy8gTGFiZWwgc3R5bGluZyB3aXRoIGJldHRlciBjb250cmFzdFxuICAgICAgXCImIC5NdWlJbnB1dExhYmVsLXJvb3RcIjoge1xuICAgICAgICBjb2xvcjogaGFzRXJyb3IgXG4gICAgICAgICAgPyB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4gXG4gICAgICAgICAgOiB0aGVtZS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5LFxuICAgICAgICBcbiAgICAgICAgLy8gRW5zdXJlIHByb3BlciBjb250cmFzdCBmb3IgZGlzYWJsZWQgc3RhdGVcbiAgICAgICAgLi4uKGRpc2FibGVkICYmIHtcbiAgICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS50ZXh0LmRpc2FibGVkLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEhlbHBlciB0ZXh0IHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpRm9ybUhlbHBlclRleHQtcm9vdFwiOiB7XG4gICAgICAgIG1hcmdpbkxlZnQ6IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgICAgIG1hcmdpblJpZ2h0OiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBcbiAgICAgICAgLy8gRXJyb3Igc3RhdGVcbiAgICAgICAgLi4uKGhhc0Vycm9yICYmIHtcbiAgICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIENhbGVuZGFyIGljb24gc3R5bGluZ1xuICAgICAgXCImIC5NdWlJbnB1dEFkb3JubWVudC1yb290XCI6IHtcbiAgICAgICAgY29sb3I6IGRpc2FibGVkIFxuICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWQgXG4gICAgICAgICAgOiBoYXNFcnJvciBcbiAgICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluIFxuICAgICAgICAgICAgOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gICAgICB9LFxuXG4gICAgICAvLyBGb2N1cyByaW5nIGZvciBhY2Nlc3NpYmlsaXR5XG4gICAgICBcIiYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZm9jdXNlZFwiOiB7XG4gICAgICAgIG91dGxpbmU6IGAycHggc29saWQgJHt0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbn01MGAsIC8vIDUwIGlzIDMxJSBvcGFjaXR5XG4gICAgICAgIG91dGxpbmVPZmZzZXQ6IFwiMnB4XCIsXG4gICAgICB9LFxuXG4gICAgICAvLyBFbmhhbmNlZCBjb250cmFzdCBmb3IgZGFyayB0aGVtZXNcbiAgICAgIC4uLih0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgICAgIFwiJiAuTXVpT3V0bGluZWRJbnB1dC1yb290XCI6IHtcbiAgICAgICAgICBib3JkZXJXaWR0aDogMixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvLyBNZXJnZSB3aXRoIGN1c3RvbSBzdHlsZXNcbiAgICByZXR1cm4gY3VzdG9tU3ggPyBbYmFzZVN0eWxlcywgY3VzdG9tU3hdIGFzIFN4UHJvcHM8VGhlbWU+IDogYmFzZVN0eWxlcztcbiAgfSwgW1xuICAgIHRoZW1lLFxuICAgIGRpc2FibGVkLFxuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgdGV4dFJlYWRPbmx5LFxuICAgIGN1c3RvbVN4LFxuICBdKTtcblxuICAvLyBHZW5lcmF0ZSBhZGRpdGlvbmFsIGNsYXNzIG5hbWVzIGZvciBleHRlcm5hbCBzdHlsaW5nIGhvb2tzXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgaWYgKGRpc2FibGVkKSBjbGFzc2VzLnB1c2goJ0RhdGVQaWNrZXJFbGVtZW50LS1kaXNhYmxlZCcpO1xuICAgIGlmIChoYXNFcnJvcikgY2xhc3Nlcy5wdXNoKCdEYXRlUGlja2VyRWxlbWVudC0tZXJyb3InKTtcbiAgICBpZiAobG9hZGluZykgY2xhc3Nlcy5wdXNoKCdEYXRlUGlja2VyRWxlbWVudC0tbG9hZGluZycpO1xuICAgIGlmICh0ZXh0UmVhZE9ubHkpIGNsYXNzZXMucHVzaCgnRGF0ZVBpY2tlckVsZW1lbnQtLXJlYWRPbmx5Jyk7XG4gICAgXG4gICAgcmV0dXJuIGNsYXNzZXMubGVuZ3RoID4gMCA/IGNsYXNzZXMuam9pbignICcpIDogdW5kZWZpbmVkO1xuICB9LCBbZGlzYWJsZWQsIGhhc0Vycm9yLCBsb2FkaW5nLCB0ZXh0UmVhZE9ubHldKTtcblxuICByZXR1cm4ge1xuICAgIHN4OiBjb21wdXRlZFN4LFxuICAgIGNsYXNzTmFtZSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF0ZVBpY2tlclN0eWxlczsiLCAiaW1wb3J0IHR5cGUgeyBQaWNrZXJWYWxpZERhdGUgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHR5cGUgeyB1c2VMb2NhbGl6YXRpb25Db250ZXh0IH0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnMvaW50ZXJuYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkVmFsdWVzLCBGaWVsZFBhdGgsIFBhdGhWYWx1ZSB9IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgZm9yIGNyZWF0aW5nIGJyYW5kZWQgZGF0ZSB0eXBlcyB0byBwcmV2ZW50IG1peGluZyBkaWZmZXJlbnQgZGF0ZSBmb3JtYXRzXG4gKiBAdGVtcGxhdGUgVERhdGUgLSBUaGUgYmFzZSBkYXRlIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUQnJhbmQgLSBUaGUgYnJhbmQgc3RyaW5nIGZvciB0eXBlIHNhZmV0eVxuICovXG5leHBvcnQgdHlwZSBCcmFuZGVkRGF0ZTxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSwgVEJyYW5kIGV4dGVuZHMgc3RyaW5nPiA9IFxuICBURGF0ZSAmIHsgcmVhZG9ubHkgX19icmFuZDogVEJyYW5kIH07XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgZGF0ZVxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIGRhdGUtbGlrZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGlja2VyVmFsaWREYXRlIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgRGF0ZSBvYmplY3RcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBkYXRlLWxpa2Ugb2JqZWN0cyB3aXRoIGNvbW1vbiBkYXRlIGxpYnJhcnkgbWV0aG9kc1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgIC8vIERheS5qcywgTW9tZW50LmpzLCBvciBzaW1pbGFyXG4gICAgaWYgKCdpc1ZhbGlkJyBpbiB2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlIGFzIGFueSkuaXNWYWxpZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLmlzVmFsaWQoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTHV4b24gRGF0ZVRpbWVcbiAgICBpZiAoJ2lzVmFsaWQnIGluIHZhbHVlICYmIHR5cGVvZiAodmFsdWUgYXMgYW55KS5pc1ZhbGlkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5pc1ZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgcGFyc2VkIGFzIGEgZGF0ZVxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBhcnNlYWJsZSBkYXRlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJzYWJsZURhdGVTdHJpbmcodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBCYXNpYyBJU08gZGF0ZSBmb3JtYXQgY2hlY2tcbiAgY29uc3QgaXNvRGF0ZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OlRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZHszfSk/KD86WnxbKy1dXFxkezJ9OlxcZHsyfSk/KT8kLztcblxuICBpZiAoaXNvRGF0ZVJlZ2V4LnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDaGVjayBpZiBEYXRlIGNvbnN0cnVjdG9yIGNhbiBwYXJzZSBpdFxuICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cbiAgcmV0dXJuICFpc05hTihwYXJzZWQuZ2V0VGltZSgpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHlwZS1zYWZlIGRhdGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBmb3JtIHZhbHVlcyB0byBkYXRlIHBpY2tlciB2YWx1ZXNcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZSB1c2VkIGJ5IHRoZSBwaWNrZXJcbiAqIEBwYXJhbSBhZGFwdGVyIC0gVGhlIGRhdGUgYWRhcHRlciBmcm9tIE1VSSBsb2NhbGl6YXRpb24gY29udGV4dFxuICogQHJldHVybnMgQSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiB0aGF0IHNhZmVseSBjb252ZXJ0cyBmb3JtIHZhbHVlcyB0byBkYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGF0ZUlucHV0VHJhbnNmb3JtPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KGFkYXB0ZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZUxvY2FsaXphdGlvbkNvbnRleHQ+KSB7XG4gIHJldHVybiAodmFsdWU6IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPik6IFREYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBhZGFwdGVyLnV0aWxzLmRhdGUodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZShwYXJzZWQpID8gKHBhcnNlZCBhcyBURGF0ZSkgOiBudWxsO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBURGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHlwZS1zYWZlIGRhdGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBkYXRlIHBpY2tlciB2YWx1ZXMgYmFjayB0byBmb3JtIHZhbHVlc1xuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVERhdGUgLSBUaGUgZGF0ZSB0eXBlIHVzZWQgYnkgdGhlIHBpY2tlclxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgdG8gdXNlIGZvciBzdHJpbmcgY29udmVyc2lvbiAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRoYXQgc2FmZWx5IGNvbnZlcnRzIGRhdGVzIHRvIGZvcm0gdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEYXRlT3V0cHV0VHJhbnNmb3JtPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KGZvcm1hdD86IHN0cmluZykge1xuICByZXR1cm4gKHZhbHVlOiBURGF0ZSB8IG51bGwpOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4gPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBmb3JtYXQgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGRhdGUgYXMtaXNcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgcmV0dXJuIHZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBkYXRlIGxpYnJhcnkgZm9ybWF0c1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnaXNvJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdkYXRlLW9ubHknKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGF5LmpzIGZvcm1hdFxuICAgICAgaWYgKHR5cGVvZiAodmFsdWUgYXMgYW55KS5mb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLmZvcm1hdChmb3JtYXQpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH1cblxuICAgICAgLy8gTW9tZW50LmpzIGZvcm1hdFxuICAgICAgaWYgKHR5cGVvZiAodmFsdWUgYXMgYW55KS5mb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLmZvcm1hdChmb3JtYXQpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH1cblxuICAgICAgLy8gTHV4b24gZm9ybWF0XG4gICAgICBpZiAodHlwZW9mICh2YWx1ZSBhcyBhbnkpLnRvRm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS50b0Zvcm1hdChmb3JtYXQpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2s6IHJldHVybiBhcy1pc1xuICAgICAgcmV0dXJuIHZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgZGVmYXVsdCBkYXRlIHBpY2tlciBjb25maWd1cmF0aW9uXG4gKiBAdGVtcGxhdGUgVERhdGUgLSBUaGUgZGF0ZSB0eXBlXG4gKiBAcmV0dXJucyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0RGF0ZVBpY2tlckNvbmZpZzxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZT4oKSB7XG4gIHJldHVybiB7XG4gICAgLy8gRGVmYXVsdCBzbG90IHByb3BzIGZvciBjb25zaXN0ZW50IGJlaGF2aW9yXG4gICAgc2xvdFByb3BzOiB7XG4gICAgICBhY3Rpb25CYXI6IHtcbiAgICAgICAgYWN0aW9uczogWydjbGVhcicsICd0b2RheScsICdjYW5jZWwnLCAnYWNjZXB0J10gYXMgY29uc3QsXG4gICAgICB9LFxuICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICAgICAgdmFyaWFudDogJ291dGxpbmVkJyBhcyBjb25zdCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBcbiAgICAvLyBEZWZhdWx0IGdyaWQgcHJvcHMgZm9yIGxheW91dCBjb25zaXN0ZW5jeVxuICAgIGdyaWRQcm9wczoge1xuICAgICAgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IGFzIGNvbnN0LFxuICAgIH0sXG4gICAgXG4gICAgLy8gRGVmYXVsdCB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICB2YWxpZGF0aW9uOiB7XG4gICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gICAgICAgIGludmFsaWREYXRlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGVcIixcbiAgICAgICAgbWluRGF0ZTogXCJEYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlXCIsXG4gICAgICAgIG1heERhdGU6IFwiRGF0ZSBtdXN0IGJlIGJlZm9yZSB0aGUgbWF4aW11bSBhbGxvd2VkIGRhdGVcIixcbiAgICAgICAgZGlzYWJsZWREYXRlOiBcIlRoaXMgZGF0ZSBpcyBub3QgYWxsb3dlZFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9IGFzIGNvbnN0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdG8gc2FmZWx5IGV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIHZhcmlvdXMgZXJyb3IgdHlwZXNcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciBvYmplY3QgKGNvdWxkIGJlIGZyb20gcmVhY3QtaG9vay1mb3JtIG9yIE1VSSBkYXRlIHBpY2tlcilcbiAqIEByZXR1cm5zIEEgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCkge1xuICAgIC8vIFJlYWN0IEhvb2sgRm9ybSBGaWVsZEVycm9yXG4gICAgaWYgKCdtZXNzYWdlJyBpbiBlcnJvciAmJiB0eXBlb2YgKGVycm9yIGFzIGFueSkubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAoZXJyb3IgYXMgYW55KS5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIE1VSSBEYXRlVmFsaWRhdGlvbkVycm9yXG4gICAgaWYgKCd0eXBlJyBpbiBlcnJvciAmJiB0eXBlb2YgKGVycm9yIGFzIGFueSkudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGVycm9yVHlwZSA9IChlcnJvciBhcyBhbnkpLnR5cGU7XG5cbiAgICAgIHN3aXRjaCAoZXJyb3JUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2ludmFsaWREYXRlJzpcbiAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGUnO1xuICAgICAgICBjYXNlICdtaW5EYXRlJzpcbiAgICAgICAgICByZXR1cm4gJ0RhdGUgaXMgdG9vIGVhcmx5JztcbiAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdEYXRlIGlzIHRvbyBsYXRlJztcbiAgICAgICAgY2FzZSAnZGlzYWJsZWREYXRlJzpcbiAgICAgICAgICByZXR1cm4gJ1RoaXMgZGF0ZSBpcyBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJ0ludmFsaWQgZGF0ZSBzZWxlY3Rpb24nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnSW52YWxpZCBpbnB1dCc7XG59XG5cbi8qKlxuICogUGVyZm9ybWFuY2UgdXRpbGl0eSB0byBjcmVhdGUgc3RhYmxlIHJlZmVyZW5jZXMgZm9yIGNvbXBsZXggcHJvcHNcbiAqIFRoaXMgaGVscHMgcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzIHdoZW4gdXNpbmcgY29tcGxleCBjb25maWd1cmF0aW9uIG9iamVjdHNcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcmV0dXJucyBBIEpTT04gc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBkZXBlbmRlbmN5IGluIHVzZU1lbW8vdXNlQ2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YWJsZUtleTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGNvbmZpZzogVCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIC8vIFNvcnQgb2JqZWN0IGtleXMgZm9yIGNvbnNpc3RlbnQgc2VyaWFsaXphdGlvblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgc29ydGVkW2tdID0gKHZhbHVlIGFzIGFueSlba107XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zZXJpYWxpemFibGUgb2JqZWN0c1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnNvcnQoKS5qb2luKCctJyk7XG4gIH1cbn0iLCAiaW1wb3J0IFZpc2liaWxpdHkgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9WaXNpYmlsaXR5JztcbmltcG9ydCBWaXNpYmlsaXR5T2ZmIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvVmlzaWJpbGl0eU9mZic7XG5pbXBvcnQgdHlwZSB7IEljb25CdXR0b25Qcm9wcywgVGV4dEZpZWxkUHJvcHMsIEdyaWRQcm9wcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgSWNvbkJ1dHRvbixcbiAgSW5wdXRBZG9ybm1lbnQsXG4gIFRleHRGaWVsZCxcbiAgdXNlRm9ya1JlZixcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IE1vdXNlRXZlbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUGFzc3dvcmRFbGVtZW50IGNvbXBvbmVudC5cbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFBhc3N3b3JkRWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+ID0gT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnIHwgJ3NpemUnPiAmIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwicGFzc3dvcmRcIiB8IFwidXNlci5jdXJyZW50UGFzc3dvcmRcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtXG4gICAqL1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICAvKipcbiAgICogQ29sb3Igb2YgdGhlIHZpc2liaWxpdHkgdG9nZ2xlIGljb24gYnV0dG9uXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJkZWZhdWx0XCJcbiAgICovXG4gIGljb25Db2xvcj86IEljb25CdXR0b25Qcm9wc1snY29sb3InXTtcbiAgLyoqXG4gICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSB2aXNpYmlsaXR5IHRvZ2dsZSBpY29uXG4gICAqIEBwYXJhbSBwYXNzd29yZCAtIFdoZXRoZXIgcGFzc3dvcmQgaXMgY3VycmVudGx5IGhpZGRlblxuICAgKiBAcmV0dXJucyBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoZSBpY29uXG4gICAqIEBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2aXNpYmlsaXR5L3Zpc2liaWxpdHktb2ZmIGljb25zXG4gICAqL1xuICByZW5kZXJJY29uPzogKHBhc3N3b3JkOiBib29sZWFuKSA9PiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG5cbn07XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFBhc3N3b3JkRWw8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IFBhc3N3b3JkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBpY29uQ29sb3IsXG4gICAgcmVuZGVySWNvbiA9IHBhc3N3b3JkID0+IChwYXNzd29yZCA/IDxWaXNpYmlsaXR5IC8+IDogPFZpc2liaWxpdHlPZmYgLz4pLFxuICAgIHNsb3RQcm9wcyxcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgaW5wdXRSZWYsXG4gICAgb25CbHVyLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gdXNlU3RhdGU8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgY29uc3QgZW5kQWRvcm5tZW50ID0gKFxuICAgIDxJbnB1dEFkb3JubWVudCBwb3NpdGlvbj17J2VuZCd9PlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgb25Nb3VzZURvd249eyhlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQYXNzd29yZCghcGFzc3dvcmQpfVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGNvbG9yPXtpY29uQ29sb3IgPz8gJ2RlZmF1bHQnfVxuICAgICAgPlxuICAgICAgICB7cmVuZGVySWNvbihwYXNzd29yZCl9XG4gICAgICA8L0ljb25CdXR0b24+XG4gICAgPC9JbnB1dEFkb3JubWVudD5cbiAgKTtcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBpbnB1dFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIHR5cGU9e3Bhc3N3b3JkID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J31cbiAgICAgIHZhbHVlPXtmaWVsZC52YWx1ZSA/PyAnJ31cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgdmFyaWFudD17cmVzdC52YXJpYW50ID8/ICdvdXRsaW5lZCd9XG4gICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkNoYW5nZShldmVudCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdC5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJlc3Qub25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICB7Li4uKHR5cGVvZiBzbG90UHJvcHMgPT09ICd1bmRlZmluZWQnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgSW5wdXRQcm9wczoge1xuICAgICAgICAgICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uc2xvdFByb3BzLFxuICAgICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAgIGVuZEFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAuLi5zbG90UHJvcHM/LmlucHV0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBUZXh0RmllbGRQcm9wc1snc2xvdFByb3BzJ10sXG4gICAgICAgICAgfSl9XG4gICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgcGFzc3dvcmQgVGV4dEZpZWxkIHdpdGggc2hvdy9oaWRlIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBmdWxseSBpbnRlZ3JhdGVkIHBhc3N3b3JkIGlucHV0IHRoYXQgd29ya3Mgc2VhbWxlc3NseSB3aXRoIHJlYWN0LWhvb2stZm9ybSxcbiAqIGluY2x1ZGluZyBhdXRvbWF0aWMgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBhIGJ1aWx0LWluIHZpc2liaWxpdHkgdG9nZ2xlIGJ1dHRvbi4gVGhlIHBhc3N3b3JkXG4gKiBjYW4gYmUgc2hvd24gb3IgaGlkZGVuIGJ5IGNsaWNraW5nIHRoZSBleWUgaWNvbiBpbiB0aGUgaW5wdXQncyBlbmQgYWRvcm5tZW50LlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBQYXNzd29yZCB2aXNpYmlsaXR5IHRvZ2dsZVxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheVxuICogLSBDdXN0b21pemFibGUgdmlzaWJpbGl0eSBpY29uc1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3VwcG9ydFxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPFBhc3N3b3JkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicGFzc3dvcmRcIlxuICogICBsYWJlbD1cIlBhc3N3b3JkXCJcbiAqICAgcnVsZXM9e3tcbiAqICAgICByZXF1aXJlZDogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyxcbiAqICAgICBtaW5MZW5ndGg6IHsgdmFsdWU6IDgsIG1lc3NhZ2U6ICdNaW5pbXVtIDggY2hhcmFjdGVycycgfVxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBpY29uIGNvbG9yOlxuICogYGBgdHN4XG4gKiA8UGFzc3dvcmRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJjb25maXJtUGFzc3dvcmRcIlxuICogICBsYWJlbD1cIkNvbmZpcm0gUGFzc3dvcmRcIlxuICogICBpY29uQ29sb3I9XCJwcmltYXJ5XCJcbiAqICAgcGxhY2Vob2xkZXI9XCJSZS1lbnRlciB5b3VyIHBhc3N3b3JkXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIGdyaWQgbGF5b3V0OlxuICogYGBgdHN4XG4gKiA8UGFzc3dvcmRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJuZXdQYXNzd29yZFwiXG4gKiAgIGxhYmVsPVwiTmV3IFBhc3N3b3JkXCJcbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgIHJlbmRlckljb249eyhoaWRkZW4pID0+IGhpZGRlbiA/IDxDdXN0b21IaWRlSWNvbiAvPiA6IDxDdXN0b21TaG93SWNvbiAvPn1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IFBhc3N3b3JkRWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogUGFzc3dvcmRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IHtcblxuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFBhc3N3b3JkRWxlbWVudCB9O1xuIiwgImltcG9ydCB0eXBlIHtcbiAgRm9ybUNvbnRyb2xMYWJlbFByb3BzLFxuICBGb3JtTGFiZWxQcm9wcyxcbiAgUmFkaW9Hcm91cFByb3BzLFxuICBSYWRpb1Byb3BzLFxuICBHcmlkUHJvcHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1IZWxwZXJUZXh0LFxuICBGb3JtTGFiZWwsXG4gIFJhZGlvLFxuICBSYWRpb0dyb3VwLFxuICBHcmlkLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBDb250cm9sLFxuICBGaWVsZEVycm9yLFxuICBGaWVsZFBhdGgsXG4gIEZpZWxkVmFsdWVzLFxuICBQYXRoVmFsdWUsXG59IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgdXNlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXZlbnRzJztcblxuLy8gVHlwZSBmb3IgcHJpbWl0aXZlIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGFzIHJhZGlvIGJ1dHRvbiB2YWx1ZXNcbnR5cGUgUHJpbWl0aXZlVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG4vLyBDb25zdHJhaW50IHRvIGVuc3VyZSBvcHRpb24gb2JqZWN0cyBoYXZlIHRoZSByZXF1aXJlZCBrZXlzXG50eXBlIE9wdGlvbk9iamVjdDxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSBSZWNvcmQ8VFZhbHVlS2V5LCBQcmltaXRpdmVWYWx1ZT4gJlxuICBSZWNvcmQ8VExhYmVsS2V5LCBzdHJpbmc+ICZcbiAgUGFydGlhbDxSZWNvcmQ8VERpc2FibGVkS2V5LCBib29sZWFuPj4gO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJhZGlvQnV0dG9uR3JvdXBQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVERpc2FibGVkS2V5XG4gID4gPSBPcHRpb25PYmplY3QsXG4gIFRWYWx1ZUtleSBleHRlbmRzICBzdHJpbmcgPSAnaWQnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdkaXNhYmxlZCcsXG4+IHtcbiAgb3B0aW9uczogVE9wdGlvbltdO1xuICBoZWxwZXJUZXh0PzogUmVhY3ROb2RlO1xuICBuYW1lOiBUTmFtZTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBsYWJlbEtleT86IFRMYWJlbEtleTtcbiAgdmFsdWVLZXk/OiBUVmFsdWVLZXk7XG4gIGRpc2FibGVkS2V5PzogVERpc2FibGVkS2V5O1xuICB0eXBlPzogJ251bWJlcicgfCAnc3RyaW5nJyB8ICdib29sZWFuJztcbiAgZW1wdHlPcHRpb25MYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IFRPcHRpb25bVFZhbHVlS2V5XSB8IFRPcHRpb24gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIHJldHVybk9iamVjdD86IGJvb2xlYW47XG4gIHJvdz86IGJvb2xlYW47XG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIGxhYmVsUHJvcHM/OiBPbWl0PEZvcm1Db250cm9sTGFiZWxQcm9wcywgJ2xhYmVsJyB8ICdjb250cm9sJyB8ICd2YWx1ZSc+O1xuICBmb3JtTGFiZWxQcm9wcz86IE9taXQ8Rm9ybUxhYmVsUHJvcHMsICdyZXF1aXJlZCcgfCAnZXJyb3InPjtcbiAgcmFkaW9Qcm9wcz86IFJhZGlvUHJvcHM7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNmb3JtPzoge1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRPcHRpb25bVFZhbHVlS2V5XTtcbiAgICBvdXRwdXQ/OiAoXG4gICAgICBldmVudE9yVmFsdWU6IEV2ZW50T3JWYWx1ZTxQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4+LFxuICAgICAgdmFsdWU/OiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT5cbiAgICApID0+IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgfTtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xufVxuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBSYWRpb0J1dHRvbkdyb3VwPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2lkJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oXG4gIHByb3BzOiBSYWRpb0J1dHRvbkdyb3VwUHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRPcHRpb24sXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPlxuKSB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIGxhYmVsLFxuICAgIG5hbWUsXG4gICAgbGFiZWxLZXkgPSAnbGFiZWwnIGFzIFRMYWJlbEtleSxcbiAgICB2YWx1ZUtleSA9ICdpZCcgYXMgVFZhbHVlS2V5LFxuICAgIGRpc2FibGVkS2V5ID0gJ2Rpc2FibGVkJyBhcyBURGlzYWJsZWRLZXksXG4gICAgcmVxdWlyZWQsXG4gICAgZW1wdHlPcHRpb25MYWJlbCxcbiAgICByZXR1cm5PYmplY3QsXG4gICAgcm93ID0gdHJ1ZSxcbiAgICBjb250cm9sLFxuICAgIHR5cGUsXG4gICAgbGFiZWxQcm9wcyxcbiAgICBkaXNhYmxlZCxcbiAgICBmb3JtTGFiZWxQcm9wcyxcbiAgICByYWRpb1Byb3BzLFxuICAgIHRyYW5zZm9ybSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFxuICAgIFRGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSxcbiAgICBUT3B0aW9uW1RWYWx1ZUtleV0gfCBUT3B0aW9uXG4gID4oe1xuICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBpbnB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8uaW5wdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybS5pbnB1dFxuICAgICAgICAgIDogdmFsdWUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgfHwgKCcnIGFzIFRPcHRpb25bVFZhbHVlS2V5XSk7XG4gICAgICAgICAgICB9LFxuICAgICAgb3V0cHV0OlxuICAgICAgICB0eXBlb2YgdHJhbnNmb3JtPy5vdXRwdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybT8ub3V0cHV0XG4gICAgICAgICAgOiAoX2V2ZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IG9uUmFkaW9DaGFuZ2U6IFJhZGlvR3JvdXBQcm9wc1snb25DaGFuZ2UnXSA9IChldmVudCwgcmFkaW9WYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHJldHVyblZhbHVlID0gcmV0dXJuT2JqZWN0XG4gICAgICA/IChvcHRpb25zIGFzIFRPcHRpb25bXSkuZmluZChvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XSA9PT0gcmFkaW9WYWx1ZSlcbiAgICAgIDogKHJhZGlvVmFsdWUgYXMgVE9wdGlvbltUVmFsdWVLZXldKTtcblxuICAgIG9uQ2hhbmdlKGV2ZW50LCByZXR1cm5WYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiByZXN0Lm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXN0Lm9uQ2hhbmdlKHJldHVyblZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybUNvbnRyb2wgZXJyb3I9eyEhZXJyb3J9PlxuICAgICAge2xhYmVsICYmIChcbiAgICAgICAgPEZvcm1MYWJlbCB7Li4uZm9ybUxhYmVsUHJvcHN9IHJlcXVpcmVkPXtyZXF1aXJlZH0gZXJyb3I9eyEhZXJyb3J9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9Gb3JtTGFiZWw+XG4gICAgICApfVxuICAgICAgPFJhZGlvR3JvdXAgb25DaGFuZ2U9e29uUmFkaW9DaGFuZ2V9IG5hbWU9e25hbWV9IHJvdz17cm93fSB2YWx1ZT17dmFsdWV9PlxuICAgICAgICB7ZW1wdHlPcHRpb25MYWJlbCAmJiAoXG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIHsuLi5sYWJlbFByb3BzfVxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxSYWRpb1xuICAgICAgICAgICAgICAgIHsuLi5yYWRpb1Byb3BzfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyF2YWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhYmVsPXtlbXB0eU9wdGlvbkxhYmVsfVxuICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvblt2YWx1ZUtleV07XG4gICAgICAgICAgY29uc3Qgb3B0aW9uRGlzYWJsZWQgPSBvcHRpb25bZGlzYWJsZWRLZXldIHx8IGZhbHNlO1xuICAgICAgICAgIGxldCB2YWw6IFRPcHRpb25bVFZhbHVlS2V5XSB8IHVuZGVmaW5lZCA9IHJldHVybk9iamVjdFxuICAgICAgICAgICAgPyAodmFsdWUgYXMgVE9wdGlvbik/Llt2YWx1ZUtleV1cbiAgICAgICAgICAgIDogKHZhbHVlIGFzIFRPcHRpb25bVFZhbHVlS2V5XSk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbCA9IE51bWJlcih2YWwpIGFzIFRPcHRpb25bVFZhbHVlS2V5XTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sZWFuJyAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsID0gQm9vbGVhbih2YWwpIGFzIFRPcHRpb25bVFZhbHVlS2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSB2YWwgPT09IG9wdGlvbktleTtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhvcHRpb25LZXkpfVxuICAgICAgICAgICAgICB7Li4ubGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgICAgPFJhZGlvXG4gICAgICAgICAgICAgICAgICB7Li4ucmFkaW9Qcm9wc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBvcHRpb25EaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhbHVlPXtvcHRpb25LZXl9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2Vycm9yLm1lc3NhZ2V9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbmNvbnN0IFJhZGlvQnV0dG9uR3JvdXAgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2lkJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdsYWJlbCcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzICBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogUmFkaW9CdXR0b25Hcm91cFByb3BzPFxuICBURmllbGRWYWx1ZXMsXG4gIFROYW1lLFxuICBUT3B0aW9uLFxuICBUVmFsdWVLZXksXG4gIFRMYWJlbEtleSxcbiAgVERpc2FibGVkS2V5XG4+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudDxcbiAgICAgICAgVEZpZWxkVmFsdWVzLFxuICAgICAgICBUTmFtZSxcbiAgICAgICAgVE9wdGlvbixcbiAgICAgICAgVFZhbHVlS2V5LFxuICAgICAgICBUTGFiZWxLZXksXG4gICAgICAgIFREaXNhYmxlZEtleVxuICAgICAgPlxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblJhZGlvQnV0dG9uR3JvdXAuZGlzcGxheU5hbWUgPSAnUmFkaW9CdXR0b25Hcm91cCc7XG5cbmV4cG9ydCB7IFJhZGlvQnV0dG9uR3JvdXAgfTtcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEdyaWRQcm9wcyxcbiAgQ2hpcFR5cGVNYXAsXG4gIFRleHRGaWVsZFByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbiAgQXV0b2NvbXBsZXRlUHJvcHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCBBdXRvY29tcGxldGUgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RDYXNjYWRlRWxlbWVudFByb3BzPFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4gPSBPbWl0PFxuICBBdXRvY29tcGxldGVQcm9wczxcbiAgICBUT3B0aW9uLFxuICAgIE11bHRpcGxlLFxuICAgIERpc2FibGVDbGVhcmFibGUsXG4gICAgRnJlZVNvbG8sXG4gICAgQ2hpcENvbXBvbmVudFxuICA+LFxuICB8ICduYW1lJ1xuICB8ICdyZW5kZXJJbnB1dCdcbiAgfCAnaXNPcHRpb25FcXVhbFRvVmFsdWUnXG4gIHwgJ2dldE9wdGlvbkxhYmVsJ1xuICB8ICdkaXNhYmxlZCdcbj4gJiB7XG4gIG5hbWU6IFROYW1lO1xuICBkZXBlbmRzT246IFROYW1lO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdmFyaWFudD86IFRleHRGaWVsZFZhcmlhbnRzO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlzTnVsbGFibGU/OiBib29sZWFuO1xuICBsYWJlbEZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgdmFsdWVGaWVsZD86IGtleW9mIFRPcHRpb247XG4gIHRleHRGaWVsZFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnPjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RDYXNjYWRlRWxlbWVudDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPihwcm9wczogU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxUT3B0aW9uLCBURmllbGRWYWx1ZXMsIFROYW1lPikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHtcbiAgICBsYWJlbEZpZWxkID0gJ0xhYmVsJyxcbiAgICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJyxcbiAgICBuYW1lLFxuICAgIG9uQmx1cixcbiAgICBvbkNoYW5nZSxcbiAgICBkaXNhYmxlZCxcbiAgICBvcHRpb25zOiBvcHRpb25zSW5wdXQsXG4gICAgY29udHJvbCxcbiAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWwsXG4gICAgZGVwZW5kc09uLFxuICAgIHRleHRGaWVsZFByb3BzID0ge30sXG4gICAgdmFyaWFudCxcbiAgICBpc051bGxhYmxlID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdFRleHRQcm9wcyB9ID0gdGV4dEZpZWxkUHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IG9wdGlvbnNJbnB1dCB8fCBbXSwgW29wdGlvbnNJbnB1dF0pO1xuXG4gIGNvbnN0IGdldE9wdGlvbktleSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb24gPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IG51bGwgPyBTdHJpbmcoa2V5KSA6ICcnO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICBjb25zdCBpc09wdGlvbkVxdWFsVG9WYWx1ZSA9IChvcHRpb246IFRPcHRpb24sIHZhbHVlOiBUT3B0aW9uKSA9PlxuICAgIGdldE9wdGlvbktleShvcHRpb24pID09PSBnZXRPcHRpb25LZXkodmFsdWUpO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IHsgZmllbGQ6IGRlcGVuZGVudEZpZWxkIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lOiBkZXBlbmRzT24sXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgcGFyZW50VmFsdWVSZWYgPSB1c2VSZWYoZGVwZW5kZW50RmllbGQudmFsdWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgIT09IGRlcGVuZGVudEZpZWxkLnZhbHVlKSB7XG4gICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgIHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgPSBkZXBlbmRlbnRGaWVsZC52YWx1ZTtcbiAgICB9XG4gIH0sIFtkZXBlbmRlbnRGaWVsZC52YWx1ZSwgZmllbGRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1ZhbHVlID1cbiAgICAgIGZpZWxkLnZhbHVlICE9PSBudWxsICYmIGZpZWxkLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudmFsdWUgIT09ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFoYXNWYWx1ZSkge1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm47XG4gICAgICBmaWVsZC5vbkNoYW5nZShnZXRPcHRpb25LZXkob3B0aW9uc1swXSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcHRpb25zLCBkaXNhYmxlZCwgZ2V0T3B0aW9uS2V5LCBmaWVsZC5vbkNoYW5nZSwgZGVwZW5kZW50RmllbGQudmFsdWVdKTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICBkZXBlbmRlbnRGaWVsZC52YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgZGVwZW5kZW50RmllbGQudmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgZGVwZW5kZW50RmllbGQudmFsdWUgPT09ICcnXG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDEgJiYgIWlzTnVsbGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2Rpc2FibGVkLCBkZXBlbmRlbnRGaWVsZC52YWx1ZSwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGVdKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgdmFsdWU9e1xuICAgICAgICBvcHRpb25zXG4gICAgICAgICAgLm1hcChvcHRpb24gPT4gKGdldE9wdGlvbktleShvcHRpb24pID09PSBmaWVsZC52YWx1ZSA/IG9wdGlvbiA6IG51bGwpKVxuICAgICAgICAgIC5maW5kKEJvb2xlYW4pIHx8IG51bGxcbiAgICAgIH1cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgZ2V0T3B0aW9uS2V5PXtnZXRPcHRpb25LZXl9XG4gICAgICBnZXRPcHRpb25MYWJlbD17Z2V0T3B0aW9uTGFiZWx9XG4gICAgICBpc09wdGlvbkVxdWFsVG9WYWx1ZT17aXNPcHRpb25FcXVhbFRvVmFsdWV9XG4gICAgICByZWY9e2ZpZWxkLnJlZn1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBvbkNoYW5nZT17KGV2ZW50LCBuZXdWYWx1ZSwgcmVhc29uKSA9PiB7XG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlID8gZ2V0T3B0aW9uS2V5KG5ld1ZhbHVlKSA6IG51bGwpO1xuICAgICAgICBpZiAob25DaGFuZ2UgJiYgdHlwZW9mIG9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25DaGFuZ2UoZXZlbnQsIG5ld1ZhbHVlLCByZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICB7Li4ucmVzdFRleHRQcm9wc31cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWQgfHwgb3B0aW9ucy5sZW5ndGggPT0gMH1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogaXNEaXNhYmxlZCA/ICdmaWxsZWQnIDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RDYXNjYWRlRWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZVxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuU2VsZWN0Q2FzY2FkZUVsZW1lbnQuZGlzcGxheU5hbWUgPSAnU2VsZWN0Q2FzY2FkZUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBDaGlwVHlwZU1hcCxcbiAgVGV4dEZpZWxkUHJvcHMsXG4gIEF1dG9jb21wbGV0ZVByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbiAgQXV0b2NvbXBsZXRlVmFsdWUsXG4gIEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgfCAnbmFtZSdcbiAgfCAncmVuZGVySW5wdXQnXG4gIHwgJ2lzT3B0aW9uRXF1YWxUb1ZhbHVlJ1xuICB8ICdnZXRPcHRpb25MYWJlbCdcbiAgfCAnZGlzYWJsZWQnXG4gIHwgJ29wdGlvbnMnXG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbGFiZWxGaWVsZD86IHN0cmluZztcbiAgdmFsdWVGaWVsZD86IGtleW9mIFRPcHRpb247XG4gIHRleHRGaWVsZFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnPjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RFbGVtZW50PFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4oXG4gIHByb3BzOiBTZWxlY3RFbGVtZW50UHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgTXVsdGlwbGUsXG4gICAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgICBGcmVlU29sbyxcbiAgICBDaGlwQ29tcG9uZW50XG4gID5cbikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgb25DaGFuZ2UsXG4gICAgb3B0aW9uczogb3B0aW9uc0lucHV0LFxuICAgIGxhYmVsLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxGaWVsZCA9ICdMYWJlbCcgYXMga2V5b2YgVE9wdGlvbixcbiAgICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJyBhcyBrZXlvZiBUT3B0aW9uLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHRleHRGaWVsZFByb3BzID0ge30sXG4gICAgaXNOdWxsYWJsZSA9IGZhbHNlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHsgcmVxdWlyZWQsIC4uLnJlc3RUZXh0UHJvcHMgfSA9IHRleHRGaWVsZFByb3BzO1xuICBjb25zdCBvcHRpb25zID0gdXNlTWVtbygoKSA9PiBvcHRpb25zSW5wdXQgfHwgW10sIFtvcHRpb25zSW5wdXRdKTtcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCBnZXRPcHRpb25WYWx1ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24gfCBBdXRvY29tcGxldGVGcmVlU29sb1ZhbHVlTWFwcGluZzxGcmVlU29sbz4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjtcblxuICAgICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvblt2YWx1ZUZpZWxkIGFzIGtleW9mIFRPcHRpb25dIDogbnVsbDtcbiAgICB9LFxuICAgIFt2YWx1ZUZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvbkxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbiB8IEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nPEZyZWVTb2xvPikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgICByZXR1cm4gb3B0aW9uID8gU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkIGFzIGtleW9mIFRPcHRpb25dKSA6ICcnO1xuICAgIH0sXG4gICAgW2xhYmVsRmllbGRdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBmaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnZhbHVlICE9PSAnJztcblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaGFzVmFsdWUpIHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZmllbGQub25DaGFuZ2UoZ2V0T3B0aW9uVmFsdWUob3B0aW9uc1swXSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcHRpb25zLCBkaXNhYmxlZCwgZ2V0T3B0aW9uVmFsdWUsIGZpZWxkLm9uQ2hhbmdlXSk7XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDEgJiYgIWlzTnVsbGFibGUpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBbZGlzYWJsZWQsIG9wdGlvbnMubGVuZ3RoLCBpc051bGxhYmxlXSk7XG5cbiAgY29uc3QgYXV0b2NvbXBsZXRlVmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBvcHRpb25zLmZpbmQob3B0aW9uID0+IGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGZpZWxkLnZhbHVlKSA/PyBudWxsLFxuICAgIFtmaWVsZC52YWx1ZSwgb3B0aW9ucywgZ2V0T3B0aW9uVmFsdWVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9ucz17ZmFsc2V9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgdmFsdWU9e1xuICAgICAgICBhdXRvY29tcGxldGVWYWx1ZSBhcyBBdXRvY29tcGxldGVWYWx1ZTxcbiAgICAgICAgICBUT3B0aW9uLFxuICAgICAgICAgIE11bHRpcGxlLFxuICAgICAgICAgIERpc2FibGVDbGVhcmFibGUsXG4gICAgICAgICAgRnJlZVNvbG9cbiAgICAgICAgPlxuICAgICAgfVxuICAgICAgb25DaGFuZ2U9eyhldmVudCwgbmV3VmFsdWUsIHJlYXNvbikgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBuZXdWYWx1ZSBhcyBUT3B0aW9uIHwgbnVsbDtcblxuICAgICAgICBmaWVsZC5vbkNoYW5nZShvcHRpb24gPyBnZXRPcHRpb25WYWx1ZShvcHRpb24pIDogbnVsbCk7XG4gICAgICAgIG9uQ2hhbmdlPy4oZXZlbnQsIG5ld1ZhbHVlLCByZWFzb24pO1xuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IGdldE9wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICByZWY9e2ZpZWxkLnJlZn1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXsob3B0aW9uLCB2YWx1ZSkgPT5cbiAgICAgICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZ2V0T3B0aW9uVmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgey4uLnJlc3RUZXh0UHJvcHN9XG4gICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiBpc0Rpc2FibGVkID8gJ2ZpbGxlZCcgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAvPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIEF1dG9jb21wbGV0ZSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBmcm9tIHByZWRlZmluZWQgb3B0aW9ucy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGZ1bGx5IGludGVncmF0ZWQgc2VsZWN0L2F1dG9jb21wbGV0ZSBpbnB1dCB0aGF0IHdvcmtzIHNlYW1sZXNzbHlcbiAqIHdpdGggcmVhY3QtaG9vay1mb3JtLCBpbmNsdWRpbmcgYXV0b21hdGljIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKiBmb3IgcmVzcG9uc2l2ZSBsYXlvdXRzLiBJdCBzdXBwb3J0cyBib3RoIHNpbmdsZSBhbmQgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGVzLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBBdXRvY29tcGxldGUgd2l0aCBmaWx0ZXJpbmdcbiAqIC0gU2luZ2xlIGFuZCBtdWx0aXBsZSBzZWxlY3Rpb24gc3VwcG9ydFxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheVxuICogLSBDdXN0b21pemFibGUgb3B0aW9uIGRpc3BsYXkgKGxhYmVsS2V5L3ZhbHVlS2V5KVxuICogLSBBdXRvLXNlbGVjdGlvbiB3aGVuIG9ubHkgb25lIG9wdGlvbiBleGlzdHNcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxuICogLSBUeXBlU2NyaXB0IHR5cGUgc2FmZXR5XG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxTZWxlY3RFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJjYXRlZ29yeVwiXG4gKiAgIGxhYmVsPVwiQ2F0ZWdvcnlcIlxuICogICBvcHRpb25zPXtbXG4gKiAgICAgeyBMYWJlbDogJ1RlY2hub2xvZ3knLCBWYWx1ZTogJ3RlY2gnIH1cbiAqICAgXX1cbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdQbGVhc2Ugc2VsZWN0IGEgY2F0ZWdvcnknIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGtleXM6XG4gKiBgYGB0c3hcbiAqIDxTZWxlY3RFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VySWRcIlxuICogICBsYWJlbD1cIkFzc2lnbiB0byBVc2VyXCJcbiAqICAgb3B0aW9ucz17dXNlcnN9XG4gKiAgIGxhYmVsS2V5PVwiZnVsbE5hbWVcIlxuICogICB2YWx1ZUtleT1cImlkXCJcbiAqICAgcGxhY2Vob2xkZXI9XCJDaG9vc2UgYSB1c2VyLi4uXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogTXVsdGlwbGUgc2VsZWN0aW9uOlxuICogYGBgdHN4XG4gKiA8U2VsZWN0RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwidGFnc1wiXG4gKiAgIGxhYmVsPVwiVGFnc1wiXG4gKiAgIG9wdGlvbnM9e2F2YWlsYWJsZVRhZ3N9XG4gKiAgIG11bHRpcGxlXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDggfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBUT3B0aW9uIC0gVGhlIG9wdGlvbiBvYmplY3QgdHlwZVxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgTXVsdGlwbGUgLSBXaGV0aGVyIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBlbmFibGVkXG4gKiBAdGVtcGxhdGUgRGlzYWJsZUNsZWFyYWJsZSAtIFdoZXRoZXIgdGhlIGNsZWFyIGJ1dHRvbiBpcyBkaXNhYmxlZFxuICogQHRlbXBsYXRlIEZyZWVTb2xvIC0gV2hldGhlciBmcmVlIHRleHQgaW5wdXQgaXMgYWxsb3dlZFxuICogQHRlbXBsYXRlIENoaXBDb21wb25lbnQgLSBUaGUgY2hpcCBjb21wb25lbnQgdHlwZSBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgU2VsZWN0RWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBTZWxlY3RFbGVtZW50UHJvcHM8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWUsXG4gIE11bHRpcGxlLFxuICBEaXNhYmxlQ2xlYXJhYmxlLFxuICBGcmVlU29sbyxcbiAgQ2hpcENvbXBvbmVudFxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuU2VsZWN0RWxlbWVudC5kaXNwbGF5TmFtZSA9ICdTZWxlY3RFbGVtZW50JztcbiIsICJpbXBvcnQgdHlwZSB7IEZsZXhpYmxlT3B0aW9uIH0gZnJvbSAnQGdud2Vic29mdC91aSc7XG5pbXBvcnQgQ2hlY2tCb3hJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2tCb3gnO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrQm94T3V0bGluZUJsYW5rJztcbmltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBDaGlwVHlwZU1hcCxcbiAgQXV0b2NvbXBsZXRlUHJvcHMsXG4gIFRleHRGaWVsZFZhcmlhbnRzLFxuICBBdXRvY29tcGxldGVDaGFuZ2VSZWFzb24sXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgR3JpZCxcbiAgQ2hlY2tib3gsXG4gIFRleHRGaWVsZCxcbiAgQXV0b2NvbXBsZXRlLFxuICBDaXJjdWxhclByb2dyZXNzLFxuICB1c2VUaGVtZSxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IFN5bnRoZXRpY0V2ZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbCwgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxudHlwZSBCYXNlQXV0b2NvbXBsZXRlUHJvcHM8XG4gIFRPcHRpb24sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIEZyZWVTb2xvIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlLFxuPiA9IE9taXQ8XG4gIEF1dG9jb21wbGV0ZVByb3BzPFxuICAgIFRPcHRpb24sXG4gICAgTXVsdGlwbGUsXG4gICAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgICBGcmVlU29sbyxcbiAgICBDaGlwQ29tcG9uZW50XG4gID4sXG4gICduYW1lJyB8ICdyZW5kZXJJbnB1dCcgfCAnbXVsdGlwbGUnIHwgJ29uQ2hhbmdlJyB8ICd2YWx1ZSdcbj47XG5cbmV4cG9ydCB0eXBlIFNlbGVjdE11bHRpRWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBGbGV4aWJsZU9wdGlvbiA9IEZsZXhpYmxlT3B0aW9uLFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4gPSBCYXNlQXV0b2NvbXBsZXRlUHJvcHM8XG4gIFRPcHRpb24sXG4gIE11bHRpcGxlLFxuICBEaXNhYmxlQ2xlYXJhYmxlLFxuICBGcmVlU29sbyxcbiAgQ2hpcENvbXBvbmVudFxuPiAmIHtcbiAgbmFtZTogVE5hbWU7XG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBpc051bGxhYmxlPzogYm9vbGVhbjtcbiAgdmFyaWFudD86IFRleHRGaWVsZFZhcmlhbnRzO1xuICBsYWJlbEZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgdmFsdWVGaWVsZD86IGtleW9mIFRPcHRpb247XG4gIG9wdGlvbnM/OiByZWFkb25seSBUT3B0aW9uW10gfCBudWxsO1xufTtcblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gU2VsZWN0TXVsdGlFbGVtZW50PFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBGbGV4aWJsZU9wdGlvbiA9IEZsZXhpYmxlT3B0aW9uLFxuPihwcm9wczogU2VsZWN0TXVsdGlFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVE9wdGlvbj4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBvbkJsdXIsXG4gICAgZGlzYWJsZWQsXG4gICAgb3B0aW9uczogb3B0aW9uc0lucHV0LFxuICAgIGxvYWRpbmcgPSBmYWxzZSxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBsYWJlbCxcbiAgICBpc051bGxhYmxlLFxuICAgIHZhcmlhbnQsXG4gICAgbGFiZWxGaWVsZCA9ICdMYWJlbCcsXG4gICAgdmFsdWVGaWVsZCA9ICdWYWx1ZScsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcblxuICBjb25zdCBvcHRpb25zID0gdXNlTWVtbygoKSA9PiBvcHRpb25zSW5wdXQgfHwgW10sIFtvcHRpb25zSW5wdXRdKTtcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCBnZXRPcHRpb25WYWx1ZSA9IChvcHRpb246IFRPcHRpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGRdIDogbnVsbDtcbiAgfTtcblxuICBjb25zdCBnZXRPcHRpb25MYWJlbCA9IChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjtcblxuICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGRdKSA6ICcnO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaXNOdWxsYWJsZSkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZCwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGVdKTtcblxuICBjb25zdCBzZWxlY3RlZFZhbHVlID1cbiAgICBmaWVsZC52YWx1ZSAmJiBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKVxuICAgICAgPyBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gZmllbGQudmFsdWUuaW5jbHVkZXMoZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSkpXG4gICAgICA6IFtdO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzVmFsdWUgPSBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSAmJiBmaWVsZC52YWx1ZS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFoYXNWYWx1ZSAmJiAhaXNOdWxsYWJsZSkge1xuICAgICAgZmllbGQub25DaGFuZ2UoW2dldE9wdGlvblZhbHVlKG9wdGlvbnNbMF0pXSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW29wdGlvbnMsIGdldE9wdGlvblZhbHVlLCBmaWVsZC5vbkNoYW5nZSwgaXNOdWxsYWJsZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChcbiAgICBfOiBTeW50aGV0aWNFdmVudCxcbiAgICBzZWxlY3RlZE9wdGlvbnM6IFRPcHRpb25bXSxcbiAgICByZWFzb246IEF1dG9jb21wbGV0ZUNoYW5nZVJlYXNvblxuICApID0+IHtcbiAgICBpZiAocmVhc29uID09PSAnY2xlYXInKSB7XG4gICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICB9IGVsc2UgaWYgKHJlYXNvbiA9PT0gJ3NlbGVjdE9wdGlvbicgfHwgcmVhc29uID09PSAncmVtb3ZlT3B0aW9uJykge1xuICAgICAgY29uc3QgbmV3VmFsdWVzID0gc2VsZWN0ZWRPcHRpb25zLm1hcChvcHRpb24gPT4gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSk7XG5cbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlcy5sZW5ndGggPT09IDAgPyBudWxsIDogbmV3VmFsdWVzKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaWNvbiA9IDxDaGVja0JveE91dGxpbmVCbGFua0ljb24gZm9udFNpemU9XCJzbWFsbFwiIC8+O1xuICBjb25zdCBjaGVja2VkSWNvbiA9IDxDaGVja0JveEljb24gZm9udFNpemU9XCJzbWFsbFwiIC8+O1xuXG4gIHJldHVybiAoXG4gICAgPEF1dG9jb21wbGV0ZVxuICAgICAgbXVsdGlwbGVcbiAgICAgIHZhbHVlPXtzZWxlY3RlZFZhbHVlfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBnZXRPcHRpb25MYWJlbD17Z2V0T3B0aW9uTGFiZWx9XG4gICAgICBpc09wdGlvbkVxdWFsVG9WYWx1ZT17KG9wdGlvbiwgdmFsdWUpID0+XG4gICAgICAgIGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGdldE9wdGlvblZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zXG4gICAgICBkaXNhYmxlQ2xvc2VPblNlbGVjdFxuICAgICAgcmVmPXtmaWVsZC5yZWZ9XG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIHN4PXt7XG4gICAgICAgICcmLk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUlucHV0QmFzZS1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZCxcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkIC5NdWlBdXRvY29tcGxldGUtcG9wdXBJbmRpY2F0b3InOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlPdXRsaW5lZElucHV0LXJvb3QuTXVpLWRpc2FibGVkIC5NdWlPdXRsaW5lZElucHV0LW5vdGNoZWRPdXRsaW5lJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpRmlsbGVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgICAgZnVsbFdpZHRoXG4gICAgICByZW5kZXJPcHRpb249eyhwcm9wczEsIG9wdGlvbiwgeyBzZWxlY3RlZCB9KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGxpIHsuLi5wcm9wczF9PlxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGljb249e2ljb259XG4gICAgICAgICAgICAgIGNoZWNrZWRJY29uPXtjaGVja2VkSWNvbn1cbiAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0ZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2dldE9wdGlvbkxhYmVsKG9wdGlvbiBhcyBUT3B0aW9uKX1cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyd9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIElucHV0UHJvcHM9e3tcbiAgICAgICAgICAgIC4uLnBhcmFtcy5JbnB1dFByb3BzLFxuICAgICAgICAgICAgZW5kQWRvcm5tZW50OiAoXG4gICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtwYXJhbXMuSW5wdXRQcm9wcy5lbmRBZG9ybm1lbnR9XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiBpc0Rpc2FibGVkID8gJ2ZpbGxlZCcgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHsuLi5yZXN0fVxuICAgIC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgU2VsZWN0TXVsdGlFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBGbGV4aWJsZU9wdGlvbiA9IEZsZXhpYmxlT3B0aW9uLFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0TXVsdGlFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWUsXG4gIFRPcHRpb25cbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblNlbGVjdE11bHRpRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdTZWxlY3RNdWx0aUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB7IHVzZUVuaGFuY2VkVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXZlbnRzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFRleHRGaWVsZEVsZW1lbnQgY29tcG9uZW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRGaWVsZEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwiZmlyc3ROYW1lXCIgfCBcInVzZXIuZW1haWxcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXJcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGZpZWxkIGVycm9yIG9iamVjdFxuICAgKiBAcmV0dXJucyBDdXN0b20gZXJyb3IgbWVzc2FnZSBvciBjb21wb25lbnRcbiAgICovXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIC8qKlxuICAgKiBDdXN0b20gVGV4dEZpZWxkIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBkZWZhdWx0IE1VSSBUZXh0RmllbGRcbiAgICovXG4gIGNvbXBvbmVudD86IHR5cGVvZiBUZXh0RmllbGQ7XG4gIC8qKlxuICAgKiBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgZm9yIGlucHV0L291dHB1dFxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZmllbGRUeXBlIGZvciBjb21tb24gcGF0dGVybnMgb3IgY3VzdG9tIHRyYW5zZm9ybXMgZm9yIGNvbXBsZXggY2FzZXNcbiAgICovXG4gIHRyYW5zZm9ybT86IHtcbiAgICAvKiogVHJhbnNmb3JtIHZhbHVlIGJlZm9yZSBkaXNwbGF5aW5nIGluIGlucHV0ICovXG4gICAgaW5wdXQ/OiAodmFsdWU6IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPikgPT4gVFZhbHVlO1xuICAgIC8qKiBUcmFuc2Zvcm0gaW5wdXQgZXZlbnQgdG8gZm9ybSB2YWx1ZSAqL1xuICAgIG91dHB1dD86IChcbiAgICAgIGV2ZW50T3JWYWx1ZTogRXZlbnRPclZhbHVlPFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPj4sXG4gICAgICB2YWx1ZT86IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPlxuICAgICkgPT4gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICB9O1xuICAvKipcbiAgICogQnVpbHQtaW4gZmllbGQgdHlwZSBmb3IgYXV0b21hdGljIHRyYW5zZm9ybWF0aW9uXG4gICAqIEBleGFtcGxlICd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ3NlbGVjdCdcbiAgICovXG4gIGZpZWxkVHlwZT86IEZpZWxkVHlwZTtcbiAgLyoqXG4gICAqIERlZmF1bHQgdmFsdWUgdG8gZGlzcGxheSB3aGVuIGZpZWxkIHZhbHVlIGlzIG51bGwvdW5kZWZpbmVkXG4gICAqIEBleGFtcGxlIFwiXCJcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFRWYWx1ZTtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBsYWJlbCB0ZXh0XG4gICAqIEBleGFtcGxlIFwiRW1haWwgQWRkcmVzc1wiXG4gICAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKiBAZXhhbXBsZSBcIkVudGVyIHlvdXIgZW1haWxcIlxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BzIGZvciB0aGUgdW5kZXJseWluZyBUZXh0RmllbGQgY29tcG9uZW50XG4gICAqL1xuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJz47XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgVGV4dEZpZWxkIHZhcmlhbnRcbiAgICogQGRlZmF1bHRWYWx1ZSBcIm91dGxpbmVkXCJcbiAgICovXG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdHlsZXMgZm9yIHRoZSBUZXh0RmllbGRcbiAgICovXG4gIC8qKlxuICAgKiBDdXN0b20gb25DaGFuZ2UgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdHJhbnNmb3JtYXRpb25cbiAgICovXG4gIG9uQ2hhbmdlPzogKFxuICAgIGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICogRW5hYmxlIGRldmVsb3BtZW50IHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgdHJhbnNmb3JtYXRpb24gaXNzdWVzXG4gICAqIEBkZWZhdWx0VmFsdWUgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcbiAgICovXG4gIGVuYWJsZVdhcm5pbmdzPzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gVGV4dEZpZWxkRWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+KHByb3BzOiBUZXh0RmllbGRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikge1xuICBjb25zdCB7XG4gICAgcGFyc2VFcnJvcixcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgY29tcG9uZW50OiBUZXh0RmllbGRDb21wb25lbnQgPSBUZXh0RmllbGQsXG4gICAgdHJhbnNmb3JtLFxuICAgIGZpZWxkVHlwZSA9ICd0ZXh0JywgLy8gRGVmYXVsdCB0byB0ZXh0IHR5cGVcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICBlbmFibGVXYXJuaW5ncyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHJlcXVpcmVkLFxuICAgIGhlbHBlclRleHQsXG4gICAgaW5wdXRSZWYsXG4gICAgb25JbnB1dCxcbiAgICBvbkJsdXIsXG4gICAgZGlzYWJsZWQsXG4gICAgLi4ucmVzdFRleHRQcm9wc1xuICB9ID0gdGV4dEZpZWxkUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgLy8gVXNlIHRoZSBlbmhhbmNlZCB0cmFuc2Zvcm0gaG9vayB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnNcbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZUVuaGFuY2VkVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4oXG4gICAge1xuICAgICAgdmFsdWU6IGZpZWxkLnZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dDogdHJhbnNmb3JtLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0OiB0cmFuc2Zvcm0ub3V0cHV0LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWVsZFR5cGU6ICF0cmFuc2Zvcm1cbiAgICAgICAgPyB0eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gJ251bWJlcidcbiAgICAgICAgICA6IGZpZWxkVHlwZVxuICAgICAgICA6IHVuZGVmaW5lZCwgLy8gQXV0by1kZXRlY3QgbnVtYmVyIHR5cGVcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGVuYWJsZVdhcm5pbmdzLFxuICAgIH1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBpbnB1dFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkQ29tcG9uZW50XG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGV4dFByb3BzfVxuICAgICAgbmFtZT17ZmllbGQubmFtZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICAgICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbkNoYW5nZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3VzdG9tT25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25JbnB1dD17KGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9uSW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbklucHV0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgIGVycm9yID8gKHBhcnNlRXJyb3IgPyBwYXJzZUVycm9yKGVycm9yKSA6IGVycm9yLm1lc3NhZ2UpIDogaGVscGVyVGV4dFxuICAgICAgfVxuICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiAnb3V0bGluZWQnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgVGV4dEZpZWxkIGNvbXBvbmVudCB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uLFxuICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGJ1aWx0LWluIGZpZWxkIHR5cGUgaGFuZGxpbmcuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5IHdpdGggY3VzdG9tIHBhcnNpbmdcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gc3VwcG9ydFxuICogLSBCdWlsdC1pbiBmaWVsZCB0eXBlcyBmb3IgY29tbW9uIHBhdHRlcm5zXG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBPcHRpbWl6ZWQgbnVtYmVyIGlucHV0IGhhbmRsaW5nXG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoIG1lbW9pemVkIHRyYW5zZm9ybWF0aW9uc1xuICogLSBEZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nXG4gKiAtIFN0YWJsZSByZWZlcmVuY2VzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIG51bWJlciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFnZVwiXG4gKiAgIGxhYmVsPVwiQWdlXCJcbiAqICAgZmllbGRUeXBlPVwibnVtYmVyXCJcbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdBZ2UgaXMgcmVxdWlyZWQnLCBtaW46IHsgdmFsdWU6IDAsIG1lc3NhZ2U6ICdBZ2UgbXVzdCBiZSBwb3NpdGl2ZScgfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBBZHZhbmNlZCB1c2FnZSB3aXRoIGN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImVtYWlsXCJcbiAqICAgbGFiZWw9XCJFbWFpbFwiXG4gKiAgIGZpZWxkVHlwZT1cInRleHRcIlxuICogICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWwgYWRkcmVzc1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBydWxlcz17e1xuICogICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICogICAgIHBhdHRlcm46IHsgdmFsdWU6IC9cXFMrQFxcUytcXC5cXFMrLywgbWVzc2FnZTogJ0ludmFsaWQgZW1haWwnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIHRyYW5zZm9ybWF0aW9uOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicHJpY2VcIlxuICogICBsYWJlbD1cIlByaWNlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPyBgJCR7dmFsdWV9YCA6ICcnLFxuICogICAgIG91dHB1dDogKGV2ZW50KSA9PiBwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKCckJywgJycpKSB8fCBudWxsXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGVycm9yIHBhcnNpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gKiAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiAoXG4gKiAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICdyZWQnIH19PlxuICogICAgICAgXHUyNkEwXHVGRTBGIHtlcnJvci5tZXNzYWdlfVxuICogICAgIDwvc3Bhbj5cbiAqICAgKX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRGaWVsZEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogVGV4dEZpZWxkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1xuICBHcmlkUHJvcHMsXG4gIFRleHRGaWVsZFByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBHcmlkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbiAgVGltZVBpY2tlclByb3BzLFxuICBUaW1lUGlja2VyU2xvdFByb3BzLFxuICBUaW1lVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzJztcbmltcG9ydCB7IHVzZUxvY2FsaXphdGlvbkNvbnRleHQgfSBmcm9tICdAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFscyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRQYXRoLFxuICBQYXRoVmFsdWUsXG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkVmFsdWVzLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IHVzZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50T3JWYWx1ZSB9IGZyb20gJy4uLy4uL3R5cGVzL2V2ZW50cyc7XG5pbXBvcnQgeyByZWFkVmFsdWVBc0RhdGUgfSBmcm9tICcuLi8uLi91dGlscy9yZWFkVmFsdWVBc0RhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuPiB7XG4gIG5hbWU6IFROYW1lO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGlzRGF0ZT86IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IgfCBUaW1lVmFsaWRhdGlvbkVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIGlucHV0UHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICBoZWxwZXJUZXh0PzogVGV4dEZpZWxkUHJvcHNbJ2hlbHBlclRleHQnXTtcbiAgbGFiZWw/OiBSZWFjdE5vZGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0ZXh0UmVhZE9ubHk/OiBib29sZWFuO1xuICBzbG90UHJvcHM/OiBPbWl0PFxuICAgIFRpbWVQaWNrZXJTbG90UHJvcHM8VEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gICAgJ3RleHRGaWVsZCdcbiAgPjtcbiAgdHJhbnNmb3JtPzoge1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRWYWx1ZSB8IG51bGw7XG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbiAgdGltZVBpY2tlclByb3BzPzogT21pdDxcbiAgICBUaW1lUGlja2VyUHJvcHM8VEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZT4sXG4gICAgJ3ZhbHVlJyB8ICdzbG90UHJvcHMnXG4gID47XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gVGltZVBpY2tlckVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPihwcm9wczogVGltZVBpY2tlckVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIHJlcXVpcmVkLFxuICAgIGlucHV0UHJvcHMsXG4gICAgY29udHJvbCxcbiAgICB0ZXh0UmVhZE9ubHksXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgc2xvdFByb3BzLFxuICAgIHRpbWVQaWNrZXJQcm9wcyA9IHt9LFxuICAgIHRyYW5zZm9ybSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBhZGFwdGVyID0gdXNlTG9jYWxpemF0aW9uQ29udGV4dCgpO1xuXG4gIGNvbnN0IHsgZGlzYWJsZWQsIGlucHV0UmVmLCBvbkNsb3NlLCAuLi5yZXN0VGltZVBpY2tlclByb3BzIH0gPVxuICAgIHRpbWVQaWNrZXJQcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4gIH0pO1xuXG4gIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VUcmFuc2Zvcm08VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlIHwgbnVsbD4oe1xuICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBpbnB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8uaW5wdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybS5pbnB1dFxuICAgICAgICAgIDogbmV3VmFsdWUgPT4gcmVhZFZhbHVlQXNEYXRlKGFkYXB0ZXIsIG5ld1ZhbHVlKSxcbiAgICAgIG91dHB1dDogKGV2ZW50T3JWYWx1ZSwgdmFsdWUpID0+IHtcbiAgICAgICAgLy8gTVVJIERhdGVQaWNrZXIgcGFzc2VzICh2YWx1ZSwgY29udGV4dCksIHNvIHdlIGNoZWNrIHRoZSBzZWNvbmQgcGFyYW1cbiAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBldmVudE9yVmFsdWU7XG5cbiAgICAgICAgaWYgKGFjdHVhbFZhbHVlID09PSBudWxsKSByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG5cbiAgICAgICAgcmV0dXJuIGFjdHVhbFZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgaW5wdXRSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRpbWVQaWNrZXJcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgey4uLnJlc3RUaW1lUGlja2VyUHJvcHN9XG4gICAgICB7Li4uZmllbGR9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBsYWJlbD17bGFiZWx9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICB7Li4udGltZVBpY2tlclByb3BzfVxuICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgb25DbG9zZT17KC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG4gICAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgICAgb25DbG9zZSguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsobmV3VmFsdWUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgb25DaGFuZ2UobmV3VmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAodHlwZW9mIHRpbWVQaWNrZXJQcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRpbWVQaWNrZXJQcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgLi4uc2xvdFByb3BzLFxuICAgICAgICBhY3Rpb25CYXI6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NsZWFyJywgJ2NhbmNlbCcsICdhY2NlcHQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgICAgb25CbHVyOiAoXG4gICAgICAgICAgICBldmVudDogUmVhY3QuRm9jdXNFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFByb3BzPy5vbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgaW5wdXRQcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICEhZXJyb3IsXG4gICAgICAgICAgaGVscGVyVGV4dDogZXJyb3JcbiAgICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgOiBpbnB1dFByb3BzPy5oZWxwZXJUZXh0IHx8IHJlc3QuaGVscGVyVGV4dCxcbiAgICAgICAgICBpbnB1dFByb3BzOiB7XG4gICAgICAgICAgICByZWFkT25seTogISF0ZXh0UmVhZE9ubHksXG4gICAgICAgICAgICAuLi5pbnB1dFByb3BzPy5pbnB1dFByb3BzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgVGltZVBpY2tlckVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogVGltZVBpY2tlckVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5UaW1lUGlja2VyRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdUaW1lUGlja2VyRWxlbWVudCc7XG4iLCAiaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlLFxuICBDaXJjdWxhclByb2dyZXNzLFxuICBHcmlkLFxuICBUZXh0RmllbGQsXG4gIHVzZVRoZW1lLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnQG11aS9tYXRlcmlhbC91dGlscyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBGcmFnbWVudCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgdXNlQ29udHJvbGxlcixcbiAgdHlwZSBGaWVsZFBhdGgsXG4gIHR5cGUgRmllbGRWYWx1ZXMsXG59IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgQXN5bmNTZWxlY3RFbGVtZW50UHJvcHMsIE9wdGlvbk9iamVjdCB9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEFzeW5jU2VsZWN0UGF5bG9hZCB9IGZyb20gJ0AvdHlwZXMnO1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBBc3luY1NlbGVjdEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPihcbiAgcHJvcHM6IEFzeW5jU2VsZWN0RWxlbWVudFByb3BzPFxuICAgIFRGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFRPcHRpb25cbiAgPlxuKSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGRpc2FibGVkLFxuICAgIGNvbnRyb2wsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgLy8gaW5pdGlhbFZhbHVlLFxuICAgIC8vIGlzTnVsbGFibGUsXG4gICAgbGFiZWwsXG4gICAgcXVlcnlGbixcbiAgICB2YXJpYW50LFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnIGFzIFRMYWJlbEtleSxcbiAgICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJyBhcyBUVmFsdWVLZXksXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxUT3B0aW9uIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8cmVhZG9ubHkgVE9wdGlvbltdPihbXSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBUcmFjayB3aGF0IHZhbHVlIHdlJ3ZlIGxvYWRlZCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBBUEkgY2FsbHNcbiAgY29uc3QgbG9hZGVkVmFsdWVSZWYgPSB1c2VSZWY8VE9wdGlvbltUVmFsdWVLZXldIHwgbnVsbCB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgY29uc3QgZmV0Y2hEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZGVib3VuY2UoXG4gICAgICAgIChcbiAgICAgICAgICBwYXlsb2FkOiBBc3luY1NlbGVjdFBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IChyZXN1bHRzPzogcmVhZG9ubHkgVE9wdGlvbltdKSA9PiB2b2lkXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Rm4ocGF5bG9hZCkudGhlbihjID0+IGNhbGxiYWNrKGMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgNDAwXG4gICAgICApLFxuICAgIFtxdWVyeUZuXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvblZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbik6IHN0cmluZyB8IG51bWJlciA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uID8gU3RyaW5nKG9wdGlvblt2YWx1ZUZpZWxkXSkgOiAnJztcbiAgICB9LFxuICAgIFt2YWx1ZUZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvbkxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbik6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uID8gU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkXSkgOiAnJztcbiAgICB9LFxuICAgIFtsYWJlbEZpZWxkXVxuICApO1xuXG4gIC8vIEVmZmVjdDogSGFuZGxlIHNlYXJjaCBxdWVyeSBpbnB1dFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgLy8gQ29uZGl0aW9uIDE6IEEgdmFsdWUgaXMgc2V0IGZyb20gdGhlIGZvcm0sIGFuZCB3ZSBoYXZlbid0IGxvYWRlZCBpdCB5ZXQuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ICE9PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgIC8vIERvbid0IGZldGNoIGlmIHRoZSBzZWxlY3RlZCBvcHRpb24gaXMgYWxyZWFkeSBjb3JyZWN0XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgZ2V0T3B0aW9uVmFsdWUoc2VsZWN0ZWRPcHRpb24pID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICBsb2FkZWRWYWx1ZVJlZi5jdXJyZW50ID0gY3VycmVudFZhbHVlO1xuXG4gICAgICBmZXRjaERhdGEoeyBRdWVyeTogbnVsbCwgU2VsZWN0ZWRWYWx1ZTogY3VycmVudFZhbHVlIH0sIHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IHJlc3VsdHM/LmZpbmQoXG4gICAgICAgICAgb3B0aW9uID0+IFN0cmluZyhnZXRPcHRpb25WYWx1ZShvcHRpb24pKSA9PT0gU3RyaW5nKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZE9wdGlvbikge1xuICAgICAgICAgIHNldE9wdGlvbnMoW21hdGNoZWRPcHRpb25dKTtcbiAgICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbihtYXRjaGVkT3B0aW9uKTtcbiAgICAgICAgICBzZXRJbnB1dFZhbHVlKGdldE9wdGlvbkxhYmVsKG1hdGNoZWRPcHRpb24pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjsgLy8gRW5kIG9mIGVmZmVjdFxuICAgIH1cblxuICAgIC8vIENvbmRpdGlvbiAyOiBUaGUgdXNlciBpcyB0eXBpbmcgYSBzZWFyY2ggcXVlcnksIG9yIHRoZSBpbnB1dCBpcyBjbGVhcmVkLlxuICAgIC8vIFRoaXMgcnVucyBpZiB0aGUgaW5wdXQgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBsYWJlbC5cbiAgICBpZiAoaW5wdXRWYWx1ZSAhPT0gKHNlbGVjdGVkT3B0aW9uID8gZ2V0T3B0aW9uTGFiZWwoc2VsZWN0ZWRPcHRpb24pIDogJycpKSB7XG4gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgZW1wdHksIGNsZWFyIG9wdGlvbnMgaW1tZWRpYXRlbHkgd2l0aG91dCBhbiBBUEkgY2FsbC5cbiAgICAgIGlmIChpbnB1dFZhbHVlID09PSAnJykge1xuICAgICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGZldGNoIG5ldyBvcHRpb25zIGJhc2VkIG9uIHRoZSBpbnB1dC5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRydWU7XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG5cbiAgICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBpbnB1dFZhbHVlLCBTZWxlY3RlZFZhbHVlOiBudWxsIH0sIHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0T3B0aW9ucyhyZXN1bHRzIHx8IFtdKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47IC8vIEVuZCBvZiBlZmZlY3RcbiAgICB9XG5cbiAgICAvLyBDb25kaXRpb24gMzogVGhlIHZhbHVlIGhhcyBiZWVuIGNsZWFyZWQgZnJvbSB0aGUgZm9ybS5cbiAgICBpZiAoIWN1cnJlbnRWYWx1ZSAmJiBzZWxlY3RlZE9wdGlvbikge1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb24obnVsbCk7XG4gICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgIHNldE9wdGlvbnMoW10pO1xuICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIFtcbiAgICBmaWVsZC52YWx1ZSxcbiAgICBpbnB1dFZhbHVlLFxuICAgIGZldGNoRGF0YSxcbiAgICBnZXRPcHRpb25MYWJlbCxcbiAgICBnZXRPcHRpb25WYWx1ZSxcbiAgICBzZWxlY3RlZE9wdGlvbixcbiAgICBsYWJlbEZpZWxkLFxuICAgIHZhbHVlRmllbGQsXG4gIF0pO1xuXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZGlzYWJsZWQgPz8gZmFsc2U7XG4gIH0sIFtkaXNhYmxlZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChfOiBSZWFjdC5TeW50aGV0aWNFdmVudCwgbmV3U2VsZWN0ZWRPcHRpb246IFRPcHRpb24gfCBudWxsKSA9PiB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbihuZXdTZWxlY3RlZE9wdGlvbik7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld1NlbGVjdGVkT3B0aW9uXG4gICAgICAgID8gZ2V0T3B0aW9uVmFsdWUobmV3U2VsZWN0ZWRPcHRpb24pXG4gICAgICAgIDogbnVsbDtcblxuICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IG5ld1ZhbHVlIGFzXG4gICAgICAgIHwgVE9wdGlvbltUVmFsdWVLZXldXG4gICAgICAgIHwgbnVsbFxuICAgICAgICB8IHVuZGVmaW5lZDsgLy8gVHJhY2sgY2hhbmdlXG5cbiAgICAgIC8vIFN5bmMgaW5wdXQgdmFsdWUgd2l0aCB0aGUgc2VsZWN0aW9uXG4gICAgICBpZiAobmV3U2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShnZXRPcHRpb25MYWJlbChuZXdTZWxlY3RlZE9wdGlvbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgIHNldE9wdGlvbnMoW10pOyAvLyBDbGVhciBvcHRpb25zIHdoZW4gc2VsZWN0aW9uIGlzIGNsZWFyZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmaWVsZCwgZ2V0T3B0aW9uVmFsdWUsIGdldE9wdGlvbkxhYmVsXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKF86IFJlYWN0LlN5bnRoZXRpY0V2ZW50LCBuZXdJbnB1dFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldElucHV0VmFsdWUobmV3SW5wdXRWYWx1ZSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gV2hlbiBmb2N1cyBpcyBsb3N0LCBzeW5jIHRoZSBpbnB1dCB2YWx1ZSBiYWNrIHRvIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBsYWJlbFxuICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgc2V0SW5wdXRWYWx1ZShnZXRPcHRpb25MYWJlbChzZWxlY3RlZE9wdGlvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBub3RoaW5nIGlzIHNlbGVjdGVkLCBjbGVhciB0aGUgaW5wdXRcbiAgICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkT3B0aW9uLCBnZXRPcHRpb25MYWJlbF0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0T3Blbih0cnVlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgb3Blbj17b3Blbn1cbiAgICAgIG9uT3Blbj17aGFuZGxlT3Blbn1cbiAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxuICAgICAgb25CbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGdldE9wdGlvbktleT17Z2V0T3B0aW9uVmFsdWV9XG4gICAgICBpc09wdGlvbkVxdWFsVG9WYWx1ZT17KG9wdGlvbiwgdmFsdWUpID0+XG4gICAgICAgIGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGdldE9wdGlvblZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgICAgYXV0b0NvbXBsZXRlXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIGluY2x1ZGVJbnB1dEluTGlzdFxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHZhbHVlPXtzZWxlY3RlZE9wdGlvbn1cbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9uc1xuICAgICAgZmlsdGVyT3B0aW9ucz17eCA9PiB4fVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uSW5wdXRDaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBub09wdGlvbnNUZXh0PVwiVHlwZSBTb21ldGhpbmcuLi5cIlxuICAgICAgcmVuZGVySW5wdXQ9e3BhcmFtcyA9PiAoXG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICB7Li4ucGFyYW1zfVxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAuLi5wYXJhbXMuSW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgZW5kQWRvcm5tZW50OiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICB7cGFyYW1zLklucHV0UHJvcHMuZW5kQWRvcm5tZW50fVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiBpc0Rpc2FibGVkID8gJ2ZpbGxlZCcgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHJlbmRlck9wdGlvbj17KHJlbmRlclByb3BzLCBvcHRpb24pID0+IHtcbiAgICAgICAgY29uc3QgeyBrZXksIC4uLm9wdGlvblByb3BzIH0gPSByZW5kZXJQcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSBrZXk9e2tleX0gey4uLm9wdGlvblByb3BzfT5cbiAgICAgICAgICAgIHtvcHRpb25bbGFiZWxGaWVsZF19XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn07XG5cbmNvbnN0IEFzeW5jU2VsZWN0RWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBBc3luY1NlbGVjdEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFRPcHRpb25cbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlS2V5LCBUTGFiZWxLZXksIFRPcHRpb24+XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuQXN5bmNTZWxlY3RFbGVtZW50LmRpc3BsYXlOYW1lID0gJ0FzeW5jU2VsZWN0RWxlbWVudCc7XG5cbmV4cG9ydCB7IEFzeW5jU2VsZWN0RWxlbWVudCB9O1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbiAgUGF0aFZhbHVlLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB7IHVzZUVuaGFuY2VkVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtL2VuaGFuY2VkJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXZlbnRzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFRleHRGaWVsZEVsZW1lbnQgY29tcG9uZW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlckZpZWxkRWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSA9IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPixcbj4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGZvcm1cbiAgICogQGV4YW1wbGUgXCJmaXJzdE5hbWVcIiB8IFwidXNlci5lbWFpbFwiXG4gICAqL1xuICBuYW1lOiBUTmFtZTtcbiAgLyoqXG4gICAqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlclxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgZmllbGQgZXJyb3Igb2JqZWN0XG4gICAqIEByZXR1cm5zIEN1c3RvbSBlcnJvciBtZXNzYWdlIG9yIGNvbXBvbmVudFxuICAgKi9cbiAgcGFyc2VFcnJvcj86IChlcnJvcjogRmllbGRFcnJvcikgPT4gUmVhY3ROb2RlO1xuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZXh0RmllbGQgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGRlZmF1bHQgTVVJIFRleHRGaWVsZFxuICAgKi9cbiAgY29tcG9uZW50PzogdHlwZW9mIFRleHRGaWVsZDtcbiAgLyoqXG4gICAqIFZhbHVlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyBmb3IgaW5wdXQvb3V0cHV0XG4gICAqIEBkZXByZWNhdGVkIFVzZSBmaWVsZFR5cGUgZm9yIGNvbW1vbiBwYXR0ZXJucyBvciBjdXN0b20gdHJhbnNmb3JtcyBmb3IgY29tcGxleCBjYXNlc1xuICAgKi9cbiAgdHJhbnNmb3JtPzoge1xuICAgIC8qKiBUcmFuc2Zvcm0gdmFsdWUgYmVmb3JlIGRpc3BsYXlpbmcgaW4gaW5wdXQgKi9cbiAgICBpbnB1dD86ICh2YWx1ZTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiBUVmFsdWU7XG4gICAgLyoqIFRyYW5zZm9ybSBpbnB1dCBldmVudCB0byBmb3JtIHZhbHVlICovXG4gICAgb3V0cHV0PzogKFxuICAgICAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8UGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+PixcbiAgICAgIHZhbHVlPzogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+XG4gICAgKSA9PiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gIH07XG4gIC8qKlxuICAgKiBCdWlsdC1pbiBmaWVsZCB0eXBlIGZvciBhdXRvbWF0aWMgdHJhbnNmb3JtYXRpb25cbiAgICogQGV4YW1wbGUgJ3RleHQnIHwgJ251bWJlcicgfCAnZGF0ZScgfCAndGltZScgfCAnc2VsZWN0J1xuICAgKi9cbiAgZmllbGRUeXBlPzogRmllbGRUeXBlO1xuICAvKipcbiAgICogRGVmYXVsdCB2YWx1ZSB0byBkaXNwbGF5IHdoZW4gZmllbGQgdmFsdWUgaXMgbnVsbC91bmRlZmluZWRcbiAgICogQGV4YW1wbGUgXCJcIlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogVFZhbHVlO1xuICAvKipcbiAgICogVGhlIGlucHV0IGxhYmVsIHRleHRcbiAgICogQGV4YW1wbGUgXCJFbWFpbCBBZGRyZXNzXCJcbiAgICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0XG4gICAqIEBleGFtcGxlIFwiRW50ZXIgeW91ciBlbWFpbFwiXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvcHMgZm9yIHRoZSB1bmRlcmx5aW5nIFRleHRGaWVsZCBjb21wb25lbnRcbiAgICovXG4gIHRleHRGaWVsZFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnID47XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgVGV4dEZpZWxkIHZhcmlhbnRcbiAgICogQGRlZmF1bHRWYWx1ZSBcIm91dGxpbmVkXCJcbiAgICovXG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgLyoqXG4gICAqIEN1c3RvbSBvbkNoYW5nZSBoYW5kbGVyIGNhbGxlZCBhZnRlciB0cmFuc2Zvcm1hdGlvblxuICAgKi9cbiAgb25DaGFuZ2U/OiAoXG4gICAgZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBFbmFibGUgZGV2ZWxvcG1lbnQgd2FybmluZ3MgZm9yIGRlYnVnZ2luZyB0cmFuc2Zvcm1hdGlvbiBpc3N1ZXNcbiAgICogQGRlZmF1bHRWYWx1ZSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgKi9cbiAgZW5hYmxlV2FybmluZ3M/OiBib29sZWFuO1xufVxuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBOdW1iZXJGaWVsZEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPihwcm9wczogTnVtYmVyRmllbGRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikge1xuICBjb25zdCB7XG4gICAgcGFyc2VFcnJvcixcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgY29tcG9uZW50OiBUZXh0RmllbGRDb21wb25lbnQgPSBUZXh0RmllbGQsXG4gICAgdHJhbnNmb3JtLFxuICAgIGZpZWxkVHlwZSA9ICd0ZXh0JywgLy8gRGVmYXVsdCB0byB0ZXh0IHR5cGVcbiAgICBkZWZhdWx0VmFsdWUsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdGV4dEZpZWxkUHJvcHMgPSB7fSxcbiAgICB2YXJpYW50LFxuICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICBlbmFibGVXYXJuaW5ncyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICB0eXBlID0gJ251bWJlcicsXG4gICAgcmVxdWlyZWQsXG4gICAgaGVscGVyVGV4dCxcbiAgICBpbnB1dFJlZixcbiAgICBvbklucHV0LFxuICAgIG9uQmx1cixcbiAgICBkaXNhYmxlZCxcbiAgICAuLi5yZXN0VGV4dFByb3BzXG4gIH0gPSB0ZXh0RmllbGRQcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICAvLyBVc2UgdGhlIGVuaGFuY2VkIHRyYW5zZm9ybSBob29rIHdpdGggcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uc1xuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlRW5oYW5jZWRUcmFuc2Zvcm08VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPihcbiAgICB7XG4gICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlucHV0OiB0cmFuc2Zvcm0uaW5wdXQsXG4gICAgICAgICAgICBvdXRwdXQ6IHRyYW5zZm9ybS5vdXRwdXQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGZpZWxkVHlwZTogIXRyYW5zZm9ybVxuICAgICAgICA/IHR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyAnbnVtYmVyJ1xuICAgICAgICAgIDogZmllbGRUeXBlXG4gICAgICAgIDogdW5kZWZpbmVkLCAvLyBBdXRvLWRldGVjdCBudW1iZXIgdHlwZVxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZW5hYmxlV2FybmluZ3MsXG4gICAgfVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmID0gdXNlRm9ya1JlZihmaWVsZC5yZWYsIGlucHV0UmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxUZXh0RmllbGRDb21wb25lbnRcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgey4uLnJlc3RUZXh0UHJvcHN9XG4gICAgICBuYW1lPXtmaWVsZC5uYW1lfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSAnJykge1xuICAgICAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICBpZiAodHlwZW9mIGN1c3RvbU9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY3VzdG9tT25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbklucHV0PXsoZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb25JbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uSW5wdXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25XaGVlbD17ZSA9PiB7XG4gICAgICAgIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuYmx1cigpO1xuICAgICAgfX1cbiAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgIGlmIChbJ2UnLCAnRScsICdBcnJvd0Rvd24nLCAnQXJyb3dVcCddLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgIGVycm9yID8gKHBhcnNlRXJyb3IgPyBwYXJzZUVycm9yKGVycm9yKSA6IGVycm9yLm1lc3NhZ2UpIDogaGVscGVyVGV4dFxuICAgICAgfVxuICAgICAgaW5wdXRSZWY9e2hhbmRsZUlucHV0UmVmfVxuICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiAnb3V0bGluZWQnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgVGV4dEZpZWxkIGNvbXBvbmVudCB3aXRoIGF1dG9tYXRpYyB2YWxpZGF0aW9uLFxuICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGJ1aWx0LWluIGZpZWxkIHR5cGUgaGFuZGxpbmcuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uXG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5IHdpdGggY3VzdG9tIHBhcnNpbmdcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gc3VwcG9ydFxuICogLSBCdWlsdC1pbiBmaWVsZCB0eXBlcyBmb3IgY29tbW9uIHBhdHRlcm5zXG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBPcHRpbWl6ZWQgbnVtYmVyIGlucHV0IGhhbmRsaW5nXG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqIC0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB3aXRoIG1lbW9pemVkIHRyYW5zZm9ybWF0aW9uc1xuICogLSBEZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nXG4gKiAtIFN0YWJsZSByZWZlcmVuY2VzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIG51bWJlciBoYW5kbGluZzpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImFnZVwiXG4gKiAgIGxhYmVsPVwiQWdlXCJcbiAqICAgZmllbGRUeXBlPVwibnVtYmVyXCJcbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdBZ2UgaXMgcmVxdWlyZWQnLCBtaW46IHsgdmFsdWU6IDAsIG1lc3NhZ2U6ICdBZ2UgbXVzdCBiZSBwb3NpdGl2ZScgfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBBZHZhbmNlZCB1c2FnZSB3aXRoIGN1c3RvbSBncmlkIGxheW91dDpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImVtYWlsXCJcbiAqICAgbGFiZWw9XCJFbWFpbFwiXG4gKiAgIGZpZWxkVHlwZT1cInRleHRcIlxuICogICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZW1haWwgYWRkcmVzc1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBydWxlcz17e1xuICogICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICogICAgIHBhdHRlcm46IHsgdmFsdWU6IC9cXFMrQFxcUytcXC5cXFMrLywgbWVzc2FnZTogJ0ludmFsaWQgZW1haWwnIH1cbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIHRyYW5zZm9ybWF0aW9uOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicHJpY2VcIlxuICogICBsYWJlbD1cIlByaWNlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPyBgJCR7dmFsdWV9YCA6ICcnLFxuICogICAgIG91dHB1dDogKGV2ZW50KSA9PiBwYXJzZUZsb2F0KGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKCckJywgJycpKSB8fCBudWxsXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGVycm9yIHBhcnNpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gKiAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGFyc2VFcnJvcj17KGVycm9yKSA9PiAoXG4gKiAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICdyZWQnIH19PlxuICogICAgICAgXHUyNkEwXHVGRTBGIHtlcnJvci5tZXNzYWdlfVxuICogICAgIDwvc3Bhbj5cbiAqICAgKX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IE51bWJlckZpZWxkRWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBOdW1iZXJGaWVsZEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KTogUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgQm94UHJvcHMsIEZvcm1IZWxwZXJUZXh0UHJvcHMsIEdyaWRQcm9wcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgQm94LCBHcmlkLCBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQge1xuICBNdWlPdHBJbnB1dCxcbiAgdHlwZSBNdWlPdHBJbnB1dFByb3BzLFxufSBmcm9tICdtdWktb25lLXRpbWUtcGFzc3dvcmQtaW5wdXQnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgQ29udHJvbCxcbiAgRmllbGRFcnJvcixcbiAgRmllbGRQYXRoLFxuICBGaWVsZFZhbHVlcyxcbn0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgeyBIZWxwZXJUZXh0IH0gZnJvbSAnLi9IZWxwZXJUZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBPVFBJbnB1dEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKiBAZXhhbXBsZSBcImZpcnN0TmFtZVwiIHwgXCJ1c2VyLmVtYWlsXCJcbiAgICovXG4gIG5hbWU6IFROYW1lO1xuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgcGFyc2VyXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBmaWVsZCBlcnJvciBvYmplY3RcbiAgICogQHJldHVybnMgQ3VzdG9tIGVycm9yIG1lc3NhZ2Ugb3IgY29tcG9uZW50XG4gICAqL1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtXG4gICAqL1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuXG4gIG1heFNpemU/OiBudW1iZXI7XG5cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgaGVscGVyVGV4dD86IFJlYWN0LlJlYWN0Tm9kZTtcblxuICBzbG90UHJvcHM/OiB7XG4gICAgd3JhcHBlcj86IEJveFByb3BzO1xuICAgIGhlbHBlclRleHQ/OiBGb3JtSGVscGVyVGV4dFByb3BzO1xuICAgIHRleHRmaWVsZD86IE11aU90cElucHV0UHJvcHNbJ1RleHRGaWVsZHNQcm9wcyddO1xuICB9O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG59XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIE9UUElucHV0RWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPihwcm9wczogT1RQSW5wdXRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pIHtcbiAgY29uc3Qge1xuICAgIC8vIHBhcnNlRXJyb3IsXG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIHNsb3RQcm9wcyxcbiAgICBoZWxwZXJUZXh0LFxuICAgIG1heFNpemUgPSA1NixcbiAgICBwbGFjZWhvbGRlciA9ICctJyxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICAvLyBjb25zdCB7XG4gIC8vICAgZmllbGQsXG4gIC8vICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICAvLyB9ID0gdXNlQ29udHJvbGxlcih7XG4gIC8vICAgbmFtZSxcbiAgLy8gICBjb250cm9sLFxuICAvLyB9KTtcblxuICByZXR1cm4gKFxuICAgIDxDb250cm9sbGVyXG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgIHJlbmRlcj17KHsgZmllbGQsIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSB9KSA9PiAoXG4gICAgICAgIDxCb3hcbiAgICAgICAgICB7Li4uc2xvdFByb3BzPy53cmFwcGVyfVxuICAgICAgICAgIHN4PXtbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBbYCYgLiR7aW5wdXRCYXNlQ2xhc3Nlcy5pbnB1dH1gXToge1xuICAgICAgICAgICAgICAgIHA6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgYXNwZWN0UmF0aW86ICcxLzEnLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KHNsb3RQcm9wcz8ud3JhcHBlcj8uc3gpXG4gICAgICAgICAgICAgID8gKHNsb3RQcm9wcz8ud3JhcHBlcj8uc3ggPz8gW10pXG4gICAgICAgICAgICAgIDogW3Nsb3RQcm9wcz8ud3JhcHBlcj8uc3hdKSxcbiAgICAgICAgICBdfVxuICAgICAgICA+XG4gICAgICAgICAgPE11aU90cElucHV0XG4gICAgICAgICAgICB7Li4uZmllbGR9XG4gICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgIGdhcD17MS41fVxuICAgICAgICAgICAgbGVuZ3RoPXs0fVxuICAgICAgICAgICAgVGV4dEZpZWxkc1Byb3BzPXt7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICBlcnJvcjogISFlcnJvcixcbiAgICAgICAgICAgICAgLi4uc2xvdFByb3BzPy50ZXh0ZmllbGQsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxIZWxwZXJUZXh0XG4gICAgICAgICAgICB7Li4uc2xvdFByb3BzPy5oZWxwZXJUZXh0fVxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlPXtlcnJvcj8ubWVzc2FnZX1cbiAgICAgICAgICAgIGhlbHBlclRleHQ9e2hlbHBlclRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuICAgIC8+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgT1RQSW5wdXRFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBPVFBJbnB1dEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPik6IFJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7IEZvcm1IZWxwZXJUZXh0UHJvcHMgfSBmcm9tICdAbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0JztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICdAbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBIZWxwZXJUZXh0UHJvcHMgPSBGb3JtSGVscGVyVGV4dFByb3BzICYge1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIGRpc2FibGVHdXR0ZXJzPzogYm9vbGVhbjtcbiAgaGVscGVyVGV4dD86IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWxwZXJUZXh0KHtcbiAgc3gsXG4gIGhlbHBlclRleHQsXG4gIGVycm9yTWVzc2FnZSxcbiAgZGlzYWJsZUd1dHRlcnMsXG4gIC4uLm90aGVyXG59OiBIZWxwZXJUZXh0UHJvcHMpIHtcbiAgaWYgKGVycm9yTWVzc2FnZSB8fCBoZWxwZXJUZXh0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtSGVscGVyVGV4dFxuICAgICAgICBlcnJvcj17ISFlcnJvck1lc3NhZ2V9XG4gICAgICAgIHN4PXtbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbXg6IGRpc2FibGVHdXR0ZXJzID8gMCA6IDEuNzUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShzeCkgPyBzeCA6IFtzeF0pLFxuICAgICAgICBdfVxuICAgICAgICB7Li4ub3RoZXJ9XG4gICAgICA+XG4gICAgICAgIHtlcnJvck1lc3NhZ2UgfHwgaGVscGVyVGV4dH1cbiAgICAgIDwvRm9ybUhlbHBlclRleHQ+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwgImltcG9ydCB7IEFzeW5jU2VsZWN0TXVsdGlFbGVtZW50IH0gZnJvbSAnLi4vQXN5bmNNdWx0aVNlbGVjdC9Bc3luY011bHRpU2VsZWN0JztcbmltcG9ydCB7IEFzeW5jU2VsZWN0RWxlbWVudCB9IGZyb20gJy4uL0FzeW5jU2VsZWN0JztcbmltcG9ydCB7IENoZWNrYm94RWxlbWVudCB9IGZyb20gJy4uL0NoZWNrYm94RWxlbWVudCc7XG5pbXBvcnQgeyBDaGVja2JveEdyb3VwRWxlbWVudCB9IGZyb20gJy4uL0NoZWNrYm94R3JvdXAnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckVsZW1lbnQgfSBmcm9tICcuLi9EYXRlUGlja2VyRWxlbWVudCc7XG5pbXBvcnQgeyBOdW1iZXJGaWVsZEVsZW1lbnQgfSBmcm9tICcuLi9OdW1iZXJGaWVsZEVsZW1lbnQnO1xuaW1wb3J0IHsgT1RQSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vT1RQSW5wdXRFbGVtZW50L09UUElucHV0RWxlbWVudCc7XG5pbXBvcnQgeyBQYXNzd29yZEVsZW1lbnQgfSBmcm9tICcuLi9QYXNzd29yZEVsZW1lbnQnO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Hcm91cCB9IGZyb20gJy4uL1JhZGlvQnV0dG9uR3JvdXAnO1xuaW1wb3J0IHsgU2VsZWN0Q2FzY2FkZUVsZW1lbnQgfSBmcm9tICcuLi9TZWxlY3RDYXNjYWRlRWxlbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RFbGVtZW50IH0gZnJvbSAnLi4vU2VsZWN0RWxlbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RNdWx0aUVsZW1lbnQgfSBmcm9tICcuLi9TZWxlY3RNdWx0aUVsZW1lbnQnO1xuaW1wb3J0IHsgVGV4dEZpZWxkRWxlbWVudCB9IGZyb20gJy4uL1RleHRGaWVsZEVsZW1lbnQnO1xuaW1wb3J0IHsgVGltZVBpY2tlckVsZW1lbnQgfSBmcm9tICcuLi9UaW1lUGlja2VyRWxlbWVudCc7XG5cbmNvbnN0IEZpZWxkID0ge1xuICBUZXh0OiBUZXh0RmllbGRFbGVtZW50LFxuICBOdW1iZXI6IE51bWJlckZpZWxkRWxlbWVudCxcbiAgQ2hlY2tib3g6IENoZWNrYm94RWxlbWVudCxcbiAgRGF0ZTogRGF0ZVBpY2tlckVsZW1lbnQsXG4gIFJhZGlvR3JvdXA6IFJhZGlvQnV0dG9uR3JvdXAsXG4gIFBhc3N3b3JkOiBQYXNzd29yZEVsZW1lbnQsXG4gIFRpbWU6IFRpbWVQaWNrZXJFbGVtZW50LFxuICBTZWxlY3Q6IFNlbGVjdEVsZW1lbnQsXG4gIFNlbGVjdE11bHRpOiBTZWxlY3RNdWx0aUVsZW1lbnQsXG4gIFNlbGVjdENhc2NhZGU6IFNlbGVjdENhc2NhZGVFbGVtZW50LFxuICBBc3luY1NlbGVjdDogQXN5bmNTZWxlY3RFbGVtZW50LFxuICBBc3luY011bHRpU2VsZWN0OiBBc3luY1NlbGVjdE11bHRpRWxlbWVudCxcbiAgQ2hlY2tib3hHcm91cDogQ2hlY2tib3hHcm91cEVsZW1lbnQsXG4gIE9UUElucHV0OiBPVFBJbnB1dEVsZW1lbnQsXG59O1xuXG5leHBvcnQgeyBGaWVsZCB9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7O0FBNEZPLFNBQVMsY0FBYyxPQUFxQztBQUNqRSxTQUNFLE9BQU8sVUFBVSxZQUNqQixVQUFVLFFBQ1YsV0FBVyxTQUNYLFdBQVcsU0FDWCxPQUFRLE1BQXFCLFVBQVUsYUFDdEMsT0FBUSxNQUFxQixVQUFVLFlBQ3RDLE9BQVEsTUFBcUIsVUFBVSxZQUN2QyxPQUFRLE1BQXFCLFVBQVU7QUFFN0M7QUFZTyxTQUFTLGlCQUNkLFNBQ0EsYUFBYSxTQUNiLGFBQWEsU0FDQztBQUNkLFNBQU8sUUFBUSxJQUFJLGFBQVc7QUFBQSxJQUM1QixPQUFPLE9BQU8sT0FBTyxVQUFVLEtBQUssRUFBRTtBQUFBLElBQ3RDLE9BQU8sT0FBTyxVQUFVO0FBQUEsSUFDeEIsVUFBVSxRQUFRLE9BQU8sUUFBUTtBQUFBLEVBQ25DLEVBQUU7QUFDSjs7O0FDN0hBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sV0FBVztBQUNsQixPQUFPLFdBQVc7QUFDbEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxxQkFBcUI7QUF1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RzdCO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQUErRDtBQUM3RCxTQUNFLGdCQUFBSCxNQUFDSSxRQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFKLE1BQUNFLGFBQUEsRUFBVyxHQUFHLE9BQU8sR0FDeEI7QUFFSjs7O0FFdEhBLElBQU0sUUFBUTtBQUFBLEVBQ1osTUFBTUc7QUFBQSxFQUNOLFFBQVFDO0FBQUEsRUFDUixVQUFVQztBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sWUFBWUM7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLE1BQU1DO0FBQUEsRUFDTixRQUFRQztBQUFBLEVBQ1IsYUFBYUM7QUFBQSxFQUNiLGVBQWVDO0FBQUEsRUFDZixhQUFhQztBQUFBLEVBQ2Isa0JBQWtCQztBQUFBLEVBQ2xCLGVBQWU7QUFBQSxFQUNmLFVBQVVDO0FBQ1o7IiwKICAibmFtZXMiOiBbInByb3BzIiwgIkFzeW5jU2VsZWN0TXVsdGlFbGVtZW50IiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAidXNlQ29udHJvbGxlciIsICJ2YWx1ZSIsICJDaGVja2JveEVsZW1lbnQiLCAiR3JpZCIsICJDaGVja2JveCIsICJGb3JtQ29udHJvbCIsICJGb3JtQ29udHJvbExhYmVsIiwgIkZvcm1Hcm91cCIsICJGb3JtSGVscGVyVGV4dCIsICJHcmlkIiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIkdyaWQiLCAiZm9yd2FyZFJlZiIsICJ1c2VDYWxsYmFjayIsICJ1c2VNZW1vIiwgInVzZUNvbnRyb2xsZXIiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VNZW1vIiwgInVzZVRoZW1lIiwgInVzZU1lbW8iLCAianN4IiwgInVzZUNvbnRyb2xsZXIiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJqc3giLCAiZm9yd2FyZFJlZiIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgIkdyaWQiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgInBhc3N3b3JkIiwgIkZvcm1Db250cm9sIiwgIkZvcm1Db250cm9sTGFiZWwiLCAiRm9ybUhlbHBlclRleHQiLCAiRm9ybUxhYmVsIiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAidXNlQ29udHJvbGxlciIsICJ2YWx1ZSIsICJGb3JtQ29udHJvbCIsICJGb3JtTGFiZWwiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJGb3JtSGVscGVyVGV4dCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIkdyaWQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAiQXV0b2NvbXBsZXRlIiwgInVzZVRoZW1lIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAiU2VsZWN0Q2FzY2FkZUVsZW1lbnQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAiQXV0b2NvbXBsZXRlIiwgInVzZVRoZW1lIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJTZWxlY3RFbGVtZW50IiwgIkdyaWQiLCAiQ2hlY2tib3giLCAiVGV4dEZpZWxkIiwgIkF1dG9jb21wbGV0ZSIsICJDaXJjdWxhclByb2dyZXNzIiwgInVzZVRoZW1lIiwgIkZyYWdtZW50IiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIlNlbGVjdE11bHRpRWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJUZXh0RmllbGQiLCAidXNlQ29udHJvbGxlciIsICJ1c2VGb3JrUmVmIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiR3JpZCIsICJHcmlkIiwgInVzZUZvcmtSZWYiLCAidXNlTG9jYWxpemF0aW9uQ29udGV4dCIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAidXNlTG9jYWxpemF0aW9uQ29udGV4dCIsICJ1c2VDb250cm9sbGVyIiwgInZhbHVlIiwgInVzZUZvcmtSZWYiLCAiVGltZVBpY2tlckVsZW1lbnQiLCAiR3JpZCIsICJBdXRvY29tcGxldGUiLCAiQ2lyY3VsYXJQcm9ncmVzcyIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VUaGVtZSIsICJkZWJvdW5jZSIsICJGcmFnbWVudCIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAiQXN5bmNTZWxlY3RFbGVtZW50IiwgIkdyaWQiLCAiVGV4dEZpZWxkIiwgInVzZUZvcmtSZWYiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgIlRleHRGaWVsZCIsICJ1c2VDb250cm9sbGVyIiwgInVzZUZvcmtSZWYiLCAiTnVtYmVyRmllbGRFbGVtZW50IiwgIkdyaWQiLCAiR3JpZCIsICJGb3JtSGVscGVyVGV4dCIsICJqc3giLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIk9UUElucHV0RWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiTnVtYmVyRmllbGRFbGVtZW50IiwgIkNoZWNrYm94RWxlbWVudCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIlRpbWVQaWNrZXJFbGVtZW50IiwgIlNlbGVjdEVsZW1lbnQiLCAiU2VsZWN0TXVsdGlFbGVtZW50IiwgIlNlbGVjdENhc2NhZGVFbGVtZW50IiwgIkFzeW5jU2VsZWN0RWxlbWVudCIsICJBc3luY1NlbGVjdE11bHRpRWxlbWVudCIsICJPVFBJbnB1dEVsZW1lbnQiXQp9Cg==
|
|
2399
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3dyYXBwZXJzL3R5cGVzL2NvbW1vbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvQXN5bmNNdWx0aVNlbGVjdC9Bc3luY011bHRpU2VsZWN0LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvQ2hlY2tib3hFbGVtZW50L0NoZWNrYm94RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0NoZWNrYm94R3JvdXAvQ2hlY2tib3hHcm91cC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0RhdGVQaWNrZXJFbGVtZW50L0RhdGVQaWNrZXJFbGVtZW50LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvRGF0ZVBpY2tlckVsZW1lbnRDb3JlLnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclZhbHVlLnRzIiwgIi4uL3NyYy93cmFwcGVycy9EYXRlUGlja2VyRWxlbWVudC9ob29rcy91c2VEYXRlUGlja2VyVmFsaWRhdGlvbi50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvaG9va3MvdXNlRGF0ZVBpY2tlclN0eWxlcy50cyIsICIuLi9zcmMvd3JhcHBlcnMvRGF0ZVBpY2tlckVsZW1lbnQvdXRpbHMudHMiLCAiLi4vc3JjL3dyYXBwZXJzL1Bhc3N3b3JkRWxlbWVudC9QYXNzd29yZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9SYWRpb0J1dHRvbkdyb3VwL1JhZGlvQnV0dG9uR3JvdXAudHN4IiwgIi4uL3NyYy93cmFwcGVycy9TZWxlY3RDYXNjYWRlRWxlbWVudC9TZWxlY3RDYXNjYWRlRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdEVsZW1lbnQvU2VsZWN0RWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL1NlbGVjdE11bHRpRWxlbWVudC9TZWxlY3RNdWx0aUVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UZXh0RmllbGRFbGVtZW50L1RleHRGaWVsZEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9UaW1lUGlja2VyRWxlbWVudC9UaW1lUGlja2VyRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0FzeW5jU2VsZWN0L2luZGV4LnRzeCIsICIuLi9zcmMvd3JhcHBlcnMvTnVtYmVyRmllbGRFbGVtZW50L051bWJlckZpZWxkRWxlbWVudC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL09UUElucHV0RWxlbWVudC9PVFBJbnB1dEVsZW1lbnQudHN4IiwgIi4uL3NyYy93cmFwcGVycy9PVFBJbnB1dEVsZW1lbnQvSGVscGVyVGV4dC50c3giLCAiLi4vc3JjL3dyYXBwZXJzL0ZpZWxkL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvbW1vbiB0eXBlIGRlZmluaXRpb25zIGZvciB3cmFwcGVyIGNvbXBvbmVudHNcbiAqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIEJhc2Ugb3B0aW9uIHR5cGUgZm9yIHNlbGVjdC1iYXNlZCBjb21wb25lbnRzXG4gKlxuICogQHRlbXBsYXRlIFYgLSBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU9wdGlvbjxWID0gc3RyaW5nIHwgbnVtYmVyPiB7XG4gIC8qKlxuICAgKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgb3B0aW9uXG4gICAqL1xuICBMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIG9wdGlvblxuICAgKi9cbiAgVmFsdWU6IFY7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZsZXhpYmxlIG9wdGlvbiB0eXBlIHRoYXQgZXh0ZW5kcyBiYXNlIG9wdGlvbiB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG9iamVjdFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRmxleGlibGVPcHRpb248XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IFQgJiBCYXNlT3B0aW9uO1xuXG4vKipcbiAqIE9wdGlvbiB0eXBlIHdpdGggY3VzdG9taXphYmxlIGtleSBuYW1lc1xuICogVXNlZnVsIGZvciBjb21wb25lbnRzIHRoYXQgYWNjZXB0IGN1c3RvbSBsYWJlbEZpZWxkL3ZhbHVlRmllbGQgcHJvcHNcbiAqXG4gKiBAdGVtcGxhdGUgVFZhbHVlS2V5IC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIHZhbHVlXG4gKiBAdGVtcGxhdGUgVExhYmVsS2V5IC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIGxhYmVsXG4gKiBAdGVtcGxhdGUgVERpc2FibGVkS2V5IC0gVGhlIHByb3BlcnR5IG5hbWUgZm9yIGRpc2FibGVkIGZsYWdcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEN1c3RvbUtleU9wdGlvbjxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSBSZWNvcmQ8VFZhbHVlS2V5LCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiAmXG4gIFJlY29yZDxUTGFiZWxLZXksIHN0cmluZz4gJlxuICBQYXJ0aWFsPFJlY29yZDxURGlzYWJsZWRLZXksIGJvb2xlYW4+PiAmXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIExlZ2FjeSBvcHRpb24gdHlwZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGNvZGVcbiAqIFVzZXMgVmFsdWUvTGFiZWwgbmFtaW5nIGNvbnZlbnRpb25cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgQmFzZU9wdGlvbiBvciBGbGV4aWJsZU9wdGlvbiBpbnN0ZWFkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5T3B0aW9uIHtcbiAgLyoqXG4gICAqIERpc3BsYXkgbGFiZWwgZm9yIHRoZSBvcHRpb24gKGNhcGl0YWxpemVkIGtleSBuYW1lKVxuICAgKi9cbiAgTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gKGNhcGl0YWxpemVkIGtleSBuYW1lKVxuICAgKi9cbiAgVmFsdWU6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAqL1xuICBEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBvcHRpb25cbiAqXG4gKiBAcGFyYW0gVmFsdWUgLSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBvcHRpb24gb2JqZWN0XG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE9wdGlvbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEJhc2VPcHRpb24ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICdMYWJlbCcgaW4gdmFsdWUgJiZcbiAgICAnVmFsdWUnIGluIHZhbHVlICYmXG4gICAgdHlwZW9mICh2YWx1ZSBhcyBCYXNlT3B0aW9uKS5MYWJlbCA9PT0gJ3N0cmluZycgJiZcbiAgICAodHlwZW9mICh2YWx1ZSBhcyBCYXNlT3B0aW9uKS5WYWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgIHR5cGVvZiAodmFsdWUgYXMgQmFzZU9wdGlvbikuVmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIEJhc2VPcHRpb24pLlZhbHVlID09PSAnYm9vbGVhbicpXG4gICk7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIG5vcm1hbGl6ZSBvcHRpb25zIHRvIEJhc2VPcHRpb24gZm9ybWF0XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGFycmF5IHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIGxhYmVsRmllbGQgLSBDdXN0b20gbGFiZWwgZmllbGQgbmFtZSBpbiBvcHRpb24gb2JqZWN0c1xuICogQHBhcmFtIHZhbHVlRmllbGQgLSBDdXN0b20gdmFsdWUgZmllbGQgbmFtZSBpbiBvcHRpb24gb2JqZWN0c1xuICogQHJldHVybnMgTm9ybWFsaXplZCBvcHRpb25zIGFycmF5XG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBvcHRpb25zOiBUW10sXG4gIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJ1xuKTogQmFzZU9wdGlvbltdIHtcbiAgcmV0dXJuIG9wdGlvbnMubWFwKG9wdGlvbiA9PiAoe1xuICAgIExhYmVsOiBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGRdID8/ICcnKSxcbiAgICBWYWx1ZTogb3B0aW9uW3ZhbHVlRmllbGRdIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICBkaXNhYmxlZDogQm9vbGVhbihvcHRpb24uZGlzYWJsZWQpLFxuICB9KSk7XG59XG4iLCAiaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlLFxuICBDaXJjdWxhclByb2dyZXNzLFxuICBkZWJvdW5jZSxcbiAgR3JpZCxcbiAgVGV4dEZpZWxkLFxuICB1c2VUaGVtZSxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgbWF0Y2ggZnJvbSAnYXV0b3N1Z2dlc3QtaGlnaGxpZ2h0L21hdGNoJztcbmltcG9ydCBwYXJzZSBmcm9tICdhdXRvc3VnZ2VzdC1oaWdobGlnaHQvcGFyc2UnO1xuaW1wb3J0IFJlYWN0LCB7XG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZU1lbW8sXG4gIHVzZUVmZmVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIEZyYWdtZW50LFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEhUTUxBdHRyaWJ1dGVzLCBTeW50aGV0aWNFdmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHR5cGUgeyBBc3luY011bHRpU2VsZWN0RWxlbWVudFByb3BzLCBPcHRpb25PYmplY3QgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHR5cGUgeyBBc3luY011bHRpU2VsZWN0UGF5bG9hZCB9IGZyb20gJ0AvdHlwZXMnO1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBBc3luY1NlbGVjdE11bHRpRWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KFxuICBwcm9wczogQXN5bmNNdWx0aVNlbGVjdEVsZW1lbnRQcm9wczxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBUT3B0aW9uXG4gID5cbikge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBjb250cm9sLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGxhYmVsLFxuICAgIHF1ZXJ5Rm4sXG4gICAgdmFyaWFudCxcbiAgICBsYWJlbEZpZWxkID0gJ0xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVGaWVsZCA9ICdWYWx1ZScgYXMgVFZhbHVlS2V5LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPHJlYWRvbmx5IFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3QgbG9hZGVkVmFsdWVzUmVmID0gdXNlUmVmPFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBpbml0aWFsTG9hZENvbXBsZXRlUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgLy8gU3RvcmUgc2VsZWN0ZWQgb3B0aW9ucyBpbiBhIHJlZiBzbyBFZmZlY3QgMiBjYW4gYWNjZXNzIHdpdGhvdXQgZGVwZW5kZW5jeVxuICBjb25zdCBzZWxlY3RlZE9wdGlvbnNSZWYgPSB1c2VSZWY8VE9wdGlvbltdPihbXSk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiAob3B0aW9uID8gU3RyaW5nKG9wdGlvblt2YWx1ZUZpZWxkXSkgOiAnJyksXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiAob3B0aW9uID8gU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkXSkgOiAnJyksXG4gICAgW2xhYmVsRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZmV0Y2hEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZGVib3VuY2UoXG4gICAgICAgIChcbiAgICAgICAgICBwYXlsb2FkOiBBc3luY011bHRpU2VsZWN0UGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogKHJlc3VsdHM/OiByZWFkb25seSBUT3B0aW9uW10pID0+IHZvaWRcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgcXVlcnlGbihwYXlsb2FkKS50aGVuKGMgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soYyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBjICYmXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoKGMgYXMgeyBkYXRhOiByZWFkb25seSBUT3B0aW9uW10gfSkuZGF0YSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYyBhcyB7IGRhdGE6IHJlYWRvbmx5IFRPcHRpb25bXSB9KS5kYXRhIGFzIHJlYWRvbmx5IFRPcHRpb25bXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgYyAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KChjIGFzIHsgRGF0YTogcmVhZG9ubHkgVE9wdGlvbltdIH0pLkRhdGEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKGMgYXMgeyBEYXRhOiByZWFkb25seSBUT3B0aW9uW10gfSkuRGF0YSBhcyByZWFkb25seSBUT3B0aW9uW11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgNDAwXG4gICAgICApLFxuICAgIFtxdWVyeUZuXVxuICApO1xuXG4gIC8vIFN5bmMgcmVmIHdoZW5ldmVyIHNlbGVjdGVkT3B0aW9ucyBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQgPSBzZWxlY3RlZE9wdGlvbnM7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICAvLyBFZmZlY3QgMTogU3luYyB3aXRoIGV4dGVybmFsIGZpZWxkLnZhbHVlIGNoYW5nZXMgZnJvbSByZWFjdC1ob29rLWZvcm0gKElOSVRJQUwgTE9BRCBPTkxZKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSA/IGZpZWxkLnZhbHVlIDogW107XG5cbiAgICAvLyBDaGVjayBpZiBpbml0aWFsIGxvYWQgaXMgY29tcGxldGUgYW5kIGN1cnJlbnQgZm9ybSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGxvYWRlZCBvbmVzLlxuICAgIC8vIElmIHNvLCBubyBuZWVkIHRvIHJlZmV0Y2ggZm9yIGluaXRpYWwgcG9wdWxhdGlvbi5cbiAgICBpZiAoXG4gICAgICBpbml0aWFsTG9hZENvbXBsZXRlUmVmLmN1cnJlbnQgJiZcbiAgICAgIEpTT04uc3RyaW5naWZ5KGZvcm1WYWx1ZXMpID09PSBKU09OLnN0cmluZ2lmeShsb2FkZWRWYWx1ZXNSZWYuY3VycmVudClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZm9ybSB2YWx1ZXMsIHJlc2V0IGFuZCBtYXJrIGluaXRpYWwgbG9hZCBhcyBjb21wbGV0ZS5cbiAgICBpZiAoZm9ybVZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgIGxvYWRlZFZhbHVlc1JlZi5jdXJyZW50ID0gW107XG4gICAgICBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgICBpbml0aWFsTG9hZENvbXBsZXRlUmVmLmN1cnJlbnQgPSB0cnVlOyAvLyBNYXJrIGFzIGNvbXBsZXRlIGFzIHRoZXJlJ3Mgbm90aGluZyB0byBmZXRjaFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSBwcm9jZWVkIGlmIGZvcm1WYWx1ZXMgYXJlIHByZXNlbnQgYW5kIHdlIGhhdmVuJ3QgY29tcGxldGVkIHRoZSBpbml0aWFsIGxvYWQgZm9yIHRoZXNlIHNwZWNpZmljIHZhbHVlc1xuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlLmN1cnJlbnQgPSB0cnVlO1xuICAgIC8vIFNldCBsb2FkZWRWYWx1ZXNSZWYgaW1tZWRpYXRlbHkgdG8gcHJldmVudCByZS10cmlnZ2VyaW5nIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbG9hZGVkVmFsdWVzUmVmLmN1cnJlbnQgPSBmb3JtVmFsdWVzO1xuICAgIC8vIE1hcmsgaW5pdGlhbCBsb2FkIGFzIGNvbXBsZXRlIHByb2FjdGl2ZWx5IGJlZm9yZSBmZXRjaGluZyB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzXG4gICAgaW5pdGlhbExvYWRDb21wbGV0ZVJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBudWxsLCBTZWxlY3RlZFZhbHVlOiBmb3JtVmFsdWVzIH0sIHJlc3VsdHMgPT4ge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBjb25zdCBmZXRjaGVkT3B0aW9ucyA9IHJlc3VsdHMgfHwgW107XG5cbiAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKFsuLi5mZXRjaGVkT3B0aW9uc10pO1xuICAgICAgICBzZXRPcHRpb25zKGZldGNoZWRPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICBpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbZmllbGQudmFsdWUsIGZldGNoRGF0YV0pO1xuXG4gIC8vIEVmZmVjdCAyOiBIYW5kbGUgdXNlciBzZWFyY2ggaW5wdXRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBEb24ndCBzZWFyY2ggZHVyaW5nIGluaXRpYWwgcG9wdWxhdGlvblxuICAgIGlmIChpc0luaXRpYWxQb3B1bGF0aW9uQWN0aXZlLmN1cnJlbnQgfHwgIWluaXRpYWxMb2FkQ29tcGxldGVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGlucHV0IGlzIGVtcHR5LCBqdXN0IHNob3cgdGhlIHNlbGVjdGVkIG9wdGlvbnNcbiAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgIC8vIElmIG5vIG9wdGlvbnMgYXJlIHNlbGVjdGVkLCBjbGVhciB0aGUgb3B0aW9ucyB0byBkaXNwbGF5IFwibm9PcHRpb25zVGV4dFwiXG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNldE9wdGlvbnMoW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBzaG93IHRoZSBzZWxlY3RlZCBvcHRpb25zXG4gICAgICAgIHNldE9wdGlvbnMoc2VsZWN0ZWRPcHRpb25zUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuXG4gICAgICBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGZldGNoIGlmIHRoZSBpbnB1dCB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIGlmIChpbnB1dFZhbHVlID09PSBsYXN0RmV0Y2hlZFNlYXJjaFRlcm1SZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcblxuICAgIGZldGNoRGF0YSh7IFF1ZXJ5OiBpbnB1dFZhbHVlLCBTZWxlY3RlZFZhbHVlOiBudWxsIH0sIHNlYXJjaFJlc3VsdHMgPT4ge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gc2VhcmNoUmVzdWx0cyB8fCBbXTtcbiAgICAgICAgLy8gVXNlIHJlZiB0byBnZXQgY3VycmVudCBzZWxlY3RlZCBvcHRpb25zIHdpdGhvdXQgYWRkaW5nIHRvIGRlcGVuZGVuY2llc1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbnNSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZC5tYXAob3B0ID0+IGdldE9wdGlvblZhbHVlKG9wdCkpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkID0gWy4uLmN1cnJlbnRTZWxlY3RlZF07XG5cbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbklkcy5oYXMoZ2V0T3B0aW9uVmFsdWUocmVzdWx0KSkpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRPcHRpb25zKGNvbWJpbmVkKTtcbiAgICAgICAgbGFzdEZldGNoZWRTZWFyY2hUZXJtUmVmLmN1cnJlbnQgPSBpbnB1dFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIC8vIENSSVRJQ0FMOiBSZW1vdmVkIHNlbGVjdGVkT3B0aW9ucyBmcm9tIGRlcGVuZGVuY2llcyAtIHVzZSByZWYgaW5zdGVhZFxuICB9LCBbaW5wdXRWYWx1ZSwgZmV0Y2hEYXRhLCBnZXRPcHRpb25WYWx1ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChfOiBTeW50aGV0aWNFdmVudCwgbmV3U2VsZWN0ZWRPcHRpb25zOiBUT3B0aW9uW10pID0+IHtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMobmV3U2VsZWN0ZWRPcHRpb25zKTtcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSBuZXdTZWxlY3RlZE9wdGlvbnMubWFwKGMgPT4gY1t2YWx1ZUZpZWxkXSk7XG5cbiAgICBmaWVsZC5vbkNoYW5nZShuZXdWYWx1ZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IG5ld1ZhbHVlcyk7XG4gICAgbG9hZGVkVmFsdWVzUmVmLmN1cnJlbnQgPSBuZXdWYWx1ZXMgYXMgdW5rbm93biBhcyBUT3B0aW9uW107XG4gICAgc2V0T3B0aW9ucyhuZXdTZWxlY3RlZE9wdGlvbnMpO1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIC8vIENsZWFyIGxhc3Qgc2VhcmNoIHRlcm0gd2hlbiBzZWxlY3Rpb24gY2hhbmdlc1xuICAgIGxhc3RGZXRjaGVkU2VhcmNoVGVybVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgfTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGRpc2FibGVkID8/IGZhbHNlO1xuICB9LCBbZGlzYWJsZWRdKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIG11bHRpcGxlXG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgZ2V0T3B0aW9uTGFiZWw9e2dldE9wdGlvbkxhYmVsfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbCkgPT5cbiAgICAgICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZ2V0T3B0aW9uVmFsdWUodmFsKVxuICAgICAgfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIHZhbHVlPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBmaWx0ZXJTZWxlY3RlZE9wdGlvbnNcbiAgICAgIGZpbHRlck9wdGlvbnM9e3ggPT4geH1cbiAgICAgIG5vT3B0aW9uc1RleHQ9XCJUeXBlIFNvbWV0aGluZy4uLlwiXG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBvbklucHV0Q2hhbmdlPXsoXywgbmV3SW5wdXRWYWx1ZSkgPT4gc2V0SW5wdXRWYWx1ZShuZXdJbnB1dFZhbHVlKX1cbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyd9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIElucHV0UHJvcHM9e3tcbiAgICAgICAgICAgIC4uLnBhcmFtcy5JbnB1dFByb3BzLFxuICAgICAgICAgICAgZW5kQWRvcm5tZW50OiAoXG4gICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtwYXJhbXMuSW5wdXRQcm9wcy5lbmRBZG9ybm1lbnR9XG4gICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiBpc0Rpc2FibGVkID8gJ2ZpbGxlZCcgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHJlbmRlck9wdGlvbj17KHByb3BzLCBvcHRpb24sIHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsga2V5LCAuLi5vcHRpb25Qcm9wcyB9ID1cbiAgICAgICAgICBwcm9wcyBhcyBIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiAmIHsga2V5OiBzdHJpbmcgfTtcbiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSBnZXRPcHRpb25MYWJlbChvcHRpb24pO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gbWF0Y2gob3B0aW9uTGFiZWwsIHN0YXRlLmlucHV0VmFsdWUsIHtcbiAgICAgICAgICBpbnNpZGVXb3JkczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGFyc2Uob3B0aW9uTGFiZWwsIG1hdGNoZXMpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGxpIGtleT17a2V5fSB7Li4ub3B0aW9uUHJvcHN9PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3BhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IHBhcnQuaGlnaGxpZ2h0ID8gNzAwIDogNDAwLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7cGFydC50ZXh0fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICAgIHsuLi5yZXN0fVxuICAgIC8+XG4gICk7XG59O1xuXG5jb25zdCBBc3luY1NlbGVjdE11bHRpRWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFRWYWx1ZUtleSwgVExhYmVsS2V5PiA9IE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5XG4gID4sXG4+KHtcbiAgZ3JpZFByb3BzLFxuICAuLi5wcm9wc1xufTogQXN5bmNNdWx0aVNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZSxcbiAgVFZhbHVlS2V5LFxuICBUTGFiZWxLZXksXG4gIFRPcHRpb25cbj4pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICBpZiAoZ3JpZFByb3BzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxHcmlkXG4gICAgICAgIHsuLi57IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSwgLi4uZ3JpZFByb3BzIH19XG4gICAgICA+XG4gICAgICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlS2V5LCBUTGFiZWxLZXksIFRPcHRpb24+XG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9HcmlkPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnQ8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlS2V5LCBUTGFiZWxLZXksIFRPcHRpb24+IHsuLi5wcm9wc30gLz5cbiAgKTtcbn07XG5cbkFzeW5jU2VsZWN0TXVsdGlFbGVtZW50LmRpc3BsYXlOYW1lID0gJ0FzeW5jU2VsZWN0TXVsdGknO1xuXG5leHBvcnQgeyBBc3luY1NlbGVjdE11bHRpRWxlbWVudCB9O1xuIiwgImltcG9ydCB7XG4gIENoZWNrYm94LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xMYWJlbCxcbiAgRm9ybUdyb3VwLFxuICBGb3JtSGVscGVyVGV4dCxcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmllbGRQYXRoLCBGaWVsZFZhbHVlcywgUGF0aFZhbHVlIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgeyB1c2VUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9ob29rcy91c2VUcmFuc2Zvcm0nO1xuXG5pbXBvcnQgdHlwZSB7IENoZWNrYm94RWxlbWVudFByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIENoZWNrYm94RWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPihwcm9wczogQ2hlY2tib3hFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBsYWJlbCxcbiAgICBsYWJlbFByb3BzLFxuICAgIGhlbHBlclRleHQsXG4gICAgcGFyc2VFcnJvcixcbiAgICB0cmFuc2Zvcm0sXG4gICAgZGlzYWJsZWQsXG4gICAgb25DaGFuZ2U6IGN1c3RvbU9uQ2hhbmdlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgZGlzYWJsZWQsXG4gIH0pO1xuXG4gIGlmIChmaWVsZC52YWx1ZSA9PSBudWxsIHx8IGZpZWxkLnZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgIGZpZWxkLm9uQ2hhbmdlKGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbU91dHB1dFRyYW5zZm9ybSA9IHRyYW5zZm9ybT8ub3V0cHV0O1xuXG4gIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VUcmFuc2Zvcm08VEZpZWxkVmFsdWVzLCBUTmFtZSwgYm9vbGVhbj4oe1xuICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBpbnB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8uaW5wdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybS5pbnB1dFxuICAgICAgICAgIDogdmFsdWUgPT4gISF2YWx1ZSxcbiAgICAgIG91dHB1dDpcbiAgICAgICAgdHlwZW9mIGN1c3RvbU91dHB1dFRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gKGV2ZW50T3JWYWx1ZSwgX3ZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEFkYXB0ZXI6IEV4dHJhY3QgZXZlbnQgYW5kIGNoZWNrZWQgZnJvbSB0aGUgY2hlY2tib3ggb25DaGFuZ2Ugc2lnbmF0dXJlXG4gICAgICAgICAgICAgIC8vIENoZWNrYm94RWxlbWVudCBwYXNzZXMgKGV2ZW50LCBjaGVja2VkKSwgYnV0IHVzZVRyYW5zZm9ybSBleHBlY3RzIChldmVudE9yVmFsdWUsIHZhbHVlKVxuICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50T3JWYWx1ZSBhcyBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IF92YWx1ZSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbU91dHB1dFRyYW5zZm9ybShldmVudCwgY2hlY2tlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiAoZXZlbnRPclZhbHVlLCBfdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGVmYXVsdDogZXh0cmFjdCBjaGVja2VkIHN0YXRlIGZyb20gdGhlIHNlY29uZCBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IF92YWx1ZSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWQgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICAgICAgICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGNoZWNrZWQ6IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgb25DaGFuZ2UoZXZlbnQsIGNoZWNrZWQpO1xuICAgIGlmICh0eXBlb2YgY3VzdG9tT25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1c3RvbU9uQ2hhbmdlKGV2ZW50LCBjaGVja2VkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlzcGxheUVycm9yOiBSZWFjdE5vZGUgPSBlcnJvclxuICAgID8gdHlwZW9mIHBhcnNlRXJyb3IgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcGFyc2VFcnJvcihlcnJvcilcbiAgICAgIDogZXJyb3IubWVzc2FnZVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxGb3JtQ29udHJvbCBlcnJvcj17ISFlcnJvcn0gZGlzYWJsZWQ9e2Rpc2FibGVkfT5cbiAgICAgIDxGb3JtR3JvdXAgcm93PlxuICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgIGxhYmVsPXtsYWJlbCB8fCAnJ31cbiAgICAgICAgICB7Li4ubGFiZWxQcm9wc31cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgIGNvbG9yPXtyZXN0LmNvbG9yIHx8ICdwcmltYXJ5J31cbiAgICAgICAgICAgICAgY2hlY2tlZD17dmFsdWV9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgcmVmPXtmaWVsZC5yZWZ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgeyhkaXNwbGF5RXJyb3IgfHwgaGVscGVyVGV4dCkgJiYgKFxuICAgICAgICA8Rm9ybUhlbHBlclRleHQgZXJyb3I9eyEhZXJyb3J9PlxuICAgICAgICAgIHtkaXNwbGF5RXJyb3IgfHwgaGVscGVyVGV4dH1cbiAgICAgICAgPC9Gb3JtSGVscGVyVGV4dD5cbiAgICAgICl9XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbi8qKlxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBDaGVja2JveCBjb21wb25lbnQgd2l0aCBhdXRvbWF0aWMgdmFsaWRhdGlvbiBhbmQgZ3JpZCBsYXlvdXQuXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBmdWxseSBpbnRlZ3JhdGVkIGNoZWNrYm94IGlucHV0IHRoYXQgd29ya3Mgc2VhbWxlc3NseSB3aXRoIHJlYWN0LWhvb2stZm9ybSxcbiAqIGluY2x1ZGluZyBhdXRvbWF0aWMgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIHZhbHVlIHRyYW5zZm9ybWF0aW9uLCBhbmQgb3B0aW9uYWwgR3JpZCB3cmFwcGVyIGZvciByZXNwb25zaXZlIGxheW91dHMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEZ1bGwgcmVhY3QtaG9vay1mb3JtIGludGVncmF0aW9uIHdpdGggdXNlQ29udHJvbGxlclxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheSB3aXRoIGN1c3RvbSBwYXJzaW5nIHN1cHBvcnRcbiAqIC0gVmFsdWUgdHJhbnNmb3JtYXRpb24gd2l0aCB1c2VUcmFuc2Zvcm0gaG9vayBmb3IgYm9vbGVhbiB2YWx1ZXNcbiAqIC0gQ3VzdG9taXphYmxlIGxhYmVsIGFuZCBwb3NpdGlvbmluZ1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyIHdpdGggcmVzcG9uc2l2ZSBkZXNpZ25cbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eSB3aXRoIGdlbmVyaWMgY29uc3RyYWludHNcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3VwcG9ydCB3aXRoIHByb3BlciB0aGVtaW5nXG4gKiAtIEhlbHBlciB0ZXh0IHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgY29udGV4dFxuICogLSBDdXN0b20gZXJyb3IgcGFyc2luZyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb25cbiAqIC0gU2ltcGxlIGJvb2xlYW4gdmFsdWUgaGFuZGxpbmcgd2l0aCBvcHRpb25hbCBjdXN0b20gdHJhbnNmb3Jtc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiYWNjZXB0VGVybXNcIlxuICogICBsYWJlbD1cIkkgYWdyZWUgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCB2YWxpZGF0aW9uIGFuZCBoZWxwZXIgdGV4dDpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwibmV3c2xldHRlclwiXG4gKiAgIGxhYmVsPVwiU3Vic2NyaWJlIHRvIG5ld3NsZXR0ZXJcIlxuICogICBoZWxwZXJUZXh0PVwiWW91IGNhbiB1bnN1YnNjcmliZSBhdCBhbnkgdGltZVwiXG4gKiAgIHJ1bGVzPXt7IHJlcXVpcmVkOiAnUGxlYXNlIGFjY2VwdCB0byBjb250aW51ZScgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIGdyaWQgbGF5b3V0IGFuZCBzdHlsaW5nOlxuICogYGBgdHN4XG4gKiA8Q2hlY2tib3hFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJpc1B1YmxpY1wiXG4gKiAgIGxhYmVsPVwiTWFrZSB0aGlzIHB1YmxpY1wiXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDYgfSB9fVxuICogICBsYWJlbFByb3BzPXt7IHN4OiB7IGZvbnRXZWlnaHQ6ICdib2xkJyB9IH19XG4gKiAgIHN4PXt7IGNvbG9yOiAncHJpbWFyeS5tYWluJyB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIHZhbHVlIHRyYW5zZm9ybWF0aW9uIChzdHJpbmcgdG8gYm9vbGVhbik6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInN0YXR1c1wiXG4gKiAgIGxhYmVsPVwiQWN0aXZlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6ICh2YWx1ZSkgPT4gdmFsdWUgPT09ICdhY3RpdmUnLFxuICogICAgIG91dHB1dDogKGNoZWNrZWQpID0+IGNoZWNrZWQgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSdcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogU2ltcGxlIGJvb2xlYW4gZmllbGQ6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cImlzRW5hYmxlZFwiXG4gKiAgIGxhYmVsPVwiRW5hYmxlIGZlYXR1cmVcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBDdXN0b20gZXJyb3IgcGFyc2luZyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb246XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInRlcm1zXCJcbiAqICAgbGFiZWw9XCJBY2NlcHQgVGVybXNcIlxuICogICBwYXJzZUVycm9yPXsoZXJyb3IpID0+IHQoYHZhbGlkYXRpb24uJHtlcnJvci50eXBlfWAsIHsgZmllbGQ6ICdUZXJtcycgfSl9XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBDaGVja2JveEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IENoZWNrYm94RWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudDxURmllbGRWYWx1ZXMsIFROYW1lPiB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuZXhwb3J0IHsgQ2hlY2tib3hFbGVtZW50IH07XG5cbmV4cG9ydCB0eXBlIHsgQ2hlY2tib3hFbGVtZW50UHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbiIsICJpbXBvcnQgdHlwZSB7XG4gIENoZWNrYm94UHJvcHMsXG4gIEZvcm1Db250cm9sTGFiZWxQcm9wcyxcbiAgRm9ybUxhYmVsUHJvcHMsXG4gIEdyaWRQcm9wcyxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEZvcm1MYWJlbCxcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBDaGVja2JveEdyb3VwIGNvbXBvbmVudFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB2YWx1ZSBhcnJheSB0eXBlXG4gKlxuICogQHB1YmxpY1xuICovXG5cbi8vIFR5cGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBhcyByYWRpbyBidXR0b24gdmFsdWVzXG50eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuLy8gQ29uc3RyYWludCB0byBlbnN1cmUgb3B0aW9uIG9iamVjdHMgaGF2ZSB0aGUgcmVxdWlyZWQga2V5c1xudHlwZSBPcHRpb25PYmplY3Q8XG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0gUmVjb3JkPFRWYWx1ZUtleSwgUHJpbWl0aXZlVmFsdWU+ICZcbiAgUmVjb3JkPFRMYWJlbEtleSwgc3RyaW5nPiAmXG4gIFBhcnRpYWw8UmVjb3JkPFREaXNhYmxlZEtleSwgYm9vbGVhbj4+O1xuXG5leHBvcnQgdHlwZSBDaGVja2JveEdyb3VwUHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPiA9IE9taXQ8Q2hlY2tib3hQcm9wcywgJ25hbWUnPiAmIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqL1xuICBuYW1lOiBUTmFtZTtcblxuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBpbnN0YW5jZSBmcm9tIHJlYWN0LWhvb2stZm9ybVxuICAgKi9cbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcblxuICAvKipcbiAgICogTGFiZWwgZm9yIHRoZSBjaGVja2JveCBncm91cFxuICAgKi9cbiAgbGFiZWw/OiBGb3JtQ29udHJvbExhYmVsUHJvcHNbJ2xhYmVsJ107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvcHMgZm9yIEZvcm1Db250cm9sTGFiZWxcbiAgICovXG4gIGxhYmVsUHJvcHM/OiBPbWl0PEZvcm1Db250cm9sTGFiZWxQcm9wcywgJ2xhYmVsJyB8ICdjb250cm9sJz47XG5cbiAgLyoqXG4gICAqIEdyaWQgbGF5b3V0IHByb3BzIGZvciB0aGUgd3JhcHBlclxuICAgKiBAZGVmYXVsdFZhbHVlIHsgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IH1cbiAgICovXG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcblxuICBvcHRpb25zOiBUT3B0aW9uW107XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZm9ybUxhYmVsUHJvcHM/OiBPbWl0PEZvcm1MYWJlbFByb3BzLCAncmVxdWlyZWQnIHwgJ2Vycm9yJz47XG5cbiAgbGFiZWxLZXk/OiBUTGFiZWxLZXk7XG4gIHZhbHVlS2V5PzogVFZhbHVlS2V5O1xuICBkaXNhYmxlZEtleT86IFREaXNhYmxlZEtleTtcbn07XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIENoZWNrYm94R3JvdXA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPihcbiAgcHJvcHM6IENoZWNrYm94R3JvdXBQcm9wczxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVE9wdGlvbixcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+XG4pIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBsYWJlbCxcbiAgICByZXF1aXJlZCxcbiAgICBmb3JtTGFiZWxQcm9wcyxcbiAgICBsYWJlbFByb3BzLFxuICAgIGxhYmVsS2V5ID0gJ0xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVLZXkgPSAnVmFsdWUnIGFzIFRWYWx1ZUtleSxcbiAgICBvcHRpb25zLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgZGlzYWJsZWQ6IHJlc3QuZGlzYWJsZWQsXG4gIH0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkVmFsdWVzQXNTdHJpbmcgPSAoXG4gICAgQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgPyBmaWVsZC52YWx1ZSA6IFtdXG4gICkubWFwKFN0cmluZyk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZFZhbHVlU3RyaW5nID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG5cbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkVmFsdWVzU3RyaW5nID0gaXNDaGVja2VkXG4gICAgICAgID8gWy4uLnNlbGVjdGVkVmFsdWVzQXNTdHJpbmcsIGNoYW5nZWRWYWx1ZVN0cmluZ11cbiAgICAgICAgOiBzZWxlY3RlZFZhbHVlc0FzU3RyaW5nLmZpbHRlcih2ID0+IHYgIT09IGNoYW5nZWRWYWx1ZVN0cmluZyk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnNBcmVOdW1lcmljID1cbiAgICAgICAgb3B0aW9ucy5sZW5ndGggPiAwICYmIHR5cGVvZiBvcHRpb25zWzBdW3ZhbHVlS2V5XSA9PT0gJ251bWJlcic7XG5cbiAgICAgIGlmIChvcHRpb25zQXJlTnVtZXJpYykge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXNBc051bWJlcnMgPSBuZXdTZWxlY3RlZFZhbHVlc1N0cmluZ1xuICAgICAgICAgIC5tYXAodiA9PiBwYXJzZUludCh2LCAxMCkpXG4gICAgICAgICAgLmZpbHRlcih2ID0+ICFpc05hTih2KSk7XG5cbiAgICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWVzQXNOdW1iZXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1NlbGVjdGVkVmFsdWVzU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmaWVsZCwgb3B0aW9ucywgdmFsdWVLZXksIHNlbGVjdGVkVmFsdWVzQXNTdHJpbmddXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybUNvbnRyb2wgZXJyb3I9eyEhZXJyb3J9PlxuICAgICAge2xhYmVsICYmIChcbiAgICAgICAgPEZvcm1MYWJlbCB7Li4uZm9ybUxhYmVsUHJvcHN9IHJlcXVpcmVkPXtyZXF1aXJlZH0gZXJyb3I9eyEhZXJyb3J9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9Gb3JtTGFiZWw+XG4gICAgICApfVxuICAgICAgPEZvcm1Hcm91cCByb3c+XG4gICAgICAgIHtvcHRpb25zICYmXG4gICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IChcbiAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgIGtleT17YCR7b3B0aW9uW3ZhbHVlS2V5XX1gfVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgICAgey4uLmxhYmVsUHJvcHN9XG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17cmVzdC5jb2xvciB8fCAncHJpbWFyeSd9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17b3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkVmFsdWVzQXNTdHJpbmcuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZyhvcHRpb25bdmFsdWVLZXldKVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAge2Vycm9yICYmIChcbiAgICAgICAgPEZvcm1IZWxwZXJUZXh0IGVycm9yPXshIWVycm9yfT57ZXJyb3IubWVzc2FnZX08L0Zvcm1IZWxwZXJUZXh0PlxuICAgICAgKX1cbiAgICA8L0Zvcm1Db250cm9sPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIENoZWNrYm94R3JvdXAgY29tcG9uZW50IGZvciBtdWx0aXBsZSBjaGVja2JveCBzZWxlY3Rpb24uXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBncm91cCBvZiBjaGVja2JveGVzIHRoYXQgd29yayBzZWFtbGVzc2x5IHdpdGggcmVhY3QtaG9vay1mb3JtLFxuICogbWFuYWdpbmcgYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgdmFsdWVzIHdpdGggYXV0b21hdGljIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBNdWx0aXBsZSBjaGVja2JveCBzZWxlY3Rpb24gd2l0aCBhcnJheSB2YWx1ZSBtYW5hZ2VtZW50XG4gKiAtIEF1dG9tYXRpYyBlcnJvciBkaXNwbGF5XG4gKiAtIEdyaWQgbGF5b3V0IHdyYXBwZXJcbiAqIC0gVHlwZVNjcmlwdCB0eXBlIHNhZmV0eVxuICogLSBEaXNhYmxlZCBzdGF0ZSBzdXBwb3J0XG4gKiAtIE5hTiB2YWxpZGF0aW9uIGZvciBudW1lcmljIHZhbHVlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPENoZWNrYm94R3JvdXBcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInNlbGVjdGVkQ2F0ZWdvcmllc1wiXG4gKiAgIG9wdGlvbnM9e1tcbiAqICAgICB7IFZhbHVlOiAxLCBMYWJlbDogJ0NhdGVnb3J5IDEnIH0sXG4gKiAgICAgeyBWYWx1ZTogMiwgTGFiZWw6ICdDYXRlZ29yeSAyJyB9LFxuICogICAgIHsgVmFsdWU6IDMsIExhYmVsOiAnQ2F0ZWdvcnkgMycgfSxcbiAqICAgXX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gZ3JpZCBsYXlvdXQ6XG4gKiBgYGB0c3hcbiAqIDxDaGVja2JveEdyb3VwXG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJwZXJtaXNzaW9uc1wiXG4gKiAgIG9wdGlvbnM9e3Blcm1pc3Npb25PcHRpb25zfVxuICogICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgZGlzYWJsZWQ9eyFoYXNFZGl0UGVybWlzc2lvbn1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdmFsdWUgYXJyYXkgdHlwZVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wc1xuICogQHJldHVybnMgUmVhY3QgZWxlbWVudCB3aXRoIG9wdGlvbmFsIEdyaWQgd3JhcHBlclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgQ2hlY2tib3hHcm91cEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnVmFsdWUnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnTGFiZWwnLFxuICBURGlzYWJsZWRLZXkgZXh0ZW5kcyBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogQ2hlY2tib3hHcm91cFByb3BzPFxuICBURmllbGRWYWx1ZXMsXG4gIFROYW1lLFxuICBUT3B0aW9uLFxuICBUVmFsdWVLZXksXG4gIFRMYWJlbEtleSxcbiAgVERpc2FibGVkS2V5XG4+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuQ2hlY2tib3hHcm91cEVsZW1lbnQuZGlzcGxheU5hbWUgPSAnQ2hlY2tib3hHcm91cCc7XG5cbmV4cG9ydCB7IENoZWNrYm94R3JvdXBFbGVtZW50IH07XG4iLCAiaW1wb3J0IHsgR3JpZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFBpY2tlclZhbGlkRGF0ZSxcbn0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnNcIjtcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZpZWxkVmFsdWVzLFxuICBGaWVsZFBhdGgsXG59IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcblxuaW1wb3J0IHsgRGF0ZVBpY2tlckVsZW1lbnRDb3JlIH0gZnJvbSBcIi4vRGF0ZVBpY2tlckVsZW1lbnRDb3JlXCI7XG5pbXBvcnQgdHlwZSB7IERhdGVQaWNrZXJFbGVtZW50UHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgZnVsbHktZmVhdHVyZWQsIHR5cGUtc2FmZSBEYXRlUGlja2VyRWxlbWVudCBjb21wb25lbnQgZm9yIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBjb21iaW5lcyB0aGUgY29yZSBkYXRlIHBpY2tlciBmdW5jdGlvbmFsaXR5IHdpdGggb3B0aW9uYWwgR3JpZCBsYXlvdXQgd3JhcHBpbmcsXG4gKiBwcm92aWRpbmcgYSBjb21wbGV0ZSBzb2x1dGlvbiBmb3IgZm9ybS1iYXNlZCBkYXRlIHNlbGVjdGlvbiB3aXRoIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBzdXBwb3J0LlxuICpcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gXHVEODNDXHVERkFGICoqVHlwZSBTYWZldHkqKjogRnVsbCBUeXBlU2NyaXB0IGluZmVyZW5jZSBmb3IgZm9ybSBmaWVsZCB0eXBlcyBhbmQgZGF0ZSB2YWx1ZXNcbiAqIC0gXHVEODNEXHVERDI3ICoqUmVhY3QgSG9vayBGb3JtIEludGVncmF0aW9uKio6IFNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggcmVhY3QtaG9vay1mb3JtIHZhbGlkYXRpb25cbiAqIC0gXHVEODNDXHVERkE4ICoqVGhlbWluZyoqOiBBdXRvbWF0aWMgYWRhcHRhdGlvbiB0byBNVUkgdGhlbWUgd2l0aCBjdXN0b21pemFibGUgc3R5bGVzXG4gKiAtIFx1MjY3RiAqKkFjY2Vzc2liaWxpdHkqKjogV0NBRy1jb21wbGlhbnQgd2l0aCBwcm9wZXIgQVJJQSBhdHRyaWJ1dGVzIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gKiAtIFx1RDgzRFx1REU4MCAqKlBlcmZvcm1hbmNlKio6IE9wdGltaXplZCB3aXRoIG1lbW9pemF0aW9uIGFuZCBlZmZpY2llbnQgcmUtcmVuZGVyaW5nXG4gKiAtIFx1RDgzRFx1RENGMSAqKlJlc3BvbnNpdmUqKjogQnVpbHQtaW4gR3JpZCBsYXlvdXQgd2l0aCBjb25maWd1cmFibGUgYnJlYWtwb2ludHNcbiAqIC0gXHVEODNEXHVERUUxXHVGRTBGICoqVmFsaWRhdGlvbioqOiBDb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXNcbiAqIC0gXHVEODNEXHVERDA0ICoqVHJhbnNmb3JtYXRpb24qKjogRmxleGlibGUgdmFsdWUgdHJhbnNmb3JtYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBwaWNrZXIgZm9ybWF0c1xuICogLSBcdUQ4M0RcdURDREEgKipEZXZlbG9wZXIgRXhwZXJpZW5jZSoqOiBSaWNoIFR5cGVTY3JpcHQgSW50ZWxsaVNlbnNlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBhdXRvbWF0aWMgR3JpZCB3cmFwcGVyOlxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbiAqIGltcG9ydCB7IERhdGVQaWNrZXJFbGVtZW50IH0gZnJvbSAnQGdud2Vic29mdC91aS93cmFwcGVycyc7XG4gKlxuICogZnVuY3Rpb24gTXlGb3JtKCkge1xuICogICBjb25zdCB7IGNvbnRyb2wgfSA9IHVzZUZvcm08eyBiaXJ0aERhdGU6IHN0cmluZyB9PigpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgIG5hbWU9XCJiaXJ0aERhdGVcIlxuICogICAgICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgICAgIGxhYmVsPVwiRGF0ZSBvZiBCaXJ0aFwiXG4gKiAgICAgICByZXF1aXJlZFxuICogICAgIC8+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQWR2YW5jZWQgdXNhZ2Ugd2l0aCBjdXN0b20gdHJhbnNmb3JtYXRpb24gYW5kIHZhbGlkYXRpb246XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFkdmFuY2VkRm9ybSgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPHsgc3RhcnREYXRlOiBEYXRlIH0+KCk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxEYXRlUGlja2VyRWxlbWVudFxuICogICAgICAgbmFtZT1cInN0YXJ0RGF0ZVwiXG4gKiAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgbGFiZWw9XCJQcm9qZWN0IFN0YXJ0IERhdGVcIlxuICogICAgICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgICAgIGlucHV0OiAoZGF0ZVN0cmluZykgPT4gZGF0ZVN0cmluZyA/IG5ldyBEYXRlKGRhdGVTdHJpbmcpIDogbnVsbCxcbiAqICAgICAgICAgb3V0cHV0OiAoZGF0ZSkgPT4gZGF0ZSA/IGRhdGUudG9JU09TdHJpbmcoKSA6IG51bGxcbiAqICAgICAgIH19XG4gKiAgICAgICB2YWxpZGF0aW9uPXt7XG4gKiAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXG4gKiAgICAgICAgIG1heERhdGU6IGFkZFllYXJzKG5ldyBEYXRlKCksIDIpLFxuICogICAgICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gKiAgICAgICAgICAgbWluRGF0ZTogJ1N0YXJ0IGRhdGUgbXVzdCBiZSB0b2RheSBvciBsYXRlcicsXG4gKiAgICAgICAgICAgbWF4RGF0ZTogJ1N0YXJ0IGRhdGUgY2Fubm90IGJlIG1vcmUgdGhhbiAyIHllYXJzIGluIHRoZSBmdXR1cmUnXG4gKiAgICAgICAgIH1cbiAqICAgICAgIH19XG4gKiAgICAgICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgICAgIHN4PXt7XG4gKiAgICAgICAgICcmIC5NdWlJbnB1dExhYmVsLXJvb3QnOiB7XG4gKiAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnXG4gKiAgICAgICAgIH1cbiAqICAgICAgIH19XG4gKiAgICAgLz5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRob3V0IEdyaWQgd3JhcHBlciBmb3IgY3VzdG9tIGxheW91dHM6XG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEN1c3RvbUxheW91dCgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtPHsgZXZlbnREYXRlOiBzdHJpbmcgfT4oKTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPEJveCBkaXNwbGF5PVwiZmxleFwiIGdhcD17Mn0+XG4gKiAgICAgICA8RGF0ZVBpY2tlckVsZW1lbnRcbiAqICAgICAgICAgbmFtZT1cImV2ZW50RGF0ZVwiXG4gKiAgICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgICAgICAgIGxhYmVsPVwiRXZlbnQgRGF0ZVwiXG4gKiAgICAgICAgIGdyaWRQcm9wcz17ZmFsc2V9IC8vIERpc2FibGVzIEdyaWQgd3JhcHBlclxuICogICAgICAgLz5cbiAqICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiPlN1Ym1pdDwvQnV0dG9uPlxuICogICAgIDwvQm94PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggbG9hZGluZyBzdGF0ZSBhbmQgY3VzdG9tIGVycm9yIGhhbmRsaW5nOlxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBMb2FkaW5nRm9ybSgpIHtcbiAqICAgY29uc3QgeyBjb250cm9sIH0gPSB1c2VGb3JtKCk7XG4gKiAgIGNvbnN0IFtpc1ZhbGlkYXRpbmcsIHNldElzVmFsaWRhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxEYXRlUGlja2VyRWxlbWVudFxuICogICAgICAgbmFtZT1cImFwcG9pbnRtZW50RGF0ZVwiXG4gKiAgICAgICBjb250cm9sPXtjb250cm9sfVxuICogICAgICAgbGFiZWw9XCJBcHBvaW50bWVudCBEYXRlXCJcbiAqICAgICAgIGxvYWRpbmc9e2lzVmFsaWRhdGluZ31cbiAqICAgICAgIExvYWRpbmdDb21wb25lbnQ9eygpID0+IDxDaXJjdWxhclByb2dyZXNzIHNpemU9ezIwfSAvPn1cbiAqICAgICAgIHBhcnNlRXJyb3I9eyhlcnJvcikgPT4ge1xuICogICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvcj8udHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAqICAgICAgICAgICByZXR1cm4gJ1RoaXMgZGF0ZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIGFwcG9pbnRtZW50JztcbiAqICAgICAgICAgfVxuICogICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnUGxlYXNlIHNlbGVjdCBhIHZhbGlkIGRhdGUnO1xuICogICAgICAgfX1cbiAqICAgICAvPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlIChpbmZlcnJlZCBmcm9tIGNvbnRyb2wpXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlIChpbmZlcnJlZCBmcm9tIG5hbWUgcHJvcClcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZSAoaW5mZXJyZWQgZnJvbSB0cmFuc2Zvcm0gZnVuY3Rpb25zKVxuICogQHRlbXBsYXRlIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmUgLSBXaGV0aGVyIGFjY2Vzc2libGUgZmllbGQgRE9NIHN0cnVjdHVyZSBpcyBlbmFibGVkXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIHdpdGggZnVsbCBUeXBlU2NyaXB0IGluZmVyZW5jZVxuICogQHBhcmFtIHJlZiAtIEZvcndhcmQgcmVmIGZvciB0aGUgcm9vdCBlbGVtZW50IChHcmlkIG9yIERhdGVQaWNrZXIgY29udGFpbmVyKVxuICogQHJldHVybnMgUmVuZGVyZWQgRGF0ZVBpY2tlckVsZW1lbnQgY29tcG9uZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKi9cbmNvbnN0IERhdGVQaWNrZXJFbGVtZW50ID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQsXG4gIERhdGVQaWNrZXJFbGVtZW50UHJvcHM8YW55LCBhbnksIGFueSwgYW55PlxuPig8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlIGV4dGVuZHMgUGlja2VyVmFsaWREYXRlID0gUGlja2VyVmFsaWREYXRlLFxuICBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuPihcbiAgcHJvcHM6IERhdGVQaWNrZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlLCBURW5hYmxlQWNjZXNzaWJsZUZpZWxkRE9NU3RydWN0dXJlPixcbiAgcmVmOiBSZWFjdC5SZWY8SFRNTERpdkVsZW1lbnQ+XG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGdyaWRQcm9wcyA9IHsgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IH0sXG4gICAgLi4uY29yZVByb3BzXG4gIH0gPSBwcm9wcztcblxuICAvLyBJZiBncmlkUHJvcHMgaXMgZXhwbGljaXRseSBmYWxzZSwgcmVuZGVyIHdpdGhvdXQgR3JpZCB3cmFwcGVyXG4gIGlmIChncmlkUHJvcHMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEYXRlUGlja2VyRWxlbWVudENvcmVcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHsuLi5jb3JlUHJvcHN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICAvLyBSZW5kZXIgd2l0aCBHcmlkIHdyYXBwZXIgZm9yIHJlc3BvbnNpdmUgbGF5b3V0XG4gIHJldHVybiAoXG4gICAgPEdyaWRcbiAgICAgIHJlZj17cmVmfVxuICAgICAgey4uLmdyaWRQcm9wc31cbiAgICA+XG4gICAgICA8RGF0ZVBpY2tlckVsZW1lbnRDb3JlXG4gICAgICAgIHsuLi5jb3JlUHJvcHN9XG4gICAgICAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn0pO1xuXG4vLyBTZXQgZGlzcGxheSBuYW1lIGZvciBSZWFjdCBEZXZlbG9wZXIgVG9vbHNcbkRhdGVQaWNrZXJFbGVtZW50LmRpc3BsYXlOYW1lID0gXCJEYXRlUGlja2VyRWxlbWVudFwiO1xuXG5leHBvcnQgeyBEYXRlUGlja2VyRWxlbWVudCB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlUGlja2VyRWxlbWVudDtcbiIsICJpbXBvcnQgeyB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycyc7XG5pbXBvcnQgdHlwZSB7XG4gIERhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIFBpY2tlckNoYW5nZUhhbmRsZXJDb250ZXh0LFxuICBQaWNrZXJWYWxpZERhdGUsXG59IGZyb20gJ0BtdWkveC1kYXRlLXBpY2tlcnMnO1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgdHlwZSB7IEZpZWxkVmFsdWVzLCBGaWVsZFBhdGggfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQge1xuICB1c2VEYXRlUGlja2VyVmFsdWUsXG4gIHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uLFxuICB1c2VEYXRlUGlja2VyU3R5bGVzLFxufSBmcm9tICcuL2hvb2tzJztcbmltcG9ydCB0eXBlIHsgRGF0ZVBpY2tlckVsZW1lbnRDb3JlUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgY29yZSBEYXRlUGlja2VyRWxlbWVudCBjb21wb25lbnQgd2l0aG91dCBHcmlkIHdyYXBwZXIuXG4gKlxuICogVGhpcyBpcyBhIGxpZ2h0d2VpZ2h0LCBwZXJmb3JtYW50IGRhdGUgcGlja2VyIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgc2VhbWxlc3NseVxuICogd2l0aCByZWFjdC1ob29rLWZvcm0gd2hpbGUgcHJvdmlkaW5nIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBzdXBwb3J0IGFuZFxuICogYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCBUeXBlU2NyaXB0IGluZmVyZW5jZSBmb3IgZm9ybSBmaWVsZCB0eXBlc1xuICogLSBBdXRvbWF0aWMgdmFsdWUgdHJhbnNmb3JtYXRpb24gYmV0d2VlbiBmb3JtIGFuZCBwaWNrZXIgZm9ybWF0c1xuICogLSBDb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXNcbiAqIC0gVGhlbWUtYXdhcmUgc3R5bGluZyB3aXRoIGFjY2Vzc2liaWxpdHkgc3VwcG9ydFxuICogLSBQZXJmb3JtYW5jZSBvcHRpbWl6ZWQgd2l0aCBwcm9wZXIgbWVtb2l6YXRpb25cbiAqIC0gRm9yd2FyZCByZWYgc3VwcG9ydCBmb3IgYWR2YW5jZWQgdXNlIGNhc2VzXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlOlxuICogYGBgdHN4XG4gKiA8RGF0ZVBpY2tlckVsZW1lbnRDb3JlXG4gKiAgIG5hbWU9XCJiaXJ0aERhdGVcIlxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBsYWJlbD1cIkRhdGUgb2YgQmlydGhcIlxuICogICByZXF1aXJlZFxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbjpcbiAqIGBgYHRzeFxuICogPERhdGVQaWNrZXJFbGVtZW50Q29yZVxuICogICBuYW1lPVwic3RhcnREYXRlXCJcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbGFiZWw9XCJTdGFydCBEYXRlXCJcbiAqICAgdHJhbnNmb3JtPXt7XG4gKiAgICAgaW5wdXQ6IChkYXRlU3RyaW5nKSA9PiBkYXRlU3RyaW5nID8gbmV3IERhdGUoZGF0ZVN0cmluZykgOiBudWxsLFxuICogICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBudWxsXG4gKiAgIH19XG4gKiAgIHZhbGlkYXRpb249e3tcbiAqICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxuICogICAgIGVycm9yTWVzc2FnZXM6IHtcbiAqICAgICAgIG1pbkRhdGU6ICdTdGFydCBkYXRlIG11c3QgYmUgdG9kYXkgb3IgbGF0ZXInXG4gKiAgICAgfVxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKiBAdGVtcGxhdGUgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSAtIFdoZXRoZXIgYWNjZXNzaWJsZSBmaWVsZCBET00gc3RydWN0dXJlIGlzIGVuYWJsZWRcbiAqL1xuY29uc3QgRGF0ZVBpY2tlckVsZW1lbnRDb3JlID0gZm9yd2FyZFJlZjxcbiAgSFRNTERpdkVsZW1lbnQsXG4gIERhdGVQaWNrZXJFbGVtZW50Q29yZVByb3BzPGFueSwgYW55LCBhbnksIGFueT5cbj4oXG4gIDxcbiAgICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICAgIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4gICAgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbiAgPihcbiAgICBwcm9wczogRGF0ZVBpY2tlckVsZW1lbnRDb3JlUHJvcHM8XG4gICAgICBURmllbGRWYWx1ZXMsXG4gICAgICBUTmFtZSxcbiAgICAgIFRWYWx1ZSxcbiAgICAgIFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmVcbiAgICA+LFxuICAgIHJlZjogUmVhY3QuUmVmPEhUTUxEaXZFbGVtZW50PlxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIGNvbnRyb2wsXG4gICAgICBwYXJzZUVycm9yLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdmFsaWRhdGlvbixcbiAgICAgIGxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICB0ZXh0UmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgIGhlbHBlclRleHQsXG4gICAgICBpbnB1dFByb3BzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIGRhdGVQaWNrZXJQcm9wcyA9IHt9LFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCcsXG4gICAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gRXh0cmFjdCBEYXRlUGlja2VyLXNwZWNpZmljIHByb3BzXG4gICAgY29uc3Qge1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBpbnB1dFJlZjogZXh0ZXJuYWxJbnB1dFJlZixcbiAgICAgIG9uQ2xvc2UsXG4gICAgICAuLi5yZXN0RGF0ZVBpY2tlclByb3BzXG4gICAgfSA9IGRhdGVQaWNrZXJQcm9wcztcblxuICAgIC8vIFNldCB1cCBmb3JtIGNvbnRyb2xsZXJcbiAgICBjb25zdCB7IGZpZWxkLCBmaWVsZFN0YXRlIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICAgIG5hbWUsXG4gICAgICBjb250cm9sLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsIGFzIGFueSwgLy8gTGV0IHJlYWN0LWhvb2stZm9ybSBoYW5kbGUgdGhlIGRlZmF1bHQgdmFsdWUgdHlwaW5nXG4gICAgfSk7XG5cbiAgICAvLyBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBob29rXG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2U6IG9uVmFsdWVDaGFuZ2UgfSA9IHVzZURhdGVQaWNrZXJWYWx1ZSh7XG4gICAgICBmaWVsZCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRpb24gaG9va1xuICAgIGNvbnN0IHsgaGFzRXJyb3IsIGVycm9yTWVzc2FnZSwgaW52YWxpZCB9ID0gdXNlRGF0ZVBpY2tlclZhbGlkYXRpb24oe1xuICAgICAgZmllbGRTdGF0ZSxcbiAgICAgIHZhbGlkYXRpb24sXG4gICAgICBwYXJzZUVycm9yLFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG5cbiAgICAvLyBTdHlsaW5nIGhvb2tcbiAgICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gdXNlRGF0ZVBpY2tlclN0eWxlcyh7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGhhc0Vycm9yLFxuICAgICAgbG9hZGluZyxcbiAgICAgIHRleHRSZWFkT25seSxcbiAgICB9KTtcblxuICAgIC8vIE1lcmdlIGlucHV0IHJlZnNcbiAgICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBleHRlcm5hbElucHV0UmVmKTtcblxuICAgIC8vIE1lbW9pemVkIGNoYW5nZSBoYW5kbGVyIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKFxuICAgICAgICBuZXdWYWx1ZTogVFZhbHVlIHwgbnVsbCxcbiAgICAgICAgY29udGV4dDogUGlja2VyQ2hhbmdlSGFuZGxlckNvbnRleHQ8RGF0ZVZhbGlkYXRpb25FcnJvcj5cbiAgICAgICkgPT4ge1xuICAgICAgICBvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICBbb25WYWx1ZUNoYW5nZV1cbiAgICApO1xuXG4gICAgLy8gTWVtb2l6ZWQgY2xvc2UgaGFuZGxlclxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoLi4uYXJnczogUGFyYW1ldGVyczxOb25OdWxsYWJsZTx0eXBlb2Ygb25DbG9zZT4+KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZm9ybSBmaWVsZCBibHVyIGZvciB2YWxpZGF0aW9uXG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuXG4gICAgICAgIC8vIENhbGwgZXh0ZXJuYWwgb25DbG9zZSBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICAgIG9uQ2xvc2UoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgICBbZmllbGQub25CbHVyLCBvbkNsb3NlXVxuICAgICk7XG5cbiAgICAvLyBNZW1vaXplZCBibHVyIGhhbmRsZXIgZm9yIHRleHQgZmllbGRcbiAgICBjb25zdCBoYW5kbGVUZXh0RmllbGRCbHVyID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZXZlbnQ6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG5cbiAgICAgICAgLy8gQ2FsbCBleHRlcm5hbCBvbkJsdXIgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFByb3BzLm9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGlucHV0UHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICAgIFtmaWVsZC5vbkJsdXIsIGlucHV0UHJvcHMub25CbHVyXVxuICAgICk7XG5cbiAgICAvLyBNZW1vaXplZCBzbG90IHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICAgIGNvbnN0IG1lbW9pemVkU2xvdFByb3BzID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIC4uLnNsb3RQcm9wcyxcbiAgICAgICAgYWN0aW9uQmFyOiB7XG4gICAgICAgICAgYWN0aW9uczogWydjbGVhcicsICd0b2RheScsICdjYW5jZWwnLCAnYWNjZXB0J10gYXMgQXJyYXk8XG4gICAgICAgICAgICAnYWNjZXB0JyB8ICdjYW5jZWwnIHwgJ2NsZWFyJyB8ICduZXh0JyB8ICduZXh0T3JBY2NlcHQnIHwgJ3RvZGF5J1xuICAgICAgICAgID4sXG4gICAgICAgICAgLi4uc2xvdFByb3BzLmFjdGlvbkJhcixcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgICAgICAgdmFyaWFudCxcbiAgICAgICAgICBvbkJsdXI6IGhhbmRsZVRleHRGaWVsZEJsdXIsXG4gICAgICAgICAgZXJyb3I6IGhhc0Vycm9yLFxuICAgICAgICAgIGhlbHBlclRleHQ6IGhhc0Vycm9yID8gZXJyb3JNZXNzYWdlIDogaGVscGVyVGV4dCxcbiAgICAgICAgICBpbnB1dFByb3BzOiB7XG4gICAgICAgICAgICByZWFkT25seTogdGV4dFJlYWRPbmx5LFxuICAgICAgICAgICAgJ2FyaWEtaW52YWxpZCc6IGludmFsaWQsXG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGhhc0Vycm9yID8gYCR7bmFtZX0tZXJyb3JgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wcy5pbnB1dFByb3BzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gQWRkIGxvYWRpbmcgaW5kaWNhdG9yIGlmIHByb3ZpZGVkXG4gICAgICAgICAgLi4uKGxvYWRpbmcgJiZcbiAgICAgICAgICAgIExvYWRpbmdDb21wb25lbnQgJiYge1xuICAgICAgICAgICAgICBJbnB1dFByb3BzOiB7XG4gICAgICAgICAgICAgICAgZW5kQWRvcm5tZW50OiA8TG9hZGluZ0NvbXBvbmVudCAvPixcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLklucHV0UHJvcHMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi5zbG90UHJvcHMudGV4dEZpZWxkLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBbXG4gICAgICAgIHNsb3RQcm9wcyxcbiAgICAgICAgaW5wdXRQcm9wcyxcbiAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICBoYW5kbGVUZXh0RmllbGRCbHVyLFxuICAgICAgICBoYXNFcnJvcixcbiAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICBoZWxwZXJUZXh0LFxuICAgICAgICB0ZXh0UmVhZE9ubHksXG4gICAgICAgIGludmFsaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgICBdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAvLyBTcHJlYWQgcmVzdCBwcm9wcyBmaXJzdCBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuXG4gICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgIHsuLi5yZXN0RGF0ZVBpY2tlclByb3BzfVxuICAgICAgICAvLyBDb3JlIHByb3BzXG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlfVxuICAgICAgICBpbnB1dFJlZj17aGFuZGxlSW5wdXRSZWZ9XG4gICAgICAgIC8vIFVJIHByb3BzXG4gICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgLy8gU2xvdCBwcm9wc1xuICAgICAgICBzbG90UHJvcHM9e21lbW9pemVkU2xvdFByb3BzfVxuICAgICAgICAvLyBBY2Nlc3NpYmlsaXR5IHByb3BzXG4gICAgICAgIGFyaWEtaW52YWxpZD17aW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17aGFzRXJyb3IgPyBgJHtuYW1lfS1lcnJvcmAgOiB1bmRlZmluZWR9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbik7XG5cbi8vIFNldCBkaXNwbGF5IG5hbWUgZm9yIGRlYnVnZ2luZ1xuRGF0ZVBpY2tlckVsZW1lbnRDb3JlLmRpc3BsYXlOYW1lID0gJ0RhdGVQaWNrZXJFbGVtZW50Q29yZSc7XG5cbmV4cG9ydCB7IERhdGVQaWNrZXJFbGVtZW50Q29yZSB9O1xuXG5leHBvcnQgZGVmYXVsdCBEYXRlUGlja2VyRWxlbWVudENvcmU7XG4iLCAiaW1wb3J0IHR5cGUge1xuICBQaWNrZXJWYWxpZERhdGUsXG4gIERhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIFBpY2tlckNoYW5nZUhhbmRsZXJDb250ZXh0LFxufSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHsgdXNlTG9jYWxpemF0aW9uQ29udGV4dCB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL2ludGVybmFsc1wiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmllbGRWYWx1ZXMsXG4gIEZpZWxkUGF0aCxcbiAgUGF0aFZhbHVlLFxuICBVc2VDb250cm9sbGVyUmV0dXJuLFxufSBmcm9tIFwicmVhY3QtaG9vay1mb3JtXCI7XG5cbmltcG9ydCB0eXBlIHsgRGF0ZVRyYW5zZm9ybSB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIFR5cGUtc2FmZSBkYXRlIHZhbHVlIHJlYWRlciB0aGF0IGhhbmRsZXMgc3RyaW5nIHRvIGRhdGUgY29udmVyc2lvblxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZSBmcm9tIHRoZSBkYXRlIGFkYXB0ZXJcbiAqIEBwYXJhbSBhZGFwdGVyIC0gVGhlIGxvY2FsaXphdGlvbiBjb250ZXh0IGZyb20gTVVJIGRhdGUgcGlja2Vyc1xuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgKHN0cmluZywgZGF0ZSwgb3IgbnVsbClcbiAqIEByZXR1cm5zIFByb3Blcmx5IHR5cGVkIGRhdGUgdmFsdWUgb3IgbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZERhdGVQaWNrZXJWYWx1ZUFzRGF0ZTxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZT4oXG4gIGFkYXB0ZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZUxvY2FsaXphdGlvbkNvbnRleHQ+LFxuICB2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IFREYXRlIHwgdW5kZWZpbmVkXG4pOiBURGF0ZSB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVXNlIHRoZSBhZGFwdGVyIHRvIHBhcnNlIHRoZSBzdHJpbmcgaW50byBhIGRhdGVcbiAgICBjb25zdCBwYXJzZWREYXRlID0gYWRhcHRlci51dGlscy5kYXRlKHZhbHVlKTtcblxuICAgIHJldHVybiBwYXJzZWREYXRlIGFzIFREYXRlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsdWUgaG9va1xuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VEYXRlUGlja2VyVmFsdWVPcHRpb25zPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4ge1xuICAvKiogVGhlIGZpZWxkIGNvbnRyb2xsZXIgZnJvbSByZWFjdC1ob29rLWZvcm0gKi9cbiAgZmllbGQ6IFVzZUNvbnRyb2xsZXJSZXR1cm48VEZpZWxkVmFsdWVzLCBUTmFtZT5bXCJmaWVsZFwiXTtcbiAgLyoqIE9wdGlvbmFsIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyAqL1xuICB0cmFuc2Zvcm0/OiBEYXRlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT47XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsdWUgaG9va1xuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbHVlUmV0dXJuPFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZT4ge1xuICAvKiogVGhlIHRyYW5zZm9ybWVkIHZhbHVlIGZvciBkaXNwbGF5IGluIHRoZSBwaWNrZXIgKi9cbiAgdmFsdWU6IFRWYWx1ZSB8IG51bGw7XG4gIC8qKiBDaGFuZ2UgaGFuZGxlciBmb3IgcGlja2VyIHZhbHVlIHVwZGF0ZXMgKi9cbiAgb25DaGFuZ2U6IChcbiAgICB2YWx1ZTogVFZhbHVlIHwgbnVsbCxcbiAgICBjb250ZXh0OiBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dDxEYXRlVmFsaWRhdGlvbkVycm9yPlxuICApID0+IHZvaWQ7XG59XG5cbi8qKlxuICogSG9vayBmb3IgbWFuYWdpbmcgZGF0ZSBwaWNrZXIgdmFsdWUgdHJhbnNmb3JtYXRpb25zIHdpdGggdHlwZSBzYWZldHlcbiAqIFxuICogVGhpcyBob29rIGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gYmV0d2VlbiBmb3JtIGZpZWxkIHZhbHVlcyBhbmQgZGF0ZSBwaWNrZXIgdmFsdWVzLFxuICogYXBwbHlpbmcgY3VzdG9tIHRyYW5zZm9ybWF0aW9ucyB3aGlsZSBtYWludGFpbmluZyBzdHJpY3QgVHlwZVNjcmlwdCB0eXBpbmcuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIHN0cmluZyB0byBkYXRlIGNvbnZlcnNpb246XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VEYXRlUGlja2VyVmFsdWUoe1xuICogICBmaWVsZCxcbiAqICAgdHJhbnNmb3JtOiB7XG4gKiAgICAgaW5wdXQ6IChkYXRlU3RyaW5nKSA9PiBkYXRlU3RyaW5nID8gbmV3IERhdGUoZGF0ZVN0cmluZykgOiBudWxsLFxuICogICAgIG91dHB1dDogKGRhdGUpID0+IGRhdGUgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBudWxsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBVc2FnZSB3aXRoIERheS5qcyBkYXRlczpcbiAqIGBgYHRzeFxuICogY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UgfSA9IHVzZURhdGVQaWNrZXJWYWx1ZSh7XG4gKiAgIGZpZWxkLFxuICogICB0cmFuc2Zvcm06IHtcbiAqICAgICBpbnB1dDogKGRhdGVTdHJpbmcpID0+IGRhdGVTdHJpbmcgPyBkYXlqcyhkYXRlU3RyaW5nKSA6IG51bGwsXG4gKiAgICAgb3V0cHV0OiAoZGF0ZSkgPT4gZGF0ZSA/IGRhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgOiBudWxsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiBcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdmFsdWUgdHJhbnNmb3JtYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHRyYW5zZm9ybWVkIHZhbHVlIGFuZCBjaGFuZ2UgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVBpY2tlclZhbHVlPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4oXG4gIG9wdGlvbnM6IFVzZURhdGVQaWNrZXJWYWx1ZU9wdGlvbnM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPlxuKTogVXNlRGF0ZVBpY2tlclZhbHVlUmV0dXJuPFRWYWx1ZT4ge1xuICBjb25zdCB7IGZpZWxkLCB0cmFuc2Zvcm0gfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGFkYXB0ZXIgPSB1c2VMb2NhbGl6YXRpb25Db250ZXh0KCk7XG5cbiAgLy8gVHJhbnNmb3JtIHRoZSBmaWVsZCB2YWx1ZSBmb3IgZGlzcGxheSBpbiB0aGUgcGlja2VyXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKTogVFZhbHVlIHwgbnVsbCA9PiB7XG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm0uaW5wdXQoZmllbGQudmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICAvLyBEZWZhdWx0IHRyYW5zZm9ybWF0aW9uOiBoYW5kbGUgc3RyaW5nIHRvIGRhdGUgY29udmVyc2lvblxuICAgIHJldHVybiByZWFkRGF0ZVBpY2tlclZhbHVlQXNEYXRlKGFkYXB0ZXIsIGZpZWxkLnZhbHVlKSBhcyBUVmFsdWUgfCBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2ZpZWxkLnZhbHVlLCB0cmFuc2Zvcm0/LmlucHV0LCBhZGFwdGVyXSk7XG5cbiAgLy8gQ3JlYXRlIGEgc3RhYmxlIGNoYW5nZSBoYW5kbGVyXG4gIGNvbnN0IG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZhbHVlOiBUVmFsdWUgfCBudWxsLCBjb250ZXh0OiBQaWNrZXJDaGFuZ2VIYW5kbGVyQ29udGV4dDxEYXRlVmFsaWRhdGlvbkVycm9yPikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0/Lm91dHB1dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0cmFuc2Zvcm0ub3V0cHV0KG5ld1ZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgICBmaWVsZC5vbkNoYW5nZSh0cmFuc2Zvcm1lZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgdHJhbnNmb3JtYXRpb246IHN0b3JlIHRoZSBkYXRlIGFzLWlzXG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPik7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW2ZpZWxkLm9uQ2hhbmdlLCB0cmFuc2Zvcm0/Lm91dHB1dF1cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIG9uQ2hhbmdlLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VEYXRlUGlja2VyVmFsdWU7IiwgImltcG9ydCB0eXBlIHtcbiAgUGlja2VyVmFsaWREYXRlLFxuICBEYXRlVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmllbGRFcnJvcixcbiAgRmllbGRWYWx1ZXMsXG4gIEZpZWxkUGF0aCxcbiAgVXNlQ29udHJvbGxlclJldHVybixcbn0gZnJvbSBcInJlYWN0LWhvb2stZm9ybVwiO1xuXG5pbXBvcnQgdHlwZSB7IERhdGVQaWNrZXJWYWxpZGF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uIGhvb2tcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25PcHRpb25zPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4ge1xuICAvKiogVGhlIGZpZWxkIHN0YXRlIGZyb20gcmVhY3QtaG9vay1mb3JtIGNvbnRyb2xsZXIgKi9cbiAgZmllbGRTdGF0ZTogVXNlQ29udHJvbGxlclJldHVybjxURmllbGRWYWx1ZXMsIFROYW1lPltcImZpZWxkU3RhdGVcIl07XG4gIC8qKiBWYWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkYXRlIHBpY2tlciAqL1xuICB2YWxpZGF0aW9uPzogRGF0ZVBpY2tlclZhbGlkYXRpb25Db25maWc8VFZhbHVlPjtcbiAgLyoqIEN1c3RvbSBlcnJvciBtZXNzYWdlIHBhcnNlciAqL1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yIHwgRGF0ZVZhbGlkYXRpb25FcnJvcikgPT4gUmVhY3ROb2RlO1xuICAvKiogVGhlIGN1cnJlbnQgZGF0ZSB2YWx1ZSBmb3IgdmFsaWRhdGlvbiAqL1xuICB2YWx1ZT86IFRWYWx1ZSB8IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbiBob29rXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25SZXR1cm4ge1xuICAvKiogV2hldGhlciB0aGUgZmllbGQgaGFzIGFueSB2YWxpZGF0aW9uIGVycm9ycyAqL1xuICBoYXNFcnJvcjogYm9vbGVhbjtcbiAgLyoqIFRoZSBjdXJyZW50IHZhbGlkYXRpb24gZXJyb3IgKGZvcm0gb3IgZGF0ZS1zcGVjaWZpYykgKi9cbiAgZXJyb3I6IEZpZWxkRXJyb3IgfCBEYXRlVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuICAvKiogRm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UgZm9yIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlOiBSZWFjdE5vZGU7XG4gIC8qKiBXaGV0aGVyIHRoZSBmaWVsZCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlICovXG4gIGludmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBtZXNzYWdlcyBmb3IgY29tbW9uIGRhdGUgdmFsaWRhdGlvbiBzY2VuYXJpb3NcbiAqL1xuY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyA9IHtcbiAgaW52YWxpZERhdGU6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZVwiLFxuICBtaW5EYXRlOiBcIkRhdGUgbXVzdCBiZSBhZnRlciB0aGUgbWluaW11bSBhbGxvd2VkIGRhdGVcIixcbiAgbWF4RGF0ZTogXCJEYXRlIG11c3QgYmUgYmVmb3JlIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZVwiLFxuICBkaXNhYmxlZERhdGU6IFwiVGhpcyBkYXRlIGlzIG5vdCBhbGxvd2VkXCIsXG4gIHJlcXVpcmVkOiBcIlRoaXMgZmllbGQgaXMgcmVxdWlyZWRcIixcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogSG9vayBmb3IgbWFuYWdpbmcgZGF0ZSBwaWNrZXIgdmFsaWRhdGlvbiB3aXRoIGNvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmdcbiAqIFxuICogVGhpcyBob29rIGNlbnRyYWxpemVzIHZhbGlkYXRpb24gbG9naWMgZm9yIGRhdGUgcGlja2VycywgaGFuZGxpbmcgYm90aFxuICogcmVhY3QtaG9vay1mb3JtIHZhbGlkYXRpb24gZXJyb3JzIGFuZCBkYXRlLXNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3JzXG4gKiBmcm9tIE1VSSBkYXRlIHBpY2tlcnMuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIGZvcm0gdmFsaWRhdGlvbjpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBoYXNFcnJvciwgZXJyb3JNZXNzYWdlLCBpbnZhbGlkIH0gPSB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbih7XG4gKiAgIGZpZWxkU3RhdGUsXG4gKiAgIHZhbGlkYXRpb246IHtcbiAqICAgICBtaW5EYXRlOiBkYXlqcygpLnN1YnRyYWN0KDEsICd5ZWFyJyksXG4gKiAgICAgbWF4RGF0ZTogZGF5anMoKS5hZGQoMSwgJ3llYXInKSxcbiAqICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gKiAgICAgICBtaW5EYXRlOiAnRGF0ZSBtdXN0IGJlIHdpdGhpbiB0aGUgbGFzdCB5ZWFyJyxcbiAqICAgICAgIG1heERhdGU6ICdEYXRlIGNhbm5vdCBiZSBtb3JlIHRoYW4gMSB5ZWFyIGluIHRoZSBmdXR1cmUnXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAZXhhbXBsZVxuICogVXNhZ2Ugd2l0aCBjdXN0b20gZXJyb3IgcGFyc2VyOlxuICogYGBgdHN4XG4gKiBjb25zdCB7IGhhc0Vycm9yLCBlcnJvck1lc3NhZ2UgfSA9IHVzZURhdGVQaWNrZXJWYWxpZGF0aW9uKHtcbiAqICAgZmllbGRTdGF0ZSxcbiAqICAgcGFyc2VFcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAqICAgICAgIHJldHVybiBgRGF0ZSBFcnJvcjogJHtlcnJvcn1gO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCAnSW52YWxpZCBkYXRlJztcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIFxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVmFsaWRhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFZhbGlkYXRpb24gc3RhdGUgYW5kIGVycm9yIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbjxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KFxuICBvcHRpb25zOiBVc2VEYXRlUGlja2VyVmFsaWRhdGlvbk9wdGlvbnM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPlxuKTogVXNlRGF0ZVBpY2tlclZhbGlkYXRpb25SZXR1cm4ge1xuICBjb25zdCB7IGZpZWxkU3RhdGUsIHZhbGlkYXRpb24sIHBhcnNlRXJyb3IsIHZhbHVlIH0gPSBvcHRpb25zO1xuXG4gIC8vIE1lbW9pemUgdmFsaWRhdGlvbiByZXN1bHRzIGZvciBwZXJmb3JtYW5jZVxuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBlcnJvcjogZmllbGRFcnJvciwgaW52YWxpZCB9ID0gZmllbGRTdGF0ZTtcbiAgICBcbiAgICAvLyBTdGFydCB3aXRoIGZvcm0gdmFsaWRhdGlvbiBlcnJvclxuICAgIGxldCBjdXJyZW50RXJyb3I6IEZpZWxkRXJyb3IgfCBEYXRlVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0gZmllbGRFcnJvcjtcbiAgICBcbiAgICAvLyBDaGVjayBkYXRlLXNwZWNpZmljIHZhbGlkYXRpb25zIGlmIG5vIGZvcm0gZXJyb3IgYW5kIHdlIGhhdmUgYSB2YWx1ZVxuICAgIGlmICghZmllbGRFcnJvciAmJiB2YWx1ZSAmJiB2YWxpZGF0aW9uKSB7XG4gICAgICBjb25zdCB7IG1pbkRhdGUsIG1heERhdGUsIHNob3VsZERpc2FibGVEYXRlLCBlcnJvck1lc3NhZ2VzIH0gPSB2YWxpZGF0aW9uO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBtaW5pbXVtIGRhdGVcbiAgICAgIGlmIChtaW5EYXRlICYmIHZhbHVlIDwgbWluRGF0ZSkge1xuICAgICAgICBjdXJyZW50RXJyb3IgPSB7XG4gICAgICAgICAgdHlwZTogJ21pbkRhdGUnLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZXM/Lm1pbkRhdGUgfHwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5taW5EYXRlLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgRGF0ZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgbWF4aW11bSBkYXRlXG4gICAgICBlbHNlIGlmIChtYXhEYXRlICYmIHZhbHVlID4gbWF4RGF0ZSkge1xuICAgICAgICBjdXJyZW50RXJyb3IgPSB7XG4gICAgICAgICAgdHlwZTogJ21heERhdGUnLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZXM/Lm1heERhdGUgfHwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5tYXhEYXRlLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgRGF0ZVZhbGlkYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZGlzYWJsZWQgZGF0ZVxuICAgICAgZWxzZSBpZiAoc2hvdWxkRGlzYWJsZURhdGUgJiYgc2hvdWxkRGlzYWJsZURhdGUodmFsdWUpKSB7XG4gICAgICAgIGN1cnJlbnRFcnJvciA9IHtcbiAgICAgICAgICB0eXBlOiAnZGlzYWJsZWREYXRlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2VzPy5kaXNhYmxlZERhdGUgfHwgREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kaXNhYmxlZERhdGUsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBEYXRlVmFsaWRhdGlvbkVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBoYXNFcnJvciA9IEJvb2xlYW4oY3VycmVudEVycm9yKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaGFzRXJyb3IsXG4gICAgICBlcnJvcjogY3VycmVudEVycm9yLFxuICAgICAgaW52YWxpZDogaW52YWxpZCB8fCBoYXNFcnJvcixcbiAgICB9O1xuICB9LCBbZmllbGRTdGF0ZSwgdmFsaWRhdGlvbiwgdmFsdWVdKTtcblxuICAvLyBNZW1vaXplIGVycm9yIG1lc3NhZ2UgZm9ybWF0dGluZ1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSB1c2VNZW1vKCgpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVXNlIGN1c3RvbSBlcnJvciBwYXJzZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAocGFyc2VFcnJvcikge1xuICAgICAgcmV0dXJuIHBhcnNlRXJyb3IodmFsaWRhdGlvblJlc3VsdC5lcnJvcik7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBlcnJvciBtZXNzYWdlIGhhbmRsaW5nXG4gICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCdtZXNzYWdlJyBpbiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yICYmIHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBlcnJvciBtZXNzYWdlcyBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgaWYgKCd0eXBlJyBpbiB2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvclR5cGUgPSB2YWxpZGF0aW9uUmVzdWx0LmVycm9yLnR5cGU7XG5cbiAgICAgIHN3aXRjaCAoZXJyb3JUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5yZXF1aXJlZDtcbiAgICAgICAgY2FzZSAnbWluRGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWluRGF0ZTtcbiAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIERFRkFVTFRfRVJST1JfTUVTU0FHRVMubWF4RGF0ZTtcbiAgICAgICAgY2FzZSAnZGlzYWJsZWREYXRlJzpcbiAgICAgICAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kaXNhYmxlZERhdGU7XG4gICAgICAgIGNhc2UgJ2ludmFsaWREYXRlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5pbnZhbGlkRGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5pbnZhbGlkRGF0ZTtcbiAgfSwgW3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IsIHBhcnNlRXJyb3JdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnZhbGlkYXRpb25SZXN1bHQsXG4gICAgZXJyb3JNZXNzYWdlLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VEYXRlUGlja2VyVmFsaWRhdGlvbjsiLCAiaW1wb3J0IHR5cGUgeyBTeFByb3BzLCBUaGVtZSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIHVzZURhdGVQaWNrZXJTdHlsZXMgaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJTdHlsZXNPcHRpb25zIHtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGEgdmFsaWRhdGlvbiBlcnJvciAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZSAqL1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHRleHQgaW5wdXQgaXMgcmVhZC1vbmx5ICovXG4gIHRleHRSZWFkT25seT86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gc3R5bGVzIHRvIG1lcmdlIHdpdGggZGVmYXVsdHMgKi9cbiAgc3g/OiBTeFByb3BzPFRoZW1lPjtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIHVzZURhdGVQaWNrZXJTdHlsZXMgaG9va1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZURhdGVQaWNrZXJTdHlsZXNSZXR1cm4ge1xuICAvKiogQ29tcHV0ZWQgc3R5bGVzIGZvciB0aGUgZGF0ZSBwaWNrZXIgY29tcG9uZW50ICovXG4gIHN4OiBTeFByb3BzPFRoZW1lPjtcbiAgLyoqIEFkZGl0aW9uYWwgY2xhc3MgbmFtZXMgZm9yIHN0eWxpbmcgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhvb2sgZm9yIG1hbmFnaW5nIHRoZW1lLWF3YXJlIGRhdGUgcGlja2VyIHN0eWxlcyB3aXRoIGNvbnNpc3RlbnQgZGVzaWduIHN5c3RlbSBpbnRlZ3JhdGlvblxuICogXG4gKiBUaGlzIGhvb2sgcHJvdmlkZXMgb3B0aW1pemVkLCBtZW1vaXplZCBzdHlsZXMgZm9yIGRhdGUgcGlja2VyIGNvbXBvbmVudHMgdGhhdCBhdXRvbWF0aWNhbGx5XG4gKiBhZGFwdCB0byB0aGUgY3VycmVudCBNVUkgdGhlbWUgYW5kIGNvbXBvbmVudCBzdGF0ZSAoZGlzYWJsZWQsIGVycm9yLCBsb2FkaW5nLCBldGMuKS5cbiAqIEl0IGVuc3VyZXMgY29uc2lzdGVudCBzdHlsaW5nIGFjcm9zcyBhbGwgZGF0ZSBwaWNrZXIgaW5zdGFuY2VzIHdoaWxlIGFsbG93aW5nIGN1c3RvbWl6YXRpb24uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogY29uc3QgeyBzeCB9ID0gdXNlRGF0ZVBpY2tlclN0eWxlcyh7XG4gKiAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICogICBoYXNFcnJvcjogISFlcnJvcixcbiAqICAgbG9hZGluZzogaXNMb2FkaW5nXG4gKiB9KTtcbiAqIFxuICogcmV0dXJuIDxEYXRlUGlja2VyIHN4PXtzeH0gLi4uIC8+O1xuICogYGBgXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBzdHlsZXM6XG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgc3ggfSA9IHVzZURhdGVQaWNrZXJTdHlsZXMoe1xuICogICBoYXNFcnJvcjogISFlcnJvcixcbiAqICAgc3g6IHtcbiAqICAgICAnJiAuTXVpSW5wdXRMYWJlbC1yb290Jzoge1xuICogICAgICAgY29sb3I6ICdwcmltYXJ5Lm1haW4nXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFN0eWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgQ29tcHV0ZWQgc3R5bGVzIGFuZCBjbGFzcyBuYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVBpY2tlclN0eWxlcyhcbiAgb3B0aW9uczogVXNlRGF0ZVBpY2tlclN0eWxlc09wdGlvbnMgPSB7fVxuKTogVXNlRGF0ZVBpY2tlclN0eWxlc1JldHVybiB7XG4gIGNvbnN0IHsgZGlzYWJsZWQsIGhhc0Vycm9yLCBsb2FkaW5nLCB0ZXh0UmVhZE9ubHksIHN4OiBjdXN0b21TeCB9ID0gb3B0aW9ucztcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIC8vIE1lbW9pemUgY29tcHV0ZWQgc3R5bGVzIGZvciBwZXJmb3JtYW5jZVxuICBjb25zdCBjb21wdXRlZFN4ID0gdXNlTWVtbygoKTogU3hQcm9wczxUaGVtZT4gPT4ge1xuICAgIGNvbnN0IGJhc2VTdHlsZXM6IFN4UHJvcHM8VGhlbWU+ID0ge1xuICAgICAgLy8gSW5wdXQgZmllbGQgc3R5bGluZ1xuICAgICAgXCImIC5NdWlPdXRsaW5lZElucHV0LXJvb3RcIjoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGRpc2FibGVkIFxuICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kIFxuICAgICAgICAgIDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICBcbiAgICAgICAgLy8gVHJhbnNpdGlvbiBmb3Igc21vb3RoIHN0YXRlIGNoYW5nZXNcbiAgICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFtcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICAgICAgJ2JvcmRlci1jb2xvcicsXG4gICAgICAgICAgJ2NvbG9yJ1xuICAgICAgICBdLCB7XG4gICAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0LFxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBFcnJvciBzdGF0ZSBzdHlsaW5nXG4gICAgICAgIC4uLihoYXNFcnJvciAmJiB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgICAgICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnJi5NdWktZm9jdXNlZCc6IHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4sXG4gICAgICAgICAgICBib3hTaGFkb3c6IGAwIDAgMCAycHggJHt0aGVtZS5wYWxldHRlLmVycm9yLm1haW59MjVgLCAvLyAyNSBpcyAxNSUgb3BhY2l0eSBpbiBoZXhcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBMb2FkaW5nIHN0YXRlIHN0eWxpbmdcbiAgICAgICAgLi4uKGxvYWRpbmcgJiYge1xuICAgICAgICAgIG9wYWNpdHk6IDAuNyxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgIH0pLFxuICAgICAgfSxcblxuICAgICAgLy8gSW5wdXQgZWxlbWVudCBzdHlsaW5nXG4gICAgICBcIiYgLk11aUlucHV0QmFzZS1pbnB1dFwiOiB7XG4gICAgICAgIGN1cnNvcjogZGlzYWJsZWQgXG4gICAgICAgICAgPyBcIm5vdC1hbGxvd2VkXCIgXG4gICAgICAgICAgOiB0ZXh0UmVhZE9ubHkgXG4gICAgICAgICAgICA/IFwicG9pbnRlclwiIFxuICAgICAgICAgICAgOiBcInRleHRcIixcbiAgICAgICAgXG4gICAgICAgIC8vIFJlYWQtb25seSBzcGVjaWZpYyBzdHlsaW5nXG4gICAgICAgIC4uLih0ZXh0UmVhZE9ubHkgJiYgIWRpc2FibGVkICYmIHtcbiAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiLFxuICAgICAgICAgIGNhcmV0Q29sb3I6IFwidHJhbnNwYXJlbnRcIiwgLy8gSGlkZSB0ZXh0IGN1cnNvciBpbiByZWFkLW9ubHkgbW9kZVxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBMb2FkaW5nIHN0YXRlXG4gICAgICAgIC4uLihsb2FkaW5nICYmIHtcbiAgICAgICAgICBjdXJzb3I6IFwid2FpdFwiLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIFJlcXVpcmVkIGZpZWxkIGFzdGVyaXNrIHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpSW5wdXRMYWJlbC1hc3Rlcmlza1wiOiB7IFxuICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICBmb250U2l6ZTogXCIxLjJlbVwiLFxuICAgICAgfSxcblxuICAgICAgLy8gTGFiZWwgc3R5bGluZyB3aXRoIGJldHRlciBjb250cmFzdFxuICAgICAgXCImIC5NdWlJbnB1dExhYmVsLXJvb3RcIjoge1xuICAgICAgICBjb2xvcjogaGFzRXJyb3IgXG4gICAgICAgICAgPyB0aGVtZS5wYWxldHRlLmVycm9yLm1haW4gXG4gICAgICAgICAgOiB0aGVtZS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5LFxuICAgICAgICBcbiAgICAgICAgLy8gRW5zdXJlIHByb3BlciBjb250cmFzdCBmb3IgZGlzYWJsZWQgc3RhdGVcbiAgICAgICAgLi4uKGRpc2FibGVkICYmIHtcbiAgICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS50ZXh0LmRpc2FibGVkLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEhlbHBlciB0ZXh0IHN0eWxpbmdcbiAgICAgIFwiJiAuTXVpRm9ybUhlbHBlclRleHQtcm9vdFwiOiB7XG4gICAgICAgIG1hcmdpbkxlZnQ6IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgICAgIG1hcmdpblJpZ2h0OiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBcbiAgICAgICAgLy8gRXJyb3Igc3RhdGVcbiAgICAgICAgLi4uKGhhc0Vycm9yICYmIHtcbiAgICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIENhbGVuZGFyIGljb24gc3R5bGluZ1xuICAgICAgXCImIC5NdWlJbnB1dEFkb3JubWVudC1yb290XCI6IHtcbiAgICAgICAgY29sb3I6IGRpc2FibGVkIFxuICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWQgXG4gICAgICAgICAgOiBoYXNFcnJvciBcbiAgICAgICAgICAgID8gdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluIFxuICAgICAgICAgICAgOiB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gICAgICB9LFxuXG4gICAgICAvLyBGb2N1cyByaW5nIGZvciBhY2Nlc3NpYmlsaXR5XG4gICAgICBcIiYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZm9jdXNlZFwiOiB7XG4gICAgICAgIG91dGxpbmU6IGAycHggc29saWQgJHt0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbn01MGAsIC8vIDUwIGlzIDMxJSBvcGFjaXR5XG4gICAgICAgIG91dGxpbmVPZmZzZXQ6IFwiMnB4XCIsXG4gICAgICB9LFxuXG4gICAgICAvLyBFbmhhbmNlZCBjb250cmFzdCBmb3IgZGFyayB0aGVtZXNcbiAgICAgIC4uLih0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgICAgIFwiJiAuTXVpT3V0bGluZWRJbnB1dC1yb290XCI6IHtcbiAgICAgICAgICBib3JkZXJXaWR0aDogMixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICAvLyBNZXJnZSB3aXRoIGN1c3RvbSBzdHlsZXNcbiAgICByZXR1cm4gY3VzdG9tU3ggPyBbYmFzZVN0eWxlcywgY3VzdG9tU3hdIGFzIFN4UHJvcHM8VGhlbWU+IDogYmFzZVN0eWxlcztcbiAgfSwgW1xuICAgIHRoZW1lLFxuICAgIGRpc2FibGVkLFxuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgdGV4dFJlYWRPbmx5LFxuICAgIGN1c3RvbVN4LFxuICBdKTtcblxuICAvLyBHZW5lcmF0ZSBhZGRpdGlvbmFsIGNsYXNzIG5hbWVzIGZvciBleHRlcm5hbCBzdHlsaW5nIGhvb2tzXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgaWYgKGRpc2FibGVkKSBjbGFzc2VzLnB1c2goJ0RhdGVQaWNrZXJFbGVtZW50LS1kaXNhYmxlZCcpO1xuICAgIGlmIChoYXNFcnJvcikgY2xhc3Nlcy5wdXNoKCdEYXRlUGlja2VyRWxlbWVudC0tZXJyb3InKTtcbiAgICBpZiAobG9hZGluZykgY2xhc3Nlcy5wdXNoKCdEYXRlUGlja2VyRWxlbWVudC0tbG9hZGluZycpO1xuICAgIGlmICh0ZXh0UmVhZE9ubHkpIGNsYXNzZXMucHVzaCgnRGF0ZVBpY2tlckVsZW1lbnQtLXJlYWRPbmx5Jyk7XG4gICAgXG4gICAgcmV0dXJuIGNsYXNzZXMubGVuZ3RoID4gMCA/IGNsYXNzZXMuam9pbignICcpIDogdW5kZWZpbmVkO1xuICB9LCBbZGlzYWJsZWQsIGhhc0Vycm9yLCBsb2FkaW5nLCB0ZXh0UmVhZE9ubHldKTtcblxuICByZXR1cm4ge1xuICAgIHN4OiBjb21wdXRlZFN4LFxuICAgIGNsYXNzTmFtZSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlRGF0ZVBpY2tlclN0eWxlczsiLCAiaW1wb3J0IHR5cGUgeyBQaWNrZXJWYWxpZERhdGUgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vyc1wiO1xuaW1wb3J0IHR5cGUgeyB1c2VMb2NhbGl6YXRpb25Db250ZXh0IH0gZnJvbSBcIkBtdWkveC1kYXRlLXBpY2tlcnMvaW50ZXJuYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkVmFsdWVzLCBGaWVsZFBhdGgsIFBhdGhWYWx1ZSB9IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgZm9yIGNyZWF0aW5nIGJyYW5kZWQgZGF0ZSB0eXBlcyB0byBwcmV2ZW50IG1peGluZyBkaWZmZXJlbnQgZGF0ZSBmb3JtYXRzXG4gKiBAdGVtcGxhdGUgVERhdGUgLSBUaGUgYmFzZSBkYXRlIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUQnJhbmQgLSBUaGUgYnJhbmQgc3RyaW5nIGZvciB0eXBlIHNhZmV0eVxuICovXG5leHBvcnQgdHlwZSBCcmFuZGVkRGF0ZTxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSwgVEJyYW5kIGV4dGVuZHMgc3RyaW5nPiA9IFxuICBURGF0ZSAmIHsgcmVhZG9ubHkgX19icmFuZDogVEJyYW5kIH07XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgZGF0ZVxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIGRhdGUtbGlrZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGlja2VyVmFsaWREYXRlIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgRGF0ZSBvYmplY3RcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBkYXRlLWxpa2Ugb2JqZWN0cyB3aXRoIGNvbW1vbiBkYXRlIGxpYnJhcnkgbWV0aG9kc1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgIC8vIERheS5qcywgTW9tZW50LmpzLCBvciBzaW1pbGFyXG4gICAgaWYgKCdpc1ZhbGlkJyBpbiB2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlIGFzIGFueSkuaXNWYWxpZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLmlzVmFsaWQoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTHV4b24gRGF0ZVRpbWVcbiAgICBpZiAoJ2lzVmFsaWQnIGluIHZhbHVlICYmIHR5cGVvZiAodmFsdWUgYXMgYW55KS5pc1ZhbGlkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS5pc1ZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgcGFyc2VkIGFzIGEgZGF0ZVxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHBhcnNlYWJsZSBkYXRlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJzYWJsZURhdGVTdHJpbmcodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBCYXNpYyBJU08gZGF0ZSBmb3JtYXQgY2hlY2tcbiAgY29uc3QgaXNvRGF0ZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OlRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZHszfSk/KD86WnxbKy1dXFxkezJ9OlxcZHsyfSk/KT8kLztcblxuICBpZiAoaXNvRGF0ZVJlZ2V4LnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDaGVjayBpZiBEYXRlIGNvbnN0cnVjdG9yIGNhbiBwYXJzZSBpdFxuICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cbiAgcmV0dXJuICFpc05hTihwYXJzZWQuZ2V0VGltZSgpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHlwZS1zYWZlIGRhdGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBmb3JtIHZhbHVlcyB0byBkYXRlIHBpY2tlciB2YWx1ZXNcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFREYXRlIC0gVGhlIGRhdGUgdHlwZSB1c2VkIGJ5IHRoZSBwaWNrZXJcbiAqIEBwYXJhbSBhZGFwdGVyIC0gVGhlIGRhdGUgYWRhcHRlciBmcm9tIE1VSSBsb2NhbGl6YXRpb24gY29udGV4dFxuICogQHJldHVybnMgQSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiB0aGF0IHNhZmVseSBjb252ZXJ0cyBmb3JtIHZhbHVlcyB0byBkYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGF0ZUlucHV0VHJhbnNmb3JtPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KGFkYXB0ZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZUxvY2FsaXphdGlvbkNvbnRleHQ+KSB7XG4gIHJldHVybiAodmFsdWU6IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPik6IFREYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBhZGFwdGVyLnV0aWxzLmRhdGUodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZShwYXJzZWQpID8gKHBhcnNlZCBhcyBURGF0ZSkgOiBudWxsO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBURGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHlwZS1zYWZlIGRhdGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBkYXRlIHBpY2tlciB2YWx1ZXMgYmFjayB0byBmb3JtIHZhbHVlc1xuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVERhdGUgLSBUaGUgZGF0ZSB0eXBlIHVzZWQgYnkgdGhlIHBpY2tlclxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgdG8gdXNlIGZvciBzdHJpbmcgY29udmVyc2lvbiAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHRoYXQgc2FmZWx5IGNvbnZlcnRzIGRhdGVzIHRvIGZvcm0gdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEYXRlT3V0cHV0VHJhbnNmb3JtPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVERhdGUgZXh0ZW5kcyBQaWNrZXJWYWxpZERhdGUgPSBQaWNrZXJWYWxpZERhdGUsXG4+KGZvcm1hdD86IHN0cmluZykge1xuICByZXR1cm4gKHZhbHVlOiBURGF0ZSB8IG51bGwpOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4gPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbCBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBmb3JtYXQgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGRhdGUgYXMtaXNcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgcmV0dXJuIHZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBkYXRlIGxpYnJhcnkgZm9ybWF0c1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnaXNvJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdkYXRlLW9ubHknKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGF5LmpzIGZvcm1hdFxuICAgICAgaWYgKHR5cGVvZiAodmFsdWUgYXMgYW55KS5mb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLmZvcm1hdChmb3JtYXQpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH1cblxuICAgICAgLy8gTW9tZW50LmpzIGZvcm1hdFxuICAgICAgaWYgKHR5cGVvZiAodmFsdWUgYXMgYW55KS5mb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLmZvcm1hdChmb3JtYXQpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH1cblxuICAgICAgLy8gTHV4b24gZm9ybWF0XG4gICAgICBpZiAodHlwZW9mICh2YWx1ZSBhcyBhbnkpLnRvRm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgYW55KS50b0Zvcm1hdChmb3JtYXQpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2s6IHJldHVybiBhcy1pc1xuICAgICAgcmV0dXJuIHZhbHVlIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgZGVmYXVsdCBkYXRlIHBpY2tlciBjb25maWd1cmF0aW9uXG4gKiBAdGVtcGxhdGUgVERhdGUgLSBUaGUgZGF0ZSB0eXBlXG4gKiBAcmV0dXJucyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0RGF0ZVBpY2tlckNvbmZpZzxURGF0ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZT4oKSB7XG4gIHJldHVybiB7XG4gICAgLy8gRGVmYXVsdCBzbG90IHByb3BzIGZvciBjb25zaXN0ZW50IGJlaGF2aW9yXG4gICAgc2xvdFByb3BzOiB7XG4gICAgICBhY3Rpb25CYXI6IHtcbiAgICAgICAgYWN0aW9uczogWydjbGVhcicsICd0b2RheScsICdjYW5jZWwnLCAnYWNjZXB0J10gYXMgY29uc3QsXG4gICAgICB9LFxuICAgICAgdGV4dEZpZWxkOiB7XG4gICAgICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICAgICAgdmFyaWFudDogJ291dGxpbmVkJyBhcyBjb25zdCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBcbiAgICAvLyBEZWZhdWx0IGdyaWQgcHJvcHMgZm9yIGxheW91dCBjb25zaXN0ZW5jeVxuICAgIGdyaWRQcm9wczoge1xuICAgICAgc2l6ZTogeyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIsIHhsOiAxMiB9IGFzIGNvbnN0LFxuICAgIH0sXG4gICAgXG4gICAgLy8gRGVmYXVsdCB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICB2YWxpZGF0aW9uOiB7XG4gICAgICBlcnJvck1lc3NhZ2VzOiB7XG4gICAgICAgIGludmFsaWREYXRlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGVcIixcbiAgICAgICAgbWluRGF0ZTogXCJEYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlXCIsXG4gICAgICAgIG1heERhdGU6IFwiRGF0ZSBtdXN0IGJlIGJlZm9yZSB0aGUgbWF4aW11bSBhbGxvd2VkIGRhdGVcIixcbiAgICAgICAgZGlzYWJsZWREYXRlOiBcIlRoaXMgZGF0ZSBpcyBub3QgYWxsb3dlZFwiLFxuICAgICAgfSxcbiAgICB9LFxuICB9IGFzIGNvbnN0O1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdG8gc2FmZWx5IGV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIHZhcmlvdXMgZXJyb3IgdHlwZXNcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciBvYmplY3QgKGNvdWxkIGJlIGZyb20gcmVhY3QtaG9vay1mb3JtIG9yIE1VSSBkYXRlIHBpY2tlcilcbiAqIEByZXR1cm5zIEEgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmIChlcnJvciA9PT0gbnVsbCB8fCBlcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCkge1xuICAgIC8vIFJlYWN0IEhvb2sgRm9ybSBGaWVsZEVycm9yXG4gICAgaWYgKCdtZXNzYWdlJyBpbiBlcnJvciAmJiB0eXBlb2YgKGVycm9yIGFzIGFueSkubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAoZXJyb3IgYXMgYW55KS5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIE1VSSBEYXRlVmFsaWRhdGlvbkVycm9yXG4gICAgaWYgKCd0eXBlJyBpbiBlcnJvciAmJiB0eXBlb2YgKGVycm9yIGFzIGFueSkudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGVycm9yVHlwZSA9IChlcnJvciBhcyBhbnkpLnR5cGU7XG5cbiAgICAgIHN3aXRjaCAoZXJyb3JUeXBlKSB7XG4gICAgICAgIGNhc2UgJ2ludmFsaWREYXRlJzpcbiAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGUnO1xuICAgICAgICBjYXNlICdtaW5EYXRlJzpcbiAgICAgICAgICByZXR1cm4gJ0RhdGUgaXMgdG9vIGVhcmx5JztcbiAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XG4gICAgICAgICAgcmV0dXJuICdEYXRlIGlzIHRvbyBsYXRlJztcbiAgICAgICAgY2FzZSAnZGlzYWJsZWREYXRlJzpcbiAgICAgICAgICByZXR1cm4gJ1RoaXMgZGF0ZSBpcyBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJ0ludmFsaWQgZGF0ZSBzZWxlY3Rpb24nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnSW52YWxpZCBpbnB1dCc7XG59XG5cbi8qKlxuICogUGVyZm9ybWFuY2UgdXRpbGl0eSB0byBjcmVhdGUgc3RhYmxlIHJlZmVyZW5jZXMgZm9yIGNvbXBsZXggcHJvcHNcbiAqIFRoaXMgaGVscHMgcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzIHdoZW4gdXNpbmcgY29tcGxleCBjb25maWd1cmF0aW9uIG9iamVjdHNcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcmV0dXJucyBBIEpTT04gc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBkZXBlbmRlbmN5IGluIHVzZU1lbW8vdXNlQ2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YWJsZUtleTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGNvbmZpZzogVCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIC8vIFNvcnQgb2JqZWN0IGtleXMgZm9yIGNvbnNpc3RlbnQgc2VyaWFsaXphdGlvblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgc29ydGVkW2tdID0gKHZhbHVlIGFzIGFueSlba107XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zZXJpYWxpemFibGUgb2JqZWN0c1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnNvcnQoKS5qb2luKCctJyk7XG4gIH1cbn0iLCAiaW1wb3J0IFZpc2liaWxpdHkgZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9WaXNpYmlsaXR5JztcbmltcG9ydCBWaXNpYmlsaXR5T2ZmIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvVmlzaWJpbGl0eU9mZic7XG5pbXBvcnQgdHlwZSB7IEljb25CdXR0b25Qcm9wcywgVGV4dEZpZWxkUHJvcHMsIEdyaWRQcm9wcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgSWNvbkJ1dHRvbixcbiAgSW5wdXRBZG9ybm1lbnQsXG4gIFRleHRGaWVsZCxcbiAgdXNlRm9ya1JlZixcbiAgR3JpZCxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IE1vdXNlRXZlbnQsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUGFzc3dvcmRFbGVtZW50IGNvbXBvbmVudC5cbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFBhc3N3b3JkRWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+ID0gT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnIHwgJ3NpemUnPiAmIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwicGFzc3dvcmRcIiB8IFwidXNlci5jdXJyZW50UGFzc3dvcmRcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtXG4gICAqL1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICAvKipcbiAgICogQ29sb3Igb2YgdGhlIHZpc2liaWxpdHkgdG9nZ2xlIGljb24gYnV0dG9uXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJkZWZhdWx0XCJcbiAgICovXG4gIGljb25Db2xvcj86IEljb25CdXR0b25Qcm9wc1snY29sb3InXTtcbiAgLyoqXG4gICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSB2aXNpYmlsaXR5IHRvZ2dsZSBpY29uXG4gICAqIEBwYXJhbSBwYXNzd29yZCAtIFdoZXRoZXIgcGFzc3dvcmQgaXMgY3VycmVudGx5IGhpZGRlblxuICAgKiBAcmV0dXJucyBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoZSBpY29uXG4gICAqIEBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2aXNpYmlsaXR5L3Zpc2liaWxpdHktb2ZmIGljb25zXG4gICAqL1xuICByZW5kZXJJY29uPzogKHBhc3N3b3JkOiBib29sZWFuKSA9PiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG5cbn07XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFBhc3N3b3JkRWw8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IFBhc3N3b3JkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBpY29uQ29sb3IsXG4gICAgcmVuZGVySWNvbiA9IHBhc3N3b3JkID0+IChwYXNzd29yZCA/IDxWaXNpYmlsaXR5IC8+IDogPFZpc2liaWxpdHlPZmYgLz4pLFxuICAgIHNsb3RQcm9wcyxcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgaW5wdXRSZWYsXG4gICAgb25CbHVyLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gdXNlU3RhdGU8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgY29uc3QgZW5kQWRvcm5tZW50ID0gKFxuICAgIDxJbnB1dEFkb3JubWVudCBwb3NpdGlvbj17J2VuZCd9PlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgb25Nb3VzZURvd249eyhlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQYXNzd29yZCghcGFzc3dvcmQpfVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGNvbG9yPXtpY29uQ29sb3IgPz8gJ2RlZmF1bHQnfVxuICAgICAgPlxuICAgICAgICB7cmVuZGVySWNvbihwYXNzd29yZCl9XG4gICAgICA8L0ljb25CdXR0b24+XG4gICAgPC9JbnB1dEFkb3JubWVudD5cbiAgKTtcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBpbnB1dFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIHR5cGU9e3Bhc3N3b3JkID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J31cbiAgICAgIHZhbHVlPXtmaWVsZC52YWx1ZSA/PyAnJ31cbiAgICAgIGZ1bGxXaWR0aFxuICAgICAgdmFyaWFudD17cmVzdC52YXJpYW50ID8/ICdvdXRsaW5lZCd9XG4gICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkNoYW5nZShldmVudCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdC5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJlc3Qub25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICB7Li4uKHR5cGVvZiBzbG90UHJvcHMgPT09ICd1bmRlZmluZWQnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgSW5wdXRQcm9wczoge1xuICAgICAgICAgICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uc2xvdFByb3BzLFxuICAgICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICAgIGVuZEFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAuLi5zbG90UHJvcHM/LmlucHV0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBUZXh0RmllbGRQcm9wc1snc2xvdFByb3BzJ10sXG4gICAgICAgICAgfSl9XG4gICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgIC8+XG4gICk7XG59O1xuXG4vKipcbiAqIEEgcmVhY3QtaG9vay1mb3JtIGludGVncmF0ZWQgcGFzc3dvcmQgVGV4dEZpZWxkIHdpdGggc2hvdy9oaWRlIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBmdWxseSBpbnRlZ3JhdGVkIHBhc3N3b3JkIGlucHV0IHRoYXQgd29ya3Mgc2VhbWxlc3NseSB3aXRoIHJlYWN0LWhvb2stZm9ybSxcbiAqIGluY2x1ZGluZyBhdXRvbWF0aWMgdmFsaWRhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBhIGJ1aWx0LWluIHZpc2liaWxpdHkgdG9nZ2xlIGJ1dHRvbi4gVGhlIHBhc3N3b3JkXG4gKiBjYW4gYmUgc2hvd24gb3IgaGlkZGVuIGJ5IGNsaWNraW5nIHRoZSBleWUgaWNvbiBpbiB0aGUgaW5wdXQncyBlbmQgYWRvcm5tZW50LlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBQYXNzd29yZCB2aXNpYmlsaXR5IHRvZ2dsZVxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheVxuICogLSBDdXN0b21pemFibGUgdmlzaWJpbGl0eSBpY29uc1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3VwcG9ydFxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPFBhc3N3b3JkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwicGFzc3dvcmRcIlxuICogICBsYWJlbD1cIlBhc3N3b3JkXCJcbiAqICAgcnVsZXM9e3tcbiAqICAgICByZXF1aXJlZDogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyxcbiAqICAgICBtaW5MZW5ndGg6IHsgdmFsdWU6IDgsIG1lc3NhZ2U6ICdNaW5pbXVtIDggY2hhcmFjdGVycycgfVxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBpY29uIGNvbG9yOlxuICogYGBgdHN4XG4gKiA8UGFzc3dvcmRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJjb25maXJtUGFzc3dvcmRcIlxuICogICBsYWJlbD1cIkNvbmZpcm0gUGFzc3dvcmRcIlxuICogICBpY29uQ29sb3I9XCJwcmltYXJ5XCJcbiAqICAgcGxhY2Vob2xkZXI9XCJSZS1lbnRlciB5b3VyIHBhc3N3b3JkXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ3VzdG9tIGdyaWQgbGF5b3V0OlxuICogYGBgdHN4XG4gKiA8UGFzc3dvcmRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJuZXdQYXNzd29yZFwiXG4gKiAgIGxhYmVsPVwiTmV3IFBhc3N3b3JkXCJcbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgIHJlbmRlckljb249eyhoaWRkZW4pID0+IGhpZGRlbiA/IDxDdXN0b21IaWRlSWNvbiAvPiA6IDxDdXN0b21TaG93SWNvbiAvPn1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IFBhc3N3b3JkRWxlbWVudCA9IDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogUGFzc3dvcmRFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IHtcblxuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFBhc3N3b3JkRWxlbWVudCB9O1xuIiwgImltcG9ydCB0eXBlIHtcbiAgRm9ybUNvbnRyb2xMYWJlbFByb3BzLFxuICBGb3JtTGFiZWxQcm9wcyxcbiAgUmFkaW9Hcm91cFByb3BzLFxuICBSYWRpb1Byb3BzLFxuICBHcmlkUHJvcHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1IZWxwZXJUZXh0LFxuICBGb3JtTGFiZWwsXG4gIFJhZGlvLFxuICBSYWRpb0dyb3VwLFxuICBHcmlkLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBDb250cm9sLFxuICBGaWVsZEVycm9yLFxuICBGaWVsZFBhdGgsXG4gIEZpZWxkVmFsdWVzLFxuICBQYXRoVmFsdWUsXG59IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxuaW1wb3J0IHsgdXNlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXZlbnRzJztcblxuLy8gVHlwZSBmb3IgcHJpbWl0aXZlIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGFzIHJhZGlvIGJ1dHRvbiB2YWx1ZXNcbnR5cGUgUHJpbWl0aXZlVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuXG4vLyBDb25zdHJhaW50IHRvIGVuc3VyZSBvcHRpb24gb2JqZWN0cyBoYXZlIHRoZSByZXF1aXJlZCBrZXlzXG50eXBlIE9wdGlvbk9iamVjdDxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSBSZWNvcmQ8VFZhbHVlS2V5LCBQcmltaXRpdmVWYWx1ZT4gJlxuICBSZWNvcmQ8VExhYmVsS2V5LCBzdHJpbmc+ICZcbiAgUGFydGlhbDxSZWNvcmQ8VERpc2FibGVkS2V5LCBib29sZWFuPj4gO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJhZGlvQnV0dG9uR3JvdXBQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUT3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0PFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXksXG4gICAgVERpc2FibGVkS2V5XG4gID4gPSBPcHRpb25PYmplY3QsXG4gIFRWYWx1ZUtleSBleHRlbmRzICBzdHJpbmcgPSAnaWQnLFxuICBUTGFiZWxLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdkaXNhYmxlZCcsXG4+IHtcbiAgb3B0aW9uczogVE9wdGlvbltdO1xuICBoZWxwZXJUZXh0PzogUmVhY3ROb2RlO1xuICBuYW1lOiBUTmFtZTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBsYWJlbEtleT86IFRMYWJlbEtleTtcbiAgdmFsdWVLZXk/OiBUVmFsdWVLZXk7XG4gIGRpc2FibGVkS2V5PzogVERpc2FibGVkS2V5O1xuICB0eXBlPzogJ251bWJlcicgfCAnc3RyaW5nJyB8ICdib29sZWFuJztcbiAgZW1wdHlPcHRpb25MYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IFRPcHRpb25bVFZhbHVlS2V5XSB8IFRPcHRpb24gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIHJldHVybk9iamVjdD86IGJvb2xlYW47XG4gIHJvdz86IGJvb2xlYW47XG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIGxhYmVsUHJvcHM/OiBPbWl0PEZvcm1Db250cm9sTGFiZWxQcm9wcywgJ2xhYmVsJyB8ICdjb250cm9sJyB8ICd2YWx1ZSc+O1xuICBmb3JtTGFiZWxQcm9wcz86IE9taXQ8Rm9ybUxhYmVsUHJvcHMsICdyZXF1aXJlZCcgfCAnZXJyb3InPjtcbiAgcmFkaW9Qcm9wcz86IFJhZGlvUHJvcHM7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNmb3JtPzoge1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRPcHRpb25bVFZhbHVlS2V5XTtcbiAgICBvdXRwdXQ/OiAoXG4gICAgICBldmVudE9yVmFsdWU6IEV2ZW50T3JWYWx1ZTxQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4+LFxuICAgICAgdmFsdWU/OiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT5cbiAgICApID0+IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgfTtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xufVxuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBSYWRpb0J1dHRvbkdyb3VwPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPiA9IE9wdGlvbk9iamVjdCxcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2lkJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2xhYmVsJyxcbiAgVERpc2FibGVkS2V5IGV4dGVuZHMgc3RyaW5nID0gJ2Rpc2FibGVkJyxcbj4oXG4gIHByb3BzOiBSYWRpb0J1dHRvbkdyb3VwUHJvcHM8XG4gICAgVEZpZWxkVmFsdWVzLFxuICAgIFROYW1lLFxuICAgIFRPcHRpb24sXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBURGlzYWJsZWRLZXlcbiAgPlxuKSB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIGxhYmVsLFxuICAgIG5hbWUsXG4gICAgbGFiZWxLZXkgPSAnbGFiZWwnIGFzIFRMYWJlbEtleSxcbiAgICB2YWx1ZUtleSA9ICdpZCcgYXMgVFZhbHVlS2V5LFxuICAgIGRpc2FibGVkS2V5ID0gJ2Rpc2FibGVkJyBhcyBURGlzYWJsZWRLZXksXG4gICAgcmVxdWlyZWQsXG4gICAgZW1wdHlPcHRpb25MYWJlbCxcbiAgICByZXR1cm5PYmplY3QsXG4gICAgcm93ID0gdHJ1ZSxcbiAgICBjb250cm9sLFxuICAgIHR5cGUsXG4gICAgbGFiZWxQcm9wcyxcbiAgICBkaXNhYmxlZCxcbiAgICBmb3JtTGFiZWxQcm9wcyxcbiAgICByYWRpb1Byb3BzLFxuICAgIHRyYW5zZm9ybSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFxuICAgIFRGaWVsZFZhbHVlcyxcbiAgICBUTmFtZSxcbiAgICBUT3B0aW9uW1RWYWx1ZUtleV0gfCBUT3B0aW9uXG4gID4oe1xuICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgdHJhbnNmb3JtOiB7XG4gICAgICBpbnB1dDpcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybT8uaW5wdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybS5pbnB1dFxuICAgICAgICAgIDogdmFsdWUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgfHwgKCcnIGFzIFRPcHRpb25bVFZhbHVlS2V5XSk7XG4gICAgICAgICAgICB9LFxuICAgICAgb3V0cHV0OlxuICAgICAgICB0eXBlb2YgdHJhbnNmb3JtPy5vdXRwdXQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRyYW5zZm9ybT8ub3V0cHV0XG4gICAgICAgICAgOiAoX2V2ZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpIGFzIFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICAgICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IG9uUmFkaW9DaGFuZ2U6IFJhZGlvR3JvdXBQcm9wc1snb25DaGFuZ2UnXSA9IChldmVudCwgcmFkaW9WYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHJldHVyblZhbHVlID0gcmV0dXJuT2JqZWN0XG4gICAgICA/IChvcHRpb25zIGFzIFRPcHRpb25bXSkuZmluZChvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XSA9PT0gcmFkaW9WYWx1ZSlcbiAgICAgIDogKHJhZGlvVmFsdWUgYXMgVE9wdGlvbltUVmFsdWVLZXldKTtcblxuICAgIG9uQ2hhbmdlKGV2ZW50LCByZXR1cm5WYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiByZXN0Lm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXN0Lm9uQ2hhbmdlKHJldHVyblZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Rm9ybUNvbnRyb2wgZXJyb3I9eyEhZXJyb3J9PlxuICAgICAge2xhYmVsICYmIChcbiAgICAgICAgPEZvcm1MYWJlbCB7Li4uZm9ybUxhYmVsUHJvcHN9IHJlcXVpcmVkPXtyZXF1aXJlZH0gZXJyb3I9eyEhZXJyb3J9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9Gb3JtTGFiZWw+XG4gICAgICApfVxuICAgICAgPFJhZGlvR3JvdXAgb25DaGFuZ2U9e29uUmFkaW9DaGFuZ2V9IG5hbWU9e25hbWV9IHJvdz17cm93fSB2YWx1ZT17dmFsdWV9PlxuICAgICAgICB7ZW1wdHlPcHRpb25MYWJlbCAmJiAoXG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIHsuLi5sYWJlbFByb3BzfVxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxSYWRpb1xuICAgICAgICAgICAgICAgIHsuLi5yYWRpb1Byb3BzfVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyF2YWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhYmVsPXtlbXB0eU9wdGlvbkxhYmVsfVxuICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvblt2YWx1ZUtleV07XG4gICAgICAgICAgY29uc3Qgb3B0aW9uRGlzYWJsZWQgPSBvcHRpb25bZGlzYWJsZWRLZXldIHx8IGZhbHNlO1xuICAgICAgICAgIGxldCB2YWw6IFRPcHRpb25bVFZhbHVlS2V5XSB8IHVuZGVmaW5lZCA9IHJldHVybk9iamVjdFxuICAgICAgICAgICAgPyAodmFsdWUgYXMgVE9wdGlvbik/Llt2YWx1ZUtleV1cbiAgICAgICAgICAgIDogKHZhbHVlIGFzIFRPcHRpb25bVFZhbHVlS2V5XSk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbCA9IE51bWJlcih2YWwpIGFzIFRPcHRpb25bVFZhbHVlS2V5XTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sZWFuJyAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsID0gQm9vbGVhbih2YWwpIGFzIFRPcHRpb25bVFZhbHVlS2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSB2YWwgPT09IG9wdGlvbktleTtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhvcHRpb25LZXkpfVxuICAgICAgICAgICAgICB7Li4ubGFiZWxQcm9wc31cbiAgICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgICAgPFJhZGlvXG4gICAgICAgICAgICAgICAgICB7Li4ucmFkaW9Qcm9wc31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZCB8fCBvcHRpb25EaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhbHVlPXtvcHRpb25LZXl9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2Vycm9yLm1lc3NhZ2V9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgPC9Gb3JtQ29udHJvbD5cbiAgKTtcbn07XG5cbmNvbnN0IFJhZGlvQnV0dG9uR3JvdXAgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxcbiAgICBUVmFsdWVLZXksXG4gICAgVExhYmVsS2V5LFxuICAgIFREaXNhYmxlZEtleVxuICA+ID0gT3B0aW9uT2JqZWN0LFxuICBUVmFsdWVLZXkgZXh0ZW5kcyAgc3RyaW5nID0gJ2lkJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgIHN0cmluZyA9ICdsYWJlbCcsXG4gIFREaXNhYmxlZEtleSBleHRlbmRzICBzdHJpbmcgPSAnZGlzYWJsZWQnLFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogUmFkaW9CdXR0b25Hcm91cFByb3BzPFxuICBURmllbGRWYWx1ZXMsXG4gIFROYW1lLFxuICBUT3B0aW9uLFxuICBUVmFsdWVLZXksXG4gIFRMYWJlbEtleSxcbiAgVERpc2FibGVkS2V5XG4+KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudDxcbiAgICAgICAgVEZpZWxkVmFsdWVzLFxuICAgICAgICBUTmFtZSxcbiAgICAgICAgVE9wdGlvbixcbiAgICAgICAgVFZhbHVlS2V5LFxuICAgICAgICBUTGFiZWxLZXksXG4gICAgICAgIFREaXNhYmxlZEtleVxuICAgICAgPlxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cblJhZGlvQnV0dG9uR3JvdXAuZGlzcGxheU5hbWUgPSAnUmFkaW9CdXR0b25Hcm91cCc7XG5cbmV4cG9ydCB7IFJhZGlvQnV0dG9uR3JvdXAgfTtcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEdyaWRQcm9wcyxcbiAgQ2hpcFR5cGVNYXAsXG4gIFRleHRGaWVsZFByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbiAgQXV0b2NvbXBsZXRlUHJvcHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgVGV4dEZpZWxkLCBBdXRvY29tcGxldGUgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sLCBGaWVsZFBhdGgsIEZpZWxkVmFsdWVzIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RDYXNjYWRlRWxlbWVudFByb3BzPFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4gPSBPbWl0PFxuICBBdXRvY29tcGxldGVQcm9wczxcbiAgICBUT3B0aW9uLFxuICAgIE11bHRpcGxlLFxuICAgIERpc2FibGVDbGVhcmFibGUsXG4gICAgRnJlZVNvbG8sXG4gICAgQ2hpcENvbXBvbmVudFxuICA+LFxuICB8ICduYW1lJ1xuICB8ICdyZW5kZXJJbnB1dCdcbiAgfCAnaXNPcHRpb25FcXVhbFRvVmFsdWUnXG4gIHwgJ2dldE9wdGlvbkxhYmVsJ1xuICB8ICdkaXNhYmxlZCdcbj4gJiB7XG4gIG5hbWU6IFROYW1lO1xuICBkZXBlbmRzT246IFROYW1lO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdmFyaWFudD86IFRleHRGaWVsZFZhcmlhbnRzO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlzTnVsbGFibGU/OiBib29sZWFuO1xuICBsYWJlbEZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgdmFsdWVGaWVsZD86IGtleW9mIFRPcHRpb247XG4gIHRleHRGaWVsZFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnPjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RDYXNjYWRlRWxlbWVudDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPihwcm9wczogU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxUT3B0aW9uLCBURmllbGRWYWx1ZXMsIFROYW1lPikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHtcbiAgICBsYWJlbEZpZWxkID0gJ0xhYmVsJyxcbiAgICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJyxcbiAgICBuYW1lLFxuICAgIG9uQmx1cixcbiAgICBvbkNoYW5nZSxcbiAgICBkaXNhYmxlZCxcbiAgICBvcHRpb25zOiBvcHRpb25zSW5wdXQsXG4gICAgY29udHJvbCxcbiAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWwsXG4gICAgZGVwZW5kc09uLFxuICAgIHRleHRGaWVsZFByb3BzID0ge30sXG4gICAgdmFyaWFudCxcbiAgICBpc051bGxhYmxlID0gZmFsc2UsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdFRleHRQcm9wcyB9ID0gdGV4dEZpZWxkUHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IG9wdGlvbnNJbnB1dCB8fCBbXSwgW29wdGlvbnNJbnB1dF0pO1xuXG4gIGNvbnN0IGdldE9wdGlvbktleSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb24gPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgY29uc3Qga2V5ID0gb3B0aW9uID8gb3B0aW9uW3ZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IG51bGwgPyBTdHJpbmcoa2V5KSA6ICcnO1xuICAgIH0sXG4gICAgW3ZhbHVlRmllbGRdXG4gICk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uTGFiZWwgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRpb247XG5cbiAgICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICBjb25zdCBpc09wdGlvbkVxdWFsVG9WYWx1ZSA9IChvcHRpb246IFRPcHRpb24sIHZhbHVlOiBUT3B0aW9uKSA9PlxuICAgIGdldE9wdGlvbktleShvcHRpb24pID09PSBnZXRPcHRpb25LZXkodmFsdWUpO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IHsgZmllbGQ6IGRlcGVuZGVudEZpZWxkIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lOiBkZXBlbmRzT24sXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgcGFyZW50VmFsdWVSZWYgPSB1c2VSZWYoZGVwZW5kZW50RmllbGQudmFsdWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgIT09IGRlcGVuZGVudEZpZWxkLnZhbHVlKSB7XG4gICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgIHBhcmVudFZhbHVlUmVmLmN1cnJlbnQgPSBkZXBlbmRlbnRGaWVsZC52YWx1ZTtcbiAgICB9XG4gIH0sIFtkZXBlbmRlbnRGaWVsZC52YWx1ZSwgZmllbGRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhc1ZhbHVlID1cbiAgICAgIGZpZWxkLnZhbHVlICE9PSBudWxsICYmIGZpZWxkLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudmFsdWUgIT09ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFoYXNWYWx1ZSkge1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm47XG4gICAgICBmaWVsZC5vbkNoYW5nZShnZXRPcHRpb25LZXkob3B0aW9uc1swXSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcHRpb25zLCBkaXNhYmxlZCwgZ2V0T3B0aW9uS2V5LCBmaWVsZC5vbkNoYW5nZSwgZGVwZW5kZW50RmllbGQudmFsdWVdKTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICBkZXBlbmRlbnRGaWVsZC52YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgZGVwZW5kZW50RmllbGQudmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgZGVwZW5kZW50RmllbGQudmFsdWUgPT09ICcnXG4gICAgKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDEgJiYgIWlzTnVsbGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2Rpc2FibGVkLCBkZXBlbmRlbnRGaWVsZC52YWx1ZSwgb3B0aW9ucy5sZW5ndGgsIGlzTnVsbGFibGVdKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRvY29tcGxldGVcbiAgICAgIHsuLi5yZXN0fVxuICAgICAgdmFsdWU9e1xuICAgICAgICBvcHRpb25zXG4gICAgICAgICAgLm1hcChvcHRpb24gPT4gKGdldE9wdGlvbktleShvcHRpb24pID09PSBmaWVsZC52YWx1ZSA/IG9wdGlvbiA6IG51bGwpKVxuICAgICAgICAgIC5maW5kKEJvb2xlYW4pIHx8IG51bGxcbiAgICAgIH1cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgZ2V0T3B0aW9uS2V5PXtnZXRPcHRpb25LZXl9XG4gICAgICBnZXRPcHRpb25MYWJlbD17Z2V0T3B0aW9uTGFiZWx9XG4gICAgICBpc09wdGlvbkVxdWFsVG9WYWx1ZT17aXNPcHRpb25FcXVhbFRvVmFsdWV9XG4gICAgICByZWY9e2ZpZWxkLnJlZn1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBvbkNoYW5nZT17KGV2ZW50LCBuZXdWYWx1ZSwgcmVhc29uKSA9PiB7XG4gICAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlID8gZ2V0T3B0aW9uS2V5KG5ld1ZhbHVlKSA6IG51bGwpO1xuICAgICAgICBpZiAob25DaGFuZ2UgJiYgdHlwZW9mIG9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25DaGFuZ2UoZXZlbnQsIG5ld1ZhbHVlLCByZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25CbHVyPXtldmVudCA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAodHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uQmx1cihldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICB7Li4ucmVzdFRleHRQcm9wc31cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZWQgfHwgb3B0aW9ucy5sZW5ndGggPT0gMH1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogaXNEaXNhYmxlZCA/ICdmaWxsZWQnIDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RDYXNjYWRlRWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogU2VsZWN0Q2FzY2FkZUVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzLFxuICBUTmFtZVxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuU2VsZWN0Q2FzY2FkZUVsZW1lbnQuZGlzcGxheU5hbWUgPSAnU2VsZWN0Q2FzY2FkZUVsZW1lbnQnO1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBDaGlwVHlwZU1hcCxcbiAgVGV4dEZpZWxkUHJvcHMsXG4gIEF1dG9jb21wbGV0ZVByb3BzLFxuICBUZXh0RmllbGRWYXJpYW50cyxcbiAgQXV0b2NvbXBsZXRlVmFsdWUsXG4gIEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wsIEZpZWxkUGF0aCwgRmllbGRWYWx1ZXMgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEVsZW1lbnRQcm9wczxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+ID0gT21pdDxcbiAgQXV0b2NvbXBsZXRlUHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBNdWx0aXBsZSxcbiAgICBEaXNhYmxlQ2xlYXJhYmxlLFxuICAgIEZyZWVTb2xvLFxuICAgIENoaXBDb21wb25lbnRcbiAgPixcbiAgfCAnbmFtZSdcbiAgfCAncmVuZGVySW5wdXQnXG4gIHwgJ2lzT3B0aW9uRXF1YWxUb1ZhbHVlJ1xuICB8ICdnZXRPcHRpb25MYWJlbCdcbiAgfCAnZGlzYWJsZWQnXG4gIHwgJ29wdGlvbnMnXG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbGFiZWxGaWVsZD86IHN0cmluZztcbiAgdmFsdWVGaWVsZD86IGtleW9mIFRPcHRpb247XG4gIHRleHRGaWVsZFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnPjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RFbGVtZW50PFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBEaXNhYmxlQ2xlYXJhYmxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBGcmVlU29sbyBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlID0gQ2hpcFR5cGVNYXBbJ2RlZmF1bHRDb21wb25lbnQnXSxcbj4oXG4gIHByb3BzOiBTZWxlY3RFbGVtZW50UHJvcHM8XG4gICAgVE9wdGlvbixcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgTXVsdGlwbGUsXG4gICAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgICBGcmVlU29sbyxcbiAgICBDaGlwQ29tcG9uZW50XG4gID5cbikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgb25DaGFuZ2UsXG4gICAgb3B0aW9uczogb3B0aW9uc0lucHV0LFxuICAgIGxhYmVsLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxGaWVsZCA9ICdMYWJlbCcgYXMga2V5b2YgVE9wdGlvbixcbiAgICB2YWx1ZUZpZWxkID0gJ1ZhbHVlJyBhcyBrZXlvZiBUT3B0aW9uLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHRleHRGaWVsZFByb3BzID0ge30sXG4gICAgaXNOdWxsYWJsZSA9IGZhbHNlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHsgcmVxdWlyZWQsIC4uLnJlc3RUZXh0UHJvcHMgfSA9IHRleHRGaWVsZFByb3BzO1xuICBjb25zdCBvcHRpb25zID0gdXNlTWVtbygoKSA9PiBvcHRpb25zSW5wdXQgfHwgW10sIFtvcHRpb25zSW5wdXRdKTtcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICBjb25zdCBnZXRPcHRpb25WYWx1ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24gfCBBdXRvY29tcGxldGVGcmVlU29sb1ZhbHVlTWFwcGluZzxGcmVlU29sbz4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjtcblxuICAgICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvblt2YWx1ZUZpZWxkIGFzIGtleW9mIFRPcHRpb25dIDogbnVsbDtcbiAgICB9LFxuICAgIFt2YWx1ZUZpZWxkXVxuICApO1xuXG4gIGNvbnN0IGdldE9wdGlvbkxhYmVsID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogVE9wdGlvbiB8IEF1dG9jb21wbGV0ZUZyZWVTb2xvVmFsdWVNYXBwaW5nPEZyZWVTb2xvPikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgICByZXR1cm4gb3B0aW9uID8gU3RyaW5nKG9wdGlvbltsYWJlbEZpZWxkIGFzIGtleW9mIFRPcHRpb25dKSA6ICcnO1xuICAgIH0sXG4gICAgW2xhYmVsRmllbGRdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9XG4gICAgICBmaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBmaWVsZC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnZhbHVlICE9PSAnJztcblxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiAhaGFzVmFsdWUpIHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZmllbGQub25DaGFuZ2UoZ2V0T3B0aW9uVmFsdWUob3B0aW9uc1swXSkpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcHRpb25zLCBkaXNhYmxlZCwgZ2V0T3B0aW9uVmFsdWUsIGZpZWxkLm9uQ2hhbmdlXSk7XG5cbiAgY29uc3QgaXNEaXNhYmxlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDEgJiYgIWlzTnVsbGFibGUpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBbZGlzYWJsZWQsIG9wdGlvbnMubGVuZ3RoLCBpc051bGxhYmxlXSk7XG5cbiAgY29uc3QgYXV0b2NvbXBsZXRlVmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBvcHRpb25zLmZpbmQob3B0aW9uID0+IGdldE9wdGlvblZhbHVlKG9wdGlvbikgPT09IGZpZWxkLnZhbHVlKSA/PyBudWxsLFxuICAgIFtmaWVsZC52YWx1ZSwgb3B0aW9ucywgZ2V0T3B0aW9uVmFsdWVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9ucz17ZmFsc2V9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgdmFsdWU9e1xuICAgICAgICBhdXRvY29tcGxldGVWYWx1ZSBhcyBBdXRvY29tcGxldGVWYWx1ZTxcbiAgICAgICAgICBUT3B0aW9uLFxuICAgICAgICAgIE11bHRpcGxlLFxuICAgICAgICAgIERpc2FibGVDbGVhcmFibGUsXG4gICAgICAgICAgRnJlZVNvbG9cbiAgICAgICAgPlxuICAgICAgfVxuICAgICAgb25DaGFuZ2U9eyhldmVudCwgbmV3VmFsdWUsIHJlYXNvbikgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBuZXdWYWx1ZSBhcyBUT3B0aW9uIHwgbnVsbDtcblxuICAgICAgICBmaWVsZC5vbkNoYW5nZShvcHRpb24gPyBnZXRPcHRpb25WYWx1ZShvcHRpb24pIDogbnVsbCk7XG4gICAgICAgIG9uQ2hhbmdlPy4oZXZlbnQsIG5ld1ZhbHVlLCByZWFzb24pO1xuICAgICAgfX1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IGdldE9wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICByZWY9e2ZpZWxkLnJlZn1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXsob3B0aW9uLCB2YWx1ZSkgPT5cbiAgICAgICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZ2V0T3B0aW9uVmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgICByZW5kZXJJbnB1dD17cGFyYW1zID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgey4uLnJlc3RUZXh0UHJvcHN9XG4gICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVkfVxuICAgICAgICAgIGVycm9yPXshIWVycm9yfVxuICAgICAgICAgIGhlbHBlclRleHQ9e2Vycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnfVxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgdmFyaWFudD17dmFyaWFudCA/IHZhcmlhbnQgOiBpc0Rpc2FibGVkID8gJ2ZpbGxlZCcgOiAnb3V0bGluZWQnfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAvPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIEF1dG9jb21wbGV0ZSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBmcm9tIHByZWRlZmluZWQgb3B0aW9ucy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGZ1bGx5IGludGVncmF0ZWQgc2VsZWN0L2F1dG9jb21wbGV0ZSBpbnB1dCB0aGF0IHdvcmtzIHNlYW1sZXNzbHlcbiAqIHdpdGggcmVhY3QtaG9vay1mb3JtLCBpbmNsdWRpbmcgYXV0b21hdGljIHZhbGlkYXRpb24sIGVycm9yIGhhbmRsaW5nLCBhbmQgb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKiBmb3IgcmVzcG9uc2l2ZSBsYXlvdXRzLiBJdCBzdXBwb3J0cyBib3RoIHNpbmdsZSBhbmQgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGVzLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBBdXRvY29tcGxldGUgd2l0aCBmaWx0ZXJpbmdcbiAqIC0gU2luZ2xlIGFuZCBtdWx0aXBsZSBzZWxlY3Rpb24gc3VwcG9ydFxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheVxuICogLSBDdXN0b21pemFibGUgb3B0aW9uIGRpc3BsYXkgKGxhYmVsS2V5L3ZhbHVlS2V5KVxuICogLSBBdXRvLXNlbGVjdGlvbiB3aGVuIG9ubHkgb25lIG9wdGlvbiBleGlzdHNcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxuICogLSBUeXBlU2NyaXB0IHR5cGUgc2FmZXR5XG4gKiAtIERpc2FibGVkIHN0YXRlIHN0eWxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxTZWxlY3RFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJjYXRlZ29yeVwiXG4gKiAgIGxhYmVsPVwiQ2F0ZWdvcnlcIlxuICogICBvcHRpb25zPXtbXG4gKiAgICAgeyBMYWJlbDogJ1RlY2hub2xvZ3knLCBWYWx1ZTogJ3RlY2gnIH1cbiAqICAgXX1cbiAqICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdQbGVhc2Ugc2VsZWN0IGEgY2F0ZWdvcnknIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggY3VzdG9tIGtleXM6XG4gKiBgYGB0c3hcbiAqIDxTZWxlY3RFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJ1c2VySWRcIlxuICogICBsYWJlbD1cIkFzc2lnbiB0byBVc2VyXCJcbiAqICAgb3B0aW9ucz17dXNlcnN9XG4gKiAgIGxhYmVsS2V5PVwiZnVsbE5hbWVcIlxuICogICB2YWx1ZUtleT1cImlkXCJcbiAqICAgcGxhY2Vob2xkZXI9XCJDaG9vc2UgYSB1c2VyLi4uXCJcbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogTXVsdGlwbGUgc2VsZWN0aW9uOlxuICogYGBgdHN4XG4gKiA8U2VsZWN0RWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwidGFnc1wiXG4gKiAgIGxhYmVsPVwiVGFnc1wiXG4gKiAgIG9wdGlvbnM9e2F2YWlsYWJsZVRhZ3N9XG4gKiAgIG11bHRpcGxlXG4gKiAgIGdyaWRQcm9wcz17eyBzaXplOiB7IHhzOiAxMiwgbWQ6IDggfSB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBUT3B0aW9uIC0gVGhlIG9wdGlvbiBvYmplY3QgdHlwZVxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgTXVsdGlwbGUgLSBXaGV0aGVyIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBlbmFibGVkXG4gKiBAdGVtcGxhdGUgRGlzYWJsZUNsZWFyYWJsZSAtIFdoZXRoZXIgdGhlIGNsZWFyIGJ1dHRvbiBpcyBkaXNhYmxlZFxuICogQHRlbXBsYXRlIEZyZWVTb2xvIC0gV2hldGhlciBmcmVlIHRleHQgaW5wdXQgaXMgYWxsb3dlZFxuICogQHRlbXBsYXRlIENoaXBDb21wb25lbnQgLSBUaGUgY2hpcCBjb21wb25lbnQgdHlwZSBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgU2VsZWN0RWxlbWVudCA9IDxcbiAgVE9wdGlvbixcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcbiAgRnJlZVNvbG8gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIENoaXBDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5FbGVtZW50VHlwZSA9IENoaXBUeXBlTWFwWydkZWZhdWx0Q29tcG9uZW50J10sXG4+KHtcbiAgZ3JpZFByb3BzID0ge30sXG4gIC4uLnByb3BzXG59OiBTZWxlY3RFbGVtZW50UHJvcHM8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWUsXG4gIE11bHRpcGxlLFxuICBEaXNhYmxlQ2xlYXJhYmxlLFxuICBGcmVlU29sbyxcbiAgQ2hpcENvbXBvbmVudFxuPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuU2VsZWN0RWxlbWVudC5kaXNwbGF5TmFtZSA9ICdTZWxlY3RFbGVtZW50JztcbiIsICJpbXBvcnQgQ2hlY2tCb3hJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2tCb3gnO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrQm94T3V0bGluZUJsYW5rJztcbmltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBDaGlwVHlwZU1hcCxcbiAgQXV0b2NvbXBsZXRlUHJvcHMsXG4gIFRleHRGaWVsZFZhcmlhbnRzLFxuICBBdXRvY29tcGxldGVDaGFuZ2VSZWFzb24sXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHtcbiAgR3JpZCxcbiAgQ2hlY2tib3gsXG4gIFRleHRGaWVsZCxcbiAgQXV0b2NvbXBsZXRlLFxuICBDaXJjdWxhclByb2dyZXNzLFxuICB1c2VUaGVtZSxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgdHlwZSB7IFN5bnRoZXRpY0V2ZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbCwgRmllbGRQYXRoLCBGaWVsZFZhbHVlcyB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcblxudHlwZSBCYXNlQXV0b2NvbXBsZXRlUHJvcHM8XG4gIFRPcHRpb24sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgRGlzYWJsZUNsZWFyYWJsZSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIEZyZWVTb2xvIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgQ2hpcENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkVsZW1lbnRUeXBlLFxuPiA9IE9taXQ8XG4gIEF1dG9jb21wbGV0ZVByb3BzPFxuICAgIFRPcHRpb24sXG4gICAgTXVsdGlwbGUsXG4gICAgRGlzYWJsZUNsZWFyYWJsZSxcbiAgICBGcmVlU29sbyxcbiAgICBDaGlwQ29tcG9uZW50XG4gID4sXG4gICduYW1lJyB8ICdyZW5kZXJJbnB1dCcgfCAnbXVsdGlwbGUnIHwgJ29uQ2hhbmdlJyB8ICd2YWx1ZSdcbj47XG5cbmV4cG9ydCB0eXBlIFNlbGVjdE11bHRpRWxlbWVudFByb3BzPFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWUsXG4gIERpc2FibGVDbGVhcmFibGUgZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2UsXG4gIEZyZWVTb2xvIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlLFxuICBDaGlwQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuRWxlbWVudFR5cGUgPSBDaGlwVHlwZU1hcFsnZGVmYXVsdENvbXBvbmVudCddLFxuPiA9IEJhc2VBdXRvY29tcGxldGVQcm9wczxcbiAgVE9wdGlvbixcbiAgTXVsdGlwbGUsXG4gIERpc2FibGVDbGVhcmFibGUsXG4gIEZyZWVTb2xvLFxuICBDaGlwQ29tcG9uZW50XG4+ICYge1xuICBuYW1lOiBUTmFtZTtcbiAgY29udHJvbD86IENvbnRyb2w8VEZpZWxkVmFsdWVzPjtcbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGlzTnVsbGFibGU/OiBib29sZWFuO1xuICB2YXJpYW50PzogVGV4dEZpZWxkVmFyaWFudHM7XG4gIGxhYmVsRmllbGQ/OiBrZXlvZiBUT3B0aW9uO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgVE9wdGlvbjtcbiAgb3B0aW9ucz86IHJlYWRvbmx5IFRPcHRpb25bXSB8IG51bGw7XG59O1xuXG5jb25zdCBDb21wb25lbnQgPSBmdW5jdGlvbiBTZWxlY3RNdWx0aUVsZW1lbnQ8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4ocHJvcHM6IFNlbGVjdE11bHRpRWxlbWVudFByb3BzPFRPcHRpb24sIFRGaWVsZFZhbHVlcywgVE5hbWU+KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgb25CbHVyLFxuICAgIGRpc2FibGVkLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNJbnB1dCxcbiAgICBsb2FkaW5nID0gZmFsc2UsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWwsXG4gICAgaXNOdWxsYWJsZSxcbiAgICB2YXJpYW50LFxuICAgIGxhYmVsRmllbGQgPSAnTGFiZWwnLFxuICAgIHZhbHVlRmllbGQgPSAnVmFsdWUnLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gb3B0aW9uc0lucHV0IHx8IFtdLCBbb3B0aW9uc0lucHV0XSk7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgfSk7XG5cbiAgY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSAob3B0aW9uOiBUT3B0aW9uKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0aW9uO1xuXG4gICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvblt2YWx1ZUZpZWxkIGFzIGtleW9mIFRPcHRpb25dIDogbnVsbDtcbiAgfTtcblxuICBjb25zdCBnZXRPcHRpb25MYWJlbCA9IChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIG9wdGlvbjtcblxuICAgIHJldHVybiBvcHRpb24gPyBTdHJpbmcob3B0aW9uW2xhYmVsRmllbGQgYXMga2V5b2YgVE9wdGlvbl0pIDogJyc7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAxICYmICFpc051bGxhYmxlKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2Rpc2FibGVkLCBvcHRpb25zLmxlbmd0aCwgaXNOdWxsYWJsZV0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkVmFsdWUgPVxuICAgIGZpZWxkLnZhbHVlICYmIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpXG4gICAgICA/IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBmaWVsZC52YWx1ZS5pbmNsdWRlcyhnZXRPcHRpb25WYWx1ZShvcHRpb24pKSlcbiAgICAgIDogW107XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmIGZpZWxkLnZhbHVlLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDEgJiYgIWhhc1ZhbHVlICYmICFpc051bGxhYmxlKSB7XG4gICAgICBmaWVsZC5vbkNoYW5nZShbZ2V0T3B0aW9uVmFsdWUob3B0aW9uc1swXSldKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbb3B0aW9ucywgZ2V0T3B0aW9uVmFsdWUsIGZpZWxkLm9uQ2hhbmdlLCBpc051bGxhYmxlXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIF86IFN5bnRoZXRpY0V2ZW50LFxuICAgIHNlbGVjdGVkT3B0aW9uczogVE9wdGlvbltdLFxuICAgIHJlYXNvbjogQXV0b2NvbXBsZXRlQ2hhbmdlUmVhc29uXG4gICkgPT4ge1xuICAgIGlmIChyZWFzb24gPT09ICdjbGVhcicpIHtcbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG51bGwpO1xuICAgIH0gZWxzZSBpZiAocmVhc29uID09PSAnc2VsZWN0T3B0aW9uJyB8fCByZWFzb24gPT09ICdyZW1vdmVPcHRpb24nKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZXMgPSBzZWxlY3RlZE9wdGlvbnMubWFwKG9wdGlvbiA9PiBnZXRPcHRpb25WYWx1ZShvcHRpb24pKTtcblxuICAgICAgZmllbGQub25DaGFuZ2UobmV3VmFsdWVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBuZXdWYWx1ZXMpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpY29uID0gPENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmb250U2l6ZT1cInNtYWxsXCIgLz47XG4gIGNvbnN0IGNoZWNrZWRJY29uID0gPENoZWNrQm94SWNvbiBmb250U2l6ZT1cInNtYWxsXCIgLz47XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICBtdWx0aXBsZVxuICAgICAgdmFsdWU9e3NlbGVjdGVkVmFsdWV9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIGdldE9wdGlvbkxhYmVsPXtnZXRPcHRpb25MYWJlbH1cbiAgICAgIGlzT3B0aW9uRXF1YWxUb1ZhbHVlPXsob3B0aW9uLCB2YWx1ZSkgPT5cbiAgICAgICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSA9PT0gZ2V0T3B0aW9uVmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgICBmaWx0ZXJTZWxlY3RlZE9wdGlvbnNcbiAgICAgIGRpc2FibGVDbG9zZU9uU2VsZWN0XG4gICAgICByZWY9e2ZpZWxkLnJlZn1cbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgc3g9e3tcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpSW5wdXRCYXNlLXJvb3QuTXVpLWRpc2FibGVkJzoge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kLFxuICAgICAgICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkICFpbXBvcnRhbnQnLFxuICAgICAgICB9LFxuICAgICAgICAnJi5NdWktZGlzYWJsZWQgLk11aUF1dG9jb21wbGV0ZS1wb3B1cEluZGljYXRvcic6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQgLk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmUnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBlcnJvciA/ICdyZWQnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlGaWxsZWRJbnB1dC1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH19XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHJlbmRlck9wdGlvbj17KHByb3BzMSwgb3B0aW9uLCB7IHNlbGVjdGVkIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8bGkgey4uLnByb3BzMX0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgaWNvbj17aWNvbn1cbiAgICAgICAgICAgICAgY2hlY2tlZEljb249e2NoZWNrZWRJY29ufVxuICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7Z2V0T3B0aW9uTGFiZWwob3B0aW9uIGFzIFRPcHRpb24pfVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgICAgcmVuZGVySW5wdXQ9e3BhcmFtcyA9PiAoXG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICB7Li4ucGFyYW1zfVxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtlcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJ31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgSW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgLi4ucGFyYW1zLklucHV0UHJvcHMsXG4gICAgICAgICAgICBlbmRBZG9ybm1lbnQ6IChcbiAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgPENpcmN1bGFyUHJvZ3Jlc3MgY29sb3I9XCJpbmhlcml0XCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge3BhcmFtcy5JbnB1dFByb3BzLmVuZEFkb3JubWVudH1cbiAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfX1cbiAgICAgICAgICB2YXJpYW50PXt2YXJpYW50ID8gdmFyaWFudCA6IGlzRGlzYWJsZWQgPyAnZmlsbGVkJyA6ICdvdXRsaW5lZCd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgey4uLnJlc3R9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTZWxlY3RNdWx0aUVsZW1lbnQgPSA8XG4gIFRPcHRpb24sXG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFNlbGVjdE11bHRpRWxlbWVudFByb3BzPFxuICBUT3B0aW9uLFxuICBURmllbGRWYWx1ZXMsXG4gIFROYW1lXG4+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuXG5TZWxlY3RNdWx0aUVsZW1lbnQuZGlzcGxheU5hbWUgPSAnU2VsZWN0TXVsdGlFbGVtZW50JztcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEdyaWRQcm9wcyxcbiAgVGV4dEZpZWxkUHJvcHMsXG4gIFRleHRGaWVsZFZhcmlhbnRzLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudCwgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnRyb2wsXG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkUGF0aCxcbiAgRmllbGRWYWx1ZXMsXG4gIFBhdGhWYWx1ZSxcbn0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgdHlwZSB7IEZpZWxkVHlwZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRyYW5zZm9ybS9lbmhhbmNlZCc7XG5pbXBvcnQgeyB1c2VFbmhhbmNlZFRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVRyYW5zZm9ybS9lbmhhbmNlZCc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50T3JWYWx1ZSB9IGZyb20gJy4uLy4uL3R5cGVzL2V2ZW50cyc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBUZXh0RmllbGRFbGVtZW50IGNvbXBvbmVudC5cbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0RmllbGRFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPiB7XG4gIC8qKlxuICAgKiBUaGUgZmllbGQgbmFtZSBpbiB0aGUgZm9ybVxuICAgKiBAZXhhbXBsZSBcImZpcnN0TmFtZVwiIHwgXCJ1c2VyLmVtYWlsXCJcbiAgICovXG4gIG5hbWU6IFROYW1lO1xuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIG1lc3NhZ2UgcGFyc2VyXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBmaWVsZCBlcnJvciBvYmplY3RcbiAgICogQHJldHVybnMgQ3VzdG9tIGVycm9yIG1lc3NhZ2Ugb3IgY29tcG9uZW50XG4gICAqL1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yKSA9PiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGluc3RhbmNlIGZyb20gcmVhY3QtaG9vay1mb3JtXG4gICAqL1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICAvKipcbiAgICogQ3VzdG9tIFRleHRGaWVsZCBjb21wb25lbnQgdG8gdXNlIGluc3RlYWQgb2YgZGVmYXVsdCBNVUkgVGV4dEZpZWxkXG4gICAqL1xuICBjb21wb25lbnQ/OiB0eXBlb2YgVGV4dEZpZWxkO1xuICAvKipcbiAgICogVmFsdWUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zIGZvciBpbnB1dC9vdXRwdXRcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGZpZWxkVHlwZSBmb3IgY29tbW9uIHBhdHRlcm5zIG9yIGN1c3RvbSB0cmFuc2Zvcm1zIGZvciBjb21wbGV4IGNhc2VzXG4gICAqL1xuICB0cmFuc2Zvcm0/OiB7XG4gICAgLyoqIFRyYW5zZm9ybSB2YWx1ZSBiZWZvcmUgZGlzcGxheWluZyBpbiBpbnB1dCAqL1xuICAgIGlucHV0PzogKHZhbHVlOiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4pID0+IFRWYWx1ZTtcbiAgICAvKiogVHJhbnNmb3JtIGlucHV0IGV2ZW50IHRvIGZvcm0gdmFsdWUgKi9cbiAgICBvdXRwdXQ/OiAoXG4gICAgICBldmVudE9yVmFsdWU6IEV2ZW50T3JWYWx1ZTxQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4+LFxuICAgICAgdmFsdWU/OiBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT5cbiAgICApID0+IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPjtcbiAgfTtcbiAgLyoqXG4gICAqIEJ1aWx0LWluIGZpZWxkIHR5cGUgZm9yIGF1dG9tYXRpYyB0cmFuc2Zvcm1hdGlvblxuICAgKiBAZXhhbXBsZSAndGV4dCcgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICd0aW1lJyB8ICdzZWxlY3QnXG4gICAqL1xuICBmaWVsZFR5cGU/OiBGaWVsZFR5cGU7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHZhbHVlIHRvIGRpc3BsYXkgd2hlbiBmaWVsZCB2YWx1ZSBpcyBudWxsL3VuZGVmaW5lZFxuICAgKiBAZXhhbXBsZSBcIlwiXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBUVmFsdWU7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgbGFiZWwgdGV4dFxuICAgKiBAZXhhbXBsZSBcIkVtYWlsIEFkZHJlc3NcIlxuICAgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICogQGV4YW1wbGUgXCJFbnRlciB5b3VyIGVtYWlsXCJcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBwcm9wcyBmb3IgdGhlIHVuZGVybHlpbmcgVGV4dEZpZWxkIGNvbXBvbmVudFxuICAgKi9cbiAgdGV4dEZpZWxkUHJvcHM/OiBPbWl0PFRleHRGaWVsZFByb3BzLCAnbmFtZSc+O1xuICAvKipcbiAgICogR3JpZCBsYXlvdXQgcHJvcHMgZm9yIHRoZSB3cmFwcGVyIEdyaWQgY29tcG9uZW50XG4gICAqIEBkZWZhdWx0VmFsdWUgeyBzaXplOiB7IHhzOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0gfVxuICAgKi9cbiAgZ3JpZFByb3BzPzogR3JpZFByb3BzO1xuICAvKipcbiAgICogVGhlIFRleHRGaWVsZCB2YXJpYW50XG4gICAqIEBkZWZhdWx0VmFsdWUgXCJvdXRsaW5lZFwiXG4gICAqL1xuICB2YXJpYW50PzogVGV4dEZpZWxkVmFyaWFudHM7XG4gIC8qKlxuICAgKiBDdXN0b20gc3R5bGVzIGZvciB0aGUgVGV4dEZpZWxkXG4gICAqL1xuICAvKipcbiAgICogQ3VzdG9tIG9uQ2hhbmdlIGhhbmRsZXIgY2FsbGVkIGFmdGVyIHRyYW5zZm9ybWF0aW9uXG4gICAqL1xuICBvbkNoYW5nZT86IChcbiAgICBldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gICkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEVuYWJsZSBkZXZlbG9wbWVudCB3YXJuaW5ncyBmb3IgZGVidWdnaW5nIHRyYW5zZm9ybWF0aW9uIGlzc3Vlc1xuICAgKiBAZGVmYXVsdFZhbHVlIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAqL1xuICBlbmFibGVXYXJuaW5ncz86IGJvb2xlYW47XG59XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFRleHRGaWVsZEVsZW1lbnQ8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlID0gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuPihwcm9wczogVGV4dEZpZWxkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4pIHtcbiAgY29uc3Qge1xuICAgIHBhcnNlRXJyb3IsXG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICAgIGNvbXBvbmVudDogVGV4dEZpZWxkQ29tcG9uZW50ID0gVGV4dEZpZWxkLFxuICAgIHRyYW5zZm9ybSxcbiAgICBmaWVsZFR5cGUgPSAndGV4dCcsIC8vIERlZmF1bHQgdG8gdGV4dCB0eXBlXG4gICAgZGVmYXVsdFZhbHVlLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHRleHRGaWVsZFByb3BzID0ge30sXG4gICAgdmFyaWFudCxcbiAgICBvbkNoYW5nZTogY3VzdG9tT25DaGFuZ2UsXG4gICAgZW5hYmxlV2FybmluZ3MgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICByZXF1aXJlZCxcbiAgICBoZWxwZXJUZXh0LFxuICAgIGlucHV0UmVmLFxuICAgIG9uSW5wdXQsXG4gICAgb25CbHVyLFxuICAgIGRpc2FibGVkLFxuICAgIC4uLnJlc3RUZXh0UHJvcHNcbiAgfSA9IHRleHRGaWVsZFByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIC8vIFVzZSB0aGUgZW5oYW5jZWQgdHJhbnNmb3JtIGhvb2sgd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zXG4gIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlIH0gPSB1c2VFbmhhbmNlZFRyYW5zZm9ybTxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KFxuICAgIHtcbiAgICAgIHZhbHVlOiBmaWVsZC52YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiBmaWVsZC5vbkNoYW5nZSxcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaW5wdXQ6IHRyYW5zZm9ybS5pbnB1dCxcbiAgICAgICAgICAgIG91dHB1dDogdHJhbnNmb3JtLm91dHB1dCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZmllbGRUeXBlOiAhdHJhbnNmb3JtXG4gICAgICAgID8gdHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/ICdudW1iZXInXG4gICAgICAgICAgOiBmaWVsZFR5cGVcbiAgICAgICAgOiB1bmRlZmluZWQsIC8vIEF1dG8tZGV0ZWN0IG51bWJlciB0eXBlXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBlbmFibGVXYXJuaW5ncyxcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGZpZWxkLnJlZiwgaW5wdXRSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRleHRGaWVsZENvbXBvbmVudFxuICAgICAgey4uLnJlc3R9XG4gICAgICB7Li4ucmVzdFRleHRQcm9wc31cbiAgICAgIG5hbWU9e2ZpZWxkLm5hbWV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09ICcnKSB7XG4gICAgICAgICAgZmllbGQub25DaGFuZ2UobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjdXN0b21PbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGN1c3RvbU9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH19XG4gICAgICBvbkJsdXI9e2V2ZW50ID0+IHtcbiAgICAgICAgZmllbGQub25CbHVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uSW5wdXQ9eyhldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbklucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25JbnB1dChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBsYWJlbD17bGFiZWx9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIHJlcXVpcmVkPXtyZXF1aXJlZH1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICBlcnJvcj17ISFlcnJvcn1cbiAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICBlcnJvciA/IChwYXJzZUVycm9yID8gcGFyc2VFcnJvcihlcnJvcikgOiBlcnJvci5tZXNzYWdlKSA6IGhlbHBlclRleHRcbiAgICAgIH1cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogJ291dGxpbmVkJ31cbiAgICAvPlxuICApO1xufTtcblxuLyoqXG4gKiBBIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGVkIFRleHRGaWVsZCBjb21wb25lbnQgd2l0aCBhdXRvbWF0aWMgdmFsaWRhdGlvbixcbiAqIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIGFuZCBidWlsdC1pbiBmaWVsZCB0eXBlIGhhbmRsaW5nLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBGdWxsIHJlYWN0LWhvb2stZm9ybSBpbnRlZ3JhdGlvblxuICogLSBBdXRvbWF0aWMgZXJyb3IgZGlzcGxheSB3aXRoIGN1c3RvbSBwYXJzaW5nXG4gKiAtIFZhbHVlIHRyYW5zZm9ybWF0aW9uIHN1cHBvcnRcbiAqIC0gQnVpbHQtaW4gZmllbGQgdHlwZXMgZm9yIGNvbW1vbiBwYXR0ZXJuc1xuICogLSBHcmlkIGxheW91dCB3cmFwcGVyXG4gKiAtIFR5cGVTY3JpcHQgdHlwZSBzYWZldHlcbiAqIC0gT3B0aW1pemVkIG51bWJlciBpbnB1dCBoYW5kbGluZ1xuICogLSBEaXNhYmxlZCBzdGF0ZSBzdHlsaW5nXG4gKiAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgd2l0aCBtZW1vaXplZCB0cmFuc2Zvcm1hdGlvbnNcbiAqIC0gRGV2ZWxvcG1lbnQgd2FybmluZ3MgZm9yIGRlYnVnZ2luZ1xuICogLSBTdGFibGUgcmVmZXJlbmNlcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2Ugd2l0aCBidWlsdC1pbiBudW1iZXIgaGFuZGxpbmc6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJhZ2VcIlxuICogICBsYWJlbD1cIkFnZVwiXG4gKiAgIGZpZWxkVHlwZT1cIm51bWJlclwiXG4gKiAgIHJ1bGVzPXt7IHJlcXVpcmVkOiAnQWdlIGlzIHJlcXVpcmVkJywgbWluOiB7IHZhbHVlOiAwLCBtZXNzYWdlOiAnQWdlIG11c3QgYmUgcG9zaXRpdmUnIH0gfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQWR2YW5jZWQgdXNhZ2Ugd2l0aCBjdXN0b20gZ3JpZCBsYXlvdXQ6XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJlbWFpbFwiXG4gKiAgIGxhYmVsPVwiRW1haWxcIlxuICogICBmaWVsZFR5cGU9XCJ0ZXh0XCJcbiAqICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGVtYWlsIGFkZHJlc3NcIlxuICogICBncmlkUHJvcHM9e3sgc2l6ZTogeyB4czogMTIsIG1kOiA2IH0gfX1cbiAqICAgcnVsZXM9e3tcbiAqICAgICByZXF1aXJlZDogJ0VtYWlsIGlzIHJlcXVpcmVkJyxcbiAqICAgICBwYXR0ZXJuOiB7IHZhbHVlOiAvXFxTK0BcXFMrXFwuXFxTKy8sIG1lc3NhZ2U6ICdJbnZhbGlkIGVtYWlsJyB9XG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSB0cmFuc2Zvcm1hdGlvbjpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInByaWNlXCJcbiAqICAgbGFiZWw9XCJQcmljZVwiXG4gKiAgIHRyYW5zZm9ybT17e1xuICogICAgIGlucHV0OiAodmFsdWUpID0+IHZhbHVlID8gYCQke3ZhbHVlfWAgOiAnJyxcbiAqICAgICBvdXRwdXQ6IChldmVudCkgPT4gcGFyc2VGbG9hdChldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgnJCcsICcnKSkgfHwgbnVsbFxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBlcnJvciBwYXJzaW5nOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwidXNlcm5hbWVcIlxuICogICBsYWJlbD1cIlVzZXJuYW1lXCJcbiAqICAgZmllbGRUeXBlPVwidGV4dFwiXG4gKiAgIHBhcnNlRXJyb3I9eyhlcnJvcikgPT4gKFxuICogICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAncmVkJyB9fT5cbiAqICAgICAgIFx1MjZBMFx1RkUwRiB7ZXJyb3IubWVzc2FnZX1cbiAqICAgICA8L3NwYW4+XG4gKiAgICl9XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBmb3JtIHZhbHVlcyB0eXBlXG4gKiBAdGVtcGxhdGUgVE5hbWUgLSBUaGUgZmllbGQgbmFtZSB0eXBlXG4gKiBAdGVtcGxhdGUgVFZhbHVlIC0gVGhlIHRyYW5zZm9ybWVkIHZhbHVlIHR5cGVcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHNcbiAqIEByZXR1cm5zIFJlYWN0IGVsZW1lbnQgd2l0aCBvcHRpb25hbCBHcmlkIHdyYXBwZXJcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0RmllbGRFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSA9IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFRleHRGaWVsZEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KTogUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtcbiAgR3JpZFByb3BzLFxuICBUZXh0RmllbGRQcm9wcyxcbiAgVGV4dEZpZWxkVmFyaWFudHMsXG59IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgR3JpZCwgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUge1xuICBQaWNrZXJWYWxpZERhdGUsXG4gIFRpbWVQaWNrZXJQcm9wcyxcbiAgVGltZVBpY2tlclNsb3RQcm9wcyxcbiAgVGltZVZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycyc7XG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycyc7XG5pbXBvcnQgeyB1c2VMb2NhbGl6YXRpb25Db250ZXh0IH0gZnJvbSAnQG11aS94LWRhdGUtcGlja2Vycy9pbnRlcm5hbHMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnRyb2wsXG4gIEZpZWxkUGF0aCxcbiAgUGF0aFZhbHVlLFxuICBGaWVsZEVycm9yLFxuICBGaWVsZFZhbHVlcyxcbn0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgeyB1c2VUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9ob29rcy91c2VUcmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgeyBFdmVudE9yVmFsdWUgfSBmcm9tICcuLi8uLi90eXBlcy9ldmVudHMnO1xuaW1wb3J0IHsgcmVhZFZhbHVlQXNEYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVhZFZhbHVlQXNEYXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lUGlja2VyRWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbiAgVEVuYWJsZUFjY2Vzc2libGVGaWVsZERPTVN0cnVjdHVyZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbj4ge1xuICBuYW1lOiBUTmFtZTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc0RhdGU/OiBib29sZWFuO1xuICBwYXJzZUVycm9yPzogKGVycm9yOiBGaWVsZEVycm9yIHwgVGltZVZhbGlkYXRpb25FcnJvcikgPT4gUmVhY3ROb2RlO1xuICBjb250cm9sPzogQ29udHJvbDxURmllbGRWYWx1ZXM+O1xuICBpbnB1dFByb3BzPzogT21pdDxUZXh0RmllbGRQcm9wcywgJ25hbWUnPjtcbiAgaGVscGVyVGV4dD86IFRleHRGaWVsZFByb3BzWydoZWxwZXJUZXh0J107XG4gIGxhYmVsPzogUmVhY3ROb2RlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdGV4dFJlYWRPbmx5PzogYm9vbGVhbjtcbiAgc2xvdFByb3BzPzogT21pdDxcbiAgICBUaW1lUGlja2VyU2xvdFByb3BzPFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmU+LFxuICAgICd0ZXh0RmllbGQnXG4gID47XG4gIHRyYW5zZm9ybT86IHtcbiAgICBpbnB1dD86ICh2YWx1ZTogUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+KSA9PiBUVmFsdWUgfCBudWxsO1xuICAgIG91dHB1dD86IChcbiAgICAgIGV2ZW50T3JWYWx1ZTogRXZlbnRPclZhbHVlPFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPj4sXG4gICAgICB2YWx1ZT86IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPlxuICAgICkgPT4gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICB9O1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIHRpbWVQaWNrZXJQcm9wcz86IE9taXQ8XG4gICAgVGltZVBpY2tlclByb3BzPFRFbmFibGVBY2Nlc3NpYmxlRmllbGRET01TdHJ1Y3R1cmU+LFxuICAgICd2YWx1ZScgfCAnc2xvdFByb3BzJ1xuICA+O1xuICB2YXJpYW50PzogVGV4dEZpZWxkVmFyaWFudHM7XG59XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIFRpbWVQaWNrZXJFbGVtZW50PFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4ocHJvcHM6IFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPikge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICByZXF1aXJlZCxcbiAgICBpbnB1dFByb3BzLFxuICAgIGNvbnRyb2wsXG4gICAgdGV4dFJlYWRPbmx5LFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHNsb3RQcm9wcyxcbiAgICB0aW1lUGlja2VyUHJvcHMgPSB7fSxcbiAgICB0cmFuc2Zvcm0sXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgYWRhcHRlciA9IHVzZUxvY2FsaXphdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCB7IGRpc2FibGVkLCBpbnB1dFJlZiwgb25DbG9zZSwgLi4ucmVzdFRpbWVQaWNrZXJQcm9wcyB9ID1cbiAgICB0aW1lUGlja2VyUHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIGZpZWxkLFxuICAgIGZpZWxkU3RhdGU6IHsgZXJyb3IgfSxcbiAgfSA9IHVzZUNvbnRyb2xsZXIoe1xuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+LFxuICB9KTtcblxuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlVHJhbnNmb3JtPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZSB8IG51bGw+KHtcbiAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgb25DaGFuZ2U6IGZpZWxkLm9uQ2hhbmdlLFxuICAgIHRyYW5zZm9ybToge1xuICAgICAgaW5wdXQ6XG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0/LmlucHV0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0cmFuc2Zvcm0uaW5wdXRcbiAgICAgICAgICA6IG5ld1ZhbHVlID0+IHJlYWRWYWx1ZUFzRGF0ZShhZGFwdGVyLCBuZXdWYWx1ZSksXG4gICAgICBvdXRwdXQ6IChldmVudE9yVmFsdWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIE1VSSBEYXRlUGlja2VyIHBhc3NlcyAodmFsdWUsIGNvbnRleHQpLCBzbyB3ZSBjaGVjayB0aGUgc2Vjb25kIHBhcmFtXG4gICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogZXZlbnRPclZhbHVlO1xuXG4gICAgICAgIGlmIChhY3R1YWxWYWx1ZSA9PT0gbnVsbCkgcmV0dXJuIG51bGwgYXMgUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuXG4gICAgICAgIHJldHVybiBhY3R1YWxWYWx1ZSBhcyBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT47XG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmID0gdXNlRm9ya1JlZihmaWVsZC5yZWYsIGlucHV0UmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxUaW1lUGlja2VyXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGltZVBpY2tlclByb3BzfVxuICAgICAgey4uLmZpZWxkfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgey4uLnRpbWVQaWNrZXJQcm9wc31cbiAgICAgIGlucHV0UmVmPXtoYW5kbGVJbnB1dFJlZn1cbiAgICAgIG9uQ2xvc2U9eyguLi5hcmdzKSA9PiB7XG4gICAgICAgIGZpZWxkLm9uQmx1cigpO1xuICAgICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICAgIG9uQ2xvc2UoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbkNoYW5nZT17KG5ld1ZhbHVlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lUGlja2VyUHJvcHMub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aW1lUGlja2VyUHJvcHMub25DaGFuZ2UobmV3VmFsdWUsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgIC4uLnNsb3RQcm9wcyxcbiAgICAgICAgYWN0aW9uQmFyOiB7XG4gICAgICAgICAgYWN0aW9uczogWydjbGVhcicsICdjYW5jZWwnLCAnYWNjZXB0J10sXG4gICAgICAgIH0sXG4gICAgICAgIHRleHRGaWVsZDoge1xuICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgZnVsbFdpZHRoOiB0cnVlLFxuICAgICAgICAgIG9uQmx1cjogKFxuICAgICAgICAgICAgZXZlbnQ6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXRQcm9wcz8ub25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGlucHV0UHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAhIWVycm9yLFxuICAgICAgICAgIGhlbHBlclRleHQ6IGVycm9yXG4gICAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgIDogaW5wdXRQcm9wcz8uaGVscGVyVGV4dCB8fCByZXN0LmhlbHBlclRleHQsXG4gICAgICAgICAgaW5wdXRQcm9wczoge1xuICAgICAgICAgICAgcmVhZE9ubHk6ICEhdGV4dFJlYWRPbmx5LFxuICAgICAgICAgICAgLi4uaW5wdXRQcm9wcz8uaW5wdXRQcm9wcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfX1cbiAgICAvPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IFRpbWVQaWNrZXJFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSBleHRlbmRzIFBpY2tlclZhbGlkRGF0ZSA9IFBpY2tlclZhbGlkRGF0ZSxcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IFRpbWVQaWNrZXJFbGVtZW50UHJvcHM8VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPik6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIHJldHVybiAoXG4gICAgPEdyaWQgc2l6ZT17MTJ9IHsuLi5ncmlkUHJvcHN9PlxuICAgICAgPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuVGltZVBpY2tlckVsZW1lbnQuZGlzcGxheU5hbWUgPSAnVGltZVBpY2tlckVsZW1lbnQnO1xuIiwgImltcG9ydCB7XG4gIEF1dG9jb21wbGV0ZSxcbiAgQ2lyY3VsYXJQcm9ncmVzcyxcbiAgR3JpZCxcbiAgVGV4dEZpZWxkLFxuICB1c2VUaGVtZSxcbn0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvdXRpbHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRnJhZ21lbnQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIHVzZUNvbnRyb2xsZXIsXG4gIHR5cGUgRmllbGRQYXRoLFxuICB0eXBlIEZpZWxkVmFsdWVzLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgdHlwZSB7IEFzeW5jU2VsZWN0RWxlbWVudFByb3BzLCBPcHRpb25PYmplY3QgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHR5cGUgeyBBc3luY1NlbGVjdFBheWxvYWQgfSBmcm9tICdAL3R5cGVzJztcblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gQXN5bmNTZWxlY3RFbGVtZW50PFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZUtleSBleHRlbmRzIHN0cmluZyA9ICdWYWx1ZScsXG4gIFRMYWJlbEtleSBleHRlbmRzIHN0cmluZyA9ICdMYWJlbCcsXG4gIFRPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3Q8VFZhbHVlS2V5LCBUTGFiZWxLZXk+ID0gT3B0aW9uT2JqZWN0PFxuICAgIFRWYWx1ZUtleSxcbiAgICBUTGFiZWxLZXlcbiAgPixcbj4oXG4gIHByb3BzOiBBc3luY1NlbGVjdEVsZW1lbnRQcm9wczxcbiAgICBURmllbGRWYWx1ZXMsXG4gICAgVE5hbWUsXG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleSxcbiAgICBUT3B0aW9uXG4gID5cbikge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBkaXNhYmxlZCxcbiAgICBjb250cm9sLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIC8vIGluaXRpYWxWYWx1ZSxcbiAgICAvLyBpc051bGxhYmxlLFxuICAgIGxhYmVsLFxuICAgIHF1ZXJ5Rm4sXG4gICAgdmFyaWFudCxcbiAgICBsYWJlbEZpZWxkID0gJ0xhYmVsJyBhcyBUTGFiZWxLZXksXG4gICAgdmFsdWVGaWVsZCA9ICdWYWx1ZScgYXMgVFZhbHVlS2V5LFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICBmaWVsZCxcbiAgICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gIH0pO1xuXG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcblxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8VE9wdGlvbiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPHJlYWRvbmx5IFRPcHRpb25bXT4oW10pO1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gVHJhY2sgd2hhdCB2YWx1ZSB3ZSd2ZSBsb2FkZWQgdG8gcHJldmVudCBkdXBsaWNhdGUgQVBJIGNhbGxzXG4gIGNvbnN0IGxvYWRlZFZhbHVlUmVmID0gdXNlUmVmPFRPcHRpb25bVFZhbHVlS2V5XSB8IG51bGwgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIGNvbnN0IGZldGNoRGF0YSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGRlYm91bmNlKFxuICAgICAgICAoXG4gICAgICAgICAgcGF5bG9hZDogQXN5bmNTZWxlY3RQYXlsb2FkLFxuICAgICAgICAgIGNhbGxiYWNrOiAocmVzdWx0cz86IHJlYWRvbmx5IFRPcHRpb25bXSkgPT4gdm9pZFxuICAgICAgICApID0+IHtcbiAgICAgICAgICBxdWVyeUZuKHBheWxvYWQpLnRoZW4oYyA9PiBjYWxsYmFjayhjKSk7XG4gICAgICAgIH0sXG4gICAgICAgIDQwMFxuICAgICAgKSxcbiAgICBbcXVlcnlGbl1cbiAgKTtcblxuICBjb25zdCBnZXRPcHRpb25WYWx1ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgfCBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIG9wdGlvbiA/IFN0cmluZyhvcHRpb25bdmFsdWVGaWVsZF0pIDogJyc7XG4gICAgfSxcbiAgICBbdmFsdWVGaWVsZF1cbiAgKTtcblxuICBjb25zdCBnZXRPcHRpb25MYWJlbCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFRPcHRpb24pOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIG9wdGlvbiA/IFN0cmluZyhvcHRpb25bbGFiZWxGaWVsZF0pIDogJyc7XG4gICAgfSxcbiAgICBbbGFiZWxGaWVsZF1cbiAgKTtcblxuICAvLyBFZmZlY3Q6IEhhbmRsZSBzZWFyY2ggcXVlcnkgaW5wdXRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBmaWVsZC52YWx1ZTtcblxuICAgIC8vIENvbmRpdGlvbiAxOiBBIHZhbHVlIGlzIHNldCBmcm9tIHRoZSBmb3JtLCBhbmQgd2UgaGF2ZW4ndCBsb2FkZWQgaXQgeWV0LlxuICAgIGlmIChjdXJyZW50VmFsdWUgJiYgbG9hZGVkVmFsdWVSZWYuY3VycmVudCAhPT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAvLyBEb24ndCBmZXRjaCBpZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGlzIGFscmVhZHkgY29ycmVjdFxuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uICYmIGdldE9wdGlvblZhbHVlKHNlbGVjdGVkT3B0aW9uKSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgPSBjdXJyZW50VmFsdWU7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3RpdmUgPSB0cnVlO1xuXG4gICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgbG9hZGVkVmFsdWVSZWYuY3VycmVudCA9IGN1cnJlbnRWYWx1ZTtcblxuICAgICAgZmV0Y2hEYXRhKHsgUXVlcnk6IG51bGwsIFNlbGVjdGVkVmFsdWU6IGN1cnJlbnRWYWx1ZSB9LCByZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKCFhY3RpdmUpIHJldHVybjtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb24gPSByZXN1bHRzPy5maW5kKFxuICAgICAgICAgIG9wdGlvbiA9PiBTdHJpbmcoZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSkgPT09IFN0cmluZyhjdXJyZW50VmFsdWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRPcHRpb24pIHtcbiAgICAgICAgICBzZXRPcHRpb25zKFttYXRjaGVkT3B0aW9uXSk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb24obWF0Y2hlZE9wdGlvbik7XG4gICAgICAgICAgc2V0SW5wdXRWYWx1ZShnZXRPcHRpb25MYWJlbChtYXRjaGVkT3B0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47IC8vIEVuZCBvZiBlZmZlY3RcbiAgICB9XG5cbiAgICAvLyBDb25kaXRpb24gMjogVGhlIHVzZXIgaXMgdHlwaW5nIGEgc2VhcmNoIHF1ZXJ5LCBvciB0aGUgaW5wdXQgaXMgY2xlYXJlZC5cbiAgICAvLyBUaGlzIHJ1bnMgaWYgdGhlIGlucHV0IHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgbGFiZWwuXG4gICAgaWYgKGlucHV0VmFsdWUgIT09IChzZWxlY3RlZE9wdGlvbiA/IGdldE9wdGlvbkxhYmVsKHNlbGVjdGVkT3B0aW9uKSA6ICcnKSkge1xuICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIGVtcHR5LCBjbGVhciBvcHRpb25zIGltbWVkaWF0ZWx5IHdpdGhvdXQgYW4gQVBJIGNhbGwuXG4gICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgc2V0T3B0aW9ucyhbXSk7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBmZXRjaCBuZXcgb3B0aW9ucyBiYXNlZCBvbiB0aGUgaW5wdXQuXG4gICAgICBjb25zdCBhY3RpdmUgPSB0cnVlO1xuXG4gICAgICBzZXRMb2FkaW5nKHRydWUpO1xuXG4gICAgICBmZXRjaERhdGEoeyBRdWVyeTogaW5wdXRWYWx1ZSwgU2VsZWN0ZWRWYWx1ZTogbnVsbCB9LCByZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKCFhY3RpdmUpIHJldHVybjtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIHNldE9wdGlvbnMocmVzdWx0cyB8fCBbXSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuOyAvLyBFbmQgb2YgZWZmZWN0XG4gICAgfVxuXG4gICAgLy8gQ29uZGl0aW9uIDM6IFRoZSB2YWx1ZSBoYXMgYmVlbiBjbGVhcmVkIGZyb20gdGhlIGZvcm0uXG4gICAgaWYgKCFjdXJyZW50VmFsdWUgJiYgc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uKG51bGwpO1xuICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICBzZXRPcHRpb25zKFtdKTtcbiAgICAgIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCBbXG4gICAgZmllbGQudmFsdWUsXG4gICAgaW5wdXRWYWx1ZSxcbiAgICBmZXRjaERhdGEsXG4gICAgZ2V0T3B0aW9uTGFiZWwsXG4gICAgZ2V0T3B0aW9uVmFsdWUsXG4gICAgc2VsZWN0ZWRPcHRpb24sXG4gICAgbGFiZWxGaWVsZCxcbiAgICB2YWx1ZUZpZWxkLFxuICBdKTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGRpc2FibGVkID8/IGZhbHNlO1xuICB9LCBbZGlzYWJsZWRdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXzogUmVhY3QuU3ludGhldGljRXZlbnQsIG5ld1NlbGVjdGVkT3B0aW9uOiBUT3B0aW9uIHwgbnVsbCkgPT4ge1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXdTZWxlY3RlZE9wdGlvblxuICAgICAgICA/IGdldE9wdGlvblZhbHVlKG5ld1NlbGVjdGVkT3B0aW9uKVxuICAgICAgICA6IG51bGw7XG5cbiAgICAgIGZpZWxkLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgICAgIGxvYWRlZFZhbHVlUmVmLmN1cnJlbnQgPSBuZXdWYWx1ZSBhc1xuICAgICAgICB8IFRPcHRpb25bVFZhbHVlS2V5XVxuICAgICAgICB8IG51bGxcbiAgICAgICAgfCB1bmRlZmluZWQ7IC8vIFRyYWNrIGNoYW5nZVxuXG4gICAgICAvLyBTeW5jIGlucHV0IHZhbHVlIHdpdGggdGhlIHNlbGVjdGlvblxuICAgICAgaWYgKG5ld1NlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHNldElucHV0VmFsdWUoZ2V0T3B0aW9uTGFiZWwobmV3U2VsZWN0ZWRPcHRpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgICAgICBzZXRPcHRpb25zKFtdKTsgLy8gQ2xlYXIgb3B0aW9ucyB3aGVuIHNlbGVjdGlvbiBpcyBjbGVhcmVkXG4gICAgICB9XG4gICAgfSxcbiAgICBbZmllbGQsIGdldE9wdGlvblZhbHVlLCBnZXRPcHRpb25MYWJlbF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChfOiBSZWFjdC5TeW50aGV0aWNFdmVudCwgbmV3SW5wdXRWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRJbnB1dFZhbHVlKG5ld0lucHV0VmFsdWUpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFdoZW4gZm9jdXMgaXMgbG9zdCwgc3luYyB0aGUgaW5wdXQgdmFsdWUgYmFjayB0byB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgbGFiZWxcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIHNldElucHV0VmFsdWUoZ2V0T3B0aW9uTGFiZWwoc2VsZWN0ZWRPcHRpb24pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgbm90aGluZyBpcyBzZWxlY3RlZCwgY2xlYXIgdGhlIGlucHV0XG4gICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICB9XG4gIH0sIFtzZWxlY3RlZE9wdGlvbiwgZ2V0T3B0aW9uTGFiZWxdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4odHJ1ZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPEF1dG9jb21wbGV0ZVxuICAgICAgey4uLnJlc3R9XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIG9wZW49e29wZW59XG4gICAgICBvbk9wZW49e2hhbmRsZU9wZW59XG4gICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBnZXRPcHRpb25MYWJlbD17Z2V0T3B0aW9uTGFiZWx9XG4gICAgICBnZXRPcHRpb25LZXk9e2dldE9wdGlvblZhbHVlfVxuICAgICAgaXNPcHRpb25FcXVhbFRvVmFsdWU9eyhvcHRpb24sIHZhbHVlKSA9PlxuICAgICAgICBnZXRPcHRpb25WYWx1ZShvcHRpb24pID09PSBnZXRPcHRpb25WYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICAgIGF1dG9Db21wbGV0ZVxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBpbmNsdWRlSW5wdXRJbkxpc3RcbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICB2YWx1ZT17c2VsZWN0ZWRPcHRpb259XG4gICAgICBmaWx0ZXJTZWxlY3RlZE9wdGlvbnNcbiAgICAgIGZpbHRlck9wdGlvbnM9e3ggPT4geH1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbklucHV0Q2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgIHN4PXt7XG4gICAgICAgICcmLk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYgLk11aUlucHV0QmFzZS1yb290Lk11aS1kaXNhYmxlZCc6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZCxcbiAgICAgICAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCAhaW1wb3J0YW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgJyYuTXVpLWRpc2FibGVkIC5NdWlBdXRvY29tcGxldGUtcG9wdXBJbmRpY2F0b3InOiB7XG4gICAgICAgICAgY3Vyc29yOiAnbm90LWFsbG93ZWQgIWltcG9ydGFudCcsXG4gICAgICAgIH0sXG4gICAgICAgICcmIC5NdWlPdXRsaW5lZElucHV0LXJvb3QuTXVpLWRpc2FibGVkIC5NdWlPdXRsaW5lZElucHV0LW5vdGNoZWRPdXRsaW5lJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogZXJyb3IgPyAncmVkJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICAnJiAuTXVpRmlsbGVkSW5wdXQtcm9vdC5NdWktZGlzYWJsZWQnOiB7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6IGVycm9yID8gJ3JlZCcgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9fVxuICAgICAgbm9PcHRpb25zVGV4dD1cIlR5cGUgU29tZXRoaW5nLi4uXCJcbiAgICAgIHJlbmRlcklucHV0PXtwYXJhbXMgPT4gKFxuICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICAgICAgaGVscGVyVGV4dD17ZXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyd9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIHNsb3RQcm9wcz17e1xuICAgICAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAgICAgLi4ucGFyYW1zLklucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGVuZEFkb3JubWVudDogKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyBjb2xvcj1cImluaGVyaXRcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAge3BhcmFtcy5JbnB1dFByb3BzLmVuZEFkb3JubWVudH1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHZhcmlhbnQ9e3ZhcmlhbnQgPyB2YXJpYW50IDogaXNEaXNhYmxlZCA/ICdmaWxsZWQnIDogJ291dGxpbmVkJ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICByZW5kZXJPcHRpb249eyhyZW5kZXJQcm9wcywgb3B0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHsga2V5LCAuLi5vcHRpb25Qcm9wcyB9ID0gcmVuZGVyUHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8bGkga2V5PXtrZXl9IHsuLi5vcHRpb25Qcm9wc30+XG4gICAgICAgICAgICB7b3B0aW9uW2xhYmVsRmllbGRdfVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59O1xuXG5jb25zdCBBc3luY1NlbGVjdEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbiAgVFZhbHVlS2V5IGV4dGVuZHMgc3RyaW5nID0gJ1ZhbHVlJyxcbiAgVExhYmVsS2V5IGV4dGVuZHMgc3RyaW5nID0gJ0xhYmVsJyxcbiAgVE9wdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdDxUVmFsdWVLZXksIFRMYWJlbEtleT4gPSBPcHRpb25PYmplY3Q8XG4gICAgVFZhbHVlS2V5LFxuICAgIFRMYWJlbEtleVxuICA+LFxuPih7XG4gIGdyaWRQcm9wcyA9IHt9LFxuICAuLi5wcm9wc1xufTogQXN5bmNTZWxlY3RFbGVtZW50UHJvcHM8XG4gIFRGaWVsZFZhbHVlcyxcbiAgVE5hbWUsXG4gIFRWYWx1ZUtleSxcbiAgVExhYmVsS2V5LFxuICBUT3B0aW9uXG4+KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50PFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZUtleSwgVExhYmVsS2V5LCBUT3B0aW9uPlxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbkFzeW5jU2VsZWN0RWxlbWVudC5kaXNwbGF5TmFtZSA9ICdBc3luY1NlbGVjdEVsZW1lbnQnO1xuXG5leHBvcnQgeyBBc3luY1NlbGVjdEVsZW1lbnQgfTtcbiIsICJpbXBvcnQgdHlwZSB7XG4gIEdyaWRQcm9wcyxcbiAgVGV4dEZpZWxkUHJvcHMsXG4gIFRleHRGaWVsZFZhcmlhbnRzLFxufSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7IEdyaWQsIFRleHRGaWVsZCwgdXNlRm9ya1JlZiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuaW1wb3J0IHR5cGUgeyBDaGFuZ2VFdmVudCwgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnRyb2wsXG4gIEZpZWxkRXJyb3IsXG4gIEZpZWxkUGF0aCxcbiAgRmllbGRWYWx1ZXMsXG4gIFBhdGhWYWx1ZSxcbn0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbXBvcnQgeyB1c2VFbmhhbmNlZFRyYW5zZm9ybSB9IGZyb20gJ0AvaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFR5cGUgfSBmcm9tICdAL2hvb2tzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRPclZhbHVlIH0gZnJvbSAnQC90eXBlcyc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBUZXh0RmllbGRFbGVtZW50IGNvbXBvbmVudC5cbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIGZvcm0gdmFsdWVzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUTmFtZSAtIFRoZSBmaWVsZCBuYW1lIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUVmFsdWUgLSBUaGUgdHJhbnNmb3JtZWQgdmFsdWUgdHlwZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdW1iZXJGaWVsZEVsZW1lbnRQcm9wczxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwiZmlyc3ROYW1lXCIgfCBcInVzZXIuZW1haWxcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXJcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGZpZWxkIGVycm9yIG9iamVjdFxuICAgKiBAcmV0dXJucyBDdXN0b20gZXJyb3IgbWVzc2FnZSBvciBjb21wb25lbnRcbiAgICovXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG4gIC8qKlxuICAgKiBDdXN0b20gVGV4dEZpZWxkIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBkZWZhdWx0IE1VSSBUZXh0RmllbGRcbiAgICovXG4gIGNvbXBvbmVudD86IHR5cGVvZiBUZXh0RmllbGQ7XG4gIC8qKlxuICAgKiBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgZm9yIGlucHV0L291dHB1dFxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZmllbGRUeXBlIGZvciBjb21tb24gcGF0dGVybnMgb3IgY3VzdG9tIHRyYW5zZm9ybXMgZm9yIGNvbXBsZXggY2FzZXNcbiAgICovXG4gIHRyYW5zZm9ybT86IHtcbiAgICAvKiogVHJhbnNmb3JtIHZhbHVlIGJlZm9yZSBkaXNwbGF5aW5nIGluIGlucHV0ICovXG4gICAgaW5wdXQ/OiAodmFsdWU6IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPikgPT4gVFZhbHVlO1xuICAgIC8qKiBUcmFuc2Zvcm0gaW5wdXQgZXZlbnQgdG8gZm9ybSB2YWx1ZSAqL1xuICAgIG91dHB1dD86IChcbiAgICAgIGV2ZW50T3JWYWx1ZTogRXZlbnRPclZhbHVlPFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPj4sXG4gICAgICB2YWx1ZT86IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPlxuICAgICkgPT4gUGF0aFZhbHVlPFRGaWVsZFZhbHVlcywgVE5hbWU+O1xuICB9O1xuICAvKipcbiAgICogQnVpbHQtaW4gZmllbGQgdHlwZSBmb3IgYXV0b21hdGljIHRyYW5zZm9ybWF0aW9uXG4gICAqIEBleGFtcGxlICd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ3NlbGVjdCdcbiAgICovXG4gIGZpZWxkVHlwZT86IEZpZWxkVHlwZTtcbiAgLyoqXG4gICAqIERlZmF1bHQgdmFsdWUgdG8gZGlzcGxheSB3aGVuIGZpZWxkIHZhbHVlIGlzIG51bGwvdW5kZWZpbmVkXG4gICAqIEBleGFtcGxlIFwiXCJcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IFRWYWx1ZTtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBsYWJlbCB0ZXh0XG4gICAqIEBleGFtcGxlIFwiRW1haWwgQWRkcmVzc1wiXG4gICAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKiBAZXhhbXBsZSBcIkVudGVyIHlvdXIgZW1haWxcIlxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BzIGZvciB0aGUgdW5kZXJseWluZyBUZXh0RmllbGQgY29tcG9uZW50XG4gICAqL1xuICB0ZXh0RmllbGRQcm9wcz86IE9taXQ8VGV4dEZpZWxkUHJvcHMsICduYW1lJz47XG4gIC8qKlxuICAgKiBHcmlkIGxheW91dCBwcm9wcyBmb3IgdGhlIHdyYXBwZXIgR3JpZCBjb21wb25lbnRcbiAgICogQGRlZmF1bHRWYWx1ZSB7IHNpemU6IHsgeHM6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSB9XG4gICAqL1xuICBncmlkUHJvcHM/OiBHcmlkUHJvcHM7XG4gIC8qKlxuICAgKiBUaGUgVGV4dEZpZWxkIHZhcmlhbnRcbiAgICogQGRlZmF1bHRWYWx1ZSBcIm91dGxpbmVkXCJcbiAgICovXG4gIHZhcmlhbnQ/OiBUZXh0RmllbGRWYXJpYW50cztcbiAgLyoqXG4gICAqIEN1c3RvbSBvbkNoYW5nZSBoYW5kbGVyIGNhbGxlZCBhZnRlciB0cmFuc2Zvcm1hdGlvblxuICAgKi9cbiAgb25DaGFuZ2U/OiAoXG4gICAgZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBFbmFibGUgZGV2ZWxvcG1lbnQgd2FybmluZ3MgZm9yIGRlYnVnZ2luZyB0cmFuc2Zvcm1hdGlvbiBpc3N1ZXNcbiAgICogQGRlZmF1bHRWYWx1ZSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgKi9cbiAgZW5hYmxlV2FybmluZ3M/OiBib29sZWFuO1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG59XG5cbmNvbnN0IENvbXBvbmVudCA9IGZ1bmN0aW9uIE51bWJlckZpZWxkRWxlbWVudDxcbiAgVEZpZWxkVmFsdWVzIGV4dGVuZHMgRmllbGRWYWx1ZXMgPSBGaWVsZFZhbHVlcyxcbiAgVE5hbWUgZXh0ZW5kcyBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPiA9IEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+LFxuICBUVmFsdWUgPSBQYXRoVmFsdWU8VEZpZWxkVmFsdWVzLCBUTmFtZT4sXG4+KHByb3BzOiBOdW1iZXJGaWVsZEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lLCBUVmFsdWU+KSB7XG4gIGNvbnN0IHtcbiAgICBwYXJzZUVycm9yLFxuICAgIG5hbWUsXG4gICAgY29udHJvbCxcbiAgICBjb21wb25lbnQ6IFRleHRGaWVsZENvbXBvbmVudCA9IFRleHRGaWVsZCxcbiAgICB0cmFuc2Zvcm0sXG4gICAgZmllbGRUeXBlID0gJ3RleHQnLCAvLyBEZWZhdWx0IHRvIHRleHQgdHlwZVxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0ZXh0RmllbGRQcm9wcyA9IHt9LFxuICAgIHZhcmlhbnQsXG4gICAgb25DaGFuZ2U6IGN1c3RvbU9uQ2hhbmdlLFxuICAgIGVuYWJsZVdhcm5pbmdzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcsXG4gICAgbWF4TGVuZ3RoLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHtcbiAgICB0eXBlID0gJ251bWJlcicsXG4gICAgcmVxdWlyZWQsXG4gICAgaGVscGVyVGV4dCxcbiAgICBpbnB1dFJlZixcbiAgICBvbklucHV0LFxuICAgIG9uQmx1cixcbiAgICBkaXNhYmxlZCxcbiAgICAuLi5yZXN0VGV4dFByb3BzXG4gIH0gPSB0ZXh0RmllbGRQcm9wcztcblxuICBjb25zdCB7XG4gICAgZmllbGQsXG4gICAgZmllbGRTdGF0ZTogeyBlcnJvciB9LFxuICB9ID0gdXNlQ29udHJvbGxlcih7XG4gICAgbmFtZSxcbiAgICBjb250cm9sLFxuICB9KTtcblxuICAvLyBVc2UgdGhlIGVuaGFuY2VkIHRyYW5zZm9ybSBob29rIHdpdGggcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uc1xuICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gdXNlRW5oYW5jZWRUcmFuc2Zvcm08VEZpZWxkVmFsdWVzLCBUTmFtZSwgVFZhbHVlPihcbiAgICB7XG4gICAgICB2YWx1ZTogZmllbGQudmFsdWUsXG4gICAgICBvbkNoYW5nZTogZmllbGQub25DaGFuZ2UsXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlucHV0OiB0cmFuc2Zvcm0uaW5wdXQsXG4gICAgICAgICAgICBvdXRwdXQ6IHRyYW5zZm9ybS5vdXRwdXQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGZpZWxkVHlwZTogIXRyYW5zZm9ybVxuICAgICAgICA/IHR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBtYXhMZW5ndGggJiYgbWF4TGVuZ3RoID4gNVxuICAgICAgICAgICAgPyAndGV4dCdcbiAgICAgICAgICAgIDogJ251bWJlcidcbiAgICAgICAgICA6IGZpZWxkVHlwZVxuICAgICAgICA6IHVuZGVmaW5lZCwgLy8gQXV0by1kZXRlY3QgbnVtYmVyIHR5cGVcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGVuYWJsZVdhcm5pbmdzLFxuICAgIH1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoZmllbGQucmVmLCBpbnB1dFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VGV4dEZpZWxkQ29tcG9uZW50XG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHsuLi5yZXN0VGV4dFByb3BzfVxuICAgICAgbmFtZT17ZmllbGQubmFtZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICAgICAgICBmaWVsZC5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXN0b21PbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGN1c3RvbU9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfX1cbiAgICAgIG9uQmx1cj17ZXZlbnQgPT4ge1xuICAgICAgICBmaWVsZC5vbkJsdXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgb25JbnB1dD17KGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICBtYXhMZW5ndGggJiZcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZS5zbGljZSgwLCBtYXhMZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvbklucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25JbnB1dChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBvbldoZWVsPXtlID0+IHtcbiAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5ibHVyKCk7XG4gICAgICB9fVxuICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgaWYgKFsnZScsICdFJywgJ0Fycm93RG93bicsICdBcnJvd1VwJ10uaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgZnVsbFdpZHRoXG4gICAgICByZXF1aXJlZD17cmVxdWlyZWR9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZXJyb3I9eyEhZXJyb3J9XG4gICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgZXJyb3IgPyAocGFyc2VFcnJvciA/IHBhcnNlRXJyb3IoZXJyb3IpIDogZXJyb3IubWVzc2FnZSkgOiBoZWxwZXJUZXh0XG4gICAgICB9XG4gICAgICBpbnB1dFJlZj17aGFuZGxlSW5wdXRSZWZ9XG4gICAgICBzbG90UHJvcHM9e3sgaHRtbElucHV0OiB7IG1heExlbmd0aCB9IH19XG4gICAgICB2YXJpYW50PXt2YXJpYW50ID8gdmFyaWFudCA6ICdvdXRsaW5lZCd9XG4gICAgLz5cbiAgKTtcbn07XG5cbi8qKlxuICogQSByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRlZCBUZXh0RmllbGQgY29tcG9uZW50IHdpdGggYXV0b21hdGljIHZhbGlkYXRpb24sXG4gKiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBhbmQgYnVpbHQtaW4gZmllbGQgdHlwZSBoYW5kbGluZy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gRnVsbCByZWFjdC1ob29rLWZvcm0gaW50ZWdyYXRpb25cbiAqIC0gQXV0b21hdGljIGVycm9yIGRpc3BsYXkgd2l0aCBjdXN0b20gcGFyc2luZ1xuICogLSBWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBzdXBwb3J0XG4gKiAtIEJ1aWx0LWluIGZpZWxkIHR5cGVzIGZvciBjb21tb24gcGF0dGVybnNcbiAqIC0gR3JpZCBsYXlvdXQgd3JhcHBlclxuICogLSBUeXBlU2NyaXB0IHR5cGUgc2FmZXR5XG4gKiAtIE9wdGltaXplZCBudW1iZXIgaW5wdXQgaGFuZGxpbmdcbiAqIC0gRGlzYWJsZWQgc3RhdGUgc3R5bGluZ1xuICogLSBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHdpdGggbWVtb2l6ZWQgdHJhbnNmb3JtYXRpb25zXG4gKiAtIERldmVsb3BtZW50IHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmdcbiAqIC0gU3RhYmxlIHJlZmVyZW5jZXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlIHdpdGggYnVpbHQtaW4gbnVtYmVyIGhhbmRsaW5nOlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiYWdlXCJcbiAqICAgbGFiZWw9XCJBZ2VcIlxuICogICBmaWVsZFR5cGU9XCJudW1iZXJcIlxuICogICBydWxlcz17eyByZXF1aXJlZDogJ0FnZSBpcyByZXF1aXJlZCcsIG1pbjogeyB2YWx1ZTogMCwgbWVzc2FnZTogJ0FnZSBtdXN0IGJlIHBvc2l0aXZlJyB9IH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEFkdmFuY2VkIHVzYWdlIHdpdGggY3VzdG9tIGdyaWQgbGF5b3V0OlxuICogYGBgdHN4XG4gKiA8VGV4dEZpZWxkRWxlbWVudFxuICogICBjb250cm9sPXtjb250cm9sfVxuICogICBuYW1lPVwiZW1haWxcIlxuICogICBsYWJlbD1cIkVtYWlsXCJcbiAqICAgZmllbGRUeXBlPVwidGV4dFwiXG4gKiAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBlbWFpbCBhZGRyZXNzXCJcbiAqICAgZ3JpZFByb3BzPXt7IHNpemU6IHsgeHM6IDEyLCBtZDogNiB9IH19XG4gKiAgIHJ1bGVzPXt7XG4gKiAgICAgcmVxdWlyZWQ6ICdFbWFpbCBpcyByZXF1aXJlZCcsXG4gKiAgICAgcGF0dGVybjogeyB2YWx1ZTogL1xcUytAXFxTK1xcLlxcUysvLCBtZXNzYWdlOiAnSW52YWxpZCBlbWFpbCcgfVxuICogICB9fVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBDdXN0b20gdHJhbnNmb3JtYXRpb246XG4gKiBgYGB0c3hcbiAqIDxUZXh0RmllbGRFbGVtZW50XG4gKiAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgIG5hbWU9XCJwcmljZVwiXG4gKiAgIGxhYmVsPVwiUHJpY2VcIlxuICogICB0cmFuc2Zvcm09e3tcbiAqICAgICBpbnB1dDogKHZhbHVlKSA9PiB2YWx1ZSA/IGAkJHt2YWx1ZX1gIDogJycsXG4gKiAgICAgb3V0cHV0OiAoZXZlbnQpID0+IHBhcnNlRmxvYXQoZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoJyQnLCAnJykpIHx8IG51bGxcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gZXJyb3IgcGFyc2luZzpcbiAqIGBgYHRzeFxuICogPFRleHRGaWVsZEVsZW1lbnRcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZT1cInVzZXJuYW1lXCJcbiAqICAgbGFiZWw9XCJVc2VybmFtZVwiXG4gKiAgIGZpZWxkVHlwZT1cInRleHRcIlxuICogICBwYXJzZUVycm9yPXsoZXJyb3IpID0+IChcbiAqICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJ3JlZCcgfX0+XG4gKiAgICAgICBcdTI2QTBcdUZFMEYge2Vycm9yLm1lc3NhZ2V9XG4gKiAgICAgPC9zcGFuPlxuICogICApfVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgZm9ybSB2YWx1ZXMgdHlwZVxuICogQHRlbXBsYXRlIFROYW1lIC0gVGhlIGZpZWxkIG5hbWUgdHlwZVxuICogQHRlbXBsYXRlIFRWYWx1ZSAtIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSB0eXBlXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzXG4gKiBAcmV0dXJucyBSZWFjdCBlbGVtZW50IHdpdGggb3B0aW9uYWwgR3JpZCB3cmFwcGVyXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgTnVtYmVyRmllbGRFbGVtZW50ID0gPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4gIFRWYWx1ZSA9IFBhdGhWYWx1ZTxURmllbGRWYWx1ZXMsIFROYW1lPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IE51bWJlckZpZWxkRWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWUsIFRWYWx1ZT4pOiBSZWFjdEVsZW1lbnQgPT4ge1xuICByZXR1cm4gKFxuICAgIDxHcmlkIHNpemU9ezEyfSB7Li4uZ3JpZFByb3BzfT5cbiAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBCb3hQcm9wcywgRm9ybUhlbHBlclRleHRQcm9wcywgR3JpZFByb3BzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBCb3gsIEdyaWQsIGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCB7XG4gIE11aU90cElucHV0LFxuICB0eXBlIE11aU90cElucHV0UHJvcHMsXG59IGZyb20gJ211aS1vbmUtdGltZS1wYXNzd29yZC1pbnB1dCc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBDb250cm9sLFxuICBGaWVsZEVycm9yLFxuICBGaWVsZFBhdGgsXG4gIEZpZWxkVmFsdWVzLFxufSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5cbmltcG9ydCB7IEhlbHBlclRleHQgfSBmcm9tICcuL0hlbHBlclRleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9UUElucHV0RWxlbWVudFByb3BzPFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCBuYW1lIGluIHRoZSBmb3JtXG4gICAqIEBleGFtcGxlIFwiZmlyc3ROYW1lXCIgfCBcInVzZXIuZW1haWxcIlxuICAgKi9cbiAgbmFtZTogVE5hbWU7XG4gIC8qKlxuICAgKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBwYXJzZXJcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGZpZWxkIGVycm9yIG9iamVjdFxuICAgKiBAcmV0dXJucyBDdXN0b20gZXJyb3IgbWVzc2FnZSBvciBjb21wb25lbnRcbiAgICovXG4gIHBhcnNlRXJyb3I/OiAoZXJyb3I6IEZpZWxkRXJyb3IpID0+IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgaW5zdGFuY2UgZnJvbSByZWFjdC1ob29rLWZvcm1cbiAgICovXG4gIGNvbnRyb2w/OiBDb250cm9sPFRGaWVsZFZhbHVlcz47XG5cbiAgbWF4U2l6ZT86IG51bWJlcjtcblxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICBoZWxwZXJUZXh0PzogUmVhY3QuUmVhY3ROb2RlO1xuXG4gIHNsb3RQcm9wcz86IHtcbiAgICB3cmFwcGVyPzogQm94UHJvcHM7XG4gICAgaGVscGVyVGV4dD86IEZvcm1IZWxwZXJUZXh0UHJvcHM7XG4gICAgdGV4dGZpZWxkPzogTXVpT3RwSW5wdXRQcm9wc1snVGV4dEZpZWxkc1Byb3BzJ107XG4gIH07XG4gIGdyaWRQcm9wcz86IEdyaWRQcm9wcztcbn1cblxuY29uc3QgQ29tcG9uZW50ID0gZnVuY3Rpb24gT1RQSW5wdXRFbGVtZW50PFxuICBURmllbGRWYWx1ZXMgZXh0ZW5kcyBGaWVsZFZhbHVlcyA9IEZpZWxkVmFsdWVzLFxuICBUTmFtZSBleHRlbmRzIEZpZWxkUGF0aDxURmllbGRWYWx1ZXM+ID0gRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4sXG4+KHByb3BzOiBPVFBJbnB1dEVsZW1lbnRQcm9wczxURmllbGRWYWx1ZXMsIFROYW1lPikge1xuICBjb25zdCB7XG4gICAgLy8gcGFyc2VFcnJvcixcbiAgICBuYW1lLFxuICAgIGNvbnRyb2wsXG4gICAgc2xvdFByb3BzLFxuICAgIGhlbHBlclRleHQsXG4gICAgbWF4U2l6ZSA9IDU2LFxuICAgIHBsYWNlaG9sZGVyID0gJy0nLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIC8vIGNvbnN0IHtcbiAgLy8gICBmaWVsZCxcbiAgLy8gICBmaWVsZFN0YXRlOiB7IGVycm9yIH0sXG4gIC8vIH0gPSB1c2VDb250cm9sbGVyKHtcbiAgLy8gICBuYW1lLFxuICAvLyAgIGNvbnRyb2wsXG4gIC8vIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPENvbnRyb2xsZXJcbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICBjb250cm9sPXtjb250cm9sfVxuICAgICAgcmVuZGVyPXsoeyBmaWVsZCwgZmllbGRTdGF0ZTogeyBlcnJvciB9IH0pID0+IChcbiAgICAgICAgPEJveFxuICAgICAgICAgIHsuLi5zbG90UHJvcHM/LndyYXBwZXJ9XG4gICAgICAgICAgc3g9e1tcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIFtgJiAuJHtpbnB1dEJhc2VDbGFzc2VzLmlucHV0fWBdOiB7XG4gICAgICAgICAgICAgICAgcDogMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogJzEvMScsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IG1heFNpemUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc2xvdFByb3BzPy53cmFwcGVyPy5zeClcbiAgICAgICAgICAgICAgPyAoc2xvdFByb3BzPy53cmFwcGVyPy5zeCA/PyBbXSlcbiAgICAgICAgICAgICAgOiBbc2xvdFByb3BzPy53cmFwcGVyPy5zeF0pLFxuICAgICAgICAgIF19XG4gICAgICAgID5cbiAgICAgICAgICA8TXVpT3RwSW5wdXRcbiAgICAgICAgICAgIHsuLi5maWVsZH1cbiAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgZ2FwPXsxLjV9XG4gICAgICAgICAgICBsZW5ndGg9ezR9XG4gICAgICAgICAgICBUZXh0RmllbGRzUHJvcHM9e3tcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGVycm9yOiAhIWVycm9yLFxuICAgICAgICAgICAgICAuLi5zbG90UHJvcHM/LnRleHRmaWVsZCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPEhlbHBlclRleHRcbiAgICAgICAgICAgIHsuLi5zbG90UHJvcHM/LmhlbHBlclRleHR9XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U9e2Vycm9yPy5tZXNzYWdlfVxuICAgICAgICAgICAgaGVscGVyVGV4dD17aGVscGVyVGV4dH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0JveD5cbiAgICAgICl9XG4gICAgLz5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBPVFBJbnB1dEVsZW1lbnQgPSA8XG4gIFRGaWVsZFZhbHVlcyBleHRlbmRzIEZpZWxkVmFsdWVzID0gRmllbGRWYWx1ZXMsXG4gIFROYW1lIGV4dGVuZHMgRmllbGRQYXRoPFRGaWVsZFZhbHVlcz4gPSBGaWVsZFBhdGg8VEZpZWxkVmFsdWVzPixcbj4oe1xuICBncmlkUHJvcHMgPSB7fSxcbiAgLi4ucHJvcHNcbn06IE9UUElucHV0RWxlbWVudFByb3BzPFRGaWVsZFZhbHVlcywgVE5hbWU+KTogUmVhY3RFbGVtZW50ID0+IHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBzaXplPXsxMn0gey4uLmdyaWRQcm9wc30+XG4gICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbiAgICA8L0dyaWQ+XG4gICk7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgRm9ybUhlbHBlclRleHRQcm9wcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQnO1xuaW1wb3J0IEZvcm1IZWxwZXJUZXh0IGZyb20gJ0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIEhlbHBlclRleHRQcm9wcyA9IEZvcm1IZWxwZXJUZXh0UHJvcHMgJiB7XG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgZGlzYWJsZUd1dHRlcnM/OiBib29sZWFuO1xuICBoZWxwZXJUZXh0PzogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHBlclRleHQoe1xuICBzeCxcbiAgaGVscGVyVGV4dCxcbiAgZXJyb3JNZXNzYWdlLFxuICBkaXNhYmxlR3V0dGVycyxcbiAgLi4ub3RoZXJcbn06IEhlbHBlclRleHRQcm9wcykge1xuICBpZiAoZXJyb3JNZXNzYWdlIHx8IGhlbHBlclRleHQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZvcm1IZWxwZXJUZXh0XG4gICAgICAgIGVycm9yPXshIWVycm9yTWVzc2FnZX1cbiAgICAgICAgc3g9e1tcbiAgICAgICAgICB7XG4gICAgICAgICAgICBteDogZGlzYWJsZUd1dHRlcnMgPyAwIDogMS43NSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KHN4KSA/IHN4IDogW3N4XSksXG4gICAgICAgIF19XG4gICAgICAgIHsuLi5vdGhlcn1cbiAgICAgID5cbiAgICAgICAge2Vycm9yTWVzc2FnZSB8fCBoZWxwZXJUZXh0fVxuICAgICAgPC9Gb3JtSGVscGVyVGV4dD5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCAiaW1wb3J0IHsgQXN5bmNTZWxlY3RNdWx0aUVsZW1lbnQgfSBmcm9tICcuLi9Bc3luY011bHRpU2VsZWN0L0FzeW5jTXVsdGlTZWxlY3QnO1xuaW1wb3J0IHsgQXN5bmNTZWxlY3RFbGVtZW50IH0gZnJvbSAnLi4vQXN5bmNTZWxlY3QnO1xuaW1wb3J0IHsgQ2hlY2tib3hFbGVtZW50IH0gZnJvbSAnLi4vQ2hlY2tib3hFbGVtZW50JztcbmltcG9ydCB7IENoZWNrYm94R3JvdXBFbGVtZW50IH0gZnJvbSAnLi4vQ2hlY2tib3hHcm91cCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyRWxlbWVudCB9IGZyb20gJy4uL0RhdGVQaWNrZXJFbGVtZW50JztcbmltcG9ydCB7IE51bWJlckZpZWxkRWxlbWVudCB9IGZyb20gJy4uL051bWJlckZpZWxkRWxlbWVudCc7XG5pbXBvcnQgeyBPVFBJbnB1dEVsZW1lbnQgfSBmcm9tICcuLi9PVFBJbnB1dEVsZW1lbnQvT1RQSW5wdXRFbGVtZW50JztcbmltcG9ydCB7IFBhc3N3b3JkRWxlbWVudCB9IGZyb20gJy4uL1Bhc3N3b3JkRWxlbWVudCc7XG5pbXBvcnQgeyBSYWRpb0J1dHRvbkdyb3VwIH0gZnJvbSAnLi4vUmFkaW9CdXR0b25Hcm91cCc7XG5pbXBvcnQgeyBTZWxlY3RDYXNjYWRlRWxlbWVudCB9IGZyb20gJy4uL1NlbGVjdENhc2NhZGVFbGVtZW50JztcbmltcG9ydCB7IFNlbGVjdEVsZW1lbnQgfSBmcm9tICcuLi9TZWxlY3RFbGVtZW50JztcbmltcG9ydCB7IFNlbGVjdE11bHRpRWxlbWVudCB9IGZyb20gJy4uL1NlbGVjdE11bHRpRWxlbWVudCc7XG5pbXBvcnQgeyBUZXh0RmllbGRFbGVtZW50IH0gZnJvbSAnLi4vVGV4dEZpZWxkRWxlbWVudCc7XG5pbXBvcnQgeyBUaW1lUGlja2VyRWxlbWVudCB9IGZyb20gJy4uL1RpbWVQaWNrZXJFbGVtZW50JztcblxuY29uc3QgRmllbGQgPSB7XG4gIFRleHQ6IFRleHRGaWVsZEVsZW1lbnQsXG4gIE51bWJlcjogTnVtYmVyRmllbGRFbGVtZW50LFxuICBDaGVja2JveDogQ2hlY2tib3hFbGVtZW50LFxuICBEYXRlOiBEYXRlUGlja2VyRWxlbWVudCxcbiAgUmFkaW9Hcm91cDogUmFkaW9CdXR0b25Hcm91cCxcbiAgUGFzc3dvcmQ6IFBhc3N3b3JkRWxlbWVudCxcbiAgVGltZTogVGltZVBpY2tlckVsZW1lbnQsXG4gIFNlbGVjdDogU2VsZWN0RWxlbWVudCxcbiAgU2VsZWN0TXVsdGk6IFNlbGVjdE11bHRpRWxlbWVudCxcbiAgU2VsZWN0Q2FzY2FkZTogU2VsZWN0Q2FzY2FkZUVsZW1lbnQsXG4gIEFzeW5jU2VsZWN0OiBBc3luY1NlbGVjdEVsZW1lbnQsXG4gIEFzeW5jTXVsdGlTZWxlY3Q6IEFzeW5jU2VsZWN0TXVsdGlFbGVtZW50LFxuICBDaGVja2JveEdyb3VwOiBDaGVja2JveEdyb3VwRWxlbWVudCxcbiAgT1RQSW5wdXQ6IE9UUElucHV0RWxlbWVudCxcbn07XG5cbmV4cG9ydCB7IEZpZWxkIH07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7QUE0Rk8sU0FBUyxjQUFjLE9BQXFDO0FBQ2pFLFNBQ0UsT0FBTyxVQUFVLFlBQ2pCLFVBQVUsUUFDVixXQUFXLFNBQ1gsV0FBVyxTQUNYLE9BQVEsTUFBcUIsVUFBVSxhQUN0QyxPQUFRLE1BQXFCLFVBQVUsWUFDdEMsT0FBUSxNQUFxQixVQUFVLFlBQ3ZDLE9BQVEsTUFBcUIsVUFBVTtBQUU3QztBQVlPLFNBQVMsaUJBQ2QsU0FDQSxhQUFhLFNBQ2IsYUFBYSxTQUNDO0FBQ2QsU0FBTyxRQUFRLElBQUksYUFBVztBQUFBLElBQzVCLE9BQU8sT0FBTyxPQUFPLFVBQVUsS0FBSyxFQUFFO0FBQUEsSUFDdEMsT0FBTyxPQUFPLFVBQVU7QUFBQSxJQUN4QixVQUFVLFFBQVEsT0FBTyxRQUFRO0FBQUEsRUFDbkMsRUFBRTtBQUNKOzs7QUM3SEE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxXQUFXO0FBQ2xCLE9BQU8sV0FBVztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHFCQUFxQjtBQXVSaEIsU0FFSSxLQUZKO0FBaFJkLElBQU0sWUFBWSxTQUFTLHdCQVV6QixPQU9BO0FBQ0EsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFFSixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsWUFBWSxFQUFFLE1BQU07QUFBQSxFQUN0QixJQUFJLGNBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDRCxRQUFNLFFBQVEsU0FBUztBQUV2QixRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJLFNBQW9CLENBQUMsQ0FBQztBQUNwRSxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUksU0FBUyxFQUFFO0FBQy9DLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSSxTQUE2QixDQUFDLENBQUM7QUFDN0QsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJLFNBQWtCLEtBQUs7QUFFckQsUUFBTSxrQkFBa0IsT0FBa0IsQ0FBQyxDQUFDO0FBQzVDLFFBQU0sNEJBQTRCLE9BQU8sS0FBSztBQUM5QyxRQUFNLDJCQUEyQixPQUFzQixJQUFJO0FBQzNELFFBQU0seUJBQXlCLE9BQU8sS0FBSztBQUUzQyxRQUFNLHFCQUFxQixPQUFrQixDQUFDLENBQUM7QUFFL0MsUUFBTSxpQkFBaUI7QUFBQSxJQUNyQixDQUFDLFdBQXFCLFNBQVMsT0FBTyxPQUFPLFVBQVUsQ0FBQyxJQUFJO0FBQUEsSUFDNUQsQ0FBQyxVQUFVO0FBQUEsRUFDYjtBQUVBLFFBQU0saUJBQWlCO0FBQUEsSUFDckIsQ0FBQyxXQUFxQixTQUFTLE9BQU8sT0FBTyxVQUFVLENBQUMsSUFBSTtBQUFBLElBQzVELENBQUMsVUFBVTtBQUFBLEVBQ2I7QUFFQSxRQUFNLFlBQVk7QUFBQSxJQUNoQixNQUNFO0FBQUEsTUFDRSxDQUNFLFNBQ0EsYUFDRztBQUNILGdCQUFRLE9BQU8sRUFBRSxLQUFLLE9BQUs7QUFDekIsY0FBSSxNQUFNLFFBQVEsQ0FBQyxHQUFHO0FBQ3BCLHFCQUFTLENBQUM7QUFBQSxVQUNaLFdBQ0UsS0FDQSxNQUFNLFFBQVMsRUFBbUMsSUFBSSxHQUN0RDtBQUNBO0FBQUEsY0FDRyxFQUFtQztBQUFBLFlBQ3RDO0FBQUEsVUFDRixXQUNFLEtBQ0EsTUFBTSxRQUFTLEVBQW1DLElBQUksR0FDdEQ7QUFDQTtBQUFBLGNBQ0csRUFBbUM7QUFBQSxZQUN0QztBQUFBLFVBQ0YsT0FBTztBQUNMLHFCQUFTLENBQUMsQ0FBQztBQUFBLFVBQ2I7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNGLENBQUMsT0FBTztBQUFBLEVBQ1Y7QUFHQSxZQUFVLE1BQU07QUFDZCx1QkFBbUIsVUFBVTtBQUFBLEVBQy9CLEdBQUcsQ0FBQyxlQUFlLENBQUM7QUFHcEIsWUFBVSxNQUFNO0FBQ2QsVUFBTSxhQUFhLE1BQU0sUUFBUSxNQUFNLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUkvRCxRQUNFLHVCQUF1QixXQUN2QixLQUFLLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxnQkFBZ0IsT0FBTyxHQUNyRTtBQUNBO0FBQUEsSUFDRjtBQUdBLFFBQUksV0FBVyxXQUFXLEdBQUc7QUFDM0IseUJBQW1CLENBQUMsQ0FBQztBQUNyQixpQkFBVyxDQUFDLENBQUM7QUFDYixzQkFBZ0IsVUFBVSxDQUFDO0FBQzNCLCtCQUF5QixVQUFVO0FBQ25DLDZCQUF1QixVQUFVO0FBRWpDO0FBQUEsSUFDRjtBQUdBLFFBQUksU0FBUztBQUViLGVBQVcsSUFBSTtBQUNmLDhCQUEwQixVQUFVO0FBRXBDLG9CQUFnQixVQUFVO0FBRTFCLDJCQUF1QixVQUFVO0FBRWpDLGNBQVUsRUFBRSxPQUFPLE1BQU0sZUFBZSxXQUFXLEdBQUcsYUFBVztBQUMvRCxVQUFJLFFBQVE7QUFDVixjQUFNLGlCQUFpQixXQUFXLENBQUM7QUFFbkMsMkJBQW1CLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDdEMsbUJBQVcsY0FBYztBQUFBLE1BQzNCO0FBRUEsaUJBQVcsS0FBSztBQUNoQixnQ0FBMEIsVUFBVTtBQUFBLElBQ3RDLENBQUM7QUFFRCxXQUFPLE1BQU07QUFDWCxlQUFTO0FBQUEsSUFDWDtBQUFBLEVBQ0YsR0FBRyxDQUFDLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFHM0IsWUFBVSxNQUFNO0FBRWQsUUFBSSwwQkFBMEIsV0FBVyxDQUFDLHVCQUF1QixTQUFTO0FBQ3hFO0FBQUEsSUFDRjtBQUdBLFFBQUksQ0FBQyxZQUFZO0FBRWYsVUFBSSxtQkFBbUIsUUFBUSxXQUFXLEdBQUc7QUFDM0MsbUJBQVcsQ0FBQyxDQUFDO0FBQUEsTUFDZixPQUFPO0FBRUwsbUJBQVcsbUJBQW1CLE9BQU87QUFBQSxNQUN2QztBQUVBLCtCQUF5QixVQUFVO0FBRW5DO0FBQUEsSUFDRjtBQUdBLFFBQUksZUFBZSx5QkFBeUIsU0FBUztBQUNuRDtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVM7QUFFYixlQUFXLElBQUk7QUFFZixjQUFVLEVBQUUsT0FBTyxZQUFZLGVBQWUsS0FBSyxHQUFHLG1CQUFpQjtBQUNyRSxVQUFJLFFBQVE7QUFDVixjQUFNLFVBQVUsaUJBQWlCLENBQUM7QUFFbEMsY0FBTSxrQkFBa0IsbUJBQW1CO0FBQzNDLGNBQU0sb0JBQW9CLElBQUk7QUFBQSxVQUM1QixnQkFBZ0IsSUFBSSxTQUFPLGVBQWUsR0FBRyxDQUFDO0FBQUEsUUFDaEQ7QUFDQSxjQUFNLFdBQVcsQ0FBQyxHQUFHLGVBQWU7QUFFcEMsZ0JBQVEsUUFBUSxZQUFVO0FBQ3hCLGNBQUksQ0FBQyxrQkFBa0IsSUFBSSxlQUFlLE1BQU0sQ0FBQyxHQUFHO0FBQ2xELHFCQUFTLEtBQUssTUFBTTtBQUFBLFVBQ3RCO0FBQUEsUUFDRixDQUFDO0FBQ0QsbUJBQVcsUUFBUTtBQUNuQixpQ0FBeUIsVUFBVTtBQUFBLE1BQ3JDO0FBRUEsaUJBQVcsS0FBSztBQUFBLElBQ2xCLENBQUM7QUFFRCxXQUFPLE1BQU07QUFDWCxlQUFTO0FBQUEsSUFDWDtBQUFBLEVBRUYsR0FBRyxDQUFDLFlBQVksV0FBVyxjQUFjLENBQUM7QUFFMUMsUUFBTSxlQUFlLENBQUMsR0FBbUIsdUJBQWtDO0FBQ3pFLHVCQUFtQixrQkFBa0I7QUFDckMsVUFBTSxZQUFZLG1CQUFtQixJQUFJLE9BQUssRUFBRSxVQUFVLENBQUM7QUFFM0QsVUFBTSxTQUFTLFVBQVUsV0FBVyxJQUFJLE9BQU8sU0FBUztBQUN4RCxvQkFBZ0IsVUFBVTtBQUMxQixlQUFXLGtCQUFrQjtBQUM3QixrQkFBYyxFQUFFO0FBRWhCLDZCQUF5QixVQUFVO0FBQUEsRUFDckM7QUFFQSxRQUFNLGFBQWEsUUFBUSxNQUFNO0FBQy9CLFdBQU8sWUFBWTtBQUFBLEVBQ3JCLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFFYixTQUNFO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxVQUFRO0FBQUEsTUFDUjtBQUFBLE1BQ0E7QUFBQSxNQUNBLHNCQUFzQixDQUFDLFFBQVEsUUFDN0IsZUFBZSxNQUFNLE1BQU0sZUFBZSxHQUFHO0FBQUEsTUFFL0M7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQO0FBQUEsTUFDQSx1QkFBcUI7QUFBQSxNQUNyQixlQUFlLE9BQUs7QUFBQSxNQUNwQixlQUFjO0FBQUEsTUFDZCxVQUFVO0FBQUEsTUFDVixJQUFJO0FBQUEsUUFDRixrQkFBa0I7QUFBQSxVQUNoQixRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0EscUNBQXFDO0FBQUEsVUFDbkMsaUJBQWlCLE1BQU0sUUFBUSxPQUFPO0FBQUEsVUFDdEMsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLGtEQUFrRDtBQUFBLFVBQ2hELFFBQVE7QUFBQSxRQUNWO0FBQUEsUUFDQSwwRUFDRTtBQUFBLFVBQ0UsYUFBYSxRQUFRLFFBQVE7QUFBQSxRQUMvQjtBQUFBLFFBQ0YsdUNBQXVDO0FBQUEsVUFDckMsYUFBYSxRQUFRLFFBQVE7QUFBQSxRQUMvQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWUsQ0FBQyxHQUFHLGtCQUFrQixjQUFjLGFBQWE7QUFBQSxNQUNoRSxhQUFhLFlBQ1g7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNFLEdBQUc7QUFBQSxVQUNKO0FBQUEsVUFDQSxPQUFPLENBQUMsQ0FBQztBQUFBLFVBQ1QsWUFBWSxRQUFRLE1BQU0sVUFBVTtBQUFBLFVBQ3BDO0FBQUEsVUFDQSxZQUFZO0FBQUEsWUFDVixHQUFHLE9BQU87QUFBQSxZQUNWLGNBQ0UscUJBQUMsWUFDRTtBQUFBLHdCQUNDLG9CQUFDLG9CQUFpQixPQUFNLFdBQVUsTUFBTSxJQUFJLElBQzFDO0FBQUEsY0FDSCxPQUFPLFdBQVc7QUFBQSxlQUNyQjtBQUFBLFVBRUo7QUFBQSxVQUNBLFNBQVMsVUFBVSxVQUFVLGFBQWEsV0FBVztBQUFBO0FBQUEsTUFDdkQ7QUFBQSxNQUVGLGNBQWMsQ0FBQ0EsUUFBTyxRQUFRLFVBQVU7QUFDdEMsY0FBTSxFQUFFLEtBQUssR0FBRyxZQUFZLElBQzFCQTtBQUNGLGNBQU0sY0FBYyxlQUFlLE1BQU07QUFDekMsY0FBTSxVQUFVLE1BQU0sYUFBYSxNQUFNLFlBQVk7QUFBQSxVQUNuRCxhQUFhO0FBQUEsUUFDZixDQUFDO0FBQ0QsY0FBTSxRQUFRLE1BQU0sYUFBYSxPQUFPO0FBRXhDLGVBQ0Usb0JBQUMsUUFBYyxHQUFHLGFBQ2hCLDhCQUFDLFNBQ0UsZ0JBQU0sSUFBSSxDQUFDLE1BQU0sVUFDaEI7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUVDLE9BQU87QUFBQSxjQUNMLFlBQVksS0FBSyxZQUFZLE1BQU07QUFBQSxZQUNyQztBQUFBLFlBRUMsZUFBSztBQUFBO0FBQUEsVUFMRDtBQUFBLFFBTVAsQ0FDRCxHQUNILEtBWk8sR0FhVDtBQUFBLE1BRUo7QUFBQSxNQUNDLEdBQUc7QUFBQTtBQUFBLEVBQ047QUFFSjtBQUVBLElBQU1DLDJCQUEwQixDQVM5QjtBQUFBLEVBQ0E7QUFBQSxFQUNBLEdBQUc7QUFDTCxNQU0wQjtBQUN4QixNQUFJLFdBQVc7QUFDYixXQUNFO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLFVBQVU7QUFBQSxRQUVyRTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0UsR0FBRztBQUFBO0FBQUEsUUFDTjtBQUFBO0FBQUEsSUFDRjtBQUFBLEVBRUo7QUFFQSxTQUNFLG9CQUFDLGFBQStELEdBQUcsT0FBTztBQUU5RTtBQUVBQSx5QkFBd0IsY0FBYzs7O0FDeFh0QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxRQUFBQztBQUFBLE9BQ0s7QUFHUCxTQUFTLGlCQUFBQyxzQkFBcUI7QUFrRjFCLFNBT1EsT0FBQUMsTUFQUixRQUFBQyxhQUFBO0FBNUVKLElBQU1DLGFBQVksU0FBUyxnQkFHekIsT0FBa0Q7QUFDbEQsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixHQUFHO0FBQUEsRUFDTCxJQUFJO0FBRUosUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLFlBQVksRUFBRSxNQUFNO0FBQUEsRUFDdEIsSUFBSUMsZUFBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFJLE1BQU0sU0FBUyxRQUFRLE1BQU0sU0FBUyxRQUFXO0FBQ25ELFVBQU0sU0FBUyxLQUFLO0FBQUEsRUFDdEI7QUFFQSxRQUFNLHdCQUF3QixXQUFXO0FBRXpDLFFBQU0sRUFBRSxPQUFPLFNBQVMsSUFBSSxhQUEyQztBQUFBLElBQ3JFLE9BQU8sTUFBTTtBQUFBLElBQ2IsVUFBVSxNQUFNO0FBQUEsSUFDaEIsV0FBVztBQUFBLE1BQ1QsT0FDRSxPQUFPLFdBQVcsVUFBVSxhQUN4QixVQUFVLFFBQ1YsQ0FBQUMsV0FBUyxDQUFDLENBQUNBO0FBQUEsTUFDakIsUUFDRSxPQUFPLDBCQUEwQixhQUM3QixDQUFDLGNBQWMsV0FBVztBQUd4QixjQUFNLFFBQVE7QUFDZCxjQUFNLFVBQVU7QUFFaEIsZUFBTyxzQkFBc0IsT0FBTyxPQUFPO0FBQUEsTUFDN0MsSUFDQSxDQUFDLGNBQWMsV0FBVztBQUV4QixjQUFNLFVBQVU7QUFFaEIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNSO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxlQUFlLENBQ25CLE9BQ0EsWUFDRztBQUNILGFBQVMsT0FBTyxPQUFPO0FBQ3ZCLFFBQUksT0FBTyxtQkFBbUIsWUFBWTtBQUN4QyxxQkFBZSxPQUFPLE9BQU87QUFBQSxJQUMvQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLGVBQTBCLFFBQzVCLE9BQU8sZUFBZSxhQUNwQixXQUFXLEtBQUssSUFDaEIsTUFBTSxVQUNSO0FBRUosU0FDRSxnQkFBQUgsTUFBQyxlQUFZLE9BQU8sQ0FBQyxDQUFDLE9BQU8sVUFDM0I7QUFBQSxvQkFBQUQsS0FBQyxhQUFVLEtBQUcsTUFDWiwwQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLE9BQU8sU0FBUztBQUFBLFFBQ2YsR0FBRztBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQ0UsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRSxHQUFHO0FBQUEsWUFDSixPQUFPLEtBQUssU0FBUztBQUFBLFlBQ3JCLFNBQVM7QUFBQSxZQUNUO0FBQUEsWUFDQSxVQUFVO0FBQUEsWUFDVixLQUFLLE1BQU07QUFBQTtBQUFBLFFBQ2I7QUFBQTtBQUFBLElBRUosR0FDRjtBQUFBLEtBQ0UsZ0JBQWdCLGVBQ2hCLGdCQUFBQSxLQUFDLGtCQUFlLE9BQU8sQ0FBQyxDQUFDLE9BQ3RCLDBCQUFnQixZQUNuQjtBQUFBLEtBRUo7QUFFSjtBQWtHQSxJQUFNSyxtQkFBa0IsQ0FHdEI7QUFBQSxFQUNBLFlBQVksQ0FBQztBQUFBLEVBQ2IsR0FBRztBQUNMLE1BQWlEO0FBQy9DLFNBQ0UsZ0JBQUFMLEtBQUNNLE9BQUEsRUFBSyxNQUFNLElBQUssR0FBRyxXQUNsQiwwQkFBQU4sS0FBQ0UsWUFBQSxFQUFnQyxHQUFHLE9BQU8sR0FDN0M7QUFFSjs7O0FDN05BO0FBQUEsRUFDRSxZQUFBSztBQUFBLEVBQ0EsZUFBQUM7QUFBQSxFQUNBLG9CQUFBQztBQUFBLEVBQ0EsYUFBQUM7QUFBQSxFQUNBLGtCQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBLFFBQUFDO0FBQUEsT0FDSztBQUVQLFNBQVMsZUFBQUMsb0JBQW1CO0FBRTVCLFNBQVMsaUJBQUFDLHNCQUFxQjtBQWdKMUIsU0FFSSxPQUFBQyxNQUZKLFFBQUFDLGFBQUE7QUF6RUosSUFBTUMsYUFBWSxTQUFTLGNBWXpCLE9BUUE7QUFDQSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWDtBQUFBLElBQ0EsR0FBRztBQUFBLEVBQ0wsSUFBSTtBQUVKLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxZQUFZLEVBQUUsTUFBTTtBQUFBLEVBQ3RCLElBQUlILGVBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVUsS0FBSztBQUFBLEVBQ2pCLENBQUM7QUFFRCxRQUFNLDBCQUNKLE1BQU0sUUFBUSxNQUFNLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQyxHQUM1QyxJQUFJLE1BQU07QUFFWixRQUFNLGVBQWVEO0FBQUEsSUFDbkIsQ0FBQyxVQUF5QztBQUN4QyxZQUFNLHFCQUFxQixNQUFNLE9BQU87QUFDeEMsWUFBTSxZQUFZLE1BQU0sT0FBTztBQUUvQixZQUFNLDBCQUEwQixZQUM1QixDQUFDLEdBQUcsd0JBQXdCLGtCQUFrQixJQUM5Qyx1QkFBdUIsT0FBTyxPQUFLLE1BQU0sa0JBQWtCO0FBRS9ELFlBQU0sb0JBQ0osUUFBUSxTQUFTLEtBQUssT0FBTyxRQUFRLENBQUMsRUFBRSxRQUFRLE1BQU07QUFFeEQsVUFBSSxtQkFBbUI7QUFDckIsY0FBTSxxQkFBcUIsd0JBQ3hCLElBQUksT0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQ3hCLE9BQU8sT0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXhCLGNBQU0sU0FBUyxrQkFBa0I7QUFBQSxNQUNuQyxPQUFPO0FBQ0wsY0FBTSxTQUFTLHVCQUF1QjtBQUFBLE1BQ3hDO0FBQUEsSUFDRjtBQUFBLElBQ0EsQ0FBQyxPQUFPLFNBQVMsVUFBVSxzQkFBc0I7QUFBQSxFQUNuRDtBQUVBLFNBQ0UsZ0JBQUFHLE1BQUNSLGNBQUEsRUFBWSxPQUFPLENBQUMsQ0FBQyxPQUNuQjtBQUFBLGFBQ0MsZ0JBQUFPLEtBQUMsYUFBVyxHQUFHLGdCQUFnQixVQUFvQixPQUFPLENBQUMsQ0FBQyxPQUN6RCxpQkFDSDtBQUFBLElBRUYsZ0JBQUFBLEtBQUNMLFlBQUEsRUFBVSxLQUFHLE1BQ1gscUJBQ0MsUUFBUSxJQUFJLFlBQ1YsZ0JBQUFLO0FBQUEsTUFBQ047QUFBQSxNQUFBO0FBQUEsUUFFQyxPQUFPLE9BQU8sUUFBUTtBQUFBLFFBQ3JCLEdBQUc7QUFBQSxRQUNKLFNBQ0UsZ0JBQUFNO0FBQUEsVUFBQ1I7QUFBQSxVQUFBO0FBQUEsWUFDRSxHQUFHO0FBQUEsWUFDSixPQUFPLEtBQUssU0FBUztBQUFBLFlBQ3JCLE9BQU8sT0FBTyxRQUFRO0FBQUEsWUFDdEIsU0FBUyx1QkFBdUI7QUFBQSxjQUM5QixPQUFPLE9BQU8sUUFBUSxDQUFDO0FBQUEsWUFDekI7QUFBQSxZQUNBLFVBQVU7QUFBQTtBQUFBLFFBQ1o7QUFBQTtBQUFBLE1BWkcsR0FBRyxPQUFPLFFBQVEsQ0FBQztBQUFBLElBYzFCLENBQ0QsR0FDTDtBQUFBLElBQ0MsU0FDQyxnQkFBQVEsS0FBQ0osaUJBQUEsRUFBZSxPQUFPLENBQUMsQ0FBQyxPQUFRLGdCQUFNLFNBQVE7QUFBQSxLQUVuRDtBQUVKO0FBb0RBLElBQU0sdUJBQXVCLENBVzNCO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQU9NO0FBQ0osU0FDRSxnQkFBQUksS0FBQ0gsT0FBQSxFQUFLLE1BQU0sSUFBSyxHQUFHLFdBQ2xCLDBCQUFBRyxLQUFDRSxZQUFBLEVBQVcsR0FBRyxPQUFPLEdBQ3hCO0FBRUo7QUFFQSxxQkFBcUIsY0FBYzs7O0FDblJuQyxTQUFTLFFBQUFDLGFBQVk7QUFJckIsU0FBZ0IsY0FBQUMsbUJBQWtCOzs7QUNKbEMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxrQkFBa0I7QUFNM0IsU0FBZ0IsWUFBWSxlQUFBQyxjQUFhLFdBQUFDLGdCQUFlO0FBQ3hELFNBQVMsaUJBQUFDLHNCQUFxQjs7O0FDSDlCLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsZUFBQUMsY0FBYSxXQUFBQyxnQkFBZTtBQWlCOUIsU0FBUywwQkFDZCxTQUNBLE9BQ2M7QUFDZCxNQUFJLFVBQVUsUUFBUSxVQUFVLFFBQVc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLFFBQUksVUFBVSxJQUFJO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBR0EsVUFBTSxhQUFhLFFBQVEsTUFBTSxLQUFLLEtBQUs7QUFFM0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7QUFxRU8sU0FBUyxtQkFLZCxTQUNrQztBQUNsQyxRQUFNLEVBQUUsT0FBTyxVQUFVLElBQUk7QUFDN0IsUUFBTSxVQUFVLHVCQUF1QjtBQUd2QyxRQUFNLFFBQVFBLFNBQVEsTUFBcUI7QUFDekMsUUFBSSxPQUFPLFdBQVcsVUFBVSxZQUFZO0FBQzFDLGFBQU8sVUFBVSxNQUFNLE1BQU0sS0FBSztBQUFBLElBQ3BDO0FBR0EsV0FBTywwQkFBMEIsU0FBUyxNQUFNLEtBQUs7QUFBQSxFQUV2RCxHQUFHLENBQUMsTUFBTSxPQUFPLFdBQVcsT0FBTyxPQUFPLENBQUM7QUFHM0MsUUFBTSxXQUFXRDtBQUFBLElBQ2YsQ0FBQyxVQUF5QixZQUE2RDtBQUNyRixVQUFJLE9BQU8sV0FBVyxXQUFXLFlBQVk7QUFDM0MsY0FBTSxtQkFBbUIsVUFBVSxPQUFPLFVBQVUsT0FBTztBQUUzRCxjQUFNLFNBQVMsZ0JBQWdCO0FBQUEsTUFDakMsT0FBTztBQUVMLGNBQU0sU0FBUyxRQUEwQztBQUFBLE1BQzNEO0FBQUEsSUFDRjtBQUFBO0FBQUEsSUFFQSxDQUFDLE1BQU0sVUFBVSxXQUFXLE1BQU07QUFBQSxFQUNwQztBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjs7O0FDckpBLFNBQVMsV0FBQUUsZ0JBQWU7QUFpRHhCLElBQU0seUJBQXlCO0FBQUEsRUFDN0IsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsY0FBYztBQUFBLEVBQ2QsVUFBVTtBQUNaO0FBNkNPLFNBQVMsd0JBS2QsU0FDK0I7QUFDL0IsUUFBTSxFQUFFLFlBQVksWUFBWSxZQUFZLE1BQU0sSUFBSTtBQUd0RCxRQUFNLG1CQUFtQkEsU0FBUSxNQUFNO0FBQ3JDLFVBQU0sRUFBRSxPQUFPLFlBQVksUUFBUSxJQUFJO0FBR3ZDLFFBQUksZUFBNkQ7QUFHakUsUUFBSSxDQUFDLGNBQWMsU0FBUyxZQUFZO0FBQ3RDLFlBQU0sRUFBRSxTQUFTLFNBQVMsbUJBQW1CLGNBQWMsSUFBSTtBQUcvRCxVQUFJLFdBQVcsUUFBUSxTQUFTO0FBQzlCLHVCQUFlO0FBQUEsVUFDYixNQUFNO0FBQUEsVUFDTixTQUFTLGVBQWUsV0FBVyx1QkFBdUI7QUFBQSxRQUM1RDtBQUFBLE1BQ0YsV0FHUyxXQUFXLFFBQVEsU0FBUztBQUNuQyx1QkFBZTtBQUFBLFVBQ2IsTUFBTTtBQUFBLFVBQ04sU0FBUyxlQUFlLFdBQVcsdUJBQXVCO0FBQUEsUUFDNUQ7QUFBQSxNQUNGLFdBR1MscUJBQXFCLGtCQUFrQixLQUFLLEdBQUc7QUFDdEQsdUJBQWU7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFNBQVMsZUFBZSxnQkFBZ0IsdUJBQXVCO0FBQUEsUUFDakU7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFVBQU0sV0FBVyxRQUFRLFlBQVk7QUFFckMsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQLFNBQVMsV0FBVztBQUFBLElBQ3RCO0FBQUEsRUFDRixHQUFHLENBQUMsWUFBWSxZQUFZLEtBQUssQ0FBQztBQUdsQyxRQUFNLGVBQWVBLFNBQVEsTUFBaUI7QUFDNUMsUUFBSSxDQUFDLGlCQUFpQixPQUFPO0FBQzNCLGFBQU87QUFBQSxJQUNUO0FBR0EsUUFBSSxZQUFZO0FBQ2QsYUFBTyxXQUFXLGlCQUFpQixLQUFLO0FBQUEsSUFDMUM7QUFHQSxRQUFJLE9BQU8saUJBQWlCLFVBQVUsVUFBVTtBQUM5QyxhQUFPLGlCQUFpQjtBQUFBLElBQzFCO0FBRUEsUUFBSSxhQUFhLGlCQUFpQixTQUFTLGlCQUFpQixNQUFNLFNBQVM7QUFDekUsYUFBTyxpQkFBaUIsTUFBTTtBQUFBLElBQ2hDO0FBR0EsUUFBSSxVQUFVLGlCQUFpQixPQUFPO0FBQ3BDLFlBQU0sWUFBWSxpQkFBaUIsTUFBTTtBQUV6QyxjQUFRLFdBQVc7QUFBQSxRQUNqQixLQUFLO0FBQ0gsaUJBQU8sdUJBQXVCO0FBQUEsUUFDaEMsS0FBSztBQUNILGlCQUFPLHVCQUF1QjtBQUFBLFFBQ2hDLEtBQUs7QUFDSCxpQkFBTyx1QkFBdUI7QUFBQSxRQUNoQyxLQUFLO0FBQ0gsaUJBQU8sdUJBQXVCO0FBQUEsUUFDaEMsS0FBSztBQUFBLFFBQ0w7QUFDRSxpQkFBTyx1QkFBdUI7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFFQSxXQUFPLHVCQUF1QjtBQUFBLEVBQ2hDLEdBQUcsQ0FBQyxpQkFBaUIsT0FBTyxVQUFVLENBQUM7QUFFdkMsU0FBTztBQUFBLElBQ0wsR0FBRztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7OztBQzNNQSxTQUFTLFlBQUFDLGlCQUFnQjtBQUN6QixTQUFTLFdBQUFDLGdCQUFlO0FBK0RqQixTQUFTLG9CQUNkLFVBQXNDLENBQUMsR0FDWjtBQUMzQixRQUFNLEVBQUUsVUFBVSxVQUFVLFNBQVMsY0FBYyxJQUFJLFNBQVMsSUFBSTtBQUNwRSxRQUFNLFFBQVFELFVBQVM7QUFHdkIsUUFBTSxhQUFhQyxTQUFRLE1BQXNCO0FBQy9DLFVBQU0sYUFBNkI7QUFBQTtBQUFBLE1BRWpDLDRCQUE0QjtBQUFBLFFBQzFCLGlCQUFpQixXQUNiLE1BQU0sUUFBUSxPQUFPLHFCQUNyQjtBQUFBO0FBQUEsUUFHSixZQUFZLE1BQU0sWUFBWSxPQUFPO0FBQUEsVUFDbkM7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0YsR0FBRztBQUFBLFVBQ0QsVUFBVSxNQUFNLFlBQVksU0FBUztBQUFBLFFBQ3ZDLENBQUM7QUFBQTtBQUFBLFFBR0QsR0FBSSxZQUFZO0FBQUEsVUFDZCxhQUFhLE1BQU0sUUFBUSxNQUFNO0FBQUEsVUFDakMsV0FBVztBQUFBLFlBQ1QsYUFBYSxNQUFNLFFBQVEsTUFBTTtBQUFBLFVBQ25DO0FBQUEsVUFDQSxpQkFBaUI7QUFBQSxZQUNmLGFBQWEsTUFBTSxRQUFRLE1BQU07QUFBQSxZQUNqQyxXQUFXLGFBQWEsTUFBTSxRQUFRLE1BQU0sSUFBSTtBQUFBO0FBQUEsVUFDbEQ7QUFBQSxRQUNGO0FBQUE7QUFBQSxRQUdBLEdBQUksV0FBVztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1QsZUFBZTtBQUFBLFFBQ2pCO0FBQUEsTUFDRjtBQUFBO0FBQUEsTUFHQSx5QkFBeUI7QUFBQSxRQUN2QixRQUFRLFdBQ0osZ0JBQ0EsZUFDRSxZQUNBO0FBQUE7QUFBQSxRQUdOLEdBQUksZ0JBQWdCLENBQUMsWUFBWTtBQUFBLFVBQy9CLFFBQVE7QUFBQSxVQUNSLFlBQVk7QUFBQSxVQUNaLFlBQVk7QUFBQTtBQUFBLFFBQ2Q7QUFBQTtBQUFBLFFBR0EsR0FBSSxXQUFXO0FBQUEsVUFDYixRQUFRO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFBQTtBQUFBLE1BR0EsNkJBQTZCO0FBQUEsUUFDM0IsT0FBTyxNQUFNLFFBQVEsTUFBTTtBQUFBLFFBQzNCLFVBQVU7QUFBQSxNQUNaO0FBQUE7QUFBQSxNQUdBLHlCQUF5QjtBQUFBLFFBQ3ZCLE9BQU8sV0FDSCxNQUFNLFFBQVEsTUFBTSxPQUNwQixNQUFNLFFBQVEsS0FBSztBQUFBO0FBQUEsUUFHdkIsR0FBSSxZQUFZO0FBQUEsVUFDZCxPQUFPLE1BQU0sUUFBUSxLQUFLO0FBQUEsUUFDNUI7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUdBLDZCQUE2QjtBQUFBLFFBQzNCLFlBQVksTUFBTSxRQUFRLENBQUM7QUFBQSxRQUMzQixhQUFhLE1BQU0sUUFBUSxDQUFDO0FBQUE7QUFBQSxRQUc1QixHQUFJLFlBQVk7QUFBQSxVQUNkLE9BQU8sTUFBTSxRQUFRLE1BQU07QUFBQSxRQUM3QjtBQUFBLE1BQ0Y7QUFBQTtBQUFBLE1BR0EsNkJBQTZCO0FBQUEsUUFDM0IsT0FBTyxXQUNILE1BQU0sUUFBUSxPQUFPLFdBQ3JCLFdBQ0UsTUFBTSxRQUFRLE1BQU0sT0FDcEIsTUFBTSxRQUFRLE9BQU87QUFBQSxNQUM3QjtBQUFBO0FBQUEsTUFHQSx3Q0FBd0M7QUFBQSxRQUN0QyxTQUFTLGFBQWEsTUFBTSxRQUFRLFFBQVEsSUFBSTtBQUFBO0FBQUEsUUFDaEQsZUFBZTtBQUFBLE1BQ2pCO0FBQUE7QUFBQSxNQUdBLEdBQUksTUFBTSxRQUFRLFNBQVMsVUFBVTtBQUFBLFFBQ25DLDRCQUE0QjtBQUFBLFVBQzFCLGFBQWE7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFHQSxXQUFPLFdBQVcsQ0FBQyxZQUFZLFFBQVEsSUFBc0I7QUFBQSxFQUMvRCxHQUFHO0FBQUEsSUFDRDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBR0QsUUFBTSxZQUFZQSxTQUFRLE1BQU07QUFDOUIsVUFBTSxVQUFvQixDQUFDO0FBRTNCLFFBQUksU0FBVSxTQUFRLEtBQUssNkJBQTZCO0FBQ3hELFFBQUksU0FBVSxTQUFRLEtBQUssMEJBQTBCO0FBQ3JELFFBQUksUUFBUyxTQUFRLEtBQUssNEJBQTRCO0FBQ3RELFFBQUksYUFBYyxTQUFRLEtBQUssNkJBQTZCO0FBRTVELFdBQU8sUUFBUSxTQUFTLElBQUksUUFBUSxLQUFLLEdBQUcsSUFBSTtBQUFBLEVBQ2xELEdBQUcsQ0FBQyxVQUFVLFVBQVUsU0FBUyxZQUFZLENBQUM7QUFFOUMsU0FBTztBQUFBLElBQ0wsSUFBSTtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQ0Y7OztBSFE4QixnQkFBQUMsWUFBQTtBQW5KOUIsSUFBTSx3QkFBd0I7QUFBQSxFQUk1QixDQU1FLE9BTUEsUUFDRztBQUNILFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxXQUFXO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxlQUFlO0FBQUEsTUFDZjtBQUFBLE1BQ0EsYUFBYSxDQUFDO0FBQUEsTUFDZCxZQUFZLENBQUM7QUFBQSxNQUNiLGtCQUFrQixDQUFDO0FBQUEsTUFDbkIsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLEdBQUc7QUFBQSxJQUNMLElBQUk7QUFHSixVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0EsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLEdBQUc7QUFBQSxJQUNMLElBQUk7QUFHSixVQUFNLEVBQUUsT0FBTyxXQUFXLElBQUlDLGVBQWM7QUFBQSxNQUMxQztBQUFBLE1BQ0E7QUFBQSxNQUNBLGNBQWM7QUFBQTtBQUFBLElBQ2hCLENBQUM7QUFHRCxVQUFNLEVBQUUsT0FBTyxVQUFVLGNBQWMsSUFBSSxtQkFBbUI7QUFBQSxNQUM1RDtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFHRCxVQUFNLEVBQUUsVUFBVSxjQUFjLFFBQVEsSUFBSSx3QkFBd0I7QUFBQSxNQUNsRTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUdELFVBQU0sRUFBRSxVQUFVLElBQUksb0JBQW9CO0FBQUEsTUFDeEM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFHRCxVQUFNLGlCQUFpQixXQUFXLE1BQU0sS0FBSyxnQkFBZ0I7QUFHN0QsVUFBTSxlQUFlQztBQUFBLE1BQ25CLENBQ0UsVUFDQSxZQUNHO0FBQ0gsc0JBQWMsVUFBVSxPQUFPO0FBQUEsTUFDakM7QUFBQSxNQUNBLENBQUMsYUFBYTtBQUFBLElBQ2hCO0FBR0EsVUFBTSxjQUFjQTtBQUFBLE1BQ2xCLElBQUksU0FBa0Q7QUFFcEQsY0FBTSxPQUFPO0FBR2IsWUFBSSxTQUFTO0FBQ1gsa0JBQVEsR0FBRyxJQUFJO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUE7QUFBQSxNQUVBLENBQUMsTUFBTSxRQUFRLE9BQU87QUFBQSxJQUN4QjtBQUdBLFVBQU0sc0JBQXNCQTtBQUFBLE1BQzFCLENBQUMsVUFBOEM7QUFDN0MsY0FBTSxPQUFPO0FBR2IsWUFBSSxPQUFPLFdBQVcsV0FBVyxZQUFZO0FBQzNDLHFCQUFXLE9BQU8sS0FBSztBQUFBLFFBQ3pCO0FBQUEsTUFDRjtBQUFBO0FBQUEsTUFFQSxDQUFDLE1BQU0sUUFBUSxXQUFXLE1BQU07QUFBQSxJQUNsQztBQUdBLFVBQU0sb0JBQW9CQztBQUFBLE1BQ3hCLE9BQU87QUFBQSxRQUNMLEdBQUc7QUFBQSxRQUNILFdBQVc7QUFBQSxVQUNULFNBQVMsQ0FBQyxTQUFTLFNBQVMsVUFBVSxRQUFRO0FBQUEsVUFHOUMsR0FBRyxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1QsR0FBRztBQUFBLFVBQ0g7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFVBQ1AsWUFBWSxXQUFXLGVBQWU7QUFBQSxVQUN0QyxZQUFZO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixnQkFBZ0I7QUFBQSxZQUNoQixvQkFBb0IsV0FBVyxHQUFHLElBQUksV0FBVztBQUFBLFlBQ2pELEdBQUcsV0FBVztBQUFBLFVBQ2hCO0FBQUE7QUFBQSxVQUVBLEdBQUksV0FDRixvQkFBb0I7QUFBQSxZQUNsQixZQUFZO0FBQUEsY0FDVixjQUFjLGdCQUFBSCxLQUFDLG9CQUFpQjtBQUFBLGNBQ2hDLEdBQUcsV0FBVztBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUFBLFVBQ0YsR0FBRyxVQUFVO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUNBO0FBQUEsUUFDRTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFdBQ0UsZ0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFFRSxHQUFHO0FBQUEsUUFDSCxHQUFHO0FBQUEsUUFFSjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFFVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFFQSxXQUFXO0FBQUEsUUFFWCxnQkFBYztBQUFBLFFBQ2Qsb0JBQWtCLFdBQVcsR0FBRyxJQUFJLFdBQVc7QUFBQTtBQUFBLElBQ2pEO0FBQUEsRUFFSjtBQUNGO0FBR0Esc0JBQXNCLGNBQWM7OztBRDlHOUIsZ0JBQUFJLFlBQUE7QUFwQk4sSUFBTSxvQkFBb0JDLFlBR3hCLENBTUEsT0FDQSxRQUNHO0FBQ0gsUUFBTTtBQUFBLElBQ0osWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFBQSxJQUMvRCxHQUFHO0FBQUEsRUFDTCxJQUFJO0FBR0osTUFBSSxjQUFjLE9BQU87QUFDdkIsV0FDRSxnQkFBQUQ7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDO0FBQUEsUUFDQyxHQUFHO0FBQUE7QUFBQSxJQUNOO0FBQUEsRUFFSjtBQUdBLFNBQ0UsZ0JBQUFBO0FBQUEsSUFBQ0U7QUFBQSxJQUFBO0FBQUEsTUFDQztBQUFBLE1BQ0MsR0FBRztBQUFBLE1BRUosMEJBQUFGO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRSxHQUFHO0FBQUE7QUFBQSxNQUNOO0FBQUE7QUFBQSxFQUNGO0FBRUosQ0FBQztBQUdELGtCQUFrQixjQUFjOzs7QUtsS3pCLFNBQVMsWUFBWSxPQUEwQztBQUNwRSxNQUFJLFVBQVUsUUFBUSxVQUFVLFFBQVc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFHQSxNQUFJLGlCQUFpQixNQUFNO0FBQ3pCLFdBQU8sQ0FBQyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQUEsRUFDL0I7QUFHQSxNQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVUsTUFBTTtBQUUvQyxRQUFJLGFBQWEsU0FBUyxPQUFRLE1BQWMsWUFBWSxZQUFZO0FBQ3RFLGFBQVEsTUFBYyxRQUFRO0FBQUEsSUFDaEM7QUFHQSxRQUFJLGFBQWEsU0FBUyxPQUFRLE1BQWMsWUFBWSxXQUFXO0FBQ3JFLGFBQVEsTUFBYztBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQU9PLFNBQVMscUJBQXFCLE9BQWlDO0FBQ3BFLE1BQUksT0FBTyxVQUFVLFlBQVksVUFBVSxJQUFJO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBR0EsUUFBTSxlQUFlO0FBRXJCLE1BQUksYUFBYSxLQUFLLEtBQUssR0FBRztBQUM1QixXQUFPO0FBQUEsRUFDVDtBQUdBLFFBQU0sU0FBUyxJQUFJLEtBQUssS0FBSztBQUU3QixTQUFPLENBQUMsTUFBTSxPQUFPLFFBQVEsQ0FBQztBQUNoQztBQVVPLFNBQVMseUJBSWQsU0FBb0Q7QUFDcEQsU0FBTyxDQUFDLFVBQXdEO0FBQzlELFFBQUksVUFBVSxRQUFRLFVBQVUsUUFBVztBQUN6QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsVUFBSSxVQUFVLElBQUk7QUFDaEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJO0FBQ0YsY0FBTSxTQUFTLFFBQVEsTUFBTSxLQUFLLEtBQUs7QUFFdkMsZUFBTyxZQUFZLE1BQU0sSUFBSyxTQUFtQjtBQUFBLE1BQ25ELFFBQVE7QUFDTixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxRQUFJLFlBQVksS0FBSyxHQUFHO0FBQ3RCLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQVVPLFNBQVMsMEJBSWQsUUFBaUI7QUFDakIsU0FBTyxDQUFDLFVBQXdEO0FBQzlELFFBQUksVUFBVSxRQUFRLFVBQVUsUUFBVztBQUN6QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxZQUFZLEtBQUssR0FBRztBQUN2QixhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksQ0FBQyxRQUFRO0FBQ1gsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJO0FBRUYsVUFBSSxpQkFBaUIsTUFBTTtBQUN6QixZQUFJLFdBQVcsT0FBTztBQUNwQixpQkFBTyxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUVBLFlBQUksV0FBVyxhQUFhO0FBQzFCLGlCQUFPLE1BQU0sWUFBWSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFBQSxRQUN6QztBQUFBLE1BQ0Y7QUFHQSxVQUFJLE9BQVEsTUFBYyxXQUFXLFlBQVk7QUFDL0MsZUFBUSxNQUFjLE9BQU8sTUFBTTtBQUFBLE1BQ3JDO0FBR0EsVUFBSSxPQUFRLE1BQWMsV0FBVyxZQUFZO0FBQy9DLGVBQVEsTUFBYyxPQUFPLE1BQU07QUFBQSxNQUNyQztBQUdBLFVBQUksT0FBUSxNQUFjLGFBQWEsWUFBWTtBQUNqRCxlQUFRLE1BQWMsU0FBUyxNQUFNO0FBQUEsTUFDdkM7QUFHQSxhQUFPO0FBQUEsSUFDVCxRQUFRO0FBQ04sYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBQ0Y7QUFPTyxTQUFTLGdDQUFpRjtBQUMvRixTQUFPO0FBQUE7QUFBQSxJQUVMLFdBQVc7QUFBQSxNQUNULFdBQVc7QUFBQSxRQUNULFNBQVMsQ0FBQyxTQUFTLFNBQVMsVUFBVSxRQUFRO0FBQUEsTUFDaEQ7QUFBQSxNQUNBLFdBQVc7QUFBQSxRQUNULFdBQVc7QUFBQSxRQUNYLFNBQVM7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUFBO0FBQUEsSUFHQSxXQUFXO0FBQUEsTUFDVCxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRztBQUFBLElBQ2pEO0FBQUE7QUFBQSxJQUdBLFlBQVk7QUFBQSxNQUNWLGVBQWU7QUFBQSxRQUNiLGFBQWE7QUFBQSxRQUNiLFNBQVM7QUFBQSxRQUNULFNBQVM7QUFBQSxRQUNULGNBQWM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFPTyxTQUFTLG9CQUFvQixPQUF3QjtBQUMxRCxNQUFJLFVBQVUsUUFBUSxVQUFVLFFBQVc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLE1BQU07QUFFL0MsUUFBSSxhQUFhLFNBQVMsT0FBUSxNQUFjLFlBQVksVUFBVTtBQUNwRSxhQUFRLE1BQWM7QUFBQSxJQUN4QjtBQUdBLFFBQUksVUFBVSxTQUFTLE9BQVEsTUFBYyxTQUFTLFVBQVU7QUFDOUQsWUFBTSxZQUFhLE1BQWM7QUFFakMsY0FBUSxXQUFXO0FBQUEsUUFDakIsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVDtBQUNFLGlCQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBU08sU0FBUyxnQkFBbUQsUUFBbUI7QUFDcEYsTUFBSTtBQUNGLFdBQU8sS0FBSyxVQUFVLFFBQVEsQ0FBQyxLQUFLLFVBQVU7QUFFNUMsVUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLFFBQVEsQ0FBQyxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3hFLGNBQU0sU0FBa0MsQ0FBQztBQUV6QyxlQUFPLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLE9BQUs7QUFDckMsaUJBQU8sQ0FBQyxJQUFLLE1BQWMsQ0FBQztBQUFBLFFBQzlCLENBQUM7QUFFRCxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU87QUFBQSxJQUNULENBQUM7QUFBQSxFQUNILFFBQVE7QUFFTixXQUFPLE9BQU8sS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRztBQUFBLEVBQzVDO0FBQ0Y7OztBQ2hSQSxPQUFPLGdCQUFnQjtBQUN2QixPQUFPLG1CQUFtQjtBQUUxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQSxhQUFBRztBQUFBLEVBQ0EsY0FBQUM7QUFBQSxFQUNBLFFBQUFDO0FBQUEsT0FDSztBQUVQLFNBQVMsWUFBQUMsaUJBQWdCO0FBRXpCLFNBQVMsaUJBQUFDLHNCQUFxQjtBQWlEVyxnQkFBQUMsWUFBQTtBQU56QyxJQUFNQyxhQUFZLFNBQVMsV0FHekIsT0FBa0Q7QUFDbEQsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLGFBQWEsQ0FBQUMsY0FBYUEsWUFBVyxnQkFBQUYsS0FBQyxjQUFXLElBQUssZ0JBQUFBLEtBQUMsaUJBQWM7QUFBQSxJQUNyRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFFSixRQUFNLENBQUMsVUFBVSxXQUFXLElBQUlGLFVBQWtCLElBQUk7QUFFdEQsUUFBTSxlQUNKLGdCQUFBRSxLQUFDLGtCQUFlLFVBQVUsT0FDeEIsMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxhQUFhLENBQUMsTUFBcUMsRUFBRSxlQUFlO0FBQUEsTUFDcEUsU0FBUyxNQUFNLFlBQVksQ0FBQyxRQUFRO0FBQUEsTUFDcEMsVUFBVTtBQUFBLE1BQ1YsT0FBTyxhQUFhO0FBQUEsTUFFbkIscUJBQVcsUUFBUTtBQUFBO0FBQUEsRUFDdEIsR0FDRjtBQUdGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxZQUFZLEVBQUUsTUFBTTtBQUFBLEVBQ3RCLElBQUlELGVBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLGlCQUFpQkgsWUFBVyxNQUFNLEtBQUssUUFBUTtBQUVyRCxTQUNFLGdCQUFBSTtBQUFBLElBQUNMO0FBQUEsSUFBQTtBQUFBLE1BQ0UsR0FBRztBQUFBLE1BQ0osVUFBVTtBQUFBLE1BQ1YsTUFBTSxXQUFXLGFBQWE7QUFBQSxNQUM5QixPQUFPLE1BQU0sU0FBUztBQUFBLE1BQ3RCLFdBQVM7QUFBQSxNQUNULFNBQVMsS0FBSyxXQUFXO0FBQUEsTUFDekIsVUFBVSxXQUFTO0FBQ2pCLGNBQU0sU0FBUyxLQUFLO0FBQ3BCLFlBQUksT0FBTyxLQUFLLGFBQWEsWUFBWTtBQUN2QyxlQUFLLFNBQVMsS0FBSztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsUUFBUSxXQUFTO0FBQ2YsY0FBTSxPQUFPO0FBQ2IsWUFBSSxPQUFPLFdBQVcsWUFBWTtBQUNoQyxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFBQSxNQUNDLEdBQUksT0FBTyxjQUFjLGNBQ3RCO0FBQUEsUUFDRSxZQUFZO0FBQUEsVUFDVjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLElBQ0E7QUFBQSxRQUNFLFdBQVc7QUFBQSxVQUNULEdBQUc7QUFBQSxVQUNILE9BQU87QUFBQSxZQUNMO0FBQUEsWUFDQSxHQUFHLFdBQVc7QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFDSixPQUFPLENBQUMsQ0FBQztBQUFBLE1BQ1QsWUFBWSxRQUFRLE1BQU0sVUFBVTtBQUFBO0FBQUEsRUFDdEM7QUFFSjtBQWdFQSxJQUFNLGtCQUFrQixDQUd0QjtBQUFBLEVBQ0EsWUFBWSxDQUFDO0FBQUEsRUFDYixHQUFHO0FBQ0wsTUFBaUQ7QUFFL0MsU0FDRSxnQkFBQUssS0FBQ0gsT0FBQSxFQUFLLE1BQU0sSUFBSyxHQUFHLFdBQ2xCLDBCQUFBRyxLQUFDQyxZQUFBLEVBQVcsR0FBRyxPQUFPLEdBQ3hCO0FBRUo7OztBQzdNQTtBQUFBLEVBQ0UsZUFBQUU7QUFBQSxFQUNBLG9CQUFBQztBQUFBLEVBQ0Esa0JBQUFDO0FBQUEsRUFDQSxhQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxRQUFBQztBQUFBLE9BQ0s7QUFTUCxTQUFTLGlCQUFBQyxzQkFBcUI7QUEwSnRCLGdCQUFBQyxNQUlGLFFBQUFDLGFBSkU7QUFoR1IsSUFBTUMsYUFBWSxTQUFTLGlCQVl6QixPQVFBO0FBQ0EsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2Q7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsTUFBTTtBQUFBLElBQ047QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFFSixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsWUFBWSxFQUFFLE1BQU07QUFBQSxFQUN0QixJQUFJQyxlQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sRUFBRSxPQUFPLFNBQVMsSUFBSSxhQUkxQjtBQUFBLElBQ0EsT0FBTyxNQUFNO0FBQUEsSUFDYixVQUFVLE1BQU07QUFBQSxJQUNoQixXQUFXO0FBQUEsTUFDVCxPQUNFLE9BQU8sV0FBVyxVQUFVLGFBQ3hCLFVBQVUsUUFDVixDQUFBQyxXQUFTO0FBQ1AsZUFBT0EsVUFBVTtBQUFBLE1BQ25CO0FBQUEsTUFDTixRQUNFLE9BQU8sV0FBVyxXQUFXLGFBQ3pCLFdBQVcsU0FDWCxDQUFDLFFBQVFBLFdBQVU7QUFDakIsWUFBSUEsVUFBUyxTQUFTLFVBQVU7QUFDOUIsaUJBQU8sT0FBT0EsTUFBSztBQUFBLFFBQ3JCO0FBRUEsWUFBSUEsVUFBUyxTQUFTLFdBQVc7QUFDL0IsaUJBQU8sUUFBUUEsTUFBSztBQUFBLFFBQ3RCO0FBRUEsZUFBT0E7QUFBQSxNQUNUO0FBQUEsSUFDUjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sZ0JBQTZDLENBQUMsT0FBTyxlQUFlO0FBQ3hFLFVBQU0sY0FBYyxlQUNmLFFBQXNCLEtBQUssWUFBVSxPQUFPLFFBQVEsTUFBTSxVQUFVLElBQ3BFO0FBRUwsYUFBUyxPQUFPLFdBQVc7QUFDM0IsUUFBSSxPQUFPLEtBQUssYUFBYSxZQUFZO0FBQ3ZDLFdBQUssU0FBUyxXQUFXO0FBQUEsSUFDM0I7QUFBQSxFQUNGO0FBRUEsU0FDRSxnQkFBQUgsTUFBQ0ksY0FBQSxFQUFZLE9BQU8sQ0FBQyxDQUFDLE9BQ25CO0FBQUEsYUFDQyxnQkFBQUwsS0FBQ00sWUFBQSxFQUFXLEdBQUcsZ0JBQWdCLFVBQW9CLE9BQU8sQ0FBQyxDQUFDLE9BQ3pELGlCQUNIO0FBQUEsSUFFRixnQkFBQUwsTUFBQyxjQUFXLFVBQVUsZUFBZSxNQUFZLEtBQVUsT0FDeEQ7QUFBQSwwQkFDQyxnQkFBQUQ7QUFBQSxRQUFDTztBQUFBLFFBQUE7QUFBQSxVQUNFLEdBQUc7QUFBQSxVQUNKLFNBQ0UsZ0JBQUFQO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDRSxHQUFHO0FBQUEsY0FDSixTQUFTLENBQUM7QUFBQTtBQUFBLFVBQ1o7QUFBQSxVQUVGLE9BQU87QUFBQSxVQUNQLE9BQU07QUFBQTtBQUFBLE1BQ1I7QUFBQSxNQUVELFFBQVEsSUFBSSxZQUFVO0FBQ3JCLGNBQU0sWUFBWSxPQUFPLFFBQVE7QUFDakMsY0FBTSxpQkFBaUIsT0FBTyxXQUFXLEtBQUs7QUFDOUMsWUFBSSxNQUFzQyxlQUNyQyxRQUFvQixRQUFRLElBQzVCO0FBRUwsWUFBSSxTQUFTLFlBQVksUUFBUSxRQUFXO0FBQzFDLGdCQUFNLE9BQU8sR0FBRztBQUFBLFFBQ2xCLFdBQVcsU0FBUyxhQUFhLFFBQVEsUUFBVztBQUNsRCxnQkFBTSxRQUFRLEdBQUc7QUFBQSxRQUNuQjtBQUVBLGNBQU0sWUFBWSxRQUFRO0FBRTFCLGVBQ0UsZ0JBQUFBO0FBQUEsVUFBQ087QUFBQSxVQUFBO0FBQUEsWUFFRSxHQUFHO0FBQUEsWUFDSixTQUNFLGdCQUFBUDtBQUFBLGNBQUM7QUFBQTtBQUFBLGdCQUNFLEdBQUc7QUFBQSxnQkFDSixVQUFVLFlBQVk7QUFBQSxnQkFDdEIsU0FBUztBQUFBO0FBQUEsWUFDWDtBQUFBLFlBRUYsT0FBTztBQUFBLFlBQ1AsT0FBTyxPQUFPLFFBQVE7QUFBQTtBQUFBLFVBVmpCLE9BQU8sU0FBUztBQUFBLFFBV3ZCO0FBQUEsTUFFSixDQUFDO0FBQUEsT0FDSDtBQUFBLElBQ0MsU0FBUyxnQkFBQUEsS0FBQ1EsaUJBQUEsRUFBZ0IsZ0JBQU0sU0FBUTtBQUFBLEtBQzNDO0FBRUo7QUFFQSxJQUFNQyxvQkFBbUIsQ0FXdkI7QUFBQSxFQUNBLFlBQVksQ0FBQztBQUFBLEVBQ2IsR0FBRztBQUNMLE1BT007QUFDSixTQUNFLGdCQUFBVCxLQUFDVSxPQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFWO0FBQUEsSUFBQ0U7QUFBQSxJQUFBO0FBQUEsTUFRRSxHQUFHO0FBQUE7QUFBQSxFQUNOLEdBQ0Y7QUFFSjtBQUVBTyxrQkFBaUIsY0FBYzs7O0FDeFEvQixTQUFTLFFBQUFFLE9BQU0sYUFBQUMsWUFBVyxnQkFBQUMscUJBQW9CO0FBQzlDLFNBQVMsWUFBQUMsaUJBQWdCO0FBQ3pCLFNBQVMsVUFBQUMsU0FBUSxhQUFBQyxZQUFXLGVBQUFDLGNBQWEsV0FBQUMsZ0JBQWU7QUFFeEQsU0FBUyxpQkFBQUMsc0JBQXFCO0FBMkx0QixnQkFBQUMsWUFBQTtBQXBKUixJQUFNQyxhQUFZLFNBQVMscUJBSXpCLE9BQWdFO0FBQ2hFLFFBQU0sUUFBUVAsVUFBUztBQUN2QixRQUFNO0FBQUEsSUFDSixhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGlCQUFpQixDQUFDO0FBQUEsSUFDbEI7QUFBQSxJQUNBLGFBQWE7QUFBQSxJQUNiLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFFSixRQUFNLEVBQUUsVUFBVSxHQUFHLGNBQWMsSUFBSTtBQUN2QyxRQUFNLFVBQVVJLFNBQVEsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBRWhFLFFBQU0sZUFBZUQ7QUFBQSxJQUNuQixDQUFDLFdBQXFDO0FBQ3BDLFVBQUksT0FBTyxXQUFXLFlBQVksT0FBTyxXQUFXO0FBQ2xELGVBQU87QUFDVCxZQUFNLE1BQU0sU0FBUyxPQUFPLFVBQTJCLElBQUk7QUFFM0QsYUFBTyxRQUFRLFVBQWEsUUFBUSxPQUFPLE9BQU8sR0FBRyxJQUFJO0FBQUEsSUFDM0Q7QUFBQSxJQUNBLENBQUMsVUFBVTtBQUFBLEVBQ2I7QUFFQSxRQUFNLGlCQUFpQkE7QUFBQSxJQUNyQixDQUFDLFdBQW9CO0FBQ25CLFVBQUksT0FBTyxXQUFXLFNBQVUsUUFBTztBQUV2QyxhQUFPLFNBQVMsT0FBTyxPQUFPLFVBQTJCLENBQUMsSUFBSTtBQUFBLElBQ2hFO0FBQUEsSUFDQSxDQUFDLFVBQVU7QUFBQSxFQUNiO0FBRUEsUUFBTSx1QkFBdUIsQ0FBQyxRQUFpQixVQUM3QyxhQUFhLE1BQU0sTUFBTSxhQUFhLEtBQUs7QUFFN0MsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLFlBQVksRUFBRSxNQUFNO0FBQUEsRUFDdEIsSUFBSUUsZUFBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sRUFBRSxPQUFPLGVBQWUsSUFBSUEsZUFBYztBQUFBLElBQzlDLE1BQU07QUFBQSxJQUNOO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxpQkFBaUJKLFFBQU8sZUFBZSxLQUFLO0FBRWxELEVBQUFDLFdBQVUsTUFBTTtBQUNkLFFBQUksZUFBZSxZQUFZLGVBQWUsT0FBTztBQUNuRCxZQUFNLFNBQVMsSUFBSTtBQUNuQixxQkFBZSxVQUFVLGVBQWU7QUFBQSxJQUMxQztBQUFBLEVBQ0YsR0FBRyxDQUFDLGVBQWUsT0FBTyxLQUFLLENBQUM7QUFFaEMsRUFBQUEsV0FBVSxNQUFNO0FBQ2QsVUFBTSxXQUNKLE1BQU0sVUFBVSxRQUFRLE1BQU0sVUFBVSxVQUFhLE1BQU0sVUFBVTtBQUV2RSxRQUFJLFFBQVEsV0FBVyxLQUFLLENBQUMsVUFBVTtBQUNyQyxVQUFJLFNBQVU7QUFDZCxZQUFNLFNBQVMsYUFBYSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDekM7QUFBQSxFQUVGLEdBQUcsQ0FBQyxTQUFTLFVBQVUsY0FBYyxNQUFNLFVBQVUsZUFBZSxLQUFLLENBQUM7QUFFMUUsUUFBTSxhQUFhRSxTQUFRLE1BQU07QUFDL0IsUUFBSSxTQUFVLFFBQU87QUFDckIsUUFDRSxlQUFlLFVBQVUsUUFDekIsZUFBZSxVQUFVLFVBQ3pCLGVBQWUsVUFBVTtBQUV6QixhQUFPO0FBRVQsUUFBSSxRQUFRLFdBQVcsS0FBSyxDQUFDLFlBQVk7QUFDdkMsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPO0FBQUEsRUFDVCxHQUFHLENBQUMsVUFBVSxlQUFlLE9BQU8sUUFBUSxRQUFRLFVBQVUsQ0FBQztBQUUvRCxTQUNFLGdCQUFBRTtBQUFBLElBQUNQO0FBQUEsSUFBQTtBQUFBLE1BQ0UsR0FBRztBQUFBLE1BQ0osT0FDRSxRQUNHLElBQUksWUFBVyxhQUFhLE1BQU0sTUFBTSxNQUFNLFFBQVEsU0FBUyxJQUFLLEVBQ3BFLEtBQUssT0FBTyxLQUFLO0FBQUEsTUFFdEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxLQUFLLE1BQU07QUFBQSxNQUNYLFVBQVU7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLGtCQUFrQjtBQUFBLFVBQ2hCLFFBQVE7QUFBQSxRQUNWO0FBQUEsUUFDQSxxQ0FBcUM7QUFBQSxVQUNuQyxpQkFBaUIsTUFBTSxRQUFRLE9BQU87QUFBQSxVQUN0QyxRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0Esa0RBQWtEO0FBQUEsVUFDaEQsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLDBFQUNFO0FBQUEsVUFDRSxhQUFhLFFBQVEsUUFBUTtBQUFBLFFBQy9CO0FBQUEsUUFDRix1Q0FBdUM7QUFBQSxVQUNyQyxhQUFhLFFBQVEsUUFBUTtBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsVUFBVSxDQUFDLE9BQU8sVUFBVSxXQUFXO0FBQ3JDLGNBQU0sU0FBUyxXQUFXLGFBQWEsUUFBUSxJQUFJLElBQUk7QUFDdkQsWUFBSSxZQUFZLE9BQU8sYUFBYSxZQUFZO0FBQzlDLG1CQUFTLE9BQU8sVUFBVSxNQUFNO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxRQUFRLFdBQVM7QUFDZixjQUFNLE9BQU87QUFDYixZQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsV0FBUztBQUFBLE1BQ1QsYUFBYSxZQUNYLGdCQUFBTztBQUFBLFFBQUNSO0FBQUEsUUFBQTtBQUFBLFVBQ0UsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0osV0FBUztBQUFBLFVBQ1QsT0FBTyxDQUFDLENBQUM7QUFBQSxVQUNULFVBQVUsWUFBWSxRQUFRLFVBQVU7QUFBQSxVQUN4QyxZQUFZLFFBQVEsTUFBTSxVQUFVO0FBQUEsVUFDcEM7QUFBQSxVQUNBO0FBQUEsVUFDQSxTQUFTLFVBQVUsVUFBVSxhQUFhLFdBQVc7QUFBQTtBQUFBLE1BQ3ZEO0FBQUE7QUFBQSxFQUVKO0FBRUo7QUFFTyxJQUFNVSx3QkFBdUIsQ0FJbEM7QUFBQSxFQUNBLFlBQVksQ0FBQztBQUFBLEVBQ2IsR0FBRztBQUNMLE1BSTBCO0FBQ3hCLFNBQ0UsZ0JBQUFGLEtBQUNULE9BQUEsRUFBSyxNQUFNLElBQUssR0FBRyxXQUNsQiwwQkFBQVMsS0FBQ0MsWUFBQSxFQUFXLEdBQUcsT0FBTyxHQUN4QjtBQUVKO0FBRUFDLHNCQUFxQixjQUFjOzs7QUNoT25DLFNBQVMsUUFBQUMsT0FBTSxhQUFBQyxZQUFXLGdCQUFBQyxxQkFBb0I7QUFDOUMsU0FBUyxZQUFBQyxpQkFBZ0I7QUFDekIsU0FBUyxXQUFBQyxVQUFTLGFBQUFDLFlBQVcsZUFBQUMsb0JBQW1CO0FBRWhELFNBQVMsaUJBQUFDLHNCQUFxQjtBQThLdEIsZ0JBQUFDLFlBQUE7QUF2SVIsSUFBTUMsYUFBWSxTQUFTLGNBU3pCLE9BU0E7QUFDQSxRQUFNLFFBQVFOLFVBQVM7QUFDdkIsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2I7QUFBQSxJQUNBLGlCQUFpQixDQUFDO0FBQUEsSUFDbEIsYUFBYTtBQUFBLElBQ2IsR0FBRztBQUFBLEVBQ0wsSUFBSTtBQUVKLFFBQU0sRUFBRSxVQUFVLEdBQUcsY0FBYyxJQUFJO0FBQ3ZDLFFBQU0sVUFBVUMsU0FBUSxNQUFNLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFFaEUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLFlBQVksRUFBRSxNQUFNO0FBQUEsRUFDdEIsSUFBSUcsZUFBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0saUJBQWlCRDtBQUFBLElBQ3JCLENBQUMsV0FBaUU7QUFDaEUsVUFBSSxPQUFPLFdBQVcsU0FBVSxRQUFPO0FBRXZDLGFBQU8sU0FBUyxPQUFPLFVBQTJCLElBQUk7QUFBQSxJQUN4RDtBQUFBLElBQ0EsQ0FBQyxVQUFVO0FBQUEsRUFDYjtBQUVBLFFBQU0saUJBQWlCQTtBQUFBLElBQ3JCLENBQUMsV0FBaUU7QUFDaEUsVUFBSSxPQUFPLFdBQVcsU0FBVSxRQUFPO0FBRXZDLGFBQU8sU0FBUyxPQUFPLE9BQU8sVUFBMkIsQ0FBQyxJQUFJO0FBQUEsSUFDaEU7QUFBQSxJQUNBLENBQUMsVUFBVTtBQUFBLEVBQ2I7QUFFQSxFQUFBRCxXQUFVLE1BQU07QUFDZCxVQUFNLFdBQ0osTUFBTSxVQUFVLFFBQVEsTUFBTSxVQUFVLFVBQWEsTUFBTSxVQUFVO0FBRXZFLFFBQUksUUFBUSxXQUFXLEtBQUssQ0FBQyxVQUFVO0FBQ3JDLFVBQUksU0FBVTtBQUNkLFlBQU0sU0FBUyxlQUFlLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUMzQztBQUFBLEVBRUYsR0FBRyxDQUFDLFNBQVMsVUFBVSxnQkFBZ0IsTUFBTSxRQUFRLENBQUM7QUFFdEQsUUFBTSxhQUFhRCxTQUFRLE1BQU07QUFDL0IsUUFBSSxTQUFVLFFBQU87QUFDckIsUUFBSSxRQUFRLFdBQVcsRUFBRyxRQUFPO0FBQ2pDLFFBQUksUUFBUSxXQUFXLEtBQUssQ0FBQyxXQUFZLFFBQU87QUFFaEQsV0FBTztBQUFBLEVBQ1QsR0FBRyxDQUFDLFVBQVUsUUFBUSxRQUFRLFVBQVUsQ0FBQztBQUV6QyxRQUFNLG9CQUFvQkE7QUFBQSxJQUN4QixNQUNFLFFBQVEsS0FBSyxZQUFVLGVBQWUsTUFBTSxNQUFNLE1BQU0sS0FBSyxLQUFLO0FBQUEsSUFDcEUsQ0FBQyxNQUFNLE9BQU8sU0FBUyxjQUFjO0FBQUEsRUFDdkM7QUFFQSxTQUNFLGdCQUFBSTtBQUFBLElBQUNOO0FBQUEsSUFBQTtBQUFBLE1BQ0UsR0FBRztBQUFBLE1BQ0osdUJBQXVCO0FBQUEsTUFDdkI7QUFBQSxNQUNBLE9BQ0U7QUFBQSxNQU9GLFVBQVUsQ0FBQyxPQUFPLFVBQVUsV0FBVztBQUNyQyxjQUFNLFNBQVM7QUFFZixjQUFNLFNBQVMsU0FBUyxlQUFlLE1BQU0sSUFBSSxJQUFJO0FBQ3JELG1CQUFXLE9BQU8sVUFBVSxNQUFNO0FBQUEsTUFDcEM7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLElBQUk7QUFBQSxRQUNGLGtCQUFrQjtBQUFBLFVBQ2hCLFFBQVE7QUFBQSxRQUNWO0FBQUEsUUFDQSxxQ0FBcUM7QUFBQSxVQUNuQyxpQkFBaUIsTUFBTSxRQUFRLE9BQU87QUFBQSxVQUN0QyxRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0Esa0RBQWtEO0FBQUEsVUFDaEQsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLDBFQUNFO0FBQUEsVUFDRSxhQUFhLFFBQVEsUUFBUTtBQUFBLFFBQy9CO0FBQUEsUUFDRix1Q0FBdUM7QUFBQSxVQUNyQyxhQUFhLFFBQVEsUUFBUTtBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZ0JBQWdCLFlBQVUsZUFBZSxNQUFNO0FBQUEsTUFDL0MsS0FBSyxNQUFNO0FBQUEsTUFDWCxzQkFBc0IsQ0FBQyxRQUFRLFVBQzdCLGVBQWUsTUFBTSxNQUFNLGVBQWUsS0FBSztBQUFBLE1BRWpELGFBQWEsWUFDWCxnQkFBQU07QUFBQSxRQUFDUDtBQUFBLFFBQUE7QUFBQSxVQUNFLEdBQUc7QUFBQSxVQUNILEdBQUc7QUFBQSxVQUNKLFdBQVM7QUFBQSxVQUNUO0FBQUEsVUFDQSxPQUFPLENBQUMsQ0FBQztBQUFBLFVBQ1QsWUFBWSxRQUFRLE1BQU0sVUFBVTtBQUFBLFVBQ3BDO0FBQUEsVUFDQTtBQUFBLFVBQ0EsU0FBUyxVQUFVLFVBQVUsYUFBYSxXQUFXO0FBQUE7QUFBQSxNQUN2RDtBQUFBO0FBQUEsRUFFSjtBQUVKO0FBMEVPLElBQU1TLGlCQUFnQixDQVEzQjtBQUFBLEVBQ0EsWUFBWSxDQUFDO0FBQUEsRUFDYixHQUFHO0FBQ0wsTUFRMEI7QUFDeEIsU0FDRSxnQkFBQUYsS0FBQ1IsT0FBQSxFQUFLLE1BQU0sSUFBSyxHQUFHLFdBQ2xCLDBCQUFBUSxLQUFDQyxZQUFBLEVBQVcsR0FBRyxPQUFPLEdBQ3hCO0FBRUo7QUFFQUMsZUFBYyxjQUFjOzs7QUM5UzVCLE9BQU8sa0JBQWtCO0FBQ3pCLE9BQU8sOEJBQThCO0FBUXJDO0FBQUEsRUFDRSxRQUFBQztBQUFBLEVBQ0EsWUFBQUM7QUFBQSxFQUNBLGFBQUFDO0FBQUEsRUFDQSxnQkFBQUM7QUFBQSxFQUNBLG9CQUFBQztBQUFBLEVBQ0EsWUFBQUM7QUFBQSxPQUNLO0FBRVAsU0FBUyxZQUFBQyxXQUFVLGFBQUFDLFlBQVcsV0FBQUMsZ0JBQWU7QUFFN0MsU0FBUyxpQkFBQUMsc0JBQXFCO0FBNkhmLGdCQUFBQyxPQThDTCxRQUFBQyxhQTlDSztBQS9FZixJQUFNQyxhQUFZLFNBQVMsbUJBSXpCLE9BQThEO0FBQzlELFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IsR0FBRztBQUFBLEVBQ0wsSUFBSTtBQUNKLFFBQU0sUUFBUVAsVUFBUztBQUV2QixRQUFNLFVBQVVHLFNBQVEsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO0FBRWhFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxZQUFZLEVBQUUsTUFBTTtBQUFBLEVBQ3RCLElBQUlDLGVBQWM7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLGlCQUFpQixDQUFDLFdBQW9CO0FBQzFDLFFBQUksT0FBTyxXQUFXLFNBQVUsUUFBTztBQUV2QyxXQUFPLFNBQVMsT0FBTyxVQUEyQixJQUFJO0FBQUEsRUFDeEQ7QUFFQSxRQUFNLGlCQUFpQixDQUFDLFdBQTRCO0FBQ2xELFFBQUksT0FBTyxXQUFXLFNBQVUsUUFBTztBQUV2QyxXQUFPLFNBQVMsT0FBTyxPQUFPLFVBQTJCLENBQUMsSUFBSTtBQUFBLEVBQ2hFO0FBQ0EsUUFBTSxhQUFhRCxTQUFRLE1BQU07QUFDL0IsUUFBSSxTQUFVLFFBQU87QUFDckIsUUFBSSxRQUFRLFdBQVcsRUFBRyxRQUFPO0FBQ2pDLFFBQUksUUFBUSxXQUFXLEtBQUssQ0FBQyxXQUFZLFFBQU87QUFFaEQsV0FBTztBQUFBLEVBQ1QsR0FBRyxDQUFDLFVBQVUsUUFBUSxRQUFRLFVBQVUsQ0FBQztBQUV6QyxRQUFNLGdCQUNKLE1BQU0sU0FBUyxNQUFNLFFBQVEsTUFBTSxLQUFLLElBQ3BDLFFBQVEsT0FBTyxZQUFVLE1BQU0sTUFBTSxTQUFTLGVBQWUsTUFBTSxDQUFDLENBQUMsSUFDckUsQ0FBQztBQUVQLEVBQUFELFdBQVUsTUFBTTtBQUNkLFVBQU0sV0FBVyxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFFcEUsUUFBSSxRQUFRLFdBQVcsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZO0FBQ3BELFlBQU0sU0FBUyxDQUFDLGVBQWUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDN0M7QUFBQSxFQUVGLEdBQUcsQ0FBQyxTQUFTLGdCQUFnQixNQUFNLFVBQVUsVUFBVSxDQUFDO0FBRXhELFFBQU0sZUFBZSxDQUNuQixHQUNBLGlCQUNBLFdBQ0c7QUFDSCxRQUFJLFdBQVcsU0FBUztBQUN0QixZQUFNLFNBQVMsSUFBSTtBQUFBLElBQ3JCLFdBQVcsV0FBVyxrQkFBa0IsV0FBVyxnQkFBZ0I7QUFDakUsWUFBTSxZQUFZLGdCQUFnQixJQUFJLFlBQVUsZUFBZSxNQUFNLENBQUM7QUFFdEUsWUFBTSxTQUFTLFVBQVUsV0FBVyxJQUFJLE9BQU8sU0FBUztBQUFBLElBQzFEO0FBQUEsRUFDRjtBQUVBLFFBQU0sT0FBTyxnQkFBQUcsTUFBQyw0QkFBeUIsVUFBUyxTQUFRO0FBQ3hELFFBQU0sY0FBYyxnQkFBQUEsTUFBQyxnQkFBYSxVQUFTLFNBQVE7QUFFbkQsU0FDRSxnQkFBQUE7QUFBQSxJQUFDUDtBQUFBLElBQUE7QUFBQSxNQUNDLFVBQVE7QUFBQSxNQUNSLE9BQU87QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLHNCQUFzQixDQUFDLFFBQVEsVUFDN0IsZUFBZSxNQUFNLE1BQU0sZUFBZSxLQUFLO0FBQUEsTUFFakQsdUJBQXFCO0FBQUEsTUFDckIsc0JBQW9CO0FBQUEsTUFDcEIsS0FBSyxNQUFNO0FBQUEsTUFDWCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixRQUFRLFdBQVM7QUFDZixjQUFNLE9BQU87QUFDYixZQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsSUFBSTtBQUFBLFFBQ0Ysa0JBQWtCO0FBQUEsVUFDaEIsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLHFDQUFxQztBQUFBLFVBQ25DLGlCQUFpQixNQUFNLFFBQVEsT0FBTztBQUFBLFVBQ3RDLFFBQVE7QUFBQSxRQUNWO0FBQUEsUUFDQSxrREFBa0Q7QUFBQSxVQUNoRCxRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0EsMEVBQ0U7QUFBQSxVQUNFLGFBQWEsUUFBUSxRQUFRO0FBQUEsUUFDL0I7QUFBQSxRQUNGLHVDQUF1QztBQUFBLFVBQ3JDLGFBQWEsUUFBUSxRQUFRO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsTUFDQSxXQUFTO0FBQUEsTUFDVCxjQUFjLENBQUMsUUFBUSxRQUFRLEVBQUUsU0FBUyxNQUFNO0FBQzlDLGVBQ0UsZ0JBQUFRLE1BQUMsUUFBSSxHQUFHLFFBQ047QUFBQSwwQkFBQUQ7QUFBQSxZQUFDVDtBQUFBLFlBQUE7QUFBQSxjQUNDO0FBQUEsY0FDQTtBQUFBLGNBQ0EsU0FBUztBQUFBO0FBQUEsVUFDWDtBQUFBLFVBQ0MsZUFBZSxNQUFpQjtBQUFBLFdBQ25DO0FBQUEsTUFFSjtBQUFBLE1BQ0EsYUFBYSxZQUNYLGdCQUFBUztBQUFBLFFBQUNSO0FBQUEsUUFBQTtBQUFBLFVBQ0UsR0FBRztBQUFBLFVBQ0o7QUFBQSxVQUNBLE9BQU8sQ0FBQyxDQUFDO0FBQUEsVUFDVCxZQUFZLFFBQVEsTUFBTSxVQUFVO0FBQUEsVUFDcEM7QUFBQSxVQUNBLFlBQVk7QUFBQSxZQUNWLEdBQUcsT0FBTztBQUFBLFlBQ1YsY0FDRSxnQkFBQVMsTUFBQ0wsV0FBQSxFQUNFO0FBQUEsd0JBQ0MsZ0JBQUFJLE1BQUNOLG1CQUFBLEVBQWlCLE9BQU0sV0FBVSxNQUFNLElBQUksSUFDMUM7QUFBQSxjQUNILE9BQU8sV0FBVztBQUFBLGVBQ3JCO0FBQUEsVUFFSjtBQUFBLFVBQ0EsU0FBUyxVQUFVLFVBQVUsYUFBYSxXQUFXO0FBQUE7QUFBQSxNQUN2RDtBQUFBLE1BRUQsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKO0FBRU8sSUFBTVMsc0JBQXFCLENBSWhDO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQUkwQjtBQUN4QixTQUNFLGdCQUFBSCxNQUFDVixPQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFVLE1BQUNFLFlBQUEsRUFBVyxHQUFHLE9BQU8sR0FDeEI7QUFFSjtBQUVBQyxvQkFBbUIsY0FBYzs7O0FDalBqQyxTQUFTLFFBQUFDLFFBQU0sYUFBQUMsWUFBVyxjQUFBQyxtQkFBa0I7QUFTNUMsU0FBUyxpQkFBQUMsdUJBQXFCO0FBdUsxQixnQkFBQUMsYUFBQTtBQWpFSixJQUFNQyxhQUFZLFNBQVMsaUJBSXpCLE9BQTJEO0FBQzNELFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcscUJBQXFCQztBQUFBLElBQ2hDO0FBQUEsSUFDQSxZQUFZO0FBQUE7QUFBQSxJQUNaO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGlCQUFpQixDQUFDO0FBQUEsSUFDbEI7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLGlCQUFpQixRQUFRLElBQUksYUFBYTtBQUFBLElBQzFDLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFFSixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRztBQUFBLEVBQ0wsSUFBSTtBQUVKLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxZQUFZLEVBQUUsTUFBTTtBQUFBLEVBQ3RCLElBQUlDLGdCQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBR0QsUUFBTSxFQUFFLE9BQU8sU0FBUyxJQUFJO0FBQUEsSUFDMUI7QUFBQSxNQUNFLE9BQU8sTUFBTTtBQUFBLE1BQ2IsVUFBVSxNQUFNO0FBQUEsTUFDaEIsV0FBVyxZQUNQO0FBQUEsUUFDRSxPQUFPLFVBQVU7QUFBQSxRQUNqQixRQUFRLFVBQVU7QUFBQSxNQUNwQixJQUNBO0FBQUEsTUFDSixXQUFXLENBQUMsWUFDUixTQUFTLFdBQ1AsV0FDQSxZQUNGO0FBQUE7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsUUFBTSxpQkFBaUJDLFlBQVcsTUFBTSxLQUFLLFFBQVE7QUFFckQsU0FDRSxnQkFBQUo7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNFLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxNQUNKLE1BQU0sTUFBTTtBQUFBLE1BQ1o7QUFBQSxNQUNBLFVBQVUsV0FBUztBQUNqQixjQUFNLFFBQVEsTUFBTSxPQUFPO0FBRTNCLFlBQUksVUFBVSxJQUFJO0FBQ2hCLGdCQUFNLFNBQVMsSUFBSTtBQUFBLFFBQ3JCLE9BQU87QUFDTCxtQkFBUyxLQUFLO0FBQUEsUUFDaEI7QUFFQSxZQUFJLE9BQU8sbUJBQW1CLFlBQVk7QUFDeEMseUJBQWUsS0FBSztBQUFBLFFBQ3RCO0FBRUE7QUFBQSxNQUNGO0FBQUEsTUFDQSxRQUFRLFdBQVM7QUFDZixjQUFNLE9BQU87QUFDYixZQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsU0FBUyxDQUFDLFVBQStDO0FBQ3ZELFlBQUksT0FBTyxZQUFZLFlBQVk7QUFDakMsa0JBQVEsS0FBSztBQUFBLFFBQ2Y7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxXQUFTO0FBQUEsTUFDVDtBQUFBLE1BQ0E7QUFBQSxNQUNBLE9BQU8sQ0FBQyxDQUFDO0FBQUEsTUFDVCxZQUNFLFFBQVMsYUFBYSxXQUFXLEtBQUssSUFBSSxNQUFNLFVBQVc7QUFBQSxNQUU3RCxVQUFVO0FBQUEsTUFDVixTQUFTLFVBQVUsVUFBVTtBQUFBO0FBQUEsRUFDL0I7QUFFSjtBQXVGTyxJQUFNSyxvQkFBbUIsQ0FJOUI7QUFBQSxFQUNBLFlBQVksQ0FBQztBQUFBLEVBQ2IsR0FBRztBQUNMLE1BQXdFO0FBQ3RFLFNBQ0UsZ0JBQUFMLE1BQUNNLFFBQUEsRUFBSyxNQUFNLElBQUssR0FBRyxXQUNsQiwwQkFBQU4sTUFBQ0MsWUFBQSxFQUFXLEdBQUcsT0FBTyxHQUN4QjtBQUVKOzs7QUNqVUEsU0FBUyxRQUFBTSxRQUFNLGNBQUFDLG1CQUFrQjtBQU9qQyxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLDBCQUFBQywrQkFBOEI7QUFTdkMsU0FBUyxpQkFBQUMsdUJBQXFCO0FBZ0cxQixnQkFBQUMsYUFBQTtBQXZESixJQUFNQyxjQUFZLFNBQVMsa0JBSXpCLE9BQTREO0FBQzVELFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0Esa0JBQWtCLENBQUM7QUFBQSxJQUNuQjtBQUFBLElBQ0EsR0FBRztBQUFBLEVBQ0wsSUFBSTtBQUVKLFFBQU0sVUFBVUMsd0JBQXVCO0FBRXZDLFFBQU0sRUFBRSxVQUFVLFVBQVUsU0FBUyxHQUFHLG9CQUFvQixJQUMxRDtBQUVGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxZQUFZLEVBQUUsTUFBTTtBQUFBLEVBQ3RCLElBQUlDLGdCQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsSUFDQSxjQUFjO0FBQUEsRUFDaEIsQ0FBQztBQUVELFFBQU0sRUFBRSxPQUFPLFNBQVMsSUFBSSxhQUFpRDtBQUFBLElBQzNFLE9BQU8sTUFBTTtBQUFBLElBQ2IsVUFBVSxNQUFNO0FBQUEsSUFDaEIsV0FBVztBQUFBLE1BQ1QsT0FDRSxPQUFPLFdBQVcsVUFBVSxhQUN4QixVQUFVLFFBQ1YsY0FBWSxnQkFBZ0IsU0FBUyxRQUFRO0FBQUEsTUFDbkQsUUFBUSxDQUFDLGNBQWNDLFdBQVU7QUFFL0IsY0FBTSxjQUFjQSxXQUFVLFNBQVlBLFNBQVE7QUFFbEQsWUFBSSxnQkFBZ0IsS0FBTSxRQUFPO0FBRWpDLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0saUJBQWlCQyxZQUFXLE1BQU0sS0FBSyxRQUFRO0FBRXJELFNBQ0UsZ0JBQUFMO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRSxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQyxHQUFHO0FBQUEsTUFDSixVQUFVO0FBQUEsTUFDVixTQUFTLElBQUksU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixZQUFJLFNBQVM7QUFDWCxrQkFBUSxHQUFHLElBQUk7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFVBQVUsQ0FBQyxVQUFVLFlBQVk7QUFDL0IsaUJBQVMsVUFBVSxPQUFPO0FBQzFCLFlBQUksT0FBTyxnQkFBZ0IsYUFBYSxZQUFZO0FBQ2xELDBCQUFnQixTQUFTLFVBQVUsT0FBTztBQUFBLFFBQzVDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsV0FBVztBQUFBLFFBQ1QsR0FBRztBQUFBLFFBQ0gsV0FBVztBQUFBLFVBQ1QsU0FBUyxDQUFDLFNBQVMsVUFBVSxRQUFRO0FBQUEsUUFDdkM7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNULEdBQUc7QUFBQSxVQUNIO0FBQUEsVUFDQTtBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1gsUUFBUSxDQUNOLFVBQ0c7QUFDSCxrQkFBTSxPQUFPO0FBQ2IsZ0JBQUksT0FBTyxZQUFZLFdBQVcsWUFBWTtBQUM1Qyx5QkFBVyxPQUFPLEtBQUs7QUFBQSxZQUN6QjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLE9BQU8sQ0FBQyxDQUFDO0FBQUEsVUFDVCxZQUFZLFFBQ1IsTUFBTSxVQUNOLFlBQVksY0FBYyxLQUFLO0FBQUEsVUFDbkMsWUFBWTtBQUFBLFlBQ1YsVUFBVSxDQUFDLENBQUM7QUFBQSxZQUNaLEdBQUcsWUFBWTtBQUFBLFVBQ2pCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQTtBQUFBLEVBQ0Y7QUFFSjtBQUVPLElBQU1NLHFCQUFvQixDQUkvQjtBQUFBLEVBQ0EsWUFBWSxDQUFDO0FBQUEsRUFDYixHQUFHO0FBQ0wsTUFBK0U7QUFDN0UsU0FDRSxnQkFBQU4sTUFBQ08sUUFBQSxFQUFLLE1BQU0sSUFBSyxHQUFHLFdBQ2xCLDBCQUFBUCxNQUFDQyxhQUFBLEVBQVcsR0FBRyxPQUFPLEdBQ3hCO0FBRUo7QUFFQUssbUJBQWtCLGNBQWM7OztBQzFMaEM7QUFBQSxFQUNFLGdCQUFBRTtBQUFBLEVBQ0Esb0JBQUFDO0FBQUEsRUFDQSxRQUFBQztBQUFBLEVBQ0EsYUFBQUM7QUFBQSxFQUNBLFlBQUFDO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBQUMsaUJBQWdCO0FBRXpCO0FBQUEsRUFDRSxZQUFBQztBQUFBLEVBQ0EsZUFBQUM7QUFBQSxFQUNBLGFBQUFDO0FBQUEsRUFDQSxXQUFBQztBQUFBLEVBQ0EsVUFBQUM7QUFBQSxFQUNBLFlBQUFDO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRSxpQkFBQUM7QUFBQSxPQUdLO0FBaVJTLFNBRUksT0FBQUMsT0FGSixRQUFBQyxhQUFBO0FBM1FoQixJQUFNQyxjQUFZLFNBQVMsbUJBVXpCLE9BT0E7QUFDQSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBO0FBQUE7QUFBQSxJQUdBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFFSixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsWUFBWSxFQUFFLE1BQU07QUFBQSxFQUN0QixJQUFJSCxnQkFBYztBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sUUFBUVIsVUFBUztBQUV2QixRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlPLFVBQWtCLEtBQUs7QUFDckQsUUFBTSxDQUFDLGdCQUFnQixpQkFBaUIsSUFBSUEsVUFBeUIsSUFBSTtBQUN6RSxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLFVBQVMsRUFBRTtBQUMvQyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLFVBQTZCLENBQUMsQ0FBQztBQUM3RCxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlBLFVBQVMsS0FBSztBQUd0QyxRQUFNLGlCQUFpQkQ7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFlBQVlEO0FBQUEsSUFDaEIsTUFDRUo7QUFBQSxNQUNFLENBQ0UsU0FDQSxhQUNHO0FBQ0gsZ0JBQVEsT0FBTyxFQUFFLEtBQUssT0FBSyxTQUFTLENBQUMsQ0FBQztBQUFBLE1BQ3hDO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNGLENBQUMsT0FBTztBQUFBLEVBQ1Y7QUFFQSxRQUFNLGlCQUFpQkU7QUFBQSxJQUNyQixDQUFDLFdBQXFDO0FBQ3BDLGFBQU8sU0FBUyxPQUFPLE9BQU8sVUFBVSxDQUFDLElBQUk7QUFBQSxJQUMvQztBQUFBLElBQ0EsQ0FBQyxVQUFVO0FBQUEsRUFDYjtBQUVBLFFBQU0saUJBQWlCQTtBQUFBLElBQ3JCLENBQUMsV0FBNEI7QUFDM0IsYUFBTyxTQUFTLE9BQU8sT0FBTyxVQUFVLENBQUMsSUFBSTtBQUFBLElBQy9DO0FBQUEsSUFDQSxDQUFDLFVBQVU7QUFBQSxFQUNiO0FBR0EsRUFBQUMsV0FBVSxNQUFNO0FBQ2QsVUFBTSxlQUFlLE1BQU07QUFHM0IsUUFBSSxnQkFBZ0IsZUFBZSxZQUFZLGNBQWM7QUFFM0QsVUFBSSxrQkFBa0IsZUFBZSxjQUFjLE1BQU0sY0FBYztBQUNyRSx1QkFBZSxVQUFVO0FBRXpCO0FBQUEsTUFDRjtBQUVBLFlBQU0sU0FBUztBQUVmLGlCQUFXLElBQUk7QUFDZixxQkFBZSxVQUFVO0FBRXpCLGdCQUFVLEVBQUUsT0FBTyxNQUFNLGVBQWUsYUFBYSxHQUFHLGFBQVc7QUFDakUsWUFBSSxDQUFDLE9BQVE7QUFDYixtQkFBVyxLQUFLO0FBQ2hCLGNBQU0sZ0JBQWdCLFNBQVM7QUFBQSxVQUM3QixZQUFVLE9BQU8sZUFBZSxNQUFNLENBQUMsTUFBTSxPQUFPLFlBQVk7QUFBQSxRQUNsRTtBQUVBLFlBQUksZUFBZTtBQUNqQixxQkFBVyxDQUFDLGFBQWEsQ0FBQztBQUMxQiw0QkFBa0IsYUFBYTtBQUMvQix3QkFBYyxlQUFlLGFBQWEsQ0FBQztBQUFBLFFBQzdDO0FBQUEsTUFDRixDQUFDO0FBRUQ7QUFBQSxJQUNGO0FBSUEsUUFBSSxnQkFBZ0IsaUJBQWlCLGVBQWUsY0FBYyxJQUFJLEtBQUs7QUFFekUsVUFBSSxlQUFlLElBQUk7QUFDckIsbUJBQVcsQ0FBQyxDQUFDO0FBQ2IsbUJBQVcsS0FBSztBQUVoQjtBQUFBLE1BQ0Y7QUFHQSxZQUFNLFNBQVM7QUFFZixpQkFBVyxJQUFJO0FBRWYsZ0JBQVUsRUFBRSxPQUFPLFlBQVksZUFBZSxLQUFLLEdBQUcsYUFBVztBQUMvRCxZQUFJLENBQUMsT0FBUTtBQUNiLG1CQUFXLEtBQUs7QUFDaEIsbUJBQVcsV0FBVyxDQUFDLENBQUM7QUFBQSxNQUMxQixDQUFDO0FBRUQ7QUFBQSxJQUNGO0FBR0EsUUFBSSxDQUFDLGdCQUFnQixnQkFBZ0I7QUFDbkMsd0JBQWtCLElBQUk7QUFDdEIsb0JBQWMsRUFBRTtBQUNoQixpQkFBVyxDQUFDLENBQUM7QUFDYixxQkFBZSxVQUFVO0FBQUEsSUFDM0I7QUFBQSxFQUNGLEdBQUc7QUFBQSxJQUNELE1BQU07QUFBQSxJQUNOO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxhQUFhQyxTQUFRLE1BQU07QUFDL0IsV0FBTyxZQUFZO0FBQUEsRUFDckIsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUViLFFBQU0sZUFBZUY7QUFBQSxJQUNuQixDQUFDLEdBQXlCLHNCQUFzQztBQUM5RCx3QkFBa0IsaUJBQWlCO0FBQ25DLFlBQU0sV0FBVyxvQkFDYixlQUFlLGlCQUFpQixJQUNoQztBQUVKLFlBQU0sU0FBUyxRQUFRO0FBQ3ZCLHFCQUFlLFVBQVU7QUFNekIsVUFBSSxtQkFBbUI7QUFDckIsc0JBQWMsZUFBZSxpQkFBaUIsQ0FBQztBQUFBLE1BQ2pELE9BQU87QUFDTCxzQkFBYyxFQUFFO0FBQ2hCLG1CQUFXLENBQUMsQ0FBQztBQUFBLE1BQ2Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxDQUFDLE9BQU8sZ0JBQWdCLGNBQWM7QUFBQSxFQUN4QztBQUVBLFFBQU0sb0JBQW9CQTtBQUFBLElBQ3hCLENBQUMsR0FBeUIsa0JBQTBCO0FBQ2xELG9CQUFjLGFBQWE7QUFBQSxJQUM3QjtBQUFBLElBQ0EsQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLGFBQWFBLGFBQVksTUFBTTtBQUVuQyxRQUFJLGdCQUFnQjtBQUNsQixvQkFBYyxlQUFlLGNBQWMsQ0FBQztBQUFBLElBQzlDLE9BQU87QUFFTCxvQkFBYyxFQUFFO0FBQUEsSUFDbEI7QUFBQSxFQUNGLEdBQUcsQ0FBQyxnQkFBZ0IsY0FBYyxDQUFDO0FBRW5DLFFBQU0sYUFBYUEsYUFBWSxNQUFNO0FBQ25DLFlBQVEsSUFBSTtBQUFBLEVBQ2QsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLGNBQWNBLGFBQVksTUFBTTtBQUNwQyxZQUFRLEtBQUs7QUFBQSxFQUNmLEdBQUcsQ0FBQyxDQUFDO0FBRUwsU0FDRSxnQkFBQU07QUFBQSxJQUFDYjtBQUFBLElBQUE7QUFBQSxNQUNFLEdBQUc7QUFBQSxNQUNKLFdBQVM7QUFBQSxNQUNUO0FBQUEsTUFDQSxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUjtBQUFBLE1BQ0E7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLHNCQUFzQixDQUFDLFFBQVEsVUFDN0IsZUFBZSxNQUFNLE1BQU0sZUFBZSxLQUFLO0FBQUEsTUFFakQsY0FBWTtBQUFBLE1BQ1osVUFBVTtBQUFBLE1BQ1Ysb0JBQWtCO0FBQUEsTUFDbEI7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQLHVCQUFxQjtBQUFBLE1BQ3JCLGVBQWUsT0FBSztBQUFBLE1BQ3BCLFVBQVU7QUFBQSxNQUNWLGVBQWU7QUFBQSxNQUNmLElBQUk7QUFBQSxRQUNGLGtCQUFrQjtBQUFBLFVBQ2hCLFFBQVE7QUFBQSxRQUNWO0FBQUEsUUFDQSxxQ0FBcUM7QUFBQSxVQUNuQyxpQkFBaUIsTUFBTSxRQUFRLE9BQU87QUFBQSxVQUN0QyxRQUFRO0FBQUEsUUFDVjtBQUFBLFFBQ0Esa0RBQWtEO0FBQUEsVUFDaEQsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLDBFQUNFO0FBQUEsVUFDRSxhQUFhLFFBQVEsUUFBUTtBQUFBLFFBQy9CO0FBQUEsUUFDRix1Q0FBdUM7QUFBQSxVQUNyQyxhQUFhLFFBQVEsUUFBUTtBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZUFBYztBQUFBLE1BQ2QsYUFBYSxZQUNYLGdCQUFBYTtBQUFBLFFBQUNWO0FBQUEsUUFBQTtBQUFBLFVBQ0UsR0FBRztBQUFBLFVBQ0o7QUFBQSxVQUNBLE9BQU8sQ0FBQyxDQUFDO0FBQUEsVUFDVCxZQUFZLFFBQVEsTUFBTSxVQUFVO0FBQUEsVUFDcEM7QUFBQSxVQUNBLFdBQVc7QUFBQSxZQUNULE9BQU87QUFBQSxjQUNMLEdBQUcsT0FBTztBQUFBLGNBQ1YsY0FDRSxnQkFBQVcsTUFBQ1IsV0FBQSxFQUNFO0FBQUEsMEJBQ0MsZ0JBQUFPLE1BQUNaLG1CQUFBLEVBQWlCLE9BQU0sV0FBVSxNQUFNLElBQUksSUFDMUM7QUFBQSxnQkFDSCxPQUFPLFdBQVc7QUFBQSxpQkFDckI7QUFBQSxZQUVKO0FBQUEsVUFDRjtBQUFBLFVBQ0EsU0FBUyxVQUFVLFVBQVUsYUFBYSxXQUFXO0FBQUE7QUFBQSxNQUN2RDtBQUFBLE1BRUYsY0FBYyxDQUFDLGFBQWEsV0FBVztBQUNyQyxjQUFNLEVBQUUsS0FBSyxHQUFHLFlBQVksSUFBSTtBQUVoQyxlQUNFLGdCQUFBWSxNQUFDLFFBQWMsR0FBRyxhQUNmLGlCQUFPLFVBQVUsS0FEWCxHQUVUO0FBQUEsTUFFSjtBQUFBO0FBQUEsRUFDRjtBQUVKO0FBRUEsSUFBTUcsc0JBQXFCLENBU3pCO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQU0wQjtBQUN4QixTQUNFLGdCQUFBSCxNQUFDWCxRQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFXO0FBQUEsSUFBQ0U7QUFBQSxJQUFBO0FBQUEsTUFDRSxHQUFHO0FBQUE7QUFBQSxFQUNOLEdBQ0Y7QUFFSjtBQUVBQyxvQkFBbUIsY0FBYzs7O0FDdFZqQyxTQUFTLFFBQUFDLFFBQU0sYUFBQUMsWUFBVyxjQUFBQyxtQkFBa0I7QUFTNUMsU0FBUyxpQkFBQUMsdUJBQXFCO0FBd0sxQixnQkFBQUMsYUFBQTtBQXBFSixJQUFNQyxjQUFZLFNBQVMsbUJBSXpCLE9BQTZEO0FBQzdELFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFdBQVcscUJBQXFCQztBQUFBLElBQ2hDO0FBQUEsSUFDQSxZQUFZO0FBQUE7QUFBQSxJQUNaO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGlCQUFpQixDQUFDO0FBQUEsSUFDbEI7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLGlCQUFpQixRQUFRLElBQUksYUFBYTtBQUFBLElBQzFDO0FBQUEsSUFDQSxHQUFHO0FBQUEsRUFDTCxJQUFJO0FBRUosUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBRztBQUFBLEVBQ0wsSUFBSTtBQUVKLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxZQUFZLEVBQUUsTUFBTTtBQUFBLEVBQ3RCLElBQUlDLGdCQUFjO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBR0QsUUFBTSxFQUFFLE9BQU8sU0FBUyxJQUFJO0FBQUEsSUFDMUI7QUFBQSxNQUNFLE9BQU8sTUFBTTtBQUFBLE1BQ2IsVUFBVSxNQUFNO0FBQUEsTUFDaEIsV0FBVyxZQUNQO0FBQUEsUUFDRSxPQUFPLFVBQVU7QUFBQSxRQUNqQixRQUFRLFVBQVU7QUFBQSxNQUNwQixJQUNBO0FBQUEsTUFDSixXQUFXLENBQUMsWUFDUixTQUFTLFdBQ1AsYUFBYSxZQUFZLElBQ3ZCLFNBQ0EsV0FDRixZQUNGO0FBQUE7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsUUFBTSxpQkFBaUJDLFlBQVcsTUFBTSxLQUFLLFFBQVE7QUFFckQsU0FDRSxnQkFBQUo7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNFLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxNQUNKLE1BQU0sTUFBTTtBQUFBLE1BQ1o7QUFBQSxNQUNBLFVBQVUsV0FBUztBQUNqQixjQUFNLFFBQVEsTUFBTSxPQUFPO0FBRTNCLFlBQUksVUFBVSxJQUFJO0FBQ2hCLGdCQUFNLFNBQVMsSUFBSTtBQUFBLFFBQ3JCO0FBRUEsaUJBQVMsS0FBSztBQUNkLFlBQUksT0FBTyxtQkFBbUIsWUFBWTtBQUN4Qyx5QkFBZSxLQUFLO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxRQUFRLFdBQVM7QUFDZixjQUFNLE9BQU87QUFDYixZQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLE1BQ0EsU0FBUyxDQUFDLFVBQStDO0FBQ3ZELFlBQ0UsU0FBUyxZQUNULGFBQ0EsTUFBTSxPQUFPLE1BQU0sU0FBUyxXQUM1QjtBQUNBLGdCQUFNLE9BQU8sUUFBUSxNQUFNLE9BQU8sTUFBTSxNQUFNLEdBQUcsU0FBUztBQUFBLFFBQzVEO0FBRUEsWUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxrQkFBUSxLQUFLO0FBQUEsUUFDZjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFNBQVMsT0FBSztBQUNaLFFBQUMsRUFBRSxPQUF1QixLQUFLO0FBQUEsTUFDakM7QUFBQSxNQUNBLFdBQVcsT0FBSztBQUNkLFlBQUksQ0FBQyxLQUFLLEtBQUssYUFBYSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRztBQUN0RCxZQUFFLGVBQWU7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQVM7QUFBQSxNQUNUO0FBQUEsTUFDQTtBQUFBLE1BQ0EsT0FBTyxDQUFDLENBQUM7QUFBQSxNQUNULFlBQ0UsUUFBUyxhQUFhLFdBQVcsS0FBSyxJQUFJLE1BQU0sVUFBVztBQUFBLE1BRTdELFVBQVU7QUFBQSxNQUNWLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBQUEsTUFDdEMsU0FBUyxVQUFVLFVBQVU7QUFBQTtBQUFBLEVBQy9CO0FBRUo7QUF1Rk8sSUFBTUssc0JBQXFCLENBSWhDO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQUEwRTtBQUN4RSxTQUNFLGdCQUFBTCxNQUFDTSxRQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFOLE1BQUNDLGFBQUEsRUFBVyxHQUFHLE9BQU8sR0FDeEI7QUFFSjs7O0FDcFZBLFNBQVMsS0FBSyxRQUFBTSxRQUFNLHdCQUF3QjtBQUM1QztBQUFBLEVBQ0U7QUFBQSxPQUVLO0FBUVAsU0FBUyxrQkFBa0I7OztBQ1ozQixPQUFPQyxxQkFBb0I7QUFtQnJCLGdCQUFBQyxhQUFBO0FBVEMsU0FBUyxXQUFXO0FBQUEsRUFDekI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLEdBQUc7QUFDTCxHQUFvQjtBQUNsQixNQUFJLGdCQUFnQixZQUFZO0FBQzlCLFdBQ0UsZ0JBQUFBO0FBQUEsTUFBQ0Q7QUFBQSxNQUFBO0FBQUEsUUFDQyxPQUFPLENBQUMsQ0FBQztBQUFBLFFBQ1QsSUFBSTtBQUFBLFVBQ0Y7QUFBQSxZQUNFLElBQUksaUJBQWlCLElBQUk7QUFBQSxVQUMzQjtBQUFBLFVBQ0EsR0FBSSxNQUFNLFFBQVEsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQUEsUUFDbEM7QUFBQSxRQUNDLEdBQUc7QUFBQSxRQUVILDBCQUFnQjtBQUFBO0FBQUEsSUFDbkI7QUFBQSxFQUVKO0FBRUEsU0FBTztBQUNUOzs7QUQyQ1EsU0FrQkUsT0FBQUUsT0FsQkYsUUFBQUMsYUFBQTtBQTVCUixJQUFNQyxjQUFZLFNBQVMsZ0JBR3pCLE9BQWtEO0FBQ2xELFFBQU07QUFBQTtBQUFBLElBRUo7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLEdBQUc7QUFBQSxFQUNMLElBQUk7QUFVSixTQUNFLGdCQUFBRjtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0M7QUFBQSxNQUNBO0FBQUEsTUFDQSxRQUFRLENBQUMsRUFBRSxPQUFPLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFDdEMsZ0JBQUFDO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDRSxHQUFHLFdBQVc7QUFBQSxVQUNmLElBQUk7QUFBQSxZQUNGO0FBQUEsY0FDRSxTQUFTO0FBQUEsY0FDVCxnQkFBZ0I7QUFBQSxjQUNoQixDQUFDLE1BQU0saUJBQWlCLEtBQUssRUFBRSxHQUFHO0FBQUEsZ0JBQ2hDLEdBQUc7QUFBQSxnQkFDSCxRQUFRO0FBQUEsZ0JBQ1IsYUFBYTtBQUFBLGdCQUNiLFVBQVU7QUFBQSxjQUNaO0FBQUEsWUFDRjtBQUFBLFlBQ0EsR0FBSSxNQUFNLFFBQVEsV0FBVyxTQUFTLEVBQUUsSUFDbkMsV0FBVyxTQUFTLE1BQU0sQ0FBQyxJQUM1QixDQUFDLFdBQVcsU0FBUyxFQUFFO0FBQUEsVUFDN0I7QUFBQSxVQUVBO0FBQUEsNEJBQUFEO0FBQUEsY0FBQztBQUFBO0FBQUEsZ0JBQ0UsR0FBRztBQUFBLGdCQUNKLFdBQVM7QUFBQSxnQkFDVCxLQUFLO0FBQUEsZ0JBQ0wsUUFBUTtBQUFBLGdCQUNSLGlCQUFpQjtBQUFBLGtCQUNmO0FBQUEsa0JBQ0EsT0FBTyxDQUFDLENBQUM7QUFBQSxrQkFDVCxHQUFHLFdBQVc7QUFBQSxnQkFDaEI7QUFBQSxnQkFDQyxHQUFHO0FBQUE7QUFBQSxZQUNOO0FBQUEsWUFFQSxnQkFBQUE7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFDRSxHQUFHLFdBQVc7QUFBQSxnQkFDZixjQUFjLE9BQU87QUFBQSxnQkFDckI7QUFBQTtBQUFBLFlBQ0Y7QUFBQTtBQUFBO0FBQUEsTUFDRjtBQUFBO0FBQUEsRUFFSjtBQUVKO0FBRU8sSUFBTUcsbUJBQWtCLENBRzdCO0FBQUEsRUFDQSxZQUFZLENBQUM7QUFBQSxFQUNiLEdBQUc7QUFDTCxNQUErRDtBQUM3RCxTQUNFLGdCQUFBSCxNQUFDSSxRQUFBLEVBQUssTUFBTSxJQUFLLEdBQUcsV0FDbEIsMEJBQUFKLE1BQUNFLGFBQUEsRUFBVyxHQUFHLE9BQU8sR0FDeEI7QUFFSjs7O0FFdEhBLElBQU0sUUFBUTtBQUFBLEVBQ1osTUFBTUc7QUFBQSxFQUNOLFFBQVFDO0FBQUEsRUFDUixVQUFVQztBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sWUFBWUM7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLE1BQU1DO0FBQUEsRUFDTixRQUFRQztBQUFBLEVBQ1IsYUFBYUM7QUFBQSxFQUNiLGVBQWVDO0FBQUEsRUFDZixhQUFhQztBQUFBLEVBQ2Isa0JBQWtCQztBQUFBLEVBQ2xCLGVBQWU7QUFBQSxFQUNmLFVBQVVDO0FBQ1o7IiwKICAibmFtZXMiOiBbInByb3BzIiwgIkFzeW5jU2VsZWN0TXVsdGlFbGVtZW50IiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAidXNlQ29udHJvbGxlciIsICJ2YWx1ZSIsICJDaGVja2JveEVsZW1lbnQiLCAiR3JpZCIsICJDaGVja2JveCIsICJGb3JtQ29udHJvbCIsICJGb3JtQ29udHJvbExhYmVsIiwgIkZvcm1Hcm91cCIsICJGb3JtSGVscGVyVGV4dCIsICJHcmlkIiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIkdyaWQiLCAiZm9yd2FyZFJlZiIsICJ1c2VDYWxsYmFjayIsICJ1c2VNZW1vIiwgInVzZUNvbnRyb2xsZXIiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VNZW1vIiwgInVzZVRoZW1lIiwgInVzZU1lbW8iLCAianN4IiwgInVzZUNvbnRyb2xsZXIiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJqc3giLCAiZm9yd2FyZFJlZiIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgIkdyaWQiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgInBhc3N3b3JkIiwgIkZvcm1Db250cm9sIiwgIkZvcm1Db250cm9sTGFiZWwiLCAiRm9ybUhlbHBlclRleHQiLCAiRm9ybUxhYmVsIiwgIkdyaWQiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAidXNlQ29udHJvbGxlciIsICJ2YWx1ZSIsICJGb3JtQ29udHJvbCIsICJGb3JtTGFiZWwiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJGb3JtSGVscGVyVGV4dCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIkdyaWQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAiQXV0b2NvbXBsZXRlIiwgInVzZVRoZW1lIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAiU2VsZWN0Q2FzY2FkZUVsZW1lbnQiLCAiR3JpZCIsICJUZXh0RmllbGQiLCAiQXV0b2NvbXBsZXRlIiwgInVzZVRoZW1lIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJTZWxlY3RFbGVtZW50IiwgIkdyaWQiLCAiQ2hlY2tib3giLCAiVGV4dEZpZWxkIiwgIkF1dG9jb21wbGV0ZSIsICJDaXJjdWxhclByb2dyZXNzIiwgInVzZVRoZW1lIiwgIkZyYWdtZW50IiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIlNlbGVjdE11bHRpRWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VGb3JrUmVmIiwgInVzZUNvbnRyb2xsZXIiLCAianN4IiwgIkNvbXBvbmVudCIsICJUZXh0RmllbGQiLCAidXNlQ29udHJvbGxlciIsICJ1c2VGb3JrUmVmIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiR3JpZCIsICJHcmlkIiwgInVzZUZvcmtSZWYiLCAidXNlTG9jYWxpemF0aW9uQ29udGV4dCIsICJ1c2VDb250cm9sbGVyIiwgImpzeCIsICJDb21wb25lbnQiLCAidXNlTG9jYWxpemF0aW9uQ29udGV4dCIsICJ1c2VDb250cm9sbGVyIiwgInZhbHVlIiwgInVzZUZvcmtSZWYiLCAiVGltZVBpY2tlckVsZW1lbnQiLCAiR3JpZCIsICJBdXRvY29tcGxldGUiLCAiQ2lyY3VsYXJQcm9ncmVzcyIsICJHcmlkIiwgIlRleHRGaWVsZCIsICJ1c2VUaGVtZSIsICJkZWJvdW5jZSIsICJGcmFnbWVudCIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAianN4cyIsICJDb21wb25lbnQiLCAiQXN5bmNTZWxlY3RFbGVtZW50IiwgIkdyaWQiLCAiVGV4dEZpZWxkIiwgInVzZUZvcmtSZWYiLCAidXNlQ29udHJvbGxlciIsICJqc3giLCAiQ29tcG9uZW50IiwgIlRleHRGaWVsZCIsICJ1c2VDb250cm9sbGVyIiwgInVzZUZvcmtSZWYiLCAiTnVtYmVyRmllbGRFbGVtZW50IiwgIkdyaWQiLCAiR3JpZCIsICJGb3JtSGVscGVyVGV4dCIsICJqc3giLCAianN4IiwgImpzeHMiLCAiQ29tcG9uZW50IiwgIk9UUElucHV0RWxlbWVudCIsICJHcmlkIiwgIlRleHRGaWVsZEVsZW1lbnQiLCAiTnVtYmVyRmllbGRFbGVtZW50IiwgIkNoZWNrYm94RWxlbWVudCIsICJSYWRpb0J1dHRvbkdyb3VwIiwgIlRpbWVQaWNrZXJFbGVtZW50IiwgIlNlbGVjdEVsZW1lbnQiLCAiU2VsZWN0TXVsdGlFbGVtZW50IiwgIlNlbGVjdENhc2NhZGVFbGVtZW50IiwgIkFzeW5jU2VsZWN0RWxlbWVudCIsICJBc3luY1NlbGVjdE11bHRpRWxlbWVudCIsICJPVFBJbnB1dEVsZW1lbnQiXQp9Cg==
|