sonamu 0.7.9 → 0.7.11
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/bin/cli.js +6 -2
- package/dist/database/puri.d.ts +17 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +47 -1
- package/dist/database/puri.types.d.ts +28 -0
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +2 -3
- package/dist/database/upsert-builder.d.ts +3 -1
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +19 -4
- package/dist/naite/naite-reporter.d.ts +7 -4
- package/dist/naite/naite-reporter.d.ts.map +1 -1
- package/dist/naite/naite-reporter.js +45 -21
- package/dist/template/implementations/model.template.js +2 -2
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +4 -2
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +4 -1
- package/dist/utils/console-util.js +2 -2
- package/package.json +7 -7
- package/src/database/puri.ts +80 -0
- package/src/database/puri.types.ts +33 -2
- package/src/database/upsert-builder.ts +27 -9
- package/src/naite/naite-reporter.ts +51 -20
- package/src/template/implementations/model.template.ts +1 -1
- package/src/template/zod-converter.ts +3 -0
- package/src/types/types.ts +3 -0
- package/src/utils/console-util.ts +1 -1
package/dist/types/types.js
CHANGED
|
@@ -105,6 +105,9 @@ export function isVectorArrayProp(p) {
|
|
|
105
105
|
export function isVectorProp(p) {
|
|
106
106
|
return isVectorSingleProp(p) || isVectorArrayProp(p);
|
|
107
107
|
}
|
|
108
|
+
export function isTsVectorProp(p) {
|
|
109
|
+
return p?.type === "tsvector";
|
|
110
|
+
}
|
|
108
111
|
export function isRelationProp(p) {
|
|
109
112
|
return p?.type === "relation";
|
|
110
113
|
}
|
|
@@ -650,4 +653,4 @@ export const PathAndCode = z.object({
|
|
|
650
653
|
});
|
|
651
654
|
export var ApiParamType;
|
|
652
655
|
|
|
653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQXBpRGVjb3JhdG9yT3B0aW9ucywgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEd1YXJkS2V5IH0gZnJvbSBcIi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNoYXBlOiBUKTogei5ab2RVbmlvbjxbVCwgei5ab2RBcnJheTxUPl0+IHtcbiAgcmV0dXJuIHoudW5pb24oW3NoYXBlLCBzaGFwZS5hcnJheSgpXSk7XG59XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFueSBpcyB1c2VkIHRvIG1ha2UgdGhlIHR5cGUgZGlzdHJpYnV0aXZlXG5leHBvcnQgdHlwZSBEaXN0cmlidXRpdmVPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gVCBleHRlbmRzIGFueSA/IE9taXQ8VCwgSz4gOiBuZXZlcjtcblxuLypcbiAgTW9kZWwtRGVmaW50aW9uXG4qL1xuZXhwb3J0IHR5cGUgR2VuZXJhdGVkQ29sdW1uVHlwZSA9IFwiU1RPUkVEXCIgfCBcIlZJUlRVQUxcIjtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtbiA9IHtcbiAgdHlwZTogR2VuZXJhdGVkQ29sdW1uVHlwZTtcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIENvbW1vblByb3AgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuO1xuICB0b0ZpbHRlcj86IHRydWU7XG4gIGRlc2M/OiBzdHJpbmc7XG4gIGRiRGVmYXVsdD86IHN0cmluZztcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIEludGVnZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyXCI7XG59OyAvLyBQRzogaW50ZWdlciAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIEludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImludGVnZXJbXVwiO1xufTsgLy8gUEc6IGludGVnZXJbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYmlnSW50ZWdlclwiO1xufTsgLy8gUEc6IGJpZ2ludCAvIFRTOiBiaWdpbnQgLyBKU09OOiBiaWdpbnRcbmV4cG9ydCB0eXBlIEJpZ0ludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJbXVwiO1xufTsgLy8gUEc6IGJpZ2ludFtdIC8gVFM6IGJpZ2ludFtdIC8gSlNPTjogYmlnaW50W11cbmV4cG9ydCB0eXBlIFN0cmluZ1Byb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1wiO1xuICBsZW5ndGg/OiBudW1iZXI7IC8vIFBHOiB2YXJjaGFyKG4pLCB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBTdHJpbmdBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1tdXCI7XG4gIGxlbmd0aD86IG51bWJlcjsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbn07IC8vIFBHOiB2YXJjaGFyKG4pW10sIHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBFbnVtUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZW51bVwiO1xuICBpZDogc3RyaW5nO1xuICBsZW5ndGg/OiBudW1iZXI7XG59OyAvLyBQRzogdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIEVudW1BcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImVudW1bXVwiO1xuICBpZDogc3RyaW5nO1xufTsgLy8gUEc6IHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBOdW1iZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1iZXJcIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyOyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbiAgc2NhbGU/OiBudW1iZXI7IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiOyAvLyDquLDrs7jqsJI6IG51bWVyaWNcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuZXhwb3J0IHR5cGUgTnVtYmVyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1iZXJbXVwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiOyAvLyDquLDrs7jqsJI6IG51bWVyaWNcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpW10gLyBUUzogbnVtYmVyW10gLyBKU09OOiBudW1iZXJbXVxuZXhwb3J0IHR5cGUgTnVtZXJpY1Byb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWVyaWNcIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgTnVtZXJpY0FycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtZXJpY1tdXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKVtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEJvb2xlYW5Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJib29sZWFuXCI7XG59OyAvLyBQRzogYm9vbGVhbiAvIFRTOiBib29sZWFuIC8gSlNPTjogYm9vbGVhblxuZXhwb3J0IHR5cGUgQm9vbGVhbkFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYm9vbGVhbltdXCI7XG59OyAvLyBQRzogYm9vbGVhbltdIC8gVFM6IGJvb2xlYW5bXSAvIEpTT046IGJvb2xlYW5bXVxuZXhwb3J0IHR5cGUgRGF0ZVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImRhdGVcIjtcbn07IC8vIFBHOiB0aW1lc3RhbXB6IC8gVFM6IERhdGUgLyBKU09OOiBzdHJpbmcoSVNPU3RyaW5nKVxuZXhwb3J0IHR5cGUgRGF0ZUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVtdXCI7XG59OyAvLyBQRzogdGltZXN0YW1wdHpbXSAvIFRTOiBEYXRlW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgSnNvblByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImpzb25cIjtcbiAgaWQ6IHN0cmluZztcbn07IC8vIFBHOiBqc29uIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFV1aWRQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkXCI7XG59OyAvLyBQRzogdXVpZCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIFV1aWRBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInV1aWRbXVwiO1xufTsgLy8gUEc6IHV1aWRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBWaXJ0dWFsUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidmlydHVhbFwiO1xuICBpZDogc3RyaW5nO1xufTsgLy8gUEc6IG5vbmUgLyBUUzogYW55KGlkKSAvIEpTT046IGFueVxuZXhwb3J0IHR5cGUgVmVjdG9yUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidmVjdG9yXCI7XG4gIGRpbWVuc2lvbnM6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBWZWN0b3JBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvcltdXCI7XG4gIGRpbWVuc2lvbnM6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBUc1ZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInRzdmVjdG9yXCI7XG59O1xuZXhwb3J0IHR5cGUgUmVsYXRpb25UeXBlID0gXCJIYXNNYW55XCIgfCBcIkJlbG9uZ3NUb09uZVwiIHwgXCJNYW55VG9NYW55XCIgfCBcIk9uZVRvT25lXCI7XG5leHBvcnQgdHlwZSBSZWxhdGlvbk9uID0gXCJDQVNDQURFXCIgfCBcIlNFVCBOVUxMXCIgfCBcIk5PIEFDVElPTlwiIHwgXCJTRVQgREVGQVVMVFwiIHwgXCJSRVNUUklDVFwiO1xudHlwZSBfUmVsYXRpb25Qcm9wID0ge1xuICB0eXBlOiBcInJlbGF0aW9uXCI7XG4gIG5hbWU6IHN0cmluZztcbiAgd2l0aDogc3RyaW5nO1xuICBudWxsYWJsZT86IGJvb2xlYW47IC8vIERFRkFVTFQ6IGZhbHNlXG4gIHRvRmlsdGVyPzogdHJ1ZTsgLy8gREVGQVVMVDogZmFsc2VcbiAgZGVzYz86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBPbmVUb09uZVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJPbmVUb09uZVwiO1xuICBjdXN0b21Kb2luQ2xhdXNlPzogc3RyaW5nO1xufSAmIChcbiAgICB8IHtcbiAgICAgICAgaGFzSm9pbkNvbHVtbjogdHJ1ZTtcbiAgICAgICAgdXNlQ29uc3RyYWludD86IGJvb2xlYW47IC8vIERFRkFVTFQ6IHRydWVcbiAgICAgICAgb25VcGRhdGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICAgICAgICBvbkRlbGV0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGhhc0pvaW5Db2x1bW46IGZhbHNlO1xuICAgICAgfVxuICApO1xuZXhwb3J0IHR5cGUgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIkJlbG9uZ3NUb09uZVwiO1xuICBjdXN0b21Kb2luQ2xhdXNlPzogc3RyaW5nO1xuICB1c2VDb25zdHJhaW50PzogYm9vbGVhbjsgLy8gREVGQVVMVDogdHJ1ZVxuICBvblVwZGF0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gIG9uRGVsZXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1Rcbn07XG5leHBvcnQgdHlwZSBIYXNNYW55UmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIkhhc01hbnlcIjtcbiAgam9pbkNvbHVtbjogc3RyaW5nO1xuICBmcm9tQ29sdW1uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIE1hbnlUb01hbnlSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiTWFueVRvTWFueVwiO1xuICBqb2luVGFibGU6IGAke3N0cmluZ31fXyR7c3RyaW5nfWA7XG4gIG9uVXBkYXRlOiBSZWxhdGlvbk9uO1xuICBvbkRlbGV0ZTogUmVsYXRpb25Pbjtcbn07XG5leHBvcnQgdHlwZSBSZWxhdGlvblByb3AgPVxuICB8IE9uZVRvT25lUmVsYXRpb25Qcm9wXG4gIHwgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wXG4gIHwgSGFzTWFueVJlbGF0aW9uUHJvcFxuICB8IE1hbnlUb01hbnlSZWxhdGlvblByb3A7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVByb3AgPVxuICB8IEludGVnZXJQcm9wXG4gIHwgSW50ZWdlckFycmF5UHJvcFxuICB8IEJpZ0ludGVnZXJQcm9wXG4gIHwgQmlnSW50ZWdlckFycmF5UHJvcFxuICB8IFN0cmluZ1Byb3BcbiAgfCBTdHJpbmdBcnJheVByb3BcbiAgfCBFbnVtUHJvcFxuICB8IEVudW1BcnJheVByb3BcbiAgfCBOdW1iZXJQcm9wXG4gIHwgTnVtYmVyQXJyYXlQcm9wXG4gIHwgTnVtZXJpY1Byb3BcbiAgfCBOdW1lcmljQXJyYXlQcm9wXG4gIHwgTnVtZXJpY1Byb3BcbiAgfCBCb29sZWFuUHJvcFxuICB8IEJvb2xlYW5BcnJheVByb3BcbiAgfCBEYXRlUHJvcFxuICB8IERhdGVBcnJheVByb3BcbiAgfCBVdWlkUHJvcFxuICB8IFV1aWRBcnJheVByb3BcbiAgfCBKc29uUHJvcFxuICB8IFZpcnR1YWxQcm9wXG4gIHwgVmVjdG9yUHJvcFxuICB8IFZlY3RvckFycmF5UHJvcFxuICB8IFRzVmVjdG9yUHJvcFxuICB8IFJlbGF0aW9uUHJvcDtcblxuLyoqXG4gKiBwZ3ZlY3RvciDqsbDrpqwg7Jew7IKw7J6QIO2BtOuemOyKpFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogLSBgdmVjdG9yX2Nvc2luZV9vcHNgOiDsvZTsgqzsnbgg6rGw66asIChDb3NpbmUgRGlzdGFuY2UpIC0g6raM7J6lXG4gKiAgIC0gU1FMIOyXsOyCsOyekDogYDw9PmBcbiAqICAgLSDrsqHthLDsnZgg67Cp7Zal66eMIOu5hOq1kCAo7YGs6riwIOustOyLnCksIDEgLSBjb3NpbmVfc2ltaWxhcml0eVxuICogICAtIO2FjeyKpO2KuCDsnoTrsqDrlKksIOyLnOunqO2LsSDqsoDsg4nsl5Ag6rCA7J6lIOydvOuwmOyggeycvOuhnCDsgqzsmqlcbiAqICAgLSDsgqzsmqkg7JiIOiBPcGVuQUksIFZveWFnZSDrk7Eg64yA67aA67aE7J2YIOyehOuyoOuUqSDrqqjrjbjsl5Ag6raM7J6lXG4gKlxuICogLSBgdmVjdG9yX2lwX29wc2A6IOuCtOyggSAoSW5uZXIgUHJvZHVjdClcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPCM+YFxuICogICAtIOuRkCDrsqHthLDsnZgg64K07KCB7J2EIOqzhOyCsCAoc3VtKGFbaV0gKiBiW2ldKSlcbiAqICAgLSDsoJXqt5ztmZTrkJwg67Kh7YSw7JeQ7IScIOy9lOyCrOyduCDsnKDsgqzrj4TsmYAg64+Z7J287ZWcIOqysOqzvFxuICogICAtIOqwkuydtCDtgbTsiJjroZ0g7Jyg7IKsICjsnYzsiJgg7Jew7IKw7J6Q7J2066+A66GcIE9SREVSIEJZ7JeQ7IScIOyjvOydmClcbiAqICAgLSDsgqzsmqkg7JiIOiDsnbTrr7gg7KCV6rec7ZmU65CcIOyehOuyoOuUqeyXkOyEnCDqsIDsnqUg67mg66W4IOyEseuKpVxuICpcbiAqIC0gYHZlY3Rvcl9sMl9vcHNgOiDsnKDtgbTrpqzrk5wg6rGw66asIChMMiBEaXN0YW5jZSlcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPC0+YFxuICogICAtIOuRkCDrsqHthLAg6rCE7J2YIOyngeyEoCDqsbDrpqzrpbwg6rOE7IKwIChzcXJ0KHN1bSgoYVtpXSAtIGJbaV0pXjIpKSlcbiAqICAgLSDrsqHthLDsnZgg7YGs6riwKG1hZ25pdHVkZSnqsIAg7KSR7JqU7ZWgIOuVjCDsgqzsmqlcbiAqICAgLSDsgqzsmqkg7JiIOiDsnbTrr7jsp4Ag7Jyg7IKs64+ELCDsoIjrjIDsoIEg6rGw66asIOy4oeygleydtCDtlYTsmpTtlZwg6rK97JqwXG4gKi9cbmV4cG9ydCB0eXBlIFZlY3Rvck9wcyA9IFwidmVjdG9yX2Nvc2luZV9vcHNcIiB8IFwidmVjdG9yX2lwX29wc1wiIHwgXCJ2ZWN0b3JfbDJfb3BzXCI7XG5cbnR5cGUgRW50aXR5SW5kZXhDb2x1bW4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbHNGaXJzdD86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86IFwiQVNDXCIgfCBcIkRFU0NcIjtcbiAgLyoqIHBndmVjdG9yIOyduOuNseyKpOyXkOyEnCDsgqzsmqntlaAg6rGw66asIOyXsOyCsOyekCAodmVjdG9yIOy7rOufvOyXkOunjCDsoIHsmqkpICovXG4gIHZlY3Rvck9wcz86IFZlY3Rvck9wcztcbn07XG5leHBvcnQgdHlwZSBFbnRpdHlJbmRleCA9IHtcbiAgdHlwZTogXCJpbmRleFwiIHwgXCJ1bmlxdWVcIiB8IFwiaG5zd1wiIHwgXCJpdmZmbGF0XCI7XG4gIGNvbHVtbnM6IEVudGl0eUluZGV4Q29sdW1uW107XG4gIG5hbWU6IHN0cmluZztcbiAgdXNpbmc/OiBcImJ0cmVlXCIgfCBcImhhc2hcIiB8IFwiZ2luXCIgfCBcImdpc3RcIjtcbiAgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47IC8vIHVuaXF1ZSBpbmRleCBvbmx5XG4gIC8qKlxuICAgKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKSDsnbjrjbHsiqQ6IOqwgSDrhbjrk5zsnZgg7LWc64yAIOyXsOqysCDsiJhcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIOq3uOuemO2UhOyXkOyEnCDqsIEg64W465Oc6rCAIOqwgOyniCDsiJgg7J6I64qUIOy1nOuMgCDsl7DqsrAg7IiY7J6F64uI64ukLlxuICAgKiBITlNX64qUIOu5oOuluCDqsoDsg4kg7IaN64+E7JmAIOuGkuydgCDsoJXtmZXrj4Trpbwg7KCc6rO17ZWY66+A66GcIOq2jOyepeuQqeuLiOuLpC5cbiAgICogLSDquLDrs7jqsJI6IDE2XG4gICAqIC0g67KU7JyEOiAyIH4gMTAwXG4gICAqIC0g64aS7J2E7IiY66GdOiDsoJXtmZXrj4TihpEsIOu5jOuTnCDsi5zqsITihpEsIOuplOuqqOumrOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCg4KSwg6reg7ZiVKDE2KSwg64aS7J2AIOygle2ZleuPhCgzMiksIOy1nOqzoCDsoJXtmZXrj4QoNjQpXG4gICAqL1xuICBtPzogbnVtYmVyO1xuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqtazshLEg7IucIO2DkOyDiSDrspTsnIRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIOyduOuNseyKpCDqtazshLEg7IucIOqwgSDrhbjrk5zsl5DshJwg7YOQ7IOJ7ZWgIOuylOychOyeheuLiOuLpC5cbiAgICogLSDquLDrs7jqsJI6IDY0XG4gICAqIC0g67KU7JyEOiA0IH4gMTAwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRXG4gICAqIC0g6raM7J6lOiDruaDrpbgg67mM65OcKDMyKSwg6reg7ZiVKDY0KSwg64aS7J2AIOygle2ZleuPhCgxMjgpLCDstZzqs6Ag7KCV7ZmV64+EKDI1NilcbiAgICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pIOyduOuNseyKpDog7YG065+s7Iqk7YSw66eBIOumrOyKpO2KuCDsiJhcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIOuyoe2EsOulvCDtgbTrn6zsiqTthLDrp4HtlaAg67KE7YK3IOyImOulvCDsp4DsoJXtlanri4jri6QuXG4gICAqIElWRkZsYXTsnYAg67mg66W4IOu5jOuTnOyZgCDrgq7snYAg66mU66qo66asIOyCrOyaqeydtCDtlYTsmpTtlaAg65WMIOyCrOyaqe2VqeuLiOuLpC5cbiAgICogLSDqtozsnqXqsJI6IHNxcnQocm93X2NvdW50KSB+IHJvd19jb3VudCAvIDEwMDBcbiAgICogLSDsmIjsi5w6IDEwLDAwMO2WiSDihpIgMTAwLCAxMDAsMDAw7ZaJIOKGkiAzMDAsIDEsMDAwLDAwMO2WiSDihpIgMTAwMFxuICAgKiAtIOunjuydhOyImOuhnSDsoJXtmZXrj4TihpEsIOqygOyDiSDsho3rj4TihpNcbiAgICovXG4gIGxpc3RzPzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eUpzb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvcHM6IEVudGl0eVByb3BbXTtcbiAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgc3Vic2V0czoge1xuICAgIFtzdWJzZXQ6IHN0cmluZ106IHN0cmluZ1tdO1xuICB9O1xuICBlbnVtczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICB9O1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eVN1YnNldFJvdyA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGFzOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgY2hpbGRyZW46IEVudGl0eVN1YnNldFJvd1tdO1xuICBwcmVmaXhlczogc3RyaW5nW107XG4gIHJlbGF0aW9uRW50aXR5Pzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEZsYXR0ZW5TdWJzZXRSb3cgPSBPbWl0PEVudGl0eVN1YnNldFJvdywgXCJjaGlsZHJlblwiPjtcblxuLypcbiAgUHJvcE5vZGVcbiovXG5cbi8qKlxuICog7JeU7Yuw7Yuw7J2YIO2VhOuTnCDqtazsobDrpbwg7Yq466asIO2Yle2DnOuhnCDtkZztmITtlZjripQg7KSR6rCEIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBFbnRpdHnsnZggc3Vic2V0IO2VhOuTnCDtkZztmITsi50o7JiIOiBcImlkXCIsIFwidXNlci5uYW1lXCIsIFwidGFnc1tdXCIp7J2EXG4gKiDsnqzqt4DsoIHsnbgg7Yq466asIOq1rOyhsOuhnCDtjIzsi7HtlZjsl6wgWm9kIOyKpO2CpOuniCDsg53shLHsnZgg7KSR6rCEIOuLqOqzhOuhnCDsgqzsmqntlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSAo7Yq466asIOq1rOyhsCkg4oaSIFpvZCDsiqTtgqTrp4gg4oaSIFJlbmRlcmluZ05vZGUgKFVJ7JqpKVxuICpcbiAqICoqbm9kZVR5cGUqKjpcbiAqIC0gXCJwbGFpblwiOiDri6jsnbwg7ZWE65OcICjsmIg6IFwiaWRcIiwgXCJuYW1lXCIpXG4gKiAtIFwib2JqZWN0XCI6IOykkeyyqSDqsJ3ssrQgKOyYiDogXCJ1c2VyLm5hbWVcIiDihpIgdXNlciDqsJ3ssrQpXG4gKiAtIFwiYXJyYXlcIjog67Cw7Je0ICjsmIg6IFwidGFnc1tdXCIg4oaSIHRhZ3Mg67Cw7Je0KVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBlbnRpdHktY29udmVydGVyLnRz7J2YIHByb3BOb2RlVG9ab2RUeXBlKClcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5UHJvcE5vZGUgPVxuICB8IHtcbiAgICAgIG5vZGVUeXBlOiBcInBsYWluXCI7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgIH1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIiB8IFwiYXJyYXlcIjtcbiAgICAgIHByb3A/OiBFbnRpdHlQcm9wO1xuICAgICAgY2hpbGRyZW46IEVudGl0eVByb3BOb2RlW107XG4gICAgfTtcblxuLypcbiAgUHJvcCBUeXBlIEd1YXJkc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgSW50ZWdlckFycmF5UHJvcCk/LnR5cGUgPT09IFwiaW50ZWdlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyUHJvcChwOiB1bmtub3duKTogcCBpcyBJbnRlZ2VyUHJvcCB8IEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNJbnRlZ2VyU2luZ2xlUHJvcChwKSB8fCBpc0ludGVnZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyUHJvcCB7XG4gIHJldHVybiAocCBhcyBCaWdJbnRlZ2VyUHJvcCk/LnR5cGUgPT09IFwiYmlnSW50ZWdlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3AocDogdW5rbm93bik6IHAgaXMgQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQmlnSW50ZWdlclNpbmdsZVByb3AocCkgfHwgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBTdHJpbmdQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ0FycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBTdHJpbmdBcnJheVByb3ApPy50eXBlID09PSBcInN0cmluZ1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ1Byb3AgfCBTdHJpbmdBcnJheVByb3Age1xuICByZXR1cm4gaXNTdHJpbmdTaW5nbGVQcm9wKHApIHx8IGlzU3RyaW5nQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bVByb3Age1xuICByZXR1cm4gKHAgYXMgRW51bVByb3ApPy50eXBlID09PSBcImVudW1cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1BcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wKHA6IHVua25vd24pOiBwIGlzIEVudW1Qcm9wIHwgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtYmVyUHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1iZXJQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtYmVyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzTnVtYmVyU2luZ2xlUHJvcChwKSB8fCBpc051bWJlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNQcm9wIHtcbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtZXJpY0FycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtZXJpY1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1lcmljUHJvcCB8IE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gaXNOdW1lcmljU2luZ2xlUHJvcChwKSB8fCBpc051bWVyaWNBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuUHJvcCB7XG4gIHJldHVybiAocCBhcyBCb29sZWFuUHJvcCk/LnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbkFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3AocDogdW5rbm93bik6IHAgaXMgQm9vbGVhblByb3AgfCBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZVByb3Age1xuICByZXR1cm4gKHAgYXMgRGF0ZVByb3ApPy50eXBlID09PSBcImRhdGVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBEYXRlQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJkYXRlW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVQcm9wKHA6IHVua25vd24pOiBwIGlzIERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0RhdGVTaW5nbGVQcm9wKHApIHx8IGlzRGF0ZUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVXVpZEFycmF5UHJvcCk/LnR5cGUgPT09IFwidXVpZFtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkUHJvcChwOiB1bmtub3duKTogcCBpcyBVdWlkUHJvcCB8IFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gaXNVdWlkU2luZ2xlUHJvcChwKSB8fCBpc1V1aWRBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNKc29uUHJvcChwOiB1bmtub3duKTogcCBpcyBKc29uUHJvcCB7XG4gIHJldHVybiAocCBhcyBKc29uUHJvcCk/LnR5cGUgPT09IFwianNvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFByb3AocDogdW5rbm93bik6IHAgaXMgVmlydHVhbFByb3Age1xuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yUHJvcCB7XG4gIHJldHVybiAocCBhcyBWZWN0b3JQcm9wKT8udHlwZSA9PT0gXCJ2ZWN0b3JcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBWZWN0b3JBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVmVjdG9yQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJ2ZWN0b3JbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yUHJvcChwOiB1bmtub3duKTogcCBpcyBWZWN0b3JQcm9wIHwgVmVjdG9yQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzVmVjdG9yU2luZ2xlUHJvcChwKSB8fCBpc1ZlY3RvckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgUmVsYXRpb25Qcm9wKT8udHlwZSA9PT0gXCJyZWxhdGlvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT25lVG9PbmVSZWxhdGlvblByb3AocDogdW5rbm93bik6IHAgaXMgT25lVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkJlbG9uZ3NUb09uZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFzTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIEhhc01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiSGFzTWFueVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBNYW55VG9NYW55UmVsYXRpb25Qcm9wIHtcbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlKHA6IHVua25vd24pOiBwIGlzIHsgY3VzdG9tOiBzdHJpbmcgfSB7XG4gIHJldHVybiAhIShwIGFzIHsgY3VzdG9tOiBzdHJpbmcgfSk/LmN1c3RvbTtcbn1cblxudHlwZSBTdWJzZXRMb2FkZXIgPSB7XG4gIGFzOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1hbnlKb2luOiB7XG4gICAgZnJvbVRhYmxlOiBzdHJpbmc7XG4gICAgZnJvbUNvbDogc3RyaW5nO1xuICAgIGlkRmllbGQ6IHN0cmluZztcbiAgICB0b1RhYmxlOiBzdHJpbmc7XG4gICAgdG9Db2w6IHN0cmluZztcbiAgICB0aHJvdWdoPzoge1xuICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgIGZyb21Db2w6IHN0cmluZztcbiAgICAgIHRvQ29sOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgb25lSm9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIGxvYWRlcnM/OiBTdWJzZXRMb2FkZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNldFF1ZXJ5ID0ge1xuICBzZWxlY3Q6IHN0cmluZ1tdO1xuICB2aXJ0dWFsOiBzdHJpbmdbXTtcbiAgam9pbnM6ICh7XG4gICAgYXM6IHN0cmluZztcbiAgICBqb2luOiBcImlubmVyXCIgfCBcIm91dGVyXCI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgfSAmIEpvaW5DbGF1c2UpW107XG4gIGxvYWRlcnM6IFN1YnNldExvYWRlcltdO1xufTtcblxuLyogQmFzZU1vZGVsICovXG5leHBvcnQgY29uc3QgU29uYW11UXVlcnlNb2RlID0gei5lbnVtKFtcImJvdGhcIiwgXCJsaXN0XCIsIFwiY291bnRcIl0pO1xuZXhwb3J0IHR5cGUgU29uYW11UXVlcnlNb2RlID0gei5pbmZlcjx0eXBlb2YgU29uYW11UXVlcnlNb2RlPjtcblxuLyogS25leCBNaWdyYXRpb24gKi9cbmV4cG9ydCB0eXBlIEtuZXhFcnJvciA9IHtcbiAgY29kZTogc3RyaW5nO1xuICBlcnJubzogbnVtYmVyO1xuICBzcWw6IHN0cmluZztcbiAgc3FsTWVzc2FnZTogc3RyaW5nO1xuICBzcWxTdGF0ZTogc3RyaW5nO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0tuZXhFcnJvcihlOiB1bmtub3duKTogZSBpcyBLbmV4RXJyb3Ige1xuICByZXR1cm4gISEoZSBhcyBLbmV4RXJyb3IpPy5jb2RlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsTWVzc2FnZSAmJiAhIShlIGFzIEtuZXhFcnJvcik/LnNxbFN0YXRlO1xufVxuXG5leHBvcnQgdHlwZSBLbmV4Q29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwidGV4dFwiXG4gIHwgXCJzbWFsbHRleHRcIlxuICB8IFwibWVkaXVtdGV4dFwiXG4gIHwgXCJsb25ndGV4dFwiXG4gIHwgXCJpbnRlZ2VyXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiZGVjaW1hbFwiXG4gIHwgXCJ0aW1lc3RhbXBcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJmb3JlaWduXCJcbiAgfCBcInV1aWRcIlxuICB8IFwianNvblwiXG4gIHwgXCJmbG9hdFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcInRpbWVcIlxuICB8IFwiZGF0ZXRpbWVcIjtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbHVtblR5cGUgPVxuICB8IFwic3RyaW5nXCJcbiAgfCBcInN0cmluZ1tdXCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiaW50ZWdlcltdXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlcltdXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1wiXG4gIHwgXCJudW1iZXJPck51bWVyaWNbXVwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImJvb2xlYW5bXVwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGVbXVwiXG4gIHwgXCJ1dWlkXCJcbiAgfCBcInV1aWRbXVwiXG4gIHwgXCJqc29uXCJcbiAgfCBcInZlY3RvclwiXG4gIHwgXCJ2ZWN0b3JbXVwiXG4gIHwgXCJ0c3ZlY3RvclwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IE1pZ3JhdGlvbkNvbHVtblR5cGU7XG4gIG51bGxhYmxlOiBib29sZWFuO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIGRlZmF1bHRUbz86IHN0cmluZztcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgZGltZW5zaW9ucz86IG51bWJlcjtcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkluZGV4ID0ge1xuICB0eXBlOiBcInVuaXF1ZVwiIHwgXCJpbmRleFwiIHwgXCJobnN3XCIgfCBcIml2ZmZsYXRcIjtcbiAgY29sdW1uczogRW50aXR5SW5kZXhDb2x1bW5bXTtcbiAgbmFtZTogc3RyaW5nO1xuICB1c2luZz86IFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiO1xuICBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjtcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYICovXG4gIG0/OiBudW1iZXI7XG4gIC8qKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKiogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pOiDtgbTrn6zsiqTthLDrp4Eg66as7Iqk7Yq4IOyImCAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Gb3JlaWduID0ge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG86IHN0cmluZztcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSA9IHtcbiAgdGFibGU6IHN0cmluZztcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW107XG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW107XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uU2V0ID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUgPSBNaWdyYXRpb25TZXQgJiB7XG4gIGpvaW5UYWJsZXM6IE1pZ3JhdGlvbkpvaW5UYWJsZVtdO1xufTtcbmV4cG9ydCB0eXBlIEdlbk1pZ3JhdGlvbkNvZGUgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHR5cGU6IFwibm9ybWFsXCIgfCBcImZvcmVpZ25cIjtcbiAgZm9ybWF0dGVkOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLyogQXBpICovXG5leHBvcnQgdHlwZSBBcGlQYXJhbSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBcGlQYXJhbVR5cGU7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBkZWZhdWx0RGVmPzogc3RyaW5nO1xufTtcbmV4cG9ydCBuYW1lc3BhY2UgQXBpUGFyYW1UeXBlIHtcbiAgZXhwb3J0IHR5cGUgT2JqZWN0ID0ge1xuICAgIHQ6IFwib2JqZWN0XCI7XG4gICAgcHJvcHM6IEFwaVBhcmFtW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFVuaW9uID0ge1xuICAgIHQ6IFwidW5pb25cIjtcbiAgICB0eXBlczogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVyc2VjdGlvbiA9IHtcbiAgICB0OiBcImludGVyc2VjdGlvblwiO1xuICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgU3RyaW5nTGl0ZXJhbCA9IHtcbiAgICB0OiBcInN0cmluZy1saXRlcmFsXCI7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgTnVtZXJpY0xpdGVyYWwgPSB7XG4gICAgdDogXCJudW1lcmljLWxpdGVyYWxcIjtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBBcnJheSA9IHtcbiAgICB0OiBcImFycmF5XCI7XG4gICAgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJlZiA9IHtcbiAgICB0OiBcInJlZlwiO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbmRleGVkQWNjZXNzID0ge1xuICAgIHQ6IFwiaW5kZXhlZC1hY2Nlc3NcIjtcbiAgICBvYmplY3Q6IEFwaVBhcmFtVHlwZTtcbiAgICBpbmRleDogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBUdXBsZVR5cGUgPSB7XG4gICAgdDogXCJ0dXBsZS10eXBlXCI7XG4gICAgZWxlbWVudHM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBQaWNrID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUGlja1wiO1xuICB9O1xuICBleHBvcnQgdHlwZSBPbWl0ID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiT21pdFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBQYXJ0aWFsID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUGFydGlhbFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBQcm9taXNlID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiUHJvbWlzZVwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBDb250ZXh0ID0gUmVmICYge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IFwiQ29udGV4dFwiO1xuICB9O1xuICBleHBvcnQgdHlwZSBUeXBlUGFyYW0gPSB7XG4gICAgdDogXCJ0eXBlLXBhcmFtXCI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb25zdHJhaW50PzogQXBpUGFyYW1UeXBlO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuT2JqZWN0IHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLk9iamVjdCk/LnQgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb24odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlVuaW9uIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLlVuaW9uKT8udCA9PT0gXCJ1bmlvblwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0ludGVyc2VjdGlvbih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLkludGVyc2VjdGlvbik/LnQgPT09IFwiaW50ZXJzZWN0aW9uXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nTGl0ZXJhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsKT8udCA9PT0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNMaXRlcmFsKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbCB7XG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbCk/LnQgPT09IFwibnVtZXJpYy1saXRlcmFsXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLkFycmF5IHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLkFycmF5KT8udCA9PT0gXCJhcnJheVwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1JlZih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSW5kZXhlZEFjY2Vzcyh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuSW5kZXhlZEFjY2VzcyB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcImluZGV4ZWQtYWNjZXNzXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVHVwbGVUeXBlKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5UdXBsZVR5cGUge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0dXBsZS10eXBlXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGljayh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUGljayB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBpY2tcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT21pdCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuT21pdCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIk9taXRcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGFydGlhbCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUGFydGlhbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBhcnRpYWxcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUHJvbWlzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlByb21pc2VcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuQ29udGV4dCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2ICE9PSBudWxsICYmXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIkNvbnRleHRcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVmS25leCh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiS25leFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNUeXBlUGFyYW0odjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInR5cGUtcGFyYW1cIjtcbiAgfVxufVxuZXhwb3J0IHR5cGUgQXBpUGFyYW1UeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJudWxsXCJcbiAgfCBcInVuZGVmaW5lZFwiXG4gIHwgXCJ2b2lkXCJcbiAgfCBcImFueVwiXG4gIHwgXCJ1bmtub3duXCJcbiAgfCBcInRydWVcIlxuICB8IFwiZmFsc2VcIlxuICB8IEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsXG4gIHwgQXBpUGFyYW1UeXBlLk51bWVyaWNMaXRlcmFsXG4gIHwgQXBpUGFyYW1UeXBlLk9iamVjdFxuICB8IEFwaVBhcmFtVHlwZS5VbmlvblxuICB8IEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb25cbiAgfCBBcGlQYXJhbVR5cGUuQXJyYXlcbiAgfCBBcGlQYXJhbVR5cGUuUmVmXG4gIHwgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3NcbiAgfCBBcGlQYXJhbVR5cGUuVHlwZVBhcmFtXG4gIHwgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcblxuLyogVGVtcGxhdGUgKi9cbi8qKlxuICogVUkg7Lu07Y+s64SM7Yq4IOugjOuNlOungeydhCDsnITtlZwg66mU7YOA642w7J207YSwIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBab2Qg7Iqk7YKk66eI66Gc67aA7YSwIO2UhOuhoO2KuOyXlOuTnCBVSSDsu7Ttj6zrhIztirjrpbwg7J6Q64+ZIOyDneyEse2VmOq4sCDsnITtlZxcbiAqIOugjOuNlOungSDsoJXrs7Trpbwg64u07J2AIO2KuOumrCDqtazsobDsnoXri4jri6QuIOqwgSDtlYTrk5zqsIAg7Ja065akIFVJIOy7tO2PrOuEjO2KuOuhnFxuICog7ZGc7ZiE65CY7Ja07JW8IO2VmOuKlOyngCjthY3siqTtirgsIOydtOuvuOyngCwg64Kg7KecLCBFbnVtIOyEoO2DnSDrk7Ep66W8IOuqheyLnO2VqeuLiOuLpC5cbiAqXG4gKiAqKuuzgO2ZmCDtnZDrpoQqKjpcbiAqIEVudGl0eSBzdWJzZXQg4oaSIEVudGl0eVByb3BOb2RlIOKGkiBab2Qg7Iqk7YKk66eIIOKGkiBSZW5kZXJpbmdOb2RlIChVSeyaqSkg4oaSIFJlYWN0IOy7tO2PrOuEjO2KuCDsvZTrk5wg7IOd7ISxXG4gKlxuICogKirso7zsmpQg7ZWE65OcKio6XG4gKiAtIGByZW5kZXJUeXBlYDogVUkg7Lu07Y+s64SM7Yq4IOycoO2YlSAoc3RyaW5nLXBsYWluLCBudW1iZXItZmtfaWQsIGVudW1zLCBhcnJheSDrk7EpXG4gKiAtIGB6b2RUeXBlYDog7JuQ67O4IFpvZCDsiqTtgqTrp4ggKHZhbGlkYXRpb24g7JqpKVxuICogLSBgY2hpbGRyZW5gOiDspJHssqnrkJwg6rCd7LK0IO2VhOuTnOuTpCAob2JqZWN07J28IOuVjClcbiAqIC0gYGVsZW1lbnRgOiDrsLDsl7Qg7JqU7IaMIO2DgOyehSAoYXJyYXnsnbwg65WMKVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOlxuICogLSB6b2QtY29udmVydGVyLnRz7J2YIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKeyXkOyEnCDsg53shLFcbiAqIC0gdmlld19mb3JtLnRlbXBsYXRlLnRzLCB2aWV3X2xpc3QudGVtcGxhdGUudHMg65Ox7JeQ7IScIFJlYWN0IOy7tO2PrOuEjO2KuCDsvZTrk5wg7IOd7ISx7JeQIOyCrOyaqVxuICovXG4vLyDshYDtlIQg7LC47KGwIO2DgOyeheydtOuvgOuhnCBab2Qg7IOd65617ZWY6rOgIOyngeygkSDsoJXsnZhcbmV4cG9ydCBjb25zdCBSZW5kZXJpbmdOb2RlID0gei5hbnkoKTtcbmV4cG9ydCB0eXBlIFJlbmRlcmluZ05vZGUgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgcmVuZGVyVHlwZTpcbiAgICB8IFwic3RyaW5nLXBsYWluXCJcbiAgICB8IFwic3RyaW5nLWltYWdlXCJcbiAgICB8IFwic3RyaW5nLWRhdGV0aW1lXCJcbiAgICB8IFwic3RyaW5nLWRhdGVcIlxuICAgIHwgXCJkYXRldGltZVwiXG4gICAgfCBcIm51bWJlci1wbGFpblwiXG4gICAgfCBcIm51bWJlci1pZFwiXG4gICAgfCBcIm51bWJlci1ma19pZFwiXG4gICAgfCBcImJvb2xlYW5cIlxuICAgIHwgXCJlbnVtc1wiXG4gICAgfCBcImFycmF5XCJcbiAgICB8IFwiYXJyYXktaW1hZ2VzXCJcbiAgICB8IFwib2JqZWN0XCJcbiAgICB8IFwib2JqZWN0LXBpY2tcIlxuICAgIHwgXCJyZWNvcmRcIlxuICAgIHwgXCJ2ZWN0b3JcIjtcbiAgem9kVHlwZTogei5ab2RUeXBlQW55O1xuICBlbGVtZW50PzogUmVuZGVyaW5nTm9kZTtcbiAgY2hpbGRyZW4/OiBSZW5kZXJpbmdOb2RlW107XG4gIGNvbmZpZz86IHtcbiAgICBwaWNrZWQ6IHN0cmluZztcbiAgfTtcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICBudWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouZW51bShbXCJTVE9SRURcIiwgXCJWSVJUVUFMXCJdKSxcbiAgZXhwcmVzc2lvbjogei5zdHJpbmcoKSxcbn0pO1xuXG5jb25zdCBCYXNlUHJvcEZpZWxkcyA9IHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzYzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBudWxsYWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdG9GaWx0ZXI6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLm9wdGlvbmFsKCksXG4gIGRiRGVmYXVsdDogei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKSwgei5ib29sZWFuKCldKS5vcHRpb25hbCgpLFxuICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZENvbHVtblNjaGVtYS5vcHRpb25hbCgpLFxufTtcblxuLy8g67aA6rCAIO2VhOuTnOqwgCDtlYTsmpTsl4bripQgcHJvcFxuY29uc3QgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei51bmlvbihbXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiaW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlclwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJpZ0ludGVnZXJbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5cIiksXG4gICAgICB6LmxpdGVyYWwoXCJib29sZWFuW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJkYXRlXCIpLFxuICAgICAgei5saXRlcmFsKFwiZGF0ZVtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFwiKSxcbiAgICAgIHoubGl0ZXJhbChcInV1aWRbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcInRzdmVjdG9yXCIpLFxuICAgIF0pLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIHByZWNpc2lvbi9zY2FsZSDtlYTrk5xcbmNvbnN0IFByZWNpc2lvblNjYWxlRmllbGRzID0ge1xuICBwcmVjaXNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgc2NhbGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn07XG5cbi8vIOqwgSDtg4DsnoXrs4Qg7Iqk7YKk66eIIOygleydmFxuXG5jb25zdCBTdHJpbmdQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdcIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFN0cmluZ0FycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nW11cIiksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRW51bVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IEVudW1BcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1bXVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1iZXJQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gICAgbnVtYmVyVHlwZTogei5lbnVtKFtcInJlYWxcIiwgXCJkb3VibGUgcHJlY2lzaW9uXCIsIFwibnVtZXJpY1wiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtYmVyQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE51bWVyaWNQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1lcmljXCIpLFxuICAgIC4uLlByZWNpc2lvblNjYWxlRmllbGRzLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBOdW1lcmljQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1lcmljW11cIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgSnNvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImpzb25cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgVmlydHVhbFByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInZpcnR1YWxcIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgVmVjdG9yUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmVjdG9yXCIpLFxuICAgIGRpbWVuc2lvbnM6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IFZlY3RvckFycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmVjdG9yW11cIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vLyBSZWxhdGlvbiDtg4DsnoXsnYAgcmVsYXRpb25UeXBl7JeQIOuUsOudvCDshLjrtoTtmZRcbmNvbnN0IEJhc2VSZWxhdGlvbkZpZWxkcyA9IHtcbiAgLi4uQmFzZVByb3BGaWVsZHMsXG4gIHR5cGU6IHoubGl0ZXJhbChcInJlbGF0aW9uXCIpLFxuICB3aXRoOiB6LnN0cmluZygpLFxufTtcblxuLy8gUmVsYXRpb25PbiDtg4DsnoVcbmNvbnN0IFJlbGF0aW9uT25TY2hlbWEgPSB6LmVudW0oW1wiQ0FTQ0FERVwiLCBcIlNFVCBOVUxMXCIsIFwiTk8gQUNUSU9OXCIsIFwiU0VUIERFRkFVTFRcIiwgXCJSRVNUUklDVFwiXSk7XG5cbmNvbnN0IEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiQmVsb25nc1RvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB1c2VDb25zdHJhaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJIYXNNYW55XCIpLFxuICAgIGpvaW5Db2x1bW46IHouc3RyaW5nKCksXG4gICAgZnJvbUNvbHVtbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk1hbnlUb01hbnlcIiksXG4gICAgam9pblRhYmxlOiB6LnN0cmluZygpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLFxuICAgIG9uRGVsZXRlOiBSZWxhdGlvbk9uU2NoZW1hLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE9uZVRvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJPbmVUb09uZVwiKSxcbiAgICBjdXN0b21Kb2luQ2xhdXNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaGFzSm9pbkNvbHVtbjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICB1c2VDb25zdHJhaW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG9uVXBkYXRlOiBSZWxhdGlvbk9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBSZWxhdGlvblR5cGVzID0gW1wiQmVsb25nc1RvT25lXCIsIFwiSGFzTWFueVwiLCBcIk1hbnlUb01hbnlcIiwgXCJPbmVUb09uZVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBSZWxhdGlvblByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcbiAgXCJyZWxhdGlvblR5cGVcIixcbiAgW1xuICAgIEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIE1hbnlUb01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEsXG4gIF0sXG4gIHtcbiAgICBlcnJvcjogKGlzcykgPT5cbiAgICAgIGByZWxhdGlvblR5cGXsnYAgJHtSZWxhdGlvblR5cGVzLm1hcCgodCkgPT4gYCcke3R9J2ApLmpvaW4oXCIsIFwiKX0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6QuIOyeheugpeqwkjogXCIkeyhpc3MuaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5yZWxhdGlvblR5cGV9XCJgLFxuICB9LFxuKTtcblxuY29uc3QgTm9ybWFsUHJvcFR5cGVzID0gW1xuICBcImludGVnZXJcIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyXCIsXG4gIFwiYmlnSW50ZWdlcltdXCIsXG4gIFwic3RyaW5nXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJlbnVtXCIsXG4gIFwiZW51bVtdXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwibnVtYmVyW11cIixcbiAgXCJudW1lcmljXCIsXG4gIFwibnVtZXJpY1tdXCIsXG4gIFwiYm9vbGVhblwiLFxuICBcImJvb2xlYW5bXVwiLFxuICBcImRhdGVcIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkXCIsXG4gIFwidXVpZFtdXCIsXG4gIFwianNvblwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2ZWN0b3JcIixcbiAgXCJ2ZWN0b3JbXVwiLFxuICBcInRzdmVjdG9yXCIsXG5dIGFzIGNvbnN0O1xuXG4vLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW7sl5DshJwg7IKs7JqpIOu2iOqwgOuKpe2VnCDtg4DsnoXrk6RcbmNvbnN0IFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgPSBbXG4gIFwianNvblwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJib29sZWFuW11cIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkW11cIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNbXVwiLFxuICBcImVudW1bXVwiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE5vcm1hbFByb3BTY2hlbWEgPSB6XG4gIC5kaXNjcmltaW5hdGVkVW5pb24oXG4gICAgXCJ0eXBlXCIsXG4gICAgW1xuICAgICAgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCxcbiAgICAgIFN0cmluZ1Byb3BTY2hlbWEsXG4gICAgICBTdHJpbmdBcnJheVByb3BTY2hlbWEsXG4gICAgICBFbnVtUHJvcFNjaGVtYSxcbiAgICAgIEVudW1BcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJQcm9wU2NoZW1hLFxuICAgICAgTnVtYmVyQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgTnVtZXJpY1Byb3BTY2hlbWEsXG4gICAgICBOdW1lcmljQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgSnNvblByb3BTY2hlbWEsXG4gICAgICBWaXJ0dWFsUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvclByb3BTY2hlbWEsXG4gICAgICBWZWN0b3JBcnJheVByb3BTY2hlbWEsXG4gICAgXSxcbiAgICB7XG4gICAgICBlcnJvcjogKGlzcykgPT5cbiAgICAgICAgYHR5cGXsnYAgJHtOb3JtYWxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnR5cGV9XCJgLFxuICAgIH0sXG4gIClcbiAgLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICBpZiAoIWRhdGEuZ2VuZXJhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZGJEZWZhdWx07JmAIGdlbmVyYXRlZCDrj5nsi5wg7IKs7JqpIOu2iOqwgFxuICAgIGlmIChkYXRhLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICBtZXNzYWdlOiBcImRiRGVmYXVsdOyZgCBnZW5lcmF0ZWTripQg7ZWo6ruYIOyCrOyaqe2VoCDsiJgg7JeG7Iq164uI64ukXCIsXG4gICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHZpcnR1YWwg7YOA7J6F7J2AIGdlbmVyYXRlZCDrtojqsIBcbiAgICBpZiAoZGF0YS50eXBlID09PSBcInZpcnR1YWxcIikge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJ2aXJ0dWFsIO2DgOyeheydgCBnZW5lcmF0ZWQgY29sdW1u7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6RcIixcbiAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVklSVFVBTCBHZW5lcmF0ZWQgQ29sdW1uIO2DgOyehSDsoJztlZwg6rKA7KadXG4gICAgaWYgKGRhdGEuZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiKSB7XG4gICAgICBpZiAoKFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBWSVJUVUFMIGdlbmVyYXRlZCBjb2x1bW7snYAgJHtkYXRhLnR5cGV9IO2DgOyeheydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukLiBTVE9SRUTrpbwg7IKs7Jqp7ZWY7IS47JqULmAsXG4gICAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuY29uc3QgQWxsUHJvcFR5cGVzID0gWy4uLk5vcm1hbFByb3BUeXBlcywgXCJyZWxhdGlvblwiXSBhcyBjb25zdDtcbmNvbnN0IEVudGl0eVByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW05vcm1hbFByb3BTY2hlbWEsIFJlbGF0aW9uUHJvcFNjaGVtYV0sIHtcbiAgZXJyb3I6IChpc3MpID0+XG4gICAgYHR5cGXsnYAgJHtBbGxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnR5cGV9XCJgLFxufSk7XG5cbmNvbnN0IEVudGl0eUluZGV4Q29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBudWxsc0ZpcnN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBzb3J0T3JkZXI6IHouZW51bShbXCJBU0NcIiwgXCJERVNDXCJdKS5vcHRpb25hbCgpLFxuICB2ZWN0b3JPcHM6IHouZW51bShbXCJ2ZWN0b3JfY29zaW5lX29wc1wiLCBcInZlY3Rvcl9pcF9vcHNcIiwgXCJ2ZWN0b3JfbDJfb3BzXCJdKS5vcHRpb25hbCgpLFxufSk7XG5cbi8vIEVudGl0eUluZGV4IOyKpO2CpOuniCDsoJXsnZhcbmNvbnN0IEVudGl0eUluZGV4U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oW1wiaW5kZXhcIiwgXCJ1bmlxdWVcIiwgXCJobnN3XCIsIFwiaXZmZmxhdFwiXSksXG4gICAgY29sdW1uczogei5hcnJheShFbnRpdHlJbmRleENvbHVtblNjaGVtYSksXG4gICAgbmFtZTogei5zdHJpbmcoKS5taW4oMSkubWF4KDYzKSxcbiAgICB1c2luZzogei5lbnVtKFtcImJ0cmVlXCIsIFwiaGFzaFwiLCBcImdpblwiLCBcImdpc3RcIl0pLm9wdGlvbmFsKCksXG4gICAgbnVsbHNOb3REaXN0aW5jdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBtOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgZWZDb25zdHJ1Y3Rpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBsaXN0czogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlKc29uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhc2NhbENhc2XroZwg65CcIEVudGl0eSBJRFwiKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5kZXNjcmliZShcIkVudGl0eSDsnbTrpoRcIiksXG4gICAgdGFibGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJzbmFrZV9jYXNl66GcIOuQnCDthYzsnbTruJTrqoVcIiksXG4gICAgcGFyZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIuu2gOuqqCBFbnRpdHkgSURcIiksXG4gICAgcHJvcHM6IHouYXJyYXkoRW50aXR5UHJvcFNjaGVtYSksXG4gICAgaW5kZXhlczogei5hcnJheShFbnRpdHlJbmRleFNjaGVtYSksXG4gICAgc3Vic2V0czogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hcnJheSh6LnN0cmluZygpKSksXG4gICAgZW51bXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVPcHRpb25zID0gei5vYmplY3Qoe1xuICBlbnRpdHk6IEVudGl0eUpzb25TY2hlbWEub21pdCh7IGlkOiB0cnVlIH0pXG4gICAgLmV4dGVuZCh7XG4gICAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5wYXJ0aWFsKHtcbiAgICAgIHRhYmxlOiB0cnVlLFxuICAgICAgcHJvcHM6IHRydWUsXG4gICAgICBpbmRleGVzOiB0cnVlLFxuICAgICAgc3Vic2V0czogdHJ1ZSxcbiAgICAgIGVudW1zOiB0cnVlLFxuICAgIH0pLFxuICBpbml0X3R5cGVzOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBnZW5lcmF0ZWQ6IHoub2JqZWN0KHt9KSxcbiAgZ2VuZXJhdGVkX3Nzbzogei5vYmplY3Qoe30pLFxuICBnZW5lcmF0ZWRfaHR0cDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgbW9kZWw6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBkZWZhdWx0U2VhcmNoRmllbGQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZWZhdWx0T3JkZXJCeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbiAgbW9kZWxfdGVzdDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgYnJpZGdlOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBzZXJ2aWNlOiB6Lm9iamVjdCh7XG4gICAgbmFtZXNSZWNvcmQ6IHoub2JqZWN0KHtcbiAgICAgIGZzOiB6LnN0cmluZygpLFxuICAgICAgZnNQbHVyYWw6IHouc3RyaW5nKCksXG4gICAgICBjYW1lbDogei5zdHJpbmcoKSxcbiAgICAgIGNhbWVsUGx1cmFsOiB6LnN0cmluZygpLFxuICAgICAgY2FwaXRhbDogei5zdHJpbmcoKSxcbiAgICAgIGNhcGl0YWxQbHVyYWw6IHouc3RyaW5nKCksXG4gICAgICB1cHBlcjogei5zdHJpbmcoKSxcbiAgICAgIGNvbnN0YW50OiB6LnN0cmluZygpLFxuICAgIH0pLFxuICAgIG1vZGVsVHNQYXRoOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19saXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZXh0cmE6IHoudW5rbm93bigpLFxuICB9KSxcbiAgdmlld19saXN0X2NvbHVtbnM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBjb2x1bW5zOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgbGFiZWw6IHouc3RyaW5nKCksXG4gICAgICAgIHRjOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5hcnJheSgpLFxuICAgIGNvbHVtbkltcG9ydHM6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X3NlYXJjaF9pbnB1dDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19mb3JtOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2lkX2FsbF9zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfaWRfYXN5bmNfc2VsZWN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgdGV4dEZpZWxkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19lbnVtc19zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2VudW1zX2Ryb3Bkb3duOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZW51bUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19lbnVtc19idXR0b25zZXQ6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZU9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVLZXkgPSB6LmVudW0oW1xuICBcImVudGl0eVwiLFxuICBcImluaXRfdHlwZXNcIixcbiAgXCJnZW5lcmF0ZWRcIixcbiAgXCJnZW5lcmF0ZWRfc3NvXCIsXG4gIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgXCJtb2RlbFwiLFxuICBcIm1vZGVsX3Rlc3RcIixcbiAgXCJicmlkZ2VcIixcbiAgXCJzZXJ2aWNlXCIsXG4gIFwidmlld19saXN0XCIsXG4gIFwidmlld19saXN0X2NvbHVtbnNcIixcbiAgXCJ2aWV3X3NlYXJjaF9pbnB1dFwiLFxuICBcInZpZXdfZm9ybVwiLFxuICBcInZpZXdfaWRfYWxsX3NlbGVjdFwiLFxuICBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIsXG4gIFwidmlld19lbnVtc19zZWxlY3RcIixcbiAgXCJ2aWV3X2VudW1zX2Ryb3Bkb3duXCIsXG4gIFwidmlld19lbnVtc19idXR0b25zZXRcIixcbl0pO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVLZXkgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZUtleT47XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIG92ZXJ3cml0ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuZXJhdGVPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgR2VuZXJhdGVPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFBhdGhBbmRDb2RlID0gei5vYmplY3Qoe1xuICBwYXRoOiB6LnN0cmluZygpLFxuICBjb2RlOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBQYXRoQW5kQ29kZSA9IHouaW5mZXI8dHlwZW9mIFBhdGhBbmRDb2RlPjtcblxuZXhwb3J0IHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMgPSB7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNlYXJjaFR5cGU6IFwiZXF1YWxzXCIgfCBcImxpa2VcIjtcbn07XG5cbnR5cGUgQ29sdW1uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IG51bGw7XG5leHBvcnQgdHlwZSBGaXh0dXJlUmVjb3JkID0ge1xuICBmaXh0dXJlSWQ6IHN0cmluZztcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgaWQ6IG51bWJlcjtcbiAgY29sdW1uczoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIHByb3A6IEVudGl0eVByb3A7XG4gICAgICB2YWx1ZTogQ29sdW1uVmFsdWUgfCBDb2x1bW5WYWx1ZVtdO1xuICAgIH07XG4gIH07XG4gIGZldGNoZWRSZWNvcmRzOiBzdHJpbmdbXTtcbiAgYmVsb25nc1JlY29yZHM6IHN0cmluZ1tdO1xuICB0YXJnZXQ/OiBGaXh0dXJlUmVjb3JkOyAvLyBJbXBvcnQg64yA7IOBIERCIOugiOy9lOuTnChpZOqwgCDqsJnsnYApXG4gIHVuaXF1ZT86IEZpeHR1cmVSZWNvcmQ7IC8vIEltcG9ydCDrjIDsg4EgREIg66CI7L2U65OcKHVuaXF1ZSBrZXnqsIAg6rCZ7J2AKVxuICBvdmVycmlkZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaXh0dXJlSW1wb3J0UmVzdWx0ID0ge1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgW2tleTogc3RyaW5nXTogQ29sdW1uVmFsdWU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk5vZGUgPSB7XG4gIGZpeHR1cmVJZDogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICByZWxhdGVkOiBTZXQ8c3RyaW5nPjtcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUludGVyZmFjZTogc29uYW11LmdlbmVyYXRlZC5zc28g7JeQ7IScIO2ZleyepeydhCDsnITtlbQg7KSA67mE65CcIOu5iCDsnbjthLDtjpjsnbTsiqRcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VTY2hlbWFFeHRlbmQge31cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FbXB0eUludGVyZmFjZTogc29uYW11LmdlbmVyYXRlZC5zc28g7JeQ7IScIO2ZleyepeydhCDsnITtlbQg7KSA67mE65CcIOu5iCDsnbjthLDtjpjsnbTsiqRcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VGb3JlaWduS2V5cyB7fVxuZXhwb3J0IHR5cGUgTWFueVRvTWFueUJhc2VTY2hlbWE8RnJvbUlkS2V5IGV4dGVuZHMgc3RyaW5nLCBUb0lkS2V5IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgaWQ6IG51bWJlcjtcbn0gJiB7XG4gIFtLIGluIGAke0Zyb21JZEtleX1faWRgXTogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gYCR7VG9JZEtleX1faWRgXTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11RmFzdGlmeUNvbmZpZyA9IHtcbiAgY29udGV4dFByb3ZpZGVyOiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8Q29udGV4dCwgXCJyZXF1ZXN0XCIgfCBcInJlcGx5XCIgfCBcImhlYWRlcnNcIiB8IFwiY3JlYXRlU1NFXCIgfCBcIm5haXRlU3RvcmVcIj4gJlxuICAgICAgQXV0aENvbnRleHQsXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0PjtcbiAgZ3VhcmRIYW5kbGVyOiAoXG4gICAgZ3VhcmQ6IEd1YXJkS2V5LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgIGFwaToge1xuICAgICAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICBtb2RlbE5hbWU6IHN0cmluZztcbiAgICAgIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gICAgfSxcbiAgKSA9PiB2b2lkO1xufTtcbiJdLCJuYW1lcyI6WyJ6IiwiekFycmF5YWJsZSIsInNoYXBlIiwidW5pb24iLCJhcnJheSIsImlzSW50ZWdlclNpbmdsZVByb3AiLCJwIiwidHlwZSIsImlzSW50ZWdlckFycmF5UHJvcCIsImlzSW50ZWdlclByb3AiLCJpc0JpZ0ludGVnZXJTaW5nbGVQcm9wIiwiaXNCaWdJbnRlZ2VyQXJyYXlQcm9wIiwiaXNCaWdJbnRlZ2VyUHJvcCIsImlzU3RyaW5nU2luZ2xlUHJvcCIsImlzU3RyaW5nQXJyYXlQcm9wIiwiaXNTdHJpbmdQcm9wIiwiaXNFbnVtU2luZ2xlUHJvcCIsImlzRW51bUFycmF5UHJvcCIsImlzRW51bVByb3AiLCJpc051bWJlclNpbmdsZVByb3AiLCJpc051bWJlckFycmF5UHJvcCIsImlzTnVtYmVyUHJvcCIsImlzTnVtZXJpY1NpbmdsZVByb3AiLCJpc051bWVyaWNBcnJheVByb3AiLCJpc051bWVyaWNQcm9wIiwiaXNCb29sZWFuU2luZ2xlUHJvcCIsImlzQm9vbGVhbkFycmF5UHJvcCIsImlzQm9vbGVhblByb3AiLCJpc0RhdGVTaW5nbGVQcm9wIiwiaXNEYXRlQXJyYXlQcm9wIiwiaXNEYXRlUHJvcCIsImlzVXVpZFNpbmdsZVByb3AiLCJpc1V1aWRBcnJheVByb3AiLCJpc1V1aWRQcm9wIiwiaXNKc29uUHJvcCIsImlzVmlydHVhbFByb3AiLCJpc1ZlY3RvclNpbmdsZVByb3AiLCJpc1ZlY3RvckFycmF5UHJvcCIsImlzVmVjdG9yUHJvcCIsImlzUmVsYXRpb25Qcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsInJlbGF0aW9uVHlwZSIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNIYXNNYW55UmVsYXRpb25Qcm9wIiwiaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wIiwiaXNDdXN0b21Kb2luQ2xhdXNlIiwiY3VzdG9tIiwiU29uYW11UXVlcnlNb2RlIiwiZW51bSIsImlzS25leEVycm9yIiwiZSIsImNvZGUiLCJzcWxNZXNzYWdlIiwic3FsU3RhdGUiLCJBcGlQYXJhbVR5cGUiLCJpc09iamVjdCIsInYiLCJ0IiwiaXNVbmlvbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNTdHJpbmdMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIsImlzQXJyYXkiLCJpc1JlZiIsImlzSW5kZXhlZEFjY2VzcyIsImlzVHVwbGVUeXBlIiwiaXNQaWNrIiwiaWQiLCJpc09taXQiLCJpc1BhcnRpYWwiLCJpc1Byb21pc2UiLCJpc0NvbnRleHQiLCJpc1JlZktuZXgiLCJpc1R5cGVQYXJhbSIsIlJlbmRlcmluZ05vZGUiLCJhbnkiLCJHZW5lcmF0ZWRDb2x1bW5TY2hlbWEiLCJvYmplY3QiLCJleHByZXNzaW9uIiwic3RyaW5nIiwiQmFzZVByb3BGaWVsZHMiLCJuYW1lIiwiZGVzYyIsIm9wdGlvbmFsIiwibnVsbGFibGUiLCJib29sZWFuIiwidG9GaWx0ZXIiLCJkZWZhdWx0IiwiZGJEZWZhdWx0IiwibnVtYmVyIiwiZ2VuZXJhdGVkIiwiQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCIsImxpdGVyYWwiLCJzdHJpY3QiLCJQcmVjaXNpb25TY2FsZUZpZWxkcyIsInByZWNpc2lvbiIsInNjYWxlIiwiU3RyaW5nUHJvcFNjaGVtYSIsImxlbmd0aCIsIlN0cmluZ0FycmF5UHJvcFNjaGVtYSIsIkVudW1Qcm9wU2NoZW1hIiwiRW51bUFycmF5UHJvcFNjaGVtYSIsIk51bWJlclByb3BTY2hlbWEiLCJudW1iZXJUeXBlIiwiTnVtYmVyQXJyYXlQcm9wU2NoZW1hIiwiTnVtZXJpY1Byb3BTY2hlbWEiLCJOdW1lcmljQXJyYXlQcm9wU2NoZW1hIiwiSnNvblByb3BTY2hlbWEiLCJWaXJ0dWFsUHJvcFNjaGVtYSIsIlZlY3RvclByb3BTY2hlbWEiLCJkaW1lbnNpb25zIiwiVmVjdG9yQXJyYXlQcm9wU2NoZW1hIiwiQmFzZVJlbGF0aW9uRmllbGRzIiwid2l0aCIsIlJlbGF0aW9uT25TY2hlbWEiLCJCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BTY2hlbWEiLCJjdXN0b21Kb2luQ2xhdXNlIiwidXNlQ29uc3RyYWludCIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJIYXNNYW55UmVsYXRpb25Qcm9wU2NoZW1hIiwiam9pbkNvbHVtbiIsImZyb21Db2x1bW4iLCJNYW55VG9NYW55UmVsYXRpb25Qcm9wU2NoZW1hIiwiam9pblRhYmxlIiwiT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEiLCJoYXNKb2luQ29sdW1uIiwiUmVsYXRpb25UeXBlcyIsIlJlbGF0aW9uUHJvcFNjaGVtYSIsImRpc2NyaW1pbmF0ZWRVbmlvbiIsImVycm9yIiwiaXNzIiwibWFwIiwiam9pbiIsImlucHV0IiwiTm9ybWFsUHJvcFR5cGVzIiwiVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyIsIk5vcm1hbFByb3BTY2hlbWEiLCJzdXBlclJlZmluZSIsImRhdGEiLCJjdHgiLCJ1bmRlZmluZWQiLCJhZGRJc3N1ZSIsIm1lc3NhZ2UiLCJwYXRoIiwiaW5jbHVkZXMiLCJmYXRhbCIsIkFsbFByb3BUeXBlcyIsIkVudGl0eVByb3BTY2hlbWEiLCJFbnRpdHlJbmRleENvbHVtblNjaGVtYSIsIm51bGxzRmlyc3QiLCJzb3J0T3JkZXIiLCJ2ZWN0b3JPcHMiLCJFbnRpdHlJbmRleFNjaGVtYSIsImNvbHVtbnMiLCJtaW4iLCJtYXgiLCJ1c2luZyIsIm51bGxzTm90RGlzdGluY3QiLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsaXN0cyIsIkVudGl0eUpzb25TY2hlbWEiLCJkZXNjcmliZSIsInRpdGxlIiwidGFibGUiLCJwYXJlbnRJZCIsInByb3BzIiwiaW5kZXhlcyIsInN1YnNldHMiLCJyZWNvcmQiLCJlbnVtcyIsIlRlbXBsYXRlT3B0aW9ucyIsImVudGl0eSIsIm9taXQiLCJleHRlbmQiLCJlbnRpdHlJZCIsInBhcnRpYWwiLCJpbml0X3R5cGVzIiwiZ2VuZXJhdGVkX3NzbyIsImdlbmVyYXRlZF9odHRwIiwibW9kZWwiLCJkZWZhdWx0U2VhcmNoRmllbGQiLCJkZWZhdWx0T3JkZXJCeSIsIm1vZGVsX3Rlc3QiLCJicmlkZ2UiLCJzZXJ2aWNlIiwibmFtZXNSZWNvcmQiLCJmcyIsImZzUGx1cmFsIiwiY2FtZWwiLCJjYW1lbFBsdXJhbCIsImNhcGl0YWwiLCJjYXBpdGFsUGx1cmFsIiwidXBwZXIiLCJjb25zdGFudCIsIm1vZGVsVHNQYXRoIiwidmlld19saXN0IiwiZXh0cmEiLCJ1bmtub3duIiwidmlld19saXN0X2NvbHVtbnMiLCJsYWJlbCIsInRjIiwiY29sdW1uSW1wb3J0cyIsInZpZXdfc2VhcmNoX2lucHV0Iiwidmlld19mb3JtIiwidmlld19pZF9hbGxfc2VsZWN0Iiwidmlld19pZF9hc3luY19zZWxlY3QiLCJ0ZXh0RmllbGQiLCJ2aWV3X2VudW1zX3NlbGVjdCIsImVudW1JZCIsInZpZXdfZW51bXNfZHJvcGRvd24iLCJ2aWV3X2VudW1zX2J1dHRvbnNldCIsIlRlbXBsYXRlS2V5IiwiR2VuZXJhdGVPcHRpb25zIiwib3ZlcndyaXRlIiwiUGF0aEFuZENvZGUiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLENBQUMsUUFBUSxNQUFNO0FBSXhCOztBQUVBLEdBQ0EsT0FBTyxTQUFTQyxXQUFtQ0MsS0FBUTtJQUN6RCxPQUFPRixFQUFFRyxLQUFLLENBQUM7UUFB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
|
|
656
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQXBpRGVjb3JhdG9yT3B0aW9ucywgQXV0aENvbnRleHQsIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgdHlwZSB7IEd1YXJkS2V5IH0gZnJvbSBcIi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNoYXBlOiBUKTogei5ab2RVbmlvbjxbVCwgei5ab2RBcnJheTxUPl0+IHtcbiAgcmV0dXJuIHoudW5pb24oW3NoYXBlLCBzaGFwZS5hcnJheSgpXSk7XG59XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGFueSBpcyB1c2VkIHRvIG1ha2UgdGhlIHR5cGUgZGlzdHJpYnV0aXZlXG5leHBvcnQgdHlwZSBEaXN0cmlidXRpdmVPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gVCBleHRlbmRzIGFueSA/IE9taXQ8VCwgSz4gOiBuZXZlcjtcblxuLypcbiAgTW9kZWwtRGVmaW50aW9uXG4qL1xuZXhwb3J0IHR5cGUgR2VuZXJhdGVkQ29sdW1uVHlwZSA9IFwiU1RPUkVEXCIgfCBcIlZJUlRVQUxcIjtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtbiA9IHtcbiAgdHlwZTogR2VuZXJhdGVkQ29sdW1uVHlwZTtcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIENvbW1vblByb3AgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuO1xuICB0b0ZpbHRlcj86IHRydWU7XG4gIGRlc2M/OiBzdHJpbmc7XG4gIGRiRGVmYXVsdD86IHN0cmluZztcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIEludGVnZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyXCI7XG59OyAvLyBQRzogaW50ZWdlciAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIEludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImludGVnZXJbXVwiO1xufTsgLy8gUEc6IGludGVnZXJbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYmlnSW50ZWdlclwiO1xufTsgLy8gUEc6IGJpZ2ludCAvIFRTOiBiaWdpbnQgLyBKU09OOiBiaWdpbnRcbmV4cG9ydCB0eXBlIEJpZ0ludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJbXVwiO1xufTsgLy8gUEc6IGJpZ2ludFtdIC8gVFM6IGJpZ2ludFtdIC8gSlNPTjogYmlnaW50W11cbmV4cG9ydCB0eXBlIFN0cmluZ1Byb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1wiO1xuICBsZW5ndGg/OiBudW1iZXI7IC8vIFBHOiB2YXJjaGFyKG4pLCB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBTdHJpbmdBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1tdXCI7XG4gIGxlbmd0aD86IG51bWJlcjsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbn07IC8vIFBHOiB2YXJjaGFyKG4pW10sIHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBFbnVtUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZW51bVwiO1xuICBpZDogc3RyaW5nO1xuICBsZW5ndGg/OiBudW1iZXI7XG59OyAvLyBQRzogdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIEVudW1BcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImVudW1bXVwiO1xuICBpZDogc3RyaW5nO1xufTsgLy8gUEc6IHRleHRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBOdW1iZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1iZXJcIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyOyAvLyBQRzogbnVtZXJpYyhwLCBzKSAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbiAgc2NhbGU/OiBudW1iZXI7IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiOyAvLyDquLDrs7jqsJI6IG51bWVyaWNcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuZXhwb3J0IHR5cGUgTnVtYmVyQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1iZXJbXVwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiOyAvLyDquLDrs7jqsJI6IG51bWVyaWNcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpW10gLyBUUzogbnVtYmVyW10gLyBKU09OOiBudW1iZXJbXVxuZXhwb3J0IHR5cGUgTnVtZXJpY1Byb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWVyaWNcIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgTnVtZXJpY0FycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtZXJpY1tdXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG59OyAvLyBQRzogbnVtZXJpYyhwLCBzKVtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEJvb2xlYW5Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJib29sZWFuXCI7XG59OyAvLyBQRzogYm9vbGVhbiAvIFRTOiBib29sZWFuIC8gSlNPTjogYm9vbGVhblxuZXhwb3J0IHR5cGUgQm9vbGVhbkFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYm9vbGVhbltdXCI7XG59OyAvLyBQRzogYm9vbGVhbltdIC8gVFM6IGJvb2xlYW5bXSAvIEpTT046IGJvb2xlYW5bXVxuZXhwb3J0IHR5cGUgRGF0ZVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImRhdGVcIjtcbn07IC8vIFBHOiB0aW1lc3RhbXB6IC8gVFM6IERhdGUgLyBKU09OOiBzdHJpbmcoSVNPU3RyaW5nKVxuZXhwb3J0IHR5cGUgRGF0ZUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVtdXCI7XG59OyAvLyBQRzogdGltZXN0YW1wdHpbXSAvIFRTOiBEYXRlW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgSnNvblByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImpzb25cIjtcbiAgaWQ6IHN0cmluZztcbn07IC8vIFBHOiBqc29uIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFV1aWRQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkXCI7XG59OyAvLyBQRzogdXVpZCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbmV4cG9ydCB0eXBlIFV1aWRBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInV1aWRbXVwiO1xufTsgLy8gUEc6IHV1aWRbXSAvIFRTOiBzdHJpbmdbXSAvIEpTT046IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBWaXJ0dWFsUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidmlydHVhbFwiO1xuICBpZDogc3RyaW5nO1xufTsgLy8gUEc6IG5vbmUgLyBUUzogYW55KGlkKSAvIEpTT046IGFueVxuZXhwb3J0IHR5cGUgVmVjdG9yUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidmVjdG9yXCI7XG4gIGRpbWVuc2lvbnM6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBWZWN0b3JBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvcltdXCI7XG4gIGRpbWVuc2lvbnM6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBUc1ZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInRzdmVjdG9yXCI7XG59O1xuZXhwb3J0IHR5cGUgUmVsYXRpb25UeXBlID0gXCJIYXNNYW55XCIgfCBcIkJlbG9uZ3NUb09uZVwiIHwgXCJNYW55VG9NYW55XCIgfCBcIk9uZVRvT25lXCI7XG5leHBvcnQgdHlwZSBSZWxhdGlvbk9uID0gXCJDQVNDQURFXCIgfCBcIlNFVCBOVUxMXCIgfCBcIk5PIEFDVElPTlwiIHwgXCJTRVQgREVGQVVMVFwiIHwgXCJSRVNUUklDVFwiO1xudHlwZSBfUmVsYXRpb25Qcm9wID0ge1xuICB0eXBlOiBcInJlbGF0aW9uXCI7XG4gIG5hbWU6IHN0cmluZztcbiAgd2l0aDogc3RyaW5nO1xuICBudWxsYWJsZT86IGJvb2xlYW47IC8vIERFRkFVTFQ6IGZhbHNlXG4gIHRvRmlsdGVyPzogdHJ1ZTsgLy8gREVGQVVMVDogZmFsc2VcbiAgZGVzYz86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBPbmVUb09uZVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJPbmVUb09uZVwiO1xuICBjdXN0b21Kb2luQ2xhdXNlPzogc3RyaW5nO1xufSAmIChcbiAgICB8IHtcbiAgICAgICAgaGFzSm9pbkNvbHVtbjogdHJ1ZTtcbiAgICAgICAgdXNlQ29uc3RyYWludD86IGJvb2xlYW47IC8vIERFRkFVTFQ6IHRydWVcbiAgICAgICAgb25VcGRhdGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxuICAgICAgICBvbkRlbGV0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGhhc0pvaW5Db2x1bW46IGZhbHNlO1xuICAgICAgfVxuICApO1xuZXhwb3J0IHR5cGUgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIkJlbG9uZ3NUb09uZVwiO1xuICBjdXN0b21Kb2luQ2xhdXNlPzogc3RyaW5nO1xuICB1c2VDb25zdHJhaW50PzogYm9vbGVhbjsgLy8gREVGQVVMVDogdHJ1ZVxuICBvblVwZGF0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gIG9uRGVsZXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1Rcbn07XG5leHBvcnQgdHlwZSBIYXNNYW55UmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIkhhc01hbnlcIjtcbiAgam9pbkNvbHVtbjogc3RyaW5nO1xuICBmcm9tQ29sdW1uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIE1hbnlUb01hbnlSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiTWFueVRvTWFueVwiO1xuICBqb2luVGFibGU6IGAke3N0cmluZ31fXyR7c3RyaW5nfWA7XG4gIG9uVXBkYXRlOiBSZWxhdGlvbk9uO1xuICBvbkRlbGV0ZTogUmVsYXRpb25Pbjtcbn07XG5leHBvcnQgdHlwZSBSZWxhdGlvblByb3AgPVxuICB8IE9uZVRvT25lUmVsYXRpb25Qcm9wXG4gIHwgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wXG4gIHwgSGFzTWFueVJlbGF0aW9uUHJvcFxuICB8IE1hbnlUb01hbnlSZWxhdGlvblByb3A7XG5cbmV4cG9ydCB0eXBlIEVudGl0eVByb3AgPVxuICB8IEludGVnZXJQcm9wXG4gIHwgSW50ZWdlckFycmF5UHJvcFxuICB8IEJpZ0ludGVnZXJQcm9wXG4gIHwgQmlnSW50ZWdlckFycmF5UHJvcFxuICB8IFN0cmluZ1Byb3BcbiAgfCBTdHJpbmdBcnJheVByb3BcbiAgfCBFbnVtUHJvcFxuICB8IEVudW1BcnJheVByb3BcbiAgfCBOdW1iZXJQcm9wXG4gIHwgTnVtYmVyQXJyYXlQcm9wXG4gIHwgTnVtZXJpY1Byb3BcbiAgfCBOdW1lcmljQXJyYXlQcm9wXG4gIHwgTnVtZXJpY1Byb3BcbiAgfCBCb29sZWFuUHJvcFxuICB8IEJvb2xlYW5BcnJheVByb3BcbiAgfCBEYXRlUHJvcFxuICB8IERhdGVBcnJheVByb3BcbiAgfCBVdWlkUHJvcFxuICB8IFV1aWRBcnJheVByb3BcbiAgfCBKc29uUHJvcFxuICB8IFZpcnR1YWxQcm9wXG4gIHwgVmVjdG9yUHJvcFxuICB8IFZlY3RvckFycmF5UHJvcFxuICB8IFRzVmVjdG9yUHJvcFxuICB8IFJlbGF0aW9uUHJvcDtcblxuLyoqXG4gKiBwZ3ZlY3RvciDqsbDrpqwg7Jew7IKw7J6QIO2BtOuemOyKpFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogLSBgdmVjdG9yX2Nvc2luZV9vcHNgOiDsvZTsgqzsnbgg6rGw66asIChDb3NpbmUgRGlzdGFuY2UpIC0g6raM7J6lXG4gKiAgIC0gU1FMIOyXsOyCsOyekDogYDw9PmBcbiAqICAgLSDrsqHthLDsnZgg67Cp7Zal66eMIOu5hOq1kCAo7YGs6riwIOustOyLnCksIDEgLSBjb3NpbmVfc2ltaWxhcml0eVxuICogICAtIO2FjeyKpO2KuCDsnoTrsqDrlKksIOyLnOunqO2LsSDqsoDsg4nsl5Ag6rCA7J6lIOydvOuwmOyggeycvOuhnCDsgqzsmqlcbiAqICAgLSDsgqzsmqkg7JiIOiBPcGVuQUksIFZveWFnZSDrk7Eg64yA67aA67aE7J2YIOyehOuyoOuUqSDrqqjrjbjsl5Ag6raM7J6lXG4gKlxuICogLSBgdmVjdG9yX2lwX29wc2A6IOuCtOyggSAoSW5uZXIgUHJvZHVjdClcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPCM+YFxuICogICAtIOuRkCDrsqHthLDsnZgg64K07KCB7J2EIOqzhOyCsCAoc3VtKGFbaV0gKiBiW2ldKSlcbiAqICAgLSDsoJXqt5ztmZTrkJwg67Kh7YSw7JeQ7IScIOy9lOyCrOyduCDsnKDsgqzrj4TsmYAg64+Z7J287ZWcIOqysOqzvFxuICogICAtIOqwkuydtCDtgbTsiJjroZ0g7Jyg7IKsICjsnYzsiJgg7Jew7IKw7J6Q7J2066+A66GcIE9SREVSIEJZ7JeQ7IScIOyjvOydmClcbiAqICAgLSDsgqzsmqkg7JiIOiDsnbTrr7gg7KCV6rec7ZmU65CcIOyehOuyoOuUqeyXkOyEnCDqsIDsnqUg67mg66W4IOyEseuKpVxuICpcbiAqIC0gYHZlY3Rvcl9sMl9vcHNgOiDsnKDtgbTrpqzrk5wg6rGw66asIChMMiBEaXN0YW5jZSlcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPC0+YFxuICogICAtIOuRkCDrsqHthLAg6rCE7J2YIOyngeyEoCDqsbDrpqzrpbwg6rOE7IKwIChzcXJ0KHN1bSgoYVtpXSAtIGJbaV0pXjIpKSlcbiAqICAgLSDrsqHthLDsnZgg7YGs6riwKG1hZ25pdHVkZSnqsIAg7KSR7JqU7ZWgIOuVjCDsgqzsmqlcbiAqICAgLSDsgqzsmqkg7JiIOiDsnbTrr7jsp4Ag7Jyg7IKs64+ELCDsoIjrjIDsoIEg6rGw66asIOy4oeygleydtCDtlYTsmpTtlZwg6rK97JqwXG4gKi9cbmV4cG9ydCB0eXBlIFZlY3Rvck9wcyA9IFwidmVjdG9yX2Nvc2luZV9vcHNcIiB8IFwidmVjdG9yX2lwX29wc1wiIHwgXCJ2ZWN0b3JfbDJfb3BzXCI7XG5cbnR5cGUgRW50aXR5SW5kZXhDb2x1bW4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbHNGaXJzdD86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86IFwiQVNDXCIgfCBcIkRFU0NcIjtcbiAgLyoqIHBndmVjdG9yIOyduOuNseyKpOyXkOyEnCDsgqzsmqntlaAg6rGw66asIOyXsOyCsOyekCAodmVjdG9yIOy7rOufvOyXkOunjCDsoIHsmqkpICovXG4gIHZlY3Rvck9wcz86IFZlY3Rvck9wcztcbn07XG5leHBvcnQgdHlwZSBFbnRpdHlJbmRleCA9IHtcbiAgdHlwZTogXCJpbmRleFwiIHwgXCJ1bmlxdWVcIiB8IFwiaG5zd1wiIHwgXCJpdmZmbGF0XCI7XG4gIGNvbHVtbnM6IEVudGl0eUluZGV4Q29sdW1uW107XG4gIG5hbWU6IHN0cmluZztcbiAgdXNpbmc/OiBcImJ0cmVlXCIgfCBcImhhc2hcIiB8IFwiZ2luXCIgfCBcImdpc3RcIjtcbiAgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47IC8vIHVuaXF1ZSBpbmRleCBvbmx5XG4gIC8qKlxuICAgKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKSDsnbjrjbHsiqQ6IOqwgSDrhbjrk5zsnZgg7LWc64yAIOyXsOqysCDsiJhcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIOq3uOuemO2UhOyXkOyEnCDqsIEg64W465Oc6rCAIOqwgOyniCDsiJgg7J6I64qUIOy1nOuMgCDsl7DqsrAg7IiY7J6F64uI64ukLlxuICAgKiBITlNX64qUIOu5oOuluCDqsoDsg4kg7IaN64+E7JmAIOuGkuydgCDsoJXtmZXrj4Trpbwg7KCc6rO17ZWY66+A66GcIOq2jOyepeuQqeuLiOuLpC5cbiAgICogLSDquLDrs7jqsJI6IDE2XG4gICAqIC0g67KU7JyEOiAyIH4gMTAwXG4gICAqIC0g64aS7J2E7IiY66GdOiDsoJXtmZXrj4TihpEsIOu5jOuTnCDsi5zqsITihpEsIOuplOuqqOumrOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCg4KSwg6reg7ZiVKDE2KSwg64aS7J2AIOygle2ZleuPhCgzMiksIOy1nOqzoCDsoJXtmZXrj4QoNjQpXG4gICAqL1xuICBtPzogbnVtYmVyO1xuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqtazshLEg7IucIO2DkOyDiSDrspTsnIRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIOyduOuNseyKpCDqtazshLEg7IucIOqwgSDrhbjrk5zsl5DshJwg7YOQ7IOJ7ZWgIOuylOychOyeheuLiOuLpC5cbiAgICogLSDquLDrs7jqsJI6IDY0XG4gICAqIC0g67KU7JyEOiA0IH4gMTAwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRXG4gICAqIC0g6raM7J6lOiDruaDrpbgg67mM65OcKDMyKSwg6reg7ZiVKDY0KSwg64aS7J2AIOygle2ZleuPhCgxMjgpLCDstZzqs6Ag7KCV7ZmV64+EKDI1NilcbiAgICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pIOyduOuNseyKpDog7YG065+s7Iqk7YSw66eBIOumrOyKpO2KuCDsiJhcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIOuyoe2EsOulvCDtgbTrn6zsiqTthLDrp4HtlaAg67KE7YK3IOyImOulvCDsp4DsoJXtlanri4jri6QuXG4gICAqIElWRkZsYXTsnYAg67mg66W4IOu5jOuTnOyZgCDrgq7snYAg66mU66qo66asIOyCrOyaqeydtCDtlYTsmpTtlaAg65WMIOyCrOyaqe2VqeuLiOuLpC5cbiAgICogLSDqtozsnqXqsJI6IHNxcnQocm93X2NvdW50KSB+IHJvd19jb3VudCAvIDEwMDBcbiAgICogLSDsmIjsi5w6IDEwLDAwMO2WiSDihpIgMTAwLCAxMDAsMDAw7ZaJIOKGkiAzMDAsIDEsMDAwLDAwMO2WiSDihpIgMTAwMFxuICAgKiAtIOunjuydhOyImOuhnSDsoJXtmZXrj4TihpEsIOqygOyDiSDsho3rj4TihpNcbiAgICovXG4gIGxpc3RzPzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eUpzb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudElkPzogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvcHM6IEVudGl0eVByb3BbXTtcbiAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgc3Vic2V0czoge1xuICAgIFtzdWJzZXQ6IHN0cmluZ106IHN0cmluZ1tdO1xuICB9O1xuICBlbnVtczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICB9O1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eVN1YnNldFJvdyA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGFzOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgY2hpbGRyZW46IEVudGl0eVN1YnNldFJvd1tdO1xuICBwcmVmaXhlczogc3RyaW5nW107XG4gIHJlbGF0aW9uRW50aXR5Pzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEZsYXR0ZW5TdWJzZXRSb3cgPSBPbWl0PEVudGl0eVN1YnNldFJvdywgXCJjaGlsZHJlblwiPjtcblxuLypcbiAgUHJvcE5vZGVcbiovXG5cbi8qKlxuICog7JeU7Yuw7Yuw7J2YIO2VhOuTnCDqtazsobDrpbwg7Yq466asIO2Yle2DnOuhnCDtkZztmITtlZjripQg7KSR6rCEIOuFuOuTnOyeheuLiOuLpC5cbiAqXG4gKiAqKuuqqeyggSoqOiBFbnRpdHnsnZggc3Vic2V0IO2VhOuTnCDtkZztmITsi50o7JiIOiBcImlkXCIsIFwidXNlci5uYW1lXCIsIFwidGFnc1tdXCIp7J2EXG4gKiDsnqzqt4DsoIHsnbgg7Yq466asIOq1rOyhsOuhnCDtjIzsi7HtlZjsl6wgWm9kIOyKpO2CpOuniCDsg53shLHsnZgg7KSR6rCEIOuLqOqzhOuhnCDsgqzsmqntlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSAo7Yq466asIOq1rOyhsCkg4oaSIFpvZCDsiqTtgqTrp4gg4oaSIFJlbmRlcmluZ05vZGUgKFVJ7JqpKVxuICpcbiAqICoqbm9kZVR5cGUqKjpcbiAqIC0gXCJwbGFpblwiOiDri6jsnbwg7ZWE65OcICjsmIg6IFwiaWRcIiwgXCJuYW1lXCIpXG4gKiAtIFwib2JqZWN0XCI6IOykkeyyqSDqsJ3ssrQgKOyYiDogXCJ1c2VyLm5hbWVcIiDihpIgdXNlciDqsJ3ssrQpXG4gKiAtIFwiYXJyYXlcIjog67Cw7Je0ICjsmIg6IFwidGFnc1tdXCIg4oaSIHRhZ3Mg67Cw7Je0KVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBlbnRpdHktY29udmVydGVyLnRz7J2YIHByb3BOb2RlVG9ab2RUeXBlKClcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5UHJvcE5vZGUgPVxuICB8IHtcbiAgICAgIG5vZGVUeXBlOiBcInBsYWluXCI7XG4gICAgICBwcm9wOiBFbnRpdHlQcm9wO1xuICAgIH1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIiB8IFwiYXJyYXlcIjtcbiAgICAgIHByb3A/OiBFbnRpdHlQcm9wO1xuICAgICAgY2hpbGRyZW46IEVudGl0eVByb3BOb2RlW107XG4gICAgfTtcblxuLypcbiAgUHJvcCBUeXBlIEd1YXJkc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgSW50ZWdlckFycmF5UHJvcCk/LnR5cGUgPT09IFwiaW50ZWdlcltdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyUHJvcChwOiB1bmtub3duKTogcCBpcyBJbnRlZ2VyUHJvcCB8IEludGVnZXJBcnJheVByb3Age1xuICByZXR1cm4gaXNJbnRlZ2VyU2luZ2xlUHJvcChwKSB8fCBpc0ludGVnZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyUHJvcCB7XG4gIHJldHVybiAocCBhcyBCaWdJbnRlZ2VyUHJvcCk/LnR5cGUgPT09IFwiYmlnSW50ZWdlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3AocDogdW5rbm93bik6IHAgaXMgQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQmlnSW50ZWdlclNpbmdsZVByb3AocCkgfHwgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBTdHJpbmdQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ0FycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBTdHJpbmdBcnJheVByb3ApPy50eXBlID09PSBcInN0cmluZ1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdQcm9wKHA6IHVua25vd24pOiBwIGlzIFN0cmluZ1Byb3AgfCBTdHJpbmdBcnJheVByb3Age1xuICByZXR1cm4gaXNTdHJpbmdTaW5nbGVQcm9wKHApIHx8IGlzU3RyaW5nQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bVByb3Age1xuICByZXR1cm4gKHAgYXMgRW51bVByb3ApPy50eXBlID09PSBcImVudW1cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1BcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wKHA6IHVua25vd24pOiBwIGlzIEVudW1Qcm9wIHwgRW51bUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgTnVtYmVyUHJvcCB7XG4gIHJldHVybiAocCBhcyBOdW1iZXJQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtYmVyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1iZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzTnVtYmVyU2luZ2xlUHJvcChwKSB8fCBpc051bWJlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNQcm9wIHtcbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgTnVtZXJpY0FycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtZXJpY1tdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljUHJvcChwOiB1bmtub3duKTogcCBpcyBOdW1lcmljUHJvcCB8IE51bWVyaWNBcnJheVByb3Age1xuICByZXR1cm4gaXNOdW1lcmljU2luZ2xlUHJvcChwKSB8fCBpc051bWVyaWNBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuU2luZ2xlUHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuUHJvcCB7XG4gIHJldHVybiAocCBhcyBCb29sZWFuUHJvcCk/LnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbkFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3AocDogdW5rbm93bik6IHAgaXMgQm9vbGVhblByb3AgfCBCb29sZWFuQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZVByb3Age1xuICByZXR1cm4gKHAgYXMgRGF0ZVByb3ApPy50eXBlID09PSBcImRhdGVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVBcnJheVByb3AocDogdW5rbm93bik6IHAgaXMgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiAocCBhcyBEYXRlQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJkYXRlW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVQcm9wKHA6IHVua25vd24pOiBwIGlzIERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCB7XG4gIHJldHVybiBpc0RhdGVTaW5nbGVQcm9wKHApIHx8IGlzRGF0ZUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRTaW5nbGVQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRQcm9wIHtcbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wKHA6IHVua25vd24pOiBwIGlzIFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVXVpZEFycmF5UHJvcCk/LnR5cGUgPT09IFwidXVpZFtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkUHJvcChwOiB1bmtub3duKTogcCBpcyBVdWlkUHJvcCB8IFV1aWRBcnJheVByb3Age1xuICByZXR1cm4gaXNVdWlkU2luZ2xlUHJvcChwKSB8fCBpc1V1aWRBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNKc29uUHJvcChwOiB1bmtub3duKTogcCBpcyBKc29uUHJvcCB7XG4gIHJldHVybiAocCBhcyBKc29uUHJvcCk/LnR5cGUgPT09IFwianNvblwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFByb3AocDogdW5rbm93bik6IHAgaXMgVmlydHVhbFByb3Age1xuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclNpbmdsZVByb3AocDogdW5rbm93bik6IHAgaXMgVmVjdG9yUHJvcCB7XG4gIHJldHVybiAocCBhcyBWZWN0b3JQcm9wKT8udHlwZSA9PT0gXCJ2ZWN0b3JcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvckFycmF5UHJvcChwOiB1bmtub3duKTogcCBpcyBWZWN0b3JBcnJheVByb3Age1xuICByZXR1cm4gKHAgYXMgVmVjdG9yQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJ2ZWN0b3JbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yUHJvcChwOiB1bmtub3duKTogcCBpcyBWZWN0b3JQcm9wIHwgVmVjdG9yQXJyYXlQcm9wIHtcbiAgcmV0dXJuIGlzVmVjdG9yU2luZ2xlUHJvcChwKSB8fCBpc1ZlY3RvckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1RzVmVjdG9yUHJvcChwOiB1bmtub3duKTogcCBpcyBUc1ZlY3RvclByb3Age1xuICByZXR1cm4gKHAgYXMgVHNWZWN0b3JQcm9wKT8udHlwZSA9PT0gXCJ0c3ZlY3RvclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsYXRpb25Qcm9wKHA6IHVua25vd24pOiBwIGlzIFJlbGF0aW9uUHJvcCB7XG4gIHJldHVybiAocCBhcyBSZWxhdGlvblByb3ApPy50eXBlID09PSBcInJlbGF0aW9uXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwOiB1bmtub3duKTogcCBpcyBPbmVUb09uZVJlbGF0aW9uUHJvcCB7XG4gIHJldHVybiAocCBhcyBPbmVUb09uZVJlbGF0aW9uUHJvcCk/LnJlbGF0aW9uVHlwZSA9PT0gXCJPbmVUb09uZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHA6IHVua25vd24pOiBwIGlzIEJlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCB7XG4gIHJldHVybiAocCBhcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiQmVsb25nc1RvT25lXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNIYXNNYW55UmVsYXRpb25Qcm9wKHA6IHVua25vd24pOiBwIGlzIEhhc01hbnlSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgSGFzTWFueVJlbGF0aW9uUHJvcCk/LnJlbGF0aW9uVHlwZSA9PT0gXCJIYXNNYW55XCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wKHA6IHVua25vd24pOiBwIGlzIE1hbnlUb01hbnlSZWxhdGlvblByb3Age1xuICByZXR1cm4gKHAgYXMgTWFueVRvTWFueVJlbGF0aW9uUHJvcCk/LnJlbGF0aW9uVHlwZSA9PT0gXCJNYW55VG9NYW55XCI7XG59XG5cbnR5cGUgSm9pbkNsYXVzZSA9XG4gIHwge1xuICAgICAgZnJvbTogc3RyaW5nO1xuICAgICAgdG86IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgY3VzdG9tOiBzdHJpbmc7XG4gICAgfTtcbmV4cG9ydCBmdW5jdGlvbiBpc0N1c3RvbUpvaW5DbGF1c2UocDogdW5rbm93bik6IHAgaXMgeyBjdXN0b206IHN0cmluZyB9IHtcbiAgcmV0dXJuICEhKHAgYXMgeyBjdXN0b206IHN0cmluZyB9KT8uY3VzdG9tO1xufVxuXG50eXBlIFN1YnNldExvYWRlciA9IHtcbiAgYXM6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbWFueUpvaW46IHtcbiAgICBmcm9tVGFibGU6IHN0cmluZztcbiAgICBmcm9tQ29sOiBzdHJpbmc7XG4gICAgaWRGaWVsZDogc3RyaW5nO1xuICAgIHRvVGFibGU6IHN0cmluZztcbiAgICB0b0NvbDogc3RyaW5nO1xuICAgIHRocm91Z2g/OiB7XG4gICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgZnJvbUNvbDogc3RyaW5nO1xuICAgICAgdG9Db2w6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBvbmVKb2luczogKHtcbiAgICBhczogc3RyaW5nO1xuICAgIGpvaW46IFwiaW5uZXJcIiB8IFwib3V0ZXJcIjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICB9ICYgSm9pbkNsYXVzZSlbXTtcbiAgc2VsZWN0OiBzdHJpbmdbXTtcbiAgbG9hZGVycz86IFN1YnNldExvYWRlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2V0UXVlcnkgPSB7XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIHZpcnR1YWw6IHN0cmluZ1tdO1xuICBqb2luczogKHtcbiAgICBhczogc3RyaW5nO1xuICAgIGpvaW46IFwiaW5uZXJcIiB8IFwib3V0ZXJcIjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICB9ICYgSm9pbkNsYXVzZSlbXTtcbiAgbG9hZGVyczogU3Vic2V0TG9hZGVyW107XG59O1xuXG4vKiBCYXNlTW9kZWwgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVRdWVyeU1vZGUgPSB6LmVudW0oW1wiYm90aFwiLCBcImxpc3RcIiwgXCJjb3VudFwiXSk7XG5leHBvcnQgdHlwZSBTb25hbXVRdWVyeU1vZGUgPSB6LmluZmVyPHR5cGVvZiBTb25hbXVRdWVyeU1vZGU+O1xuXG4vKiBLbmV4IE1pZ3JhdGlvbiAqL1xuZXhwb3J0IHR5cGUgS25leEVycm9yID0ge1xuICBjb2RlOiBzdHJpbmc7XG4gIGVycm5vOiBudW1iZXI7XG4gIHNxbDogc3RyaW5nO1xuICBzcWxNZXNzYWdlOiBzdHJpbmc7XG4gIHNxbFN0YXRlOiBzdHJpbmc7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzS25leEVycm9yKGU6IHVua25vd24pOiBlIGlzIEtuZXhFcnJvciB7XG4gIHJldHVybiAhIShlIGFzIEtuZXhFcnJvcik/LmNvZGUgJiYgISEoZSBhcyBLbmV4RXJyb3IpPy5zcWxNZXNzYWdlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsU3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIEtuZXhDb2x1bW5UeXBlID1cbiAgfCBcInN0cmluZ1wiXG4gIHwgXCJ0ZXh0XCJcbiAgfCBcInNtYWxsdGV4dFwiXG4gIHwgXCJtZWRpdW10ZXh0XCJcbiAgfCBcImxvbmd0ZXh0XCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlclwiXG4gIHwgXCJkZWNpbWFsXCJcbiAgfCBcInRpbWVzdGFtcFwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImZvcmVpZ25cIlxuICB8IFwidXVpZFwiXG4gIHwgXCJqc29uXCJcbiAgfCBcImZsb2F0XCJcbiAgfCBcImRhdGVcIlxuICB8IFwidGltZVwiXG4gIHwgXCJkYXRldGltZVwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwic3RyaW5nW11cIlxuICB8IFwiaW50ZWdlclwiXG4gIHwgXCJpbnRlZ2VyW11cIlxuICB8IFwiYmlnSW50ZWdlclwiXG4gIHwgXCJiaWdJbnRlZ2VyW11cIlxuICB8IFwibnVtYmVyT3JOdW1lcmljXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1tdXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwiYm9vbGVhbltdXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZVtdXCJcbiAgfCBcInV1aWRcIlxuICB8IFwidXVpZFtdXCJcbiAgfCBcImpzb25cIlxuICB8IFwidmVjdG9yXCJcbiAgfCBcInZlY3RvcltdXCJcbiAgfCBcInRzdmVjdG9yXCI7XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Db2x1bW4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogTWlncmF0aW9uQ29sdW1uVHlwZTtcbiAgbnVsbGFibGU6IGJvb2xlYW47XG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgZGVmYXVsdFRvPzogc3RyaW5nO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xuICBkaW1lbnNpb25zPzogbnVtYmVyO1xuICBnZW5lcmF0ZWQ/OiBHZW5lcmF0ZWRDb2x1bW47XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uSW5kZXggPSB7XG4gIHR5cGU6IFwidW5pcXVlXCIgfCBcImluZGV4XCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuO1xuICAvKiogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCk6IOqwgSDrhbjrk5zsnZgg7LWc64yAIOyXsOqysCDsiJggKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqtazshLEg7IucIO2DkOyDiSDrspTsnIQgKi9cbiAgZWZDb25zdHJ1Y3Rpb24/OiBudW1iZXI7XG4gIC8qKiBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbik6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYICovXG4gIGxpc3RzPzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkZvcmVpZ24gPSB7XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICB0bzogc3RyaW5nO1xuICBvblVwZGF0ZTogUmVsYXRpb25PbjtcbiAgb25EZWxldGU6IFJlbGF0aW9uT247XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uSm9pblRhYmxlID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXQgPSB7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdO1xuICBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdO1xuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSA9IE1pZ3JhdGlvblNldCAmIHtcbiAgam9pblRhYmxlczogTWlncmF0aW9uSm9pblRhYmxlW107XG59O1xuZXhwb3J0IHR5cGUgR2VuTWlncmF0aW9uQ29kZSA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgdHlwZTogXCJub3JtYWxcIiB8IFwiZm9yZWlnblwiO1xuICBmb3JtYXR0ZWQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vKiBBcGkgKi9cbmV4cG9ydCB0eXBlIEFwaVBhcmFtID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IEFwaVBhcmFtVHlwZTtcbiAgb3B0aW9uYWw6IGJvb2xlYW47XG4gIGRlZmF1bHREZWY/OiBzdHJpbmc7XG59O1xuZXhwb3J0IG5hbWVzcGFjZSBBcGlQYXJhbVR5cGUge1xuICBleHBvcnQgdHlwZSBPYmplY3QgPSB7XG4gICAgdDogXCJvYmplY3RcIjtcbiAgICBwcm9wczogQXBpUGFyYW1bXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVW5pb24gPSB7XG4gICAgdDogXCJ1bmlvblwiO1xuICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgSW50ZXJzZWN0aW9uID0ge1xuICAgIHQ6IFwiaW50ZXJzZWN0aW9uXCI7XG4gICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBTdHJpbmdMaXRlcmFsID0ge1xuICAgIHQ6IFwic3RyaW5nLWxpdGVyYWxcIjtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBOdW1lcmljTGl0ZXJhbCA9IHtcbiAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEFycmF5ID0ge1xuICAgIHQ6IFwiYXJyYXlcIjtcbiAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUmVmID0ge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBhcmdzPzogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIEluZGV4ZWRBY2Nlc3MgPSB7XG4gICAgdDogXCJpbmRleGVkLWFjY2Vzc1wiO1xuICAgIG9iamVjdDogQXBpUGFyYW1UeXBlO1xuICAgIGluZGV4OiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFR1cGxlVHlwZSA9IHtcbiAgICB0OiBcInR1cGxlLXR5cGVcIjtcbiAgICBlbGVtZW50czogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFBpY2sgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQaWNrXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9taXQgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJPbWl0XCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFBhcnRpYWwgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQYXJ0aWFsXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFByb21pc2UgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQcm9taXNlXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIENvbnRleHQgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJDb250ZXh0XCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFR5cGVQYXJhbSA9IHtcbiAgICB0OiBcInR5cGUtcGFyYW1cIjtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbnN0cmFpbnQ/OiBBcGlQYXJhbVR5cGU7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5PYmplY3Qge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuT2JqZWN0KT8udCA9PT0gXCJvYmplY3RcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNVbmlvbih2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuVW5pb24ge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuVW5pb24pPy50ID09PSBcInVuaW9uXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJzZWN0aW9uKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb24ge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uKT8udCA9PT0gXCJpbnRlcnNlY3Rpb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdMaXRlcmFsKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLlN0cmluZ0xpdGVyYWwpPy50ID09PSBcInN0cmluZy1saXRlcmFsXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzTnVtZXJpY0xpdGVyYWwodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLk51bWVyaWNMaXRlcmFsIHtcbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLk51bWVyaWNMaXRlcmFsKT8udCA9PT0gXCJudW1lcmljLWxpdGVyYWxcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuQXJyYXkge1xuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuQXJyYXkpPy50ID09PSBcImFycmF5XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVmKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5SZWYge1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNJbmRleGVkQWNjZXNzKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5JbmRleGVkQWNjZXNzIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwiaW5kZXhlZC1hY2Nlc3NcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNUdXBsZVR5cGUodjogdW5rbm93bik6IHYgaXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInR1cGxlLXR5cGVcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQaWNrKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5QaWNrIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiUGlja1wiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNPbWl0KHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5PbWl0IHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiT21pdFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQYXJ0aWFsKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5QYXJ0aWFsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiUGFydGlhbFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5Qcm9taXNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiUHJvbWlzZVwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNDb250ZXh0KHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5Db250ZXh0IHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiQ29udGV4dFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWZLbmV4KHY6IHVua25vd24pOiB2IGlzIEFwaVBhcmFtVHlwZS5SZWYge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdiAhPT0gbnVsbCAmJlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJLbmV4XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1R5cGVQYXJhbSh2OiB1bmtub3duKTogdiBpcyBBcGlQYXJhbVR5cGUuVHlwZVBhcmFtIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwidHlwZS1wYXJhbVwiO1xuICB9XG59XG5leHBvcnQgdHlwZSBBcGlQYXJhbVR5cGUgPVxuICB8IFwic3RyaW5nXCJcbiAgfCBcIm51bWJlclwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcIm51bGxcIlxuICB8IFwidW5kZWZpbmVkXCJcbiAgfCBcInZvaWRcIlxuICB8IFwiYW55XCJcbiAgfCBcInVua25vd25cIlxuICB8IFwidHJ1ZVwiXG4gIHwgXCJmYWxzZVwiXG4gIHwgQXBpUGFyYW1UeXBlLlN0cmluZ0xpdGVyYWxcbiAgfCBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWxcbiAgfCBBcGlQYXJhbVR5cGUuT2JqZWN0XG4gIHwgQXBpUGFyYW1UeXBlLlVuaW9uXG4gIHwgQXBpUGFyYW1UeXBlLkludGVyc2VjdGlvblxuICB8IEFwaVBhcmFtVHlwZS5BcnJheVxuICB8IEFwaVBhcmFtVHlwZS5SZWZcbiAgfCBBcGlQYXJhbVR5cGUuSW5kZXhlZEFjY2Vzc1xuICB8IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1cbiAgfCBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlO1xuXG4vKiBUZW1wbGF0ZSAqL1xuLyoqXG4gKiBVSSDsu7Ttj6zrhIztirgg66CM642U66eB7J2EIOychO2VnCDrqZTtg4DrjbDsnbTthLAg64W465Oc7J6F64uI64ukLlxuICpcbiAqICoq66qp7KCBKio6IFpvZCDsiqTtgqTrp4jroZzrtoDthLAg7ZSE66Gg7Yq47JeU65OcIFVJIOy7tO2PrOuEjO2KuOulvCDsnpDrj5kg7IOd7ISx7ZWY6riwIOychO2VnFxuICog66CM642U66eBIOygleuztOulvCDri7TsnYAg7Yq466asIOq1rOyhsOyeheuLiOuLpC4g6rCBIO2VhOuTnOqwgCDslrTrlqQgVUkg7Lu07Y+s64SM7Yq466GcXG4gKiDtkZztmITrkJjslrTslbwg7ZWY64qU7KeAKO2FjeyKpO2KuCwg7J2066+47KeALCDrgqDsp5wsIEVudW0g7ISg7YOdIOuTsSnrpbwg66qF7Iuc7ZWp64uI64ukLlxuICpcbiAqICoq67OA7ZmYIO2dkOumhCoqOlxuICogRW50aXR5IHN1YnNldCDihpIgRW50aXR5UHJvcE5vZGUg4oaSIFpvZCDsiqTtgqTrp4gg4oaSIFJlbmRlcmluZ05vZGUgKFVJ7JqpKSDihpIgUmVhY3Qg7Lu07Y+s64SM7Yq4IOy9lOuTnCDsg53shLFcbiAqXG4gKiAqKuyjvOyalCDtlYTrk5wqKjpcbiAqIC0gYHJlbmRlclR5cGVgOiBVSSDsu7Ttj6zrhIztirgg7Jyg7ZiVIChzdHJpbmctcGxhaW4sIG51bWJlci1ma19pZCwgZW51bXMsIGFycmF5IOuTsSlcbiAqIC0gYHpvZFR5cGVgOiDsm5Drs7ggWm9kIOyKpO2CpOuniCAodmFsaWRhdGlvbiDsmqkpXG4gKiAtIGBjaGlsZHJlbmA6IOykkeyyqeuQnCDqsJ3ssrQg7ZWE65Oc65OkIChvYmplY3Tsnbwg65WMKVxuICogLSBgZWxlbWVudGA6IOuwsOyXtCDsmpTshowg7YOA7J6FIChhcnJheeydvCDrlYwpXG4gKlxuICogKirsgqzsmqkg7JyE7LmYKio6XG4gKiAtIHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvUmVuZGVyaW5nTm9kZSgp7JeQ7IScIOyDneyEsVxuICogLSB2aWV3X2Zvcm0udGVtcGxhdGUudHMsIHZpZXdfbGlzdC50ZW1wbGF0ZS50cyDrk7Hsl5DshJwgUmVhY3Qg7Lu07Y+s64SM7Yq4IOy9lOuTnCDsg53shLHsl5Ag7IKs7JqpXG4gKi9cbi8vIOyFgO2UhCDssLjsobAg7YOA7J6F7J2066+A66GcIFpvZCDsg53rnrXtlZjqs6Ag7KeB7KCRIOygleydmFxuZXhwb3J0IGNvbnN0IFJlbmRlcmluZ05vZGUgPSB6LmFueSgpO1xuZXhwb3J0IHR5cGUgUmVuZGVyaW5nTm9kZSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICByZW5kZXJUeXBlOlxuICAgIHwgXCJzdHJpbmctcGxhaW5cIlxuICAgIHwgXCJzdHJpbmctaW1hZ2VcIlxuICAgIHwgXCJzdHJpbmctZGF0ZXRpbWVcIlxuICAgIHwgXCJzdHJpbmctZGF0ZVwiXG4gICAgfCBcImRhdGV0aW1lXCJcbiAgICB8IFwibnVtYmVyLXBsYWluXCJcbiAgICB8IFwibnVtYmVyLWlkXCJcbiAgICB8IFwibnVtYmVyLWZrX2lkXCJcbiAgICB8IFwiYm9vbGVhblwiXG4gICAgfCBcImVudW1zXCJcbiAgICB8IFwiYXJyYXlcIlxuICAgIHwgXCJhcnJheS1pbWFnZXNcIlxuICAgIHwgXCJvYmplY3RcIlxuICAgIHwgXCJvYmplY3QtcGlja1wiXG4gICAgfCBcInJlY29yZFwiXG4gICAgfCBcInZlY3RvclwiO1xuICB6b2RUeXBlOiB6LlpvZFR5cGVBbnk7XG4gIGVsZW1lbnQ/OiBSZW5kZXJpbmdOb2RlO1xuICBjaGlsZHJlbj86IFJlbmRlcmluZ05vZGVbXTtcbiAgY29uZmlnPzoge1xuICAgIHBpY2tlZDogc3RyaW5nO1xuICB9O1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEdlbmVyYXRlZENvbHVtblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5lbnVtKFtcIlNUT1JFRFwiLCBcIlZJUlRVQUxcIl0pLFxuICBleHByZXNzaW9uOiB6LnN0cmluZygpLFxufSk7XG5cbmNvbnN0IEJhc2VQcm9wRmllbGRzID0ge1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBkZXNjOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG51bGxhYmxlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB0b0ZpbHRlcjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSkub3B0aW9uYWwoKSxcbiAgZGJEZWZhdWx0OiB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pLm9wdGlvbmFsKCksXG4gIGdlbmVyYXRlZDogR2VuZXJhdGVkQ29sdW1uU2NoZW1hLm9wdGlvbmFsKCksXG59O1xuXG4vLyDrtoDqsIAg7ZWE65Oc6rCAIO2VhOyalOyXhuuKlCBwcm9wXG5jb25zdCBCYXNlUHJvcEZpZWxkc1dpdGhvdXRBZGRpdGlvbmFsID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LnVuaW9uKFtcbiAgICAgIHoubGl0ZXJhbChcImludGVnZXJcIiksXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJiaWdJbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYm9vbGVhblwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5bXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImRhdGVcIiksXG4gICAgICB6LmxpdGVyYWwoXCJkYXRlW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJ1dWlkXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidHN2ZWN0b3JcIiksXG4gICAgXSksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuLy8gcHJlY2lzaW9uL3NjYWxlIO2VhOuTnFxuY29uc3QgUHJlY2lzaW9uU2NhbGVGaWVsZHMgPSB7XG4gIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzY2FsZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufTtcblxuLy8g6rCBIO2DgOyeheuzhCDsiqTtgqTrp4gg7KCV7J2YXG5cbmNvbnN0IFN0cmluZ1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgU3RyaW5nQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJzdHJpbmdbXVwiKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBFbnVtUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwiZW51bVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgRW51bUFycmF5UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwiZW51bVtdXCIpLFxuICAgIGlkOiB6LnN0cmluZygpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IE51bWJlclByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWJlclwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBOdW1iZXJBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWJlcltdXCIpLFxuICAgIC4uLlByZWNpc2lvblNjYWxlRmllbGRzLFxuICAgIG51bWJlclR5cGU6IHouZW51bShbXCJyZWFsXCIsIFwiZG91YmxlIHByZWNpc2lvblwiLCBcIm51bWVyaWNcIl0pLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTnVtZXJpY1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IE51bWVyaWNBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBKc29uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwianNvblwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWaXJ0dWFsUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmlydHVhbFwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWZWN0b3JQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JcIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgVmVjdG9yQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JbXVwiKSxcbiAgICBkaW1lbnNpb25zOiB6Lm51bWJlcigpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIFJlbGF0aW9uIO2DgOyeheydgCByZWxhdGlvblR5cGXsl5Ag65Sw6528IOyEuOu2hO2ZlFxuY29uc3QgQmFzZVJlbGF0aW9uRmllbGRzID0ge1xuICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgdHlwZTogei5saXRlcmFsKFwicmVsYXRpb25cIiksXG4gIHdpdGg6IHouc3RyaW5nKCksXG59O1xuXG4vLyBSZWxhdGlvbk9uIO2DgOyehVxuY29uc3QgUmVsYXRpb25PblNjaGVtYSA9IHouZW51bShbXCJDQVNDQURFXCIsIFwiU0VUIE5VTExcIiwgXCJOTyBBQ1RJT05cIiwgXCJTRVQgREVGQVVMVFwiLCBcIlJFU1RSSUNUXCJdKTtcblxuY29uc3QgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJCZWxvbmdzVG9PbmVcIiksXG4gICAgY3VzdG9tSm9pbkNsYXVzZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIkhhc01hbnlcIiksXG4gICAgam9pbkNvbHVtbjogei5zdHJpbmcoKSxcbiAgICBmcm9tQ29sdW1uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiTWFueVRvTWFueVwiKSxcbiAgICBqb2luVGFibGU6IHouc3RyaW5nKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk9uZVRvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBoYXNKb2luQ29sdW1uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFJlbGF0aW9uVHlwZXMgPSBbXCJCZWxvbmdzVG9PbmVcIiwgXCJIYXNNYW55XCIsIFwiTWFueVRvTWFueVwiLCBcIk9uZVRvT25lXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFJlbGF0aW9uUHJvcFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFxuICBcInJlbGF0aW9uVHlwZVwiLFxuICBbXG4gICAgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBPbmVUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgXSxcbiAge1xuICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgYHJlbGF0aW9uVHlwZeydgCAke1JlbGF0aW9uVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7KGlzcy5pbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LnJlbGF0aW9uVHlwZX1cImAsXG4gIH0sXG4pO1xuXG5jb25zdCBOb3JtYWxQcm9wVHlwZXMgPSBbXG4gIFwiaW50ZWdlclwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJcIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJzdHJpbmdcIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImVudW1cIixcbiAgXCJlbnVtW11cIixcbiAgXCJudW1iZXJcIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNcIixcbiAgXCJudW1lcmljW11cIixcbiAgXCJib29sZWFuXCIsXG4gIFwiYm9vbGVhbltdXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRcIixcbiAgXCJ1dWlkW11cIixcbiAgXCJqc29uXCIsXG4gIFwidmlydHVhbFwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwidHN2ZWN0b3JcIixcbl0gYXMgY29uc3Q7XG5cbi8vIFZJUlRVQUwgR2VuZXJhdGVkIENvbHVtbuyXkOyEnCDsgqzsmqkg67aI6rCA64ql7ZWcIO2DgOyeheuTpFxuY29uc3QgVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyA9IFtcbiAgXCJqc29uXCIsXG4gIFwidmVjdG9yXCIsXG4gIFwidmVjdG9yW11cIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJbXVwiLFxuICBcImJvb2xlYW5bXVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRbXVwiLFxuICBcIm51bWJlcltdXCIsXG4gIFwibnVtZXJpY1tdXCIsXG4gIFwiZW51bVtdXCIsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgTm9ybWFsUHJvcFNjaGVtYSA9IHpcbiAgLmRpc2NyaW1pbmF0ZWRVbmlvbihcbiAgICBcInR5cGVcIixcbiAgICBbXG4gICAgICBCYXNlUHJvcEZpZWxkc1dpdGhvdXRBZGRpdGlvbmFsLFxuICAgICAgU3RyaW5nUHJvcFNjaGVtYSxcbiAgICAgIFN0cmluZ0FycmF5UHJvcFNjaGVtYSxcbiAgICAgIEVudW1Qcm9wU2NoZW1hLFxuICAgICAgRW51bUFycmF5UHJvcFNjaGVtYSxcbiAgICAgIE51bWJlclByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJBcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1lcmljUHJvcFNjaGVtYSxcbiAgICAgIE51bWVyaWNBcnJheVByb3BTY2hlbWEsXG4gICAgICBKc29uUHJvcFNjaGVtYSxcbiAgICAgIFZpcnR1YWxQcm9wU2NoZW1hLFxuICAgICAgVmVjdG9yUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvckFycmF5UHJvcFNjaGVtYSxcbiAgICBdLFxuICAgIHtcbiAgICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgICBgdHlwZeydgCAke05vcm1hbFByb3BUeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHsoaXNzLmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8udHlwZX1cImAsXG4gICAgfSxcbiAgKVxuICAuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgIGlmICghZGF0YS5nZW5lcmF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkYkRlZmF1bHTsmYAgZ2VuZXJhdGVkIOuPmeyLnCDsgqzsmqkg67aI6rCAXG4gICAgaWYgKGRhdGEuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiZGJEZWZhdWx07JmAIGdlbmVyYXRlZOuKlCDtlajqu5gg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6RcIixcbiAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdmlydHVhbCDtg4DsnoXsnYAgZ2VuZXJhdGVkIOu2iOqwgFxuICAgIGlmIChkYXRhLnR5cGUgPT09IFwidmlydHVhbFwiKSB7XG4gICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICBtZXNzYWdlOiBcInZpcnR1YWwg7YOA7J6F7J2AIGdlbmVyYXRlZCBjb2x1bW7snYQg7KeA7JuQ7ZWY7KeAIOyViuyKteuLiOuLpFwiLFxuICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIl0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW4g7YOA7J6FIOygnO2VnCDqsoDspp1cbiAgICBpZiAoZGF0YS5nZW5lcmF0ZWQudHlwZSA9PT0gXCJWSVJUVUFMXCIpIHtcbiAgICAgIGlmICgoVmlydHVhbEdlbmVyYXRlZERpc2FsbG93ZWRUeXBlcyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoZGF0YS50eXBlKSkge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgbWVzc2FnZTogYFZJUlRVQUwgZ2VuZXJhdGVkIGNvbHVtbuydgCAke2RhdGEudHlwZX0g7YOA7J6F7J2EIOyngOybkO2VmOyngCDslYrsirXri4jri6QuIFNUT1JFROulvCDsgqzsmqntlZjshLjsmpQuYCxcbiAgICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIiwgXCJ0eXBlXCJdLFxuICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG5jb25zdCBBbGxQcm9wVHlwZXMgPSBbLi4uTm9ybWFsUHJvcFR5cGVzLCBcInJlbGF0aW9uXCJdIGFzIGNvbnN0O1xuY29uc3QgRW50aXR5UHJvcFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbTm9ybWFsUHJvcFNjaGVtYSwgUmVsYXRpb25Qcm9wU2NoZW1hXSwge1xuICBlcnJvcjogKGlzcykgPT5cbiAgICBgdHlwZeydgCAke0FsbFByb3BUeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHsoaXNzLmlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KT8udHlwZX1cImAsXG59KTtcblxuY29uc3QgRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIG51bGxzRmlyc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHNvcnRPcmRlcjogei5lbnVtKFtcIkFTQ1wiLCBcIkRFU0NcIl0pLm9wdGlvbmFsKCksXG4gIHZlY3Rvck9wczogei5lbnVtKFtcInZlY3Rvcl9jb3NpbmVfb3BzXCIsIFwidmVjdG9yX2lwX29wc1wiLCBcInZlY3Rvcl9sMl9vcHNcIl0pLm9wdGlvbmFsKCksXG59KTtcblxuLy8gRW50aXR5SW5kZXgg7Iqk7YKk66eIIOygleydmFxuY29uc3QgRW50aXR5SW5kZXhTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouZW51bShbXCJpbmRleFwiLCBcInVuaXF1ZVwiLCBcImhuc3dcIiwgXCJpdmZmbGF0XCJdKSxcbiAgICBjb2x1bW5zOiB6LmFycmF5KEVudGl0eUluZGV4Q29sdW1uU2NoZW1hKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKS5tYXgoNjMpLFxuICAgIHVzaW5nOiB6LmVudW0oW1wiYnRyZWVcIiwgXCJoYXNoXCIsIFwiZ2luXCIsIFwiZ2lzdFwiXSkub3B0aW9uYWwoKSxcbiAgICBudWxsc05vdERpc3RpbmN0OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIG06IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBlZkNvbnN0cnVjdGlvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGxpc3RzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eUpzb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGFzY2FsQ2FzZeuhnCDrkJwgRW50aXR5IElEXCIpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRW50aXR5IOydtOumhFwiKSxcbiAgICB0YWJsZTogei5zdHJpbmcoKS5kZXNjcmliZShcInNuYWtlX2Nhc2XroZwg65CcIO2FjOydtOu4lOuqhVwiKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwi67aA66qoIEVudGl0eSBJRFwiKSxcbiAgICBwcm9wczogei5hcnJheShFbnRpdHlQcm9wU2NoZW1hKSxcbiAgICBpbmRleGVzOiB6LmFycmF5KEVudGl0eUluZGV4U2NoZW1hKSxcbiAgICBzdWJzZXRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFycmF5KHouc3RyaW5nKCkpKSxcbiAgICBlbnVtczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIGVudGl0eTogRW50aXR5SnNvblNjaGVtYS5vbWl0KHsgaWQ6IHRydWUgfSlcbiAgICAuZXh0ZW5kKHtcbiAgICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIH0pXG4gICAgLnBhcnRpYWwoe1xuICAgICAgdGFibGU6IHRydWUsXG4gICAgICBwcm9wczogdHJ1ZSxcbiAgICAgIGluZGV4ZXM6IHRydWUsXG4gICAgICBzdWJzZXRzOiB0cnVlLFxuICAgICAgZW51bXM6IHRydWUsXG4gICAgfSksXG4gIGluaXRfdHlwZXM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGdlbmVyYXRlZDogei5vYmplY3Qoe30pLFxuICBnZW5lcmF0ZWRfc3NvOiB6Lm9iamVjdCh7fSksXG4gIGdlbmVyYXRlZF9odHRwOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBtb2RlbDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGRlZmF1bHRTZWFyY2hGaWVsZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlZmF1bHRPcmRlckJ5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBtb2RlbF90ZXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBicmlkZ2U6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHNlcnZpY2U6IHoub2JqZWN0KHtcbiAgICBuYW1lc1JlY29yZDogei5vYmplY3Qoe1xuICAgICAgZnM6IHouc3RyaW5nKCksXG4gICAgICBmc1BsdXJhbDogei5zdHJpbmcoKSxcbiAgICAgIGNhbWVsOiB6LnN0cmluZygpLFxuICAgICAgY2FtZWxQbHVyYWw6IHouc3RyaW5nKCksXG4gICAgICBjYXBpdGFsOiB6LnN0cmluZygpLFxuICAgICAgY2FwaXRhbFBsdXJhbDogei5zdHJpbmcoKSxcbiAgICAgIHVwcGVyOiB6LnN0cmluZygpLFxuICAgICAgY29uc3RhbnQ6IHouc3RyaW5nKCksXG4gICAgfSksXG4gICAgbW9kZWxUc1BhdGg6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2xpc3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBleHRyYTogei51bmtub3duKCksXG4gIH0pLFxuICB2aWV3X2xpc3RfY29sdW1uczogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGNvbHVtbnM6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBsYWJlbDogei5zdHJpbmcoKSxcbiAgICAgICAgdGM6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgICAgLmFycmF5KCksXG4gICAgY29sdW1uSW1wb3J0czogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfc2VhcmNoX2lucHV0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2Zvcm06IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfaWRfYWxsX3NlbGVjdDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19pZF9hc3luY19zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICB0ZXh0RmllbGQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2VudW1zX3NlbGVjdDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGVudW1JZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfZW51bXNfZHJvcGRvd246IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBlbnVtSWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2VudW1zX2J1dHRvbnNldDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICAgIGVudW1JZDogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIFRlbXBsYXRlT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRlbXBsYXRlT3B0aW9ucz47XG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZUtleSA9IHouZW51bShbXG4gIFwiZW50aXR5XCIsXG4gIFwiaW5pdF90eXBlc1wiLFxuICBcImdlbmVyYXRlZFwiLFxuICBcImdlbmVyYXRlZF9zc29cIixcbiAgXCJnZW5lcmF0ZWRfaHR0cFwiLFxuICBcIm1vZGVsXCIsXG4gIFwibW9kZWxfdGVzdFwiLFxuICBcImJyaWRnZVwiLFxuICBcInNlcnZpY2VcIixcbiAgXCJ2aWV3X2xpc3RcIixcbiAgXCJ2aWV3X2xpc3RfY29sdW1uc1wiLFxuICBcInZpZXdfc2VhcmNoX2lucHV0XCIsXG4gIFwidmlld19mb3JtXCIsXG4gIFwidmlld19pZF9hbGxfc2VsZWN0XCIsXG4gIFwidmlld19pZF9hc3luY19zZWxlY3RcIixcbiAgXCJ2aWV3X2VudW1zX3NlbGVjdFwiLFxuICBcInZpZXdfZW51bXNfZHJvcGRvd25cIixcbiAgXCJ2aWV3X2VudW1zX2J1dHRvbnNldFwiLFxuXSk7XG5leHBvcnQgdHlwZSBUZW1wbGF0ZUtleSA9IHouaW5mZXI8dHlwZW9mIFRlbXBsYXRlS2V5PjtcblxuZXhwb3J0IGNvbnN0IEdlbmVyYXRlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgb3ZlcndyaXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBHZW5lcmF0ZU9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBHZW5lcmF0ZU9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgUGF0aEFuZENvZGUgPSB6Lm9iamVjdCh7XG4gIHBhdGg6IHouc3RyaW5nKCksXG4gIGNvZGU6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFBhdGhBbmRDb2RlID0gei5pbmZlcjx0eXBlb2YgUGF0aEFuZENvZGU+O1xuXG5leHBvcnQgdHlwZSBGaXh0dXJlU2VhcmNoT3B0aW9ucyA9IHtcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc2VhcmNoVHlwZTogXCJlcXVhbHNcIiB8IFwibGlrZVwiO1xufTtcblxudHlwZSBDb2x1bW5WYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlIHwgbnVsbDtcbmV4cG9ydCB0eXBlIEZpeHR1cmVSZWNvcmQgPSB7XG4gIGZpeHR1cmVJZDogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xuICBjb2x1bW5zOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgcHJvcDogRW50aXR5UHJvcDtcbiAgICAgIHZhbHVlOiBDb2x1bW5WYWx1ZSB8IENvbHVtblZhbHVlW107XG4gICAgfTtcbiAgfTtcbiAgZmV0Y2hlZFJlY29yZHM6IHN0cmluZ1tdO1xuICBiZWxvbmdzUmVjb3Jkczogc3RyaW5nW107XG4gIHRhcmdldD86IEZpeHR1cmVSZWNvcmQ7IC8vIEltcG9ydCDrjIDsg4EgREIg66CI7L2U65OcKGlk6rCAIOqwmeydgClcbiAgdW5pcXVlPzogRml4dHVyZVJlY29yZDsgLy8gSW1wb3J0IOuMgOyDgSBEQiDroIjsvZTrk5wodW5pcXVlIGtleeqwgCDqsJnsnYApXG4gIG92ZXJyaWRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpeHR1cmVJbXBvcnRSZXN1bHQgPSB7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDb2x1bW5WYWx1ZTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTm9kZSA9IHtcbiAgZml4dHVyZUlkOiBzdHJpbmc7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIHJlbGF0ZWQ6IFNldDxzdHJpbmc+O1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0VtcHR5SW50ZXJmYWNlOiBzb25hbXUuZ2VuZXJhdGVkLnNzbyDsl5DshJwg7ZmV7J6l7J2EIOychO2VtCDspIDruYTrkJwg67mIIOyduO2EsO2OmOydtOyKpFxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVNjaGVtYUV4dGVuZCB7fVxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0VtcHR5SW50ZXJmYWNlOiBzb25hbXUuZ2VuZXJhdGVkLnNzbyDsl5DshJwg7ZmV7J6l7J2EIOychO2VtCDspIDruYTrkJwg67mIIOyduO2EsO2OmOydtOyKpFxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUZvcmVpZ25LZXlzIHt9XG5leHBvcnQgdHlwZSBNYW55VG9NYW55QmFzZVNjaGVtYTxGcm9tSWRLZXkgZXh0ZW5kcyBzdHJpbmcsIFRvSWRLZXkgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBpZDogbnVtYmVyO1xufSAmIHtcbiAgW0sgaW4gYCR7RnJvbUlkS2V5fV9pZGBdOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBgJHtUb0lkS2V5fV9pZGBdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVGYXN0aWZ5Q29uZmlnID0ge1xuICBjb250ZXh0UHJvdmlkZXI6IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxDb250ZXh0LCBcInJlcXVlc3RcIiB8IFwicmVwbHlcIiB8IFwiaGVhZGVyc1wiIHwgXCJjcmVhdGVTU0VcIiB8IFwibmFpdGVTdG9yZVwiPiAmXG4gICAgICBBdXRoQ29udGV4dCxcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICByZXBseTogRmFzdGlmeVJlcGx5LFxuICApID0+IENvbnRleHQgfCBQcm9taXNlPENvbnRleHQ+O1xuICBndWFyZEhhbmRsZXI6IChcbiAgICBndWFyZDogR3VhcmRLZXksXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICAgYXBpOiB7XG4gICAgICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICAgICAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgICAgIHJldHVyblR5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgIG1vZGVsTmFtZTogc3RyaW5nO1xuICAgICAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgICB9LFxuICApID0+IHZvaWQ7XG59O1xuIl0sIm5hbWVzIjpbInoiLCJ6QXJyYXlhYmxlIiwic2hhcGUiLCJ1bmlvbiIsImFycmF5IiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsInAiLCJ0eXBlIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyUHJvcCIsImlzQmlnSW50ZWdlclNpbmdsZVByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJQcm9wIiwiaXNTdHJpbmdTaW5nbGVQcm9wIiwiaXNTdHJpbmdBcnJheVByb3AiLCJpc1N0cmluZ1Byb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNFbnVtQXJyYXlQcm9wIiwiaXNFbnVtUHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtYmVyQXJyYXlQcm9wIiwiaXNOdW1iZXJQcm9wIiwiaXNOdW1lcmljU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1Byb3AiLCJpc0Jvb2xlYW5TaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuUHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0RhdGVBcnJheVByb3AiLCJpc0RhdGVQcm9wIiwiaXNVdWlkU2luZ2xlUHJvcCIsImlzVXVpZEFycmF5UHJvcCIsImlzVXVpZFByb3AiLCJpc0pzb25Qcm9wIiwiaXNWaXJ0dWFsUHJvcCIsImlzVmVjdG9yU2luZ2xlUHJvcCIsImlzVmVjdG9yQXJyYXlQcm9wIiwiaXNWZWN0b3JQcm9wIiwiaXNUc1ZlY3RvclByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImlzT25lVG9PbmVSZWxhdGlvblByb3AiLCJyZWxhdGlvblR5cGUiLCJpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCIsImlzSGFzTWFueVJlbGF0aW9uUHJvcCIsImlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCIsImlzQ3VzdG9tSm9pbkNsYXVzZSIsImN1c3RvbSIsIlNvbmFtdVF1ZXJ5TW9kZSIsImVudW0iLCJpc0tuZXhFcnJvciIsImUiLCJjb2RlIiwic3FsTWVzc2FnZSIsInNxbFN0YXRlIiwiQXBpUGFyYW1UeXBlIiwiaXNPYmplY3QiLCJ2IiwidCIsImlzVW5pb24iLCJpc0ludGVyc2VjdGlvbiIsImlzU3RyaW5nTGl0ZXJhbCIsImlzTnVtZXJpY0xpdGVyYWwiLCJpc0FycmF5IiwiaXNSZWYiLCJpc0luZGV4ZWRBY2Nlc3MiLCJpc1R1cGxlVHlwZSIsImlzUGljayIsImlkIiwiaXNPbWl0IiwiaXNQYXJ0aWFsIiwiaXNQcm9taXNlIiwiaXNDb250ZXh0IiwiaXNSZWZLbmV4IiwiaXNUeXBlUGFyYW0iLCJSZW5kZXJpbmdOb2RlIiwiYW55IiwiR2VuZXJhdGVkQ29sdW1uU2NoZW1hIiwib2JqZWN0IiwiZXhwcmVzc2lvbiIsInN0cmluZyIsIkJhc2VQcm9wRmllbGRzIiwibmFtZSIsImRlc2MiLCJvcHRpb25hbCIsIm51bGxhYmxlIiwiYm9vbGVhbiIsInRvRmlsdGVyIiwiZGVmYXVsdCIsImRiRGVmYXVsdCIsIm51bWJlciIsImdlbmVyYXRlZCIsIkJhc2VQcm9wRmllbGRzV2l0aG91dEFkZGl0aW9uYWwiLCJsaXRlcmFsIiwic3RyaWN0IiwiUHJlY2lzaW9uU2NhbGVGaWVsZHMiLCJwcmVjaXNpb24iLCJzY2FsZSIsIlN0cmluZ1Byb3BTY2hlbWEiLCJsZW5ndGgiLCJTdHJpbmdBcnJheVByb3BTY2hlbWEiLCJFbnVtUHJvcFNjaGVtYSIsIkVudW1BcnJheVByb3BTY2hlbWEiLCJOdW1iZXJQcm9wU2NoZW1hIiwibnVtYmVyVHlwZSIsIk51bWJlckFycmF5UHJvcFNjaGVtYSIsIk51bWVyaWNQcm9wU2NoZW1hIiwiTnVtZXJpY0FycmF5UHJvcFNjaGVtYSIsIkpzb25Qcm9wU2NoZW1hIiwiVmlydHVhbFByb3BTY2hlbWEiLCJWZWN0b3JQcm9wU2NoZW1hIiwiZGltZW5zaW9ucyIsIlZlY3RvckFycmF5UHJvcFNjaGVtYSIsIkJhc2VSZWxhdGlvbkZpZWxkcyIsIndpdGgiLCJSZWxhdGlvbk9uU2NoZW1hIiwiQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hIiwiY3VzdG9tSm9pbkNsYXVzZSIsInVzZUNvbnN0cmFpbnQiLCJvblVwZGF0ZSIsIm9uRGVsZXRlIiwiSGFzTWFueVJlbGF0aW9uUHJvcFNjaGVtYSIsImpvaW5Db2x1bW4iLCJmcm9tQ29sdW1uIiwiTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSIsImpvaW5UYWJsZSIsIk9uZVRvT25lUmVsYXRpb25Qcm9wU2NoZW1hIiwiaGFzSm9pbkNvbHVtbiIsIlJlbGF0aW9uVHlwZXMiLCJSZWxhdGlvblByb3BTY2hlbWEiLCJkaXNjcmltaW5hdGVkVW5pb24iLCJlcnJvciIsImlzcyIsIm1hcCIsImpvaW4iLCJpbnB1dCIsIk5vcm1hbFByb3BUeXBlcyIsIlZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMiLCJOb3JtYWxQcm9wU2NoZW1hIiwic3VwZXJSZWZpbmUiLCJkYXRhIiwiY3R4IiwidW5kZWZpbmVkIiwiYWRkSXNzdWUiLCJtZXNzYWdlIiwicGF0aCIsImluY2x1ZGVzIiwiZmF0YWwiLCJBbGxQcm9wVHlwZXMiLCJFbnRpdHlQcm9wU2NoZW1hIiwiRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEiLCJudWxsc0ZpcnN0Iiwic29ydE9yZGVyIiwidmVjdG9yT3BzIiwiRW50aXR5SW5kZXhTY2hlbWEiLCJjb2x1bW5zIiwibWluIiwibWF4IiwidXNpbmciLCJudWxsc05vdERpc3RpbmN0IiwibSIsImVmQ29uc3RydWN0aW9uIiwibGlzdHMiLCJFbnRpdHlKc29uU2NoZW1hIiwiZGVzY3JpYmUiLCJ0aXRsZSIsInRhYmxlIiwicGFyZW50SWQiLCJwcm9wcyIsImluZGV4ZXMiLCJzdWJzZXRzIiwicmVjb3JkIiwiZW51bXMiLCJUZW1wbGF0ZU9wdGlvbnMiLCJlbnRpdHkiLCJvbWl0IiwiZXh0ZW5kIiwiZW50aXR5SWQiLCJwYXJ0aWFsIiwiaW5pdF90eXBlcyIsImdlbmVyYXRlZF9zc28iLCJnZW5lcmF0ZWRfaHR0cCIsIm1vZGVsIiwiZGVmYXVsdFNlYXJjaEZpZWxkIiwiZGVmYXVsdE9yZGVyQnkiLCJtb2RlbF90ZXN0IiwiYnJpZGdlIiwic2VydmljZSIsIm5hbWVzUmVjb3JkIiwiZnMiLCJmc1BsdXJhbCIsImNhbWVsIiwiY2FtZWxQbHVyYWwiLCJjYXBpdGFsIiwiY2FwaXRhbFBsdXJhbCIsInVwcGVyIiwiY29uc3RhbnQiLCJtb2RlbFRzUGF0aCIsInZpZXdfbGlzdCIsImV4dHJhIiwidW5rbm93biIsInZpZXdfbGlzdF9jb2x1bW5zIiwibGFiZWwiLCJ0YyIsImNvbHVtbkltcG9ydHMiLCJ2aWV3X3NlYXJjaF9pbnB1dCIsInZpZXdfZm9ybSIsInZpZXdfaWRfYWxsX3NlbGVjdCIsInZpZXdfaWRfYXN5bmNfc2VsZWN0IiwidGV4dEZpZWxkIiwidmlld19lbnVtc19zZWxlY3QiLCJlbnVtSWQiLCJ2aWV3X2VudW1zX2Ryb3Bkb3duIiwidmlld19lbnVtc19idXR0b25zZXQiLCJUZW1wbGF0ZUtleSIsIkdlbmVyYXRlT3B0aW9u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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function centerText(text) {
|
|
2
|
-
const margin = (process.stdout.columns - text.length) / 2;
|
|
2
|
+
const margin = Math.max(0, Math.floor((process.stdout.columns - text.length) / 2));
|
|
3
3
|
return " ".repeat(margin) + text + " ".repeat(margin);
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25zb2xlLXV0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNlbnRlclRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWFyZ2luID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAtIHRleHQubGVuZ3RoKSAvIDIpKTtcbiAgcmV0dXJuIFwiIFwiLnJlcGVhdChtYXJnaW4pICsgdGV4dCArIFwiIFwiLnJlcGVhdChtYXJnaW4pO1xufVxuIl0sIm5hbWVzIjpbImNlbnRlclRleHQiLCJ0ZXh0IiwibWFyZ2luIiwiTWF0aCIsIm1heCIsImZsb29yIiwicHJvY2VzcyIsInN0ZG91dCIsImNvbHVtbnMiLCJsZW5ndGgiLCJyZXBlYXQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0EsV0FBV0MsSUFBWTtJQUNyQyxNQUFNQyxTQUFTQyxLQUFLQyxHQUFHLENBQUMsR0FBR0QsS0FBS0UsS0FBSyxDQUFDLEFBQUNDLENBQUFBLFFBQVFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUCxLQUFLUSxNQUFNLEFBQUQsSUFBSztJQUMvRSxPQUFPLElBQUlDLE1BQU0sQ0FBQ1IsVUFBVUQsT0FBTyxJQUFJUyxNQUFNLENBQUNSO0FBQ2hEIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.11",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"vitest": "^4.0.10",
|
|
78
78
|
"zod": "^4.1.12",
|
|
79
79
|
"@sonamu-kit/hmr-runner": "^0.1.1",
|
|
80
|
-
"@sonamu-kit/
|
|
81
|
-
"@sonamu-kit/
|
|
80
|
+
"@sonamu-kit/hmr-hook": "^0.4.1",
|
|
81
|
+
"@sonamu-kit/ts-loader": "^2.1.3"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@biomejs/biome": "^2.3.7",
|
|
@@ -94,12 +94,12 @@
|
|
|
94
94
|
"typescript": "^5.9.3"
|
|
95
95
|
},
|
|
96
96
|
"peerDependencies": {
|
|
97
|
-
"@ai-sdk/openai": "
|
|
98
|
-
"@ai-sdk/provider": "
|
|
99
|
-
"@ai-sdk/provider-utils": "
|
|
97
|
+
"@ai-sdk/openai": "3.0.0-beta.75",
|
|
98
|
+
"@ai-sdk/provider": "3.0.0-beta.22",
|
|
99
|
+
"@ai-sdk/provider-utils": "4.0.0-beta.40",
|
|
100
100
|
"@swc/cli": "^0.7.8",
|
|
101
101
|
"@swc/core": "^1.13.5",
|
|
102
|
-
"ai": "
|
|
102
|
+
"ai": "6.0.0-beta.138",
|
|
103
103
|
"fastify": "^4.23.2",
|
|
104
104
|
"knex": "^3.1.0",
|
|
105
105
|
"typescript": "^5.9.3",
|
package/src/database/puri.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
Expand,
|
|
13
13
|
ExtractColumnType,
|
|
14
14
|
FulltextColumns,
|
|
15
|
+
HighlightOptions,
|
|
15
16
|
InsertData,
|
|
16
17
|
InsertResult,
|
|
17
18
|
LeftJoinedMarker,
|
|
@@ -24,6 +25,8 @@ import type {
|
|
|
24
25
|
SelectObject,
|
|
25
26
|
SingleTableValue,
|
|
26
27
|
SqlExpression,
|
|
28
|
+
TsQueryConfig,
|
|
29
|
+
TsQueryOptions,
|
|
27
30
|
WhereCondition,
|
|
28
31
|
WhereOperator,
|
|
29
32
|
} from "./puri.types";
|
|
@@ -134,6 +137,57 @@ export class Puri<TSchema, TTables extends Record<string, any>, TResult> {
|
|
|
134
137
|
return { _type: "sql_expression", _return: "date", _sql: sql };
|
|
135
138
|
}
|
|
136
139
|
|
|
140
|
+
/**
|
|
141
|
+
* FTS 검색어 하이라이팅
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* .select({
|
|
145
|
+
* title: Puri.highlight("posts.title", search),
|
|
146
|
+
* content: Puri.highlight("posts.content", search, {
|
|
147
|
+
* startSel: "<mark>",
|
|
148
|
+
* stopSel: "</mark>",
|
|
149
|
+
* maxFragments: 3,
|
|
150
|
+
* }),
|
|
151
|
+
* })
|
|
152
|
+
*/
|
|
153
|
+
static highlight(
|
|
154
|
+
column: string,
|
|
155
|
+
query: string,
|
|
156
|
+
options?: HighlightOptions,
|
|
157
|
+
): SqlExpression<"string"> {
|
|
158
|
+
const {
|
|
159
|
+
parser = "websearch_to_tsquery",
|
|
160
|
+
config = "simple",
|
|
161
|
+
maxWords,
|
|
162
|
+
minWords,
|
|
163
|
+
shortWord,
|
|
164
|
+
highlightAll,
|
|
165
|
+
maxFragments,
|
|
166
|
+
startSel,
|
|
167
|
+
stopSel,
|
|
168
|
+
fragmentDelimiter,
|
|
169
|
+
} = options ?? {};
|
|
170
|
+
|
|
171
|
+
const hlOptionParts: string[] = [];
|
|
172
|
+
|
|
173
|
+
if (maxWords !== undefined) hlOptionParts.push(`MaxWords=${maxWords}`);
|
|
174
|
+
if (minWords !== undefined) hlOptionParts.push(`MinWords=${minWords}`);
|
|
175
|
+
if (shortWord !== undefined) hlOptionParts.push(`ShortWord=${shortWord}`);
|
|
176
|
+
if (highlightAll !== undefined) hlOptionParts.push(`HighlightAll=${highlightAll}`);
|
|
177
|
+
if (maxFragments !== undefined) hlOptionParts.push(`MaxFragments=${maxFragments}`);
|
|
178
|
+
if (startSel !== undefined) hlOptionParts.push(`StartSel="${startSel}"`);
|
|
179
|
+
if (stopSel !== undefined) hlOptionParts.push(`StopSel="${stopSel}"`);
|
|
180
|
+
if (fragmentDelimiter !== undefined)
|
|
181
|
+
hlOptionParts.push(`FragmentDelimiter="${fragmentDelimiter}"`);
|
|
182
|
+
|
|
183
|
+
const hlOptions = hlOptionParts.length > 0 ? `, '${hlOptionParts.join(", ")}'` : "";
|
|
184
|
+
|
|
185
|
+
// TODO: rawBinding 메서드 만들어서 XSS 방지
|
|
186
|
+
return Puri.rawString(
|
|
187
|
+
`ts_headline('${config}', ${column}, ${parser}('${config}', '${query}')${hlOptions})`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
137
191
|
// SELECT (overwrite)
|
|
138
192
|
select<TSelect extends SelectObject<TTables>>(
|
|
139
193
|
selectObj: TSelect,
|
|
@@ -472,6 +526,32 @@ export class Puri<TSchema, TTables extends Record<string, any>, TResult> {
|
|
|
472
526
|
return this;
|
|
473
527
|
}
|
|
474
528
|
|
|
529
|
+
// WHERE FULLTEXT
|
|
530
|
+
whereSearch<TColumn extends AvailableColumns<TTables> | SqlExpression<"string">>(
|
|
531
|
+
column: TColumn,
|
|
532
|
+
value: string,
|
|
533
|
+
options?: TsQueryOptions | TsQueryConfig,
|
|
534
|
+
): this {
|
|
535
|
+
const opts =
|
|
536
|
+
typeof options === "string" ? ({ config: options } as TsQueryOptions) : (options ?? {});
|
|
537
|
+
|
|
538
|
+
const parser = opts.parser ?? "websearch_to_tsquery";
|
|
539
|
+
const config = opts.config ?? "simple";
|
|
540
|
+
const columnExpr =
|
|
541
|
+
typeof column === "object" && column._type === "sql_expression"
|
|
542
|
+
? column._sql
|
|
543
|
+
: String(column);
|
|
544
|
+
|
|
545
|
+
this.knexQuery.whereRaw(`${columnExpr} @@ ${parser}(?, ?)`, [config, value]);
|
|
546
|
+
return this;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// WHERE RAW
|
|
550
|
+
whereRaw(sql: string, bindings?: readonly unknown[]): this {
|
|
551
|
+
this.knexQuery.whereRaw(sql, bindings);
|
|
552
|
+
return this;
|
|
553
|
+
}
|
|
554
|
+
|
|
475
555
|
// WHERE 괄호 그룹핑
|
|
476
556
|
whereGroup(callback: (g: WhereGroup<TTables>) => void): this {
|
|
477
557
|
this.knexQuery.where((builder) => {
|
|
@@ -143,8 +143,8 @@ type JoinPath<Prefix extends string, Key extends string> = Prefix extends ""
|
|
|
143
143
|
// Schema를 읽어서 FK의 nullability에 따라 join된 객체의 타입을 추론해주는 기능이 있습니다.
|
|
144
144
|
// 이게 무슨 소리냐? FK가 nullable인데 leftJoin되었다면, 해당 객체는 nullable 해야 함을 타입 추론으로 반영해준다는 것입니다.
|
|
145
145
|
// 반면 FK가 non-nullable이거나 그냥 join으로 이어졌다면 해당 객체는 non-nullable할 겁니다.
|
|
146
|
-
// 물론 객체 내부의 nullability는 또 별개로 추론됩니다.
|
|
147
|
-
//
|
|
146
|
+
// 물론 객체 내부의 nullability는 또 별개로 추론됩니다.
|
|
147
|
+
//
|
|
148
148
|
// 아래에도 ParseSelectObjectWithPath를 비롯해 ExtractColumnType, ExtractColumnTypeRaw 등의 타입이 있습니다.
|
|
149
149
|
// 이들의 역할은 다음과 같습니다:
|
|
150
150
|
// - Parse*: 객체 레벨에서 중첩 구조를 순회하며 객체에 | null을 붙일지 결정합니다.
|
|
@@ -368,3 +368,34 @@ export type SelectAllResult<TTables extends Record<string, any>> = UnionToInters
|
|
|
368
368
|
: never;
|
|
369
369
|
}[keyof TTables]
|
|
370
370
|
>;
|
|
371
|
+
|
|
372
|
+
// FTS 타입
|
|
373
|
+
type TsQueryParser = "to_tsquery" | "plainto_tsquery" | "phraseto_tsquery" | "websearch_to_tsquery";
|
|
374
|
+
export type TsQueryConfig = "simple" | "english";
|
|
375
|
+
export type TsQueryOptions = {
|
|
376
|
+
parser?: TsQueryParser;
|
|
377
|
+
config?: TsQueryConfig;
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
export type HighlightOptions = {
|
|
381
|
+
/** 쿼리 변환 함수 (기본값: "websearch_to_tsquery") */
|
|
382
|
+
parser?: TsQueryParser;
|
|
383
|
+
/** 텍스트 검색 설정 (기본값: "simple") */
|
|
384
|
+
config?: TsQueryConfig;
|
|
385
|
+
/** 최대 단어 수 (기본값: 35) */
|
|
386
|
+
maxWords?: number;
|
|
387
|
+
/** 최소 단어 수 (기본값: 15) */
|
|
388
|
+
minWords?: number;
|
|
389
|
+
/** 헤드라인 시작/끝에서 제거할 짧은 단어 길이 (기본값: 3) */
|
|
390
|
+
shortWord?: number;
|
|
391
|
+
/** true면 전체 문서를 헤드라인으로 사용 (기본값: false) */
|
|
392
|
+
highlightAll?: boolean;
|
|
393
|
+
/** 표시할 최대 텍스트 조각 수 (기본값: 0, 조각 미사용) */
|
|
394
|
+
maxFragments?: number;
|
|
395
|
+
/** 쿼리 단어 시작 구분자 (기본값: "<b>") */
|
|
396
|
+
startSel?: string;
|
|
397
|
+
/** 쿼리 단어 끝 구분자 (기본값: "</b>") */
|
|
398
|
+
stopSel?: string;
|
|
399
|
+
/** 조각 구분자 (기본값: " ... ") */
|
|
400
|
+
fragmentDelimiter?: string;
|
|
401
|
+
};
|