@hailin-zheng/editor-core 1.0.20 → 1.0.24
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/README.md +1613 -0
- package/lib/doc-ruler.d.ts +0 -1
- package/lib/framework/common-util.d.ts +0 -1
- package/lib/framework/document-change.d.ts +0 -1
- package/lib/framework/document-combine.d.ts +0 -1
- package/lib/framework/document-comment.d.ts +0 -1
- package/lib/framework/document-context.d.ts +0 -1
- package/lib/framework/document-eval-func.d.ts +0 -1
- package/lib/framework/document-event.d.ts +0 -1
- package/lib/framework/document-history.d.ts +0 -1
- package/lib/framework/document-images-loader.d.ts +0 -1
- package/lib/framework/document-input-cursor.d.ts +0 -1
- package/lib/framework/document-paint.d.ts +0 -1
- package/lib/framework/document-print-offscreen.d.ts +0 -1
- package/lib/framework/document-print.d.ts +0 -1
- package/lib/framework/document-segmenter.d.ts +0 -1
- package/lib/framework/document-selection.d.ts +0 -1
- package/lib/framework/document-template.d.ts +0 -1
- package/lib/framework/document-textline-mode.d.ts +0 -1
- package/lib/framework/element-define.d.ts +0 -1
- package/lib/framework/element-event-define.d.ts +0 -1
- package/lib/framework/element-measure.d.ts +0 -1
- package/lib/framework/element-paint.d.ts +0 -1
- package/lib/framework/element-props.d.ts +1 -2
- package/lib/framework/element-reader.d.ts +0 -1
- package/lib/framework/element-render-cut.d.ts +0 -1
- package/lib/framework/element-serialize.d.ts +0 -1
- package/lib/framework/element-util.d.ts +0 -1
- package/lib/framework/impl/checkbox/checkbox-impl.d.ts +0 -1
- package/lib/framework/impl/comments/comment-content-impl.d.ts +0 -1
- package/lib/framework/impl/comments/comment-element-impl.d.ts +0 -1
- package/lib/framework/impl/comments/comments-container-impl.d.ts +0 -1
- package/lib/framework/impl/comments/comments-util.d.ts +0 -1
- package/lib/framework/impl/comments/validate-msg-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-decorate-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-barcode.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-base-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-check-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-date-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-group-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-image-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-list-impl.d.ts +0 -1
- package/lib/framework/impl/data-element/data-element-text-impl.d.ts +0 -1
- package/lib/framework/impl/decorate/fill-null-space-imple.d.ts +0 -1
- package/lib/framework/impl/document/doc-body-impl.d.ts +0 -1
- package/lib/framework/impl/document/doc-body-part-impl.d.ts +0 -1
- package/lib/framework/impl/document/doc-container-impl.d.ts +0 -1
- package/lib/framework/impl/document/doc-footer-impl.d.ts +0 -1
- package/lib/framework/impl/document/doc-header-impl.d.ts +0 -1
- package/lib/framework/impl/document/doc-impl.d.ts +0 -1
- package/lib/framework/impl/index.d.ts +0 -1
- package/lib/framework/impl/media-formula/menstrual-history.d.ts +0 -1
- package/lib/framework/impl/paragraph/p-impl.d.ts +0 -1
- package/lib/framework/impl/picture/image-impl.d.ts +0 -1
- package/lib/framework/impl/radio/radio-impl.d.ts +0 -1
- package/lib/framework/impl/symbol/br-symbol-impl.d.ts +0 -1
- package/lib/framework/impl/symbol/p-symbol-impl.d.ts +0 -1
- package/lib/framework/impl/table/table-cell-impl.d.ts +0 -1
- package/lib/framework/impl/table/table-impl.d.ts +0 -1
- package/lib/framework/impl/table/table-row-impl.d.ts +0 -1
- package/lib/framework/impl/table/table-split-cell-patch.d.ts +0 -1
- package/lib/framework/impl/table/table-split-cell.d.ts +0 -1
- package/lib/framework/impl/table/table-util.d.ts +0 -1
- package/lib/framework/impl/text/text-impl.d.ts +0 -1
- package/lib/framework/impl/text/track-run-impl.d.ts +0 -1
- package/lib/framework/notify.d.ts +0 -1
- package/lib/framework/range-util.d.ts +0 -1
- package/lib/framework/render-context.d.ts +0 -1
- package/lib/framework/render-define.d.ts +0 -1
- package/lib/framework/selection-overlays.d.ts +0 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -0
- package/lib/texteditor.d.ts +1 -2
- package/lib/util/subject.d.ts +0 -1
- package/lib/util/table-bind.d.ts +0 -1
- package/package.json +24 -31
- package/lib/doc-ruler.d.ts.map +0 -1
- package/lib/framework/common-util.d.ts.map +0 -1
- package/lib/framework/document-change.d.ts.map +0 -1
- package/lib/framework/document-combine.d.ts.map +0 -1
- package/lib/framework/document-comment.d.ts.map +0 -1
- package/lib/framework/document-context.d.ts.map +0 -1
- package/lib/framework/document-eval-func.d.ts.map +0 -1
- package/lib/framework/document-event.d.ts.map +0 -1
- package/lib/framework/document-history.d.ts.map +0 -1
- package/lib/framework/document-images-loader.d.ts.map +0 -1
- package/lib/framework/document-input-cursor.d.ts.map +0 -1
- package/lib/framework/document-paint.d.ts.map +0 -1
- package/lib/framework/document-print-offscreen.d.ts.map +0 -1
- package/lib/framework/document-print.d.ts.map +0 -1
- package/lib/framework/document-segmenter.d.ts.map +0 -1
- package/lib/framework/document-selection.d.ts.map +0 -1
- package/lib/framework/document-template.d.ts.map +0 -1
- package/lib/framework/document-textline-mode.d.ts.map +0 -1
- package/lib/framework/element-define.d.ts.map +0 -1
- package/lib/framework/element-event-define.d.ts.map +0 -1
- package/lib/framework/element-measure.d.ts.map +0 -1
- package/lib/framework/element-paint.d.ts.map +0 -1
- package/lib/framework/element-props.d.ts.map +0 -1
- package/lib/framework/element-reader.d.ts.map +0 -1
- package/lib/framework/element-render-cut.d.ts.map +0 -1
- package/lib/framework/element-serialize.d.ts.map +0 -1
- package/lib/framework/element-util.d.ts.map +0 -1
- package/lib/framework/impl/checkbox/checkbox-impl.d.ts.map +0 -1
- package/lib/framework/impl/comments/comment-content-impl.d.ts.map +0 -1
- package/lib/framework/impl/comments/comment-element-impl.d.ts.map +0 -1
- package/lib/framework/impl/comments/comments-container-impl.d.ts.map +0 -1
- package/lib/framework/impl/comments/comments-util.d.ts.map +0 -1
- package/lib/framework/impl/comments/validate-msg-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-decorate-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-barcode.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-base-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-check-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-date-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-group-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-image-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-list-impl.d.ts.map +0 -1
- package/lib/framework/impl/data-element/data-element-text-impl.d.ts.map +0 -1
- package/lib/framework/impl/decorate/fill-null-space-imple.d.ts.map +0 -1
- package/lib/framework/impl/document/doc-body-impl.d.ts.map +0 -1
- package/lib/framework/impl/document/doc-body-part-impl.d.ts.map +0 -1
- package/lib/framework/impl/document/doc-container-impl.d.ts.map +0 -1
- package/lib/framework/impl/document/doc-footer-impl.d.ts.map +0 -1
- package/lib/framework/impl/document/doc-header-impl.d.ts.map +0 -1
- package/lib/framework/impl/document/doc-impl.d.ts.map +0 -1
- package/lib/framework/impl/index.d.ts.map +0 -1
- package/lib/framework/impl/media-formula/menstrual-history.d.ts.map +0 -1
- package/lib/framework/impl/paragraph/p-impl.d.ts.map +0 -1
- package/lib/framework/impl/picture/image-impl.d.ts.map +0 -1
- package/lib/framework/impl/radio/radio-impl.d.ts.map +0 -1
- package/lib/framework/impl/symbol/br-symbol-impl.d.ts.map +0 -1
- package/lib/framework/impl/symbol/p-symbol-impl.d.ts.map +0 -1
- package/lib/framework/impl/table/table-cell-impl.d.ts.map +0 -1
- package/lib/framework/impl/table/table-impl.d.ts.map +0 -1
- package/lib/framework/impl/table/table-row-impl.d.ts.map +0 -1
- package/lib/framework/impl/table/table-split-cell-patch.d.ts.map +0 -1
- package/lib/framework/impl/table/table-split-cell.d.ts.map +0 -1
- package/lib/framework/impl/table/table-util.d.ts.map +0 -1
- package/lib/framework/impl/text/text-impl.d.ts.map +0 -1
- package/lib/framework/impl/text/track-run-impl.d.ts.map +0 -1
- package/lib/framework/notify.d.ts.map +0 -1
- package/lib/framework/range-util.d.ts.map +0 -1
- package/lib/framework/render-context.d.ts.map +0 -1
- package/lib/framework/render-define.d.ts.map +0 -1
- package/lib/framework/selection-overlays.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/texteditor.d.ts.map +0 -1
- package/lib/util/subject.d.ts.map +0 -1
- package/lib/util/table-bind.d.ts.map +0 -1
package/lib/index.js
CHANGED
@@ -15669,3 +15669,4 @@ class DocumentPrintOffscreen {
|
|
15669
15669
|
}
|
15670
15670
|
|
15671
15671
|
export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CanvasTextEditor, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommentsUtil, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, DataDecorateArrowRenderObject, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocMode, DocRule, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHistory, DocumentImagesLoader, DocumentInput, DocumentPaint, DocumentPrintOffscreen, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementMeasure, ElementPaint, ElementReader, ElementRenderCut, ElementSerialize, ElementUtil, EventMap, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, IsInSideDataElement, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag, MouseElementEvent, MousedownElementEvent, MuiltBlockLineRenderObject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphProps, ParagraphRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContenxt, RenderObject, RenderObjectType, ResizeLeafRenderObject, RunElementFactory, SelectionOverlays, SelectionRange, SelectionState, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, createPrintTemplate, documentPrint, exportCanvasToPDF, fontMapFunc, getFocusTextSegment, isDate, objectToString, printNodes, reactiveMap, runTextLineRender, setNotifyChangedCallback, targetMaps, textLineRenderMode, toRawType, toTypeString, validateDataEle, validateDataEleRenderObj, validateInlineInputRenderObj, watchChanged };
|
15672
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1ldmVudC1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL25vdGlmeS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmVuZGVyLWRlZmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtcHJvcHMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZGVjb3JhdGUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50cy11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtc2VsZWN0aW9uLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RleHQvdGV4dC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9wYXJhZ3JhcGgvcC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXNwbGl0LWNlbGwtcGF0Y2gudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1zcGxpdC1jZWxsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3JhbmdlLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtcGFpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3JlbmRlci1jb250ZXh0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1wcmludC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvY29tbW9uLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXNlcmlhbGl6ZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZG9jLXJ1bGVyLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC10ZXh0bGluZS1tb2RlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RlY29yYXRlL2ZpbGwtbnVsbC1zcGFjZS1pbXBsZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1tZWFzdXJlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXJlbmRlci1jdXQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3NlbGVjdGlvbi1vdmVybGF5cy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcGFpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY2hlY2tib3gvY2hlY2tib3gtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWNoZWNrLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1kYXRlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1pbWFnZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtbGlzdC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL21lZGlhLWZvcm11bGEvbWVuc3RydWFsLWhpc3RvcnkudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvcGljdHVyZS9pbWFnZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3JhZGlvL3JhZGlvLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvc3ltYm9sL2JyLXN5bWJvbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZ3JvdXAtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXJjb2RlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXJlYWRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtZXZlbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWlucHV0LWN1cnNvci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy92YWxpZGF0ZS1tc2ctaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY2hhbmdlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC10ZW1wbGF0ZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtZXZhbC1mdW5jLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1pbWFnZXMtbG9hZGVyLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1jb250ZXh0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1jb21tZW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1oaXN0b3J5LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1zZWdtZW50ZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvdGV4dGVkaXRvci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29tYmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQtb2Zmc2NyZWVuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBSZWN0IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBUcmFja1J1blR5cGVFbnVtIH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5cbmV4cG9ydCB0eXBlIEV2ZW50U3RhZ2UgPSAnQWxsJyB8ICdDYXB0dXJlJyB8ICdCdWJibGluZyc7XG5leHBvcnQgdHlwZSBFdmVudFR5cGVzID0gJ0VsZW1lbnRNb3VzZWRvd24nIHwgJ0VsZW1lbnRNb3VzZW1vdmUnIHwgJ0VsZW1lbnRDbGljaycgfCAnRWxlbWVudERibENsaWNrJyB8ICdFbGVtZW50TW91c2VFbnRlcidcbiAgICB8ICdFbGVtZW50TW91c2VMZWF2ZScgfCAnQmFja3NwYWNlS2V5JyB8ICdEZWxldGVLZXknIHwgJ0VsZW1lbnRTaG93bicgfCAnRWxlbWVudENvbnRleHRNZW51JyB8ICdHb3RDdXJzb3InIHwgJ0xvc3RDdXJzb3InIHwgJ0VsZW1lbnRLZXlEb3duJyB8ICdFbGVtZW50RHJvcCcgfFxuICAgICdFbGVtZW50VGFiS2V5JyB8ICdHZXRUcmFja1RpcHMnO1xuXG5leHBvcnQgdHlwZSBIaXRSZWdpb24gPSAnaGVhZGVyJyB8ICdib2R5JyB8ICdmb290ZXInIHwgJ3Jldmlldyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGl0RXZlbnRJbmZvIHtcbiAgICByZWxhdGl2ZVJlY3Q6IFJlY3QsXG4gICAgYWJzb2x1dGVSZWN0OiBSZWN0LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCxcbiAgICBlbGVtZW50OiBMZWFmRWxlbWVudCxcbiAgICBzaGFkb3dSZW5kZXJJbmRleDogbnVtYmVyLFxuICAgIGhpdERvY0luZGV4OiBudW1iZXIsXG4gICAgc3RhcnRSZWdpb24/OiBIaXRSZWdpb25cbn1cblxuLyoqXG4gKiDlhYPntKDkuovku7ZcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRFdmVudCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGN0eDogRWRpdG9yQ29udGV4dCkgeyB9XG4gICAgLyoqXG4gICAgICog5LqL5Lu25rqQ5aS05a+56LGhXG4gICAgICovXG4gICAgc291cmNlITogRWxlbWVudDtcbiAgICBzb3VyY2VPZmZzZXQhOiBudW1iZXI7XG4gICAgc291cmNlUmVuZGVyITogUmVuZGVyT2JqZWN0O1xuICAgIC8qKlxuICAgICAqIOW9k+WJjeaJgOWcqOeahOWvueixoVxuICAgICAqL1xuICAgIGN1cnJlbnRFbGVtZW50ITogRWxlbWVudDtcbiAgICBjdXJyZW50UmVuZGVyT2JqZWN0WCE6IG51bWJlcjtcbiAgICBjdXJyZW50UmVuZGVyT2JqZWN0WSE6IG51bWJlcjtcbiAgICAvL+aYr+WQpuWPlua2iOWQkeS4iuWGkuazoVxuICAgIGlzQ2FuY2VsITogYm9vbGVhbjtcbiAgICBnbG9iYWxYITogbnVtYmVyO1xuICAgIGdsb2JhbFkhOiBudW1iZXI7XG4gICAgcGFnZVghOiBudW1iZXI7XG4gICAgcGFnZVkhOiBudW1iZXI7XG4gICAgc2hpZnQhOiBib29sZWFuO1xuICAgIGN0cmwhOiBib29sZWFuO1xuICAgIGJ1dHRvbnMhOiBudW1iZXI7XG4gICAgZ2V0IHNlbGVjdGlvblN0YXRlKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUxpc3RlbmVyIHtcbiAgICBbbGlzdGVuZXI6IHN0cmluZ106IDxUIGV4dGVuZHMgRXZlbnQ+KGV2dDogVCkgPT4gdm9pZDtcbn1cbmV4cG9ydCBjbGFzcyBDb250ZW50TWVudUl0ZW0ge1xuICAgIGljb24hOiBzdHJpbmc7XG4gICAgY2FwdGlvbiE6IHN0cmluZztcbiAgICBldmVudE9iaiE6IE1lbnVMaXN0ZW5lcjtcbiAgICBzdWJJdGVtcz86IEFycmF5PENvbnRlbnRNZW51SXRlbT4gPSBbXTtcbn1cbi8qKlxuICog6byg5qCH5pON5L2c55qE5LqL5Lu2XG4gKi9cbmV4cG9ydCBjbGFzcyBNb3VzZUVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7IH1cblxuZXhwb3J0IGNsYXNzIE1vdXNlZG93bkVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7IH1cbmV4cG9ydCBjbGFzcyBLZXlib3JhZEVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAga2V5ITogc3RyaW5nO1xuICAgIHNvdXJjZUV2ZW50ITogS2V5Ym9hcmRFdmVudDtcbn1cbmV4cG9ydCBjbGFzcyBHb3RDdXJzb3JFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7IH1cbmV4cG9ydCBjbGFzcyBMb3N0Q3Vyc29yRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgaW50ZXJmYWNlIElUcmFja1RpcHMge1xuICAgIHRyYWNrUnVuVHlwZTogVHJhY2tSdW5UeXBlRW51bTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbn1cbmV4cG9ydCBjbGFzcyBHZXRUcmFja1RpcHNFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgdHJhY2tUaXBzITogSVRyYWNrVGlwcztcbn1cbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgbWVudXM6IEFycmF5PENvbnRlbnRNZW51SXRlbT4gPSBbXTtcbn1cbmV4cG9ydCBjbGFzcyBEcm9wRWxlbWVudEV2ZW50IGV4dGVuZHMgRWxlbWVudEV2ZW50IHtcbiAgICBkcmFnRWxlbWVudCE6IEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQcm9wczxUIGV4dGVuZHMgRWxlbWVudEV2ZW50ID0gRWxlbWVudEV2ZW50PiB7IGlkOiBzdHJpbmcsIGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZTogYm9vbGVhbiB9XG5leHBvcnQgY2xhc3MgRXZlbnRNYXAge1xuICAgIHByaXZhdGUgbWFwOiBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PEV2ZW50UHJvcHM8YW55Pj4+ID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGFkZDxUIGV4dGVuZHMgRWxlbWVudEV2ZW50PihlbGVtZW50OiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMsIGxpc3RlbmVyOiAoZXZ0OiBUKSA9PiB2b2lkLCB1c2VDYXB0dXJlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBldmVudElkID0gbmFub2lkKDgpO1xuICAgICAgICBjb25zdCBldmVudFByb3BzOiBFdmVudFByb3BzPFQ+ID0geyBpZDogZXZlbnRJZCwgZXZlbnROYW1lLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSB9O1xuICAgICAgICBpZiAoIWV2ZW50cykge1xuICAgICAgICAgICAgdGhpcy5tYXAuc2V0KGVsZW1lbnQsIFtldmVudFByb3BzXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnRJZDtcbiAgICB9XG5cbiAgICByZW1vdmUoZWxlbWVudDogRWxlbWVudCwgZXZlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMubWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJJbmRleCA9IGV2ZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBldmVudElkKTtcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lckluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBldmVudHMuc3BsaWNlKGxpc3RlbmVySW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlQnlUeXBlKGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50TmFtZTogRXZlbnRUeXBlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lKTtcbiAgICAgICAgICAgIGZpbHRlckV2ZW50cy5mb3JFYWNoKGl0ZW0gPT4geyB0aGlzLnJlbW92ZShlbGVtZW50LCBpdGVtLmlkKSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIHRoaXMubWFwLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXQoZWxlbWVudDogRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIHVzZUNhcHR1cmUgPSBmYWxzZSk6IEFycmF5PChldnQ6IEVsZW1lbnRFdmVudCkgPT4gdm9pZD4ge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gZXZlbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uZXZlbnROYW1lID09PSBldmVudE5hbWUgJiYgaXRlbS51c2VDYXB0dXJlID09PSB1c2VDYXB0dXJlKS5tYXAoaXRlbSA9PiBpdGVtLmxpc3RlbmVyKTtcbiAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICB9XG59IiwiY29uc3QgRURJVE9SX1JFQUNUSVZFID0gJ19fZWRpdG9yX3JlYWN0aXZlJztcbmNvbnN0IElURVJBVE9SX0tFWSA9IFN5bWJvbCgnaXRlcmF0b3Ita2V5JylcbmV4cG9ydCBjb25zdCByZWFjdGl2ZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0PigpO1xuZXhwb3J0IGNvbnN0IHRhcmdldE1hcHMgPSBuZXcgV2Vha01hcDxvYmplY3QsIE1hcDxwcm9wVHlwZSwgU2V0PG5vdGlmeUNhbGxiYWNrPj4+KCk7XG50eXBlIHByb3BUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sO1xuaW50ZXJmYWNlIG5vdGlmeUNhbGxiYWNrIHtcbiAgICAodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgdm9pZDtcbn1cblxuXG5jb25zdCBhY3RpdmVGbnM6IEFycmF5PG5vdGlmeUNhbGxiYWNrPiA9IFtdO1xuZnVuY3Rpb24gdHJhY2sodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlKSB7XG4gICAgY29uc3QgYWN0aXZlRm4gPSBhY3RpdmVGbnNbYWN0aXZlRm5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghYWN0aXZlRm4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFyZ2V0TWFwID0gdGFyZ2V0TWFwcy5nZXQodGFyZ2V0KVxuICAgIGlmICghdGFyZ2V0TWFwKSB7XG4gICAgICAgIHRhcmdldE1hcHMuc2V0KHRhcmdldCwgKHRhcmdldE1hcCA9IG5ldyBNYXAoKSkpXG4gICAgfVxuICAgIGxldCBlZmZlY3RGbnMgPSB0YXJnZXRNYXAuZ2V0KHApO1xuICAgIGlmICghZWZmZWN0Rm5zKSB7XG4gICAgICAgIHRhcmdldE1hcC5zZXQocCwgKGVmZmVjdEZucyA9IG5ldyBTZXQoKSkpXG4gICAgfVxuICAgIGVmZmVjdEZucy5hZGQoYWN0aXZlRm4pXG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy/kuI3pnIDopoHop6blj5FcbiAgICBpZiAocC50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ19fJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXRNYXAgPSB0YXJnZXRNYXBzLmdldCh0YXJnZXQpO1xuICAgIGlmICghdGFyZ2V0TWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWZmZWN0Rm5zID0gdGFyZ2V0TWFwLmdldChwKTtcbiAgICBjb25zdCBpdGVyYXRvckZucyA9IHRhcmdldE1hcC5nZXQoSVRFUkFUT1JfS0VZKTtcbiAgICBjb25zdCBmbnMgPSBuZXcgU2V0PG5vdGlmeUNhbGxiYWNrPigpO1xuICAgIGVmZmVjdEZucyAmJiBlZmZlY3RGbnMuZm9yRWFjaChpdGVtID0+IGZucy5hZGQoaXRlbSkpO1xuICAgIGl0ZXJhdG9yRm5zICYmIGl0ZXJhdG9yRm5zLmZvckVhY2goaXRlbSA9PiBmbnMuYWRkKGl0ZW0pKTtcbiAgICBjb25zdCBhY3RpdmVGbiA9IGFjdGl2ZUZuc1thY3RpdmVGbnMubGVuZ3RoIC0gMV07XG4gICAgLy/pmLLmraLmrbvlvqrnjq/vvIzov4fmu6TmraPlnKjov5DooYznmoTlia/kvZznlKhcbiAgICBpZiAoYWN0aXZlRm4pIHtcbiAgICAgICAgZm5zLmRlbGV0ZShhY3RpdmVGbilcbiAgICB9XG4gICAgZm5zLmZvckVhY2goZm4gPT4ge1xuICAgICAgICBmbih0YXJnZXQsIHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSlcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoQ2hhbmdlZDxUIGV4dGVuZHMgb2JqZWN0Pihzb3VyY2U6IFQsIGNiOiBub3RpZnlDYWxsYmFjayk6IFQge1xuICAgIGlmICgoPGFueT5zb3VyY2UpW0VESVRPUl9SRUFDVElWRV0pIHtcbiAgICAgICAgYWRkVG9UcmFjaygoPGFueT5zb3VyY2UpWydyYXcnXSwgc291cmNlLCBjYik7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuICAgIGlmIChpc0RhdGUoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdFByb3h5ID0gcmVhY3RpdmVNYXAuZ2V0KHNvdXJjZSk7XG4gICAgaWYgKGV4aXN0UHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0UHJveHkgYXMgVDtcbiAgICB9XG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc291cmNlLCB7XG4gICAgICAgIGdldCh0YXJnZXQsIHAsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gJ3JhdycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHAgPT09IEVESVRPUl9SRUFDVElWRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcilcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiByZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2F0Y2hDaGFuZ2VkKHJlcywgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KHRhcmdldCwgcCwgbmV3VmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCforr7nva4nICsgcC50b1N0cmluZygpKVxuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSAoPGFueT50YXJnZXQpW3BdO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gUmVmbGVjdC5zZXQodGFyZ2V0LCBwLCBuZXdWYWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgaWYgKCg8YW55PnJlY2VpdmVyKS5yYXcgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUgJiYgKG9sZFZhbHVlID09PSBvbGRWYWx1ZSB8fCBuZXdWYWx1ZSA9PT0gbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcCkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHApO1xuICAgICAgICAgICAgdHJpZ2dlcih0YXJnZXQsIHAsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcCwgYXR0cmlidXRlcylcbiAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCBwLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9KVxuICAgIGFkZFRvVHJhY2soc291cmNlLCBwcm94eSwgY2IpO1xuICAgIHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gYWRkVG9UcmFjayhzb3VyY2U6IG9iamVjdCwgcHJveHk6IG9iamVjdCwgY2I6IG5vdGlmeUNhbGxiYWNrKTogdm9pZCB7XG4gICAgYWN0aXZlRm5zLnB1c2goY2IpO1xuICAgIHRyYWNrKHNvdXJjZSwgSVRFUkFUT1JfS0VZKTtcbiAgICBhY3RpdmVGbnMucG9wKCk7XG4gICAgcmVhY3RpdmVNYXAuc2V0KHNvdXJjZSwgcHJveHkpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXROb3RpZnlDaGFuZ2VkQ2FsbGJhY2sodGFyZ2V0OiBvYmplY3QsIHA6IHByb3BUeXBlLCBjYjogbm90aWZ5Q2FsbGJhY2spOiB2b2lkIHtcbiAgICBsZXQgdHJhY2tUYXJnZXQ6IGFueSA9IHRhcmdldDtcbiAgICBpZiAoKDxhbnk+dGFyZ2V0KVtFRElUT1JfUkVBQ1RJVkVdKSB7XG4gICAgICAgIHRyYWNrVGFyZ2V0ID0gKDxhbnk+dGFyZ2V0KVsncmF3J107XG4gICAgfVxuICAgIGFjdGl2ZUZucy5wdXNoKGNiKVxuICAgIHRyYWNrKHRyYWNrVGFyZ2V0LCBwKTtcbiAgICBhY3RpdmVGbnMucG9wKClcbn1cblxuZXhwb3J0IGNvbnN0IGlzRGF0ZSA9ICh2YWw6IHVua25vd24pOiB2YWwgaXMgRGF0ZSA9PiB2YWwgaW5zdGFuY2VvZiBEYXRlXG5cbmV4cG9ydCBjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbmV4cG9ydCBjb25zdCB0b1R5cGVTdHJpbmcgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT5cbiAgICBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKVxuXG5leHBvcnQgY29uc3QgdG9SYXdUeXBlID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdG9UeXBlU3RyaW5nKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cbiIsImltcG9ydCB7IFJlY3QsIEVsZW1lbnQsIE1hcmdpblByb3BzLCBQYWRkaW5nUHJvcHMsIFBvc2l0aW9uIH0gZnJvbSAnLi9lbGVtZW50LWRlZmluZSdcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gJy4vcmVuZGVyLWNvbnRleHQnO1xuLyoqXG4gKiDlrprkuYnnu4Tku7bnmoRVSeW9ouW8j+eahOa4suafk1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4ge1xuICAgIG1hcmdpbiE6IE1hcmdpblByb3BzO1xuICAgIHBhZGRpbmchOiBQYWRkaW5nUHJvcHM7XG4gICAgcmVjdDogUmVjdCA9IG5ldyBSZWN0KCk7XG4gICAgcGFyZW50ITogQnJhbmNoUmVuZGVyT2JqZWN0O1xuICAgIC8qKlxuICAgICog5Y+v54K55Ye75oCn77yM5L6L5aaC77yabnVsbC10ZXh0IOWNoOS9jeespuWFg+e0oOS4jeWFt+Wkh+WPr+eCueWHu+iDveWKm1xuICAgICovXG4gICAgZGlzYWJsZUNsaWNrITogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogVCkge1xuICAgICAgICB0aGlzLm1hcmdpbiA9IG5ldyBNYXJnaW5Qcm9wcygpO1xuICAgICAgICB0aGlzLnBhZGRpbmcgPSBuZXcgUGFkZGluZ1Byb3BzKCk7XG4gICAgfVxuICAgIGFic3RyYWN0IGNsb25lKCk6IFJlbmRlck9iamVjdDtcbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQgeyB9XG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLnBhcmVudCA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5tYXJnaW4gPSBudWxsO1xuICAgICAgICAvL3RoaXMucGFkZGluZyA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5yZWN0ID0gbnVsbDtcbiAgICAgICAgLy90aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog6I635Y+W5YaF5a655Yy65Z+f5qGG5L2TXG4gICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICogQHJldHVybnMgXG4gICAgKi9cbiAgICBnZXRJbm5uZXJSZWN0KCk6IFJlY3Qge1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdCgpO1xuICAgICAgICByZWN0LnggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICAgIHJlY3QueSA9IHBhZGRpbmcudG9wO1xuICAgICAgICByZWN0Lm1heFdpZHRoID0gdGhpcy5yZWN0Lm1heFdpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcbiAgICAgICAgaWYgKHRoaXMucmVjdC5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJlY3QubWF4SGVpZ2h0ID0gdGhpcy5yZWN0Lm1heEhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfVxuXG4gICAgZ2V0SW5uZXJNYXhXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMucmVjdC5tYXhXaWR0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzLnJlY3QubWF4V2lkdGggaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYWRkaW5nLCBtYXJnaW4gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3QubWF4V2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0IC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4uYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog5qC55o2u5YaF5qGG5YaF5a656auY5bqm77yM5pu05paw5aSW5qGG5qGG5L2T6auY5bqmXG4gICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICogQHBhcmFtIGlubmVyUmVjdCBcbiAgICAqL1xuICAgIHVwZGF0ZVJlbmRlckhlaWdodChpbm5lclJlY3Q6IFJlY3QgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5ubmVySGVpZ2h0ID0gdHlwZW9mIGlubmVyUmVjdCA9PT0gJ251bWJlcicgPyBpbm5lclJlY3QgOiAoPFJlY3Q+aW5uZXJSZWN0KS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHsgcGFkZGluZywgbWFyZ2luIH0gPSB0aGlzO1xuICAgICAgICAvL+WkluWxguWuueWZqOmrmOW6puetieS6juWGheWuuemrmOW6pivlpJbovrnot50r5YaF6L656LedXG4gICAgICAgIHRoaXMucmVjdC5oZWlnaHQgPSBpbm5uZXJIZWlnaHQgKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIGdldEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiDlj7blrZDoioLngrnmuLLmn5PlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExlYWZSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIFJlbmRlck9iamVjdDxUPiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogVCB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCBhcyBUKTtcbiAgICB9XG4gICAgYWJzdHJhY3QgcmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KTogdm9pZDtcblxufVxuXG4vKipcbiAqIOaeneW5suiKgueCuea4suafk+WFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJhbmNoUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQgYXMgVCk7XG4gICAgfVxuICAgIHByaXZhdGUgY2hpbHJlbjogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgIGdldEl0ZW1zKCk6IEFycmF5PFJlbmRlck9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuO1xuICAgIH1cblxuICAgIGFkZENoaWxkKC4uLml0ZW1zOiBBcnJheTxSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2hpbGQoaXRlbTogUmVuZGVyT2JqZWN0LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgICBpdGVtLnBhcmVudCA9IHRoaXM7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQoY2hpbGQ6IFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAvL2NoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGRCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxyZW5baW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgLy9jaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRCeUluZGV4KGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ubGVuZ3RoO1xuICAgIH1cblxuXG4gICAgZ2V0Q2hpbGQ8VCBleHRlbmRzIFJlbmRlck9iamVjdCA9IFJlbmRlck9iamVjdD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuW2luZGV4XSBhcyBUO1xuICAgIH1cblxuICAgIGdldENoaWxkSW5kZXgoY2hpbGQ6IFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgYmVnaW5SZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQ7XG4gICAgYWJzdHJhY3QgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkO1xuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7XG4gICAgICAgICAgICAvL3RoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbHJlbi5sZW5ndGggPSAwO1xuICAgICAgICAvL3RoaXMuY2hpbHJlbiA9IG51bGw7XG4gICAgfVxufVxuXG5cbi8qKlxuICog5Z2X57qn5riy5p+T5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG4gICAgc2V0UmVuZGVyV2lkdGgobWF4V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY3QubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5yZWN0LndpZHRoID0gbWF4V2lkdGg7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG59XG5cbi8qKlxuICog5YyF5ZCr5Z2X57qn5riy5p+T5YWD57Sg55qE5a655Zmo5YWD57SgLOS+i+WmgmJvZHnjgIF0YWJsZS1jZWxs562JXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVjdC5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLnJlY3Qud2lkdGggPSBtYXhXaWR0aDtcbiAgICB9XG59XG5cbi8qKlxuICog5aSa57qnIOKAmEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3TigJkg5YyF6KO55YWD57Sg77yM5L6L5aaCIHDjgIF0YWJsZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDxUPiB7IH1cblxuLyoqXG4gKiDlrrnlmagt5a2Q5YaF5a655Li65aSa5Liq6KGM5YaF5Z2X57qn5YWD57Sg77yM5L6L5aaCdGFibGUtcm93XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVCbG9ja0NvbnRhaW5lciBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHsgfVxuXG4vKipcbiAqIOacjeWKoeS6jnRhYmxlLWNlbGxcbiAqIOWPr+iiq+Wkmue6p+aLhuWIhueahOWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7IH1cblxuLyoqXG4gKiDmnIDlsI/kuI3lj6/liIblibLljZXkvY3nmoTlnZfnuqfooYzmoYbvvIzkvovlpoIgcC1saW5lXG4gKiDkuIDooYzkuI3lj6/lrZjlnKjkuo7kuKTkuKrpobXpnaLkuK0s5Z2X57qn6KGM5qGG5LiN6IO95YiG5biD5Zyo5Lik5Liq6aG16Z2i5LitXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0IHsgfVxuXG5cbmV4cG9ydCB0eXBlIEJvcmRlclR5cGUgPSAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0LW1pZGRsZScgfCAncmlnaHQtbWlkZGxlJyB8ICd0b3AtbWlkZGxlJyB8ICdib3R0b20tbWlkZGxlJyB8ICdub25lJyB8ICdsZWZ0LXRvcCcgfCAnbGVmdC1ib3R0b20nIHwgJ3JpZ2h0LXRvcCcgfCAncmlnaHQtYm90dG9tJztcbmV4cG9ydCB0eXBlIEN1cnNvclR5cGUgPSAndGV4dCcgfCAncm93LXJlc2l6ZScgfCAnY29sLXJlc2l6ZScgfCAnbm9uZScgfCAnZGVmYXVsdCcgfCAnbW92ZScgfCAncG9pbnRlcicgfCAndy1yZXNpemUnIHwgJ3MtcmVzaXplJyB8ICdzZS1yZXNpemUnIHwgJ25lLXJlc2l6ZSc7XG5leHBvcnQgZW51bSBSZW5kZXJPYmplY3RUeXBlIHtcbiAgICBCcmFuY2ggPSAwLFxuICAgIExlYWYgPSAxXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lYXN1cmVSZW5kZXJTdHJ1Y3Q8VD4ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgcmVuZGVyOiBUXG59XG4iLCJpbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRWxlbWVudEV2ZW50LCBFdmVudE1hcCwgRXZlbnRUeXBlcyB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyB3YXRjaENoYW5nZWQgfSBmcm9tIFwiLi9ub3RpZnlcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBDdXJzb3JUeXBlLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWN0IHtcbiAgICB4ID0gMDtcbiAgICB5ID0gMDtcbiAgICB3aWR0aCA9IDA7XG4gICAgaGVpZ2h0ID0gMDtcbiAgICBtYXhIZWlnaHQ6IG51bWJlciA9IDA7XG4gICAgbWF4V2lkdGg6IG51bWJlciA9IDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplUHJvcHMge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBwcm9wcz86IGFueSxcbiAgICBjaGlsZHJlbj86IEFycmF5PFNlcmlhbGl6ZVByb3BzPjtcbiAgICBjb21wbGV0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICog5Yi35paw57G75Z6LXG4gKiDliLfmlrDlpJbop4LvvIzkuI3pnIDopoHov5vooYzmtYvph4/vvIznm7TmjqXov5vlhaXnu5jliLZcbiAqIOWIt+aWsOWGheWuue+8jOmcgOimgemHjeaWsOa1i+mHj++8jOWGjee7mOWItlxuICovXG5leHBvcnQgdHlwZSBSZWZyZXNoVHlwZSA9ICdhcHBlYXJhbmNlJyB8ICdjb250ZW50JztcblxuLyoqXG4gKiDkv67mlLnmoIflv5dcbiAqL1xuZXhwb3J0IGVudW0gTW9kaWZ5RmxhZyB7XG4gICAgLy/ooqvkv67mlLlcbiAgICBNb2RpZnkgPSAwLFxuICAgIC8v5peg5L+u5pS5XG4gICAgTm9uZSA9IDEsXG4gICAgLy/lrZDpobnooqvkv67mlLlcbiAgICBUcmFjayA9IDJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbkNoYW5nZUV2ZW50UHJvcHMge1xuICAgIGRhdGE6IGFueVxufVxuLyoqXG4gKiDlrprkuYnnu4Tku7bnmoTmlbDmja7vvIzphY3nva5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xuICAgIG1vZGlmeUZsYWc6IE1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLk1vZGlmeTtcbiAgICBpc01vdXNlZW50ZXIhOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2V2ZW50TWFwOiBFdmVudE1hcCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfcmVmcmVzaEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcm90ZWN0ZWQgX29uQ2hhbmdlRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgb2JzZXJ2ZXJzOiBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PFN1YnNjcmlwdGlvbj4+ID0gbmV3IFdlYWtNYXAoKTtcbiAgICBwYWludFJlbmRlcnM6IEFycmF5PFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICBtZWFzdXJlUmVuZGVyITogUmVuZGVyT2JqZWN0IHwgbnVsbDtcbiAgICBmb2N1c2FibGUhOiBib29sZWFuO1xuICAgIGlzRm9jdXNlZCE6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICog5L+u6aWw5YWD57Sg5LiN6IO95aSN5Yi244CB5bqP5YiX5YyW44CB5Yig6ZmkKOmcgOimgeaJi+WKqOWIoOmZpClcbiAgICAgKi9cbiAgICBpc0RlY29yYXRlITogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiDlj6/ngrnlh7vmgKfvvIzkvovlpoLvvJpudWxsLXRleHQg5Y2g5L2N56ym5YWD57Sg5LiN5YW35aSH5Y+v54K55Ye76IO95YqbXG4gICAgICogMi7nvJbovpHpobXnnInpobXohJrnmoTog73liptcbiAgICAgKi9cbiAgICBkaXNhYmxlQ2xpY2shOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3BhcmVudCE6IEJyYW5jaEVsZW1lbnQgfCBudWxsO1xuICAgIGdldCBwYXJlbnQoKTogQnJhbmNoRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgYXMgQnJhbmNoRWxlbWVudDtcbiAgICB9XG4gICAgc2V0IHBhcmVudCh2YWw6IEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gdmFsO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcm9wcyE6IFA7XG4gICAgcHVibGljIGdldCBwcm9wcygpOiBQIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHByb3BzKHZhbHVlOiBQKSB7XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5fcHJvcHMgPSB3YXRjaENoYW5nZWQodmFsdWUsICgpID0+IHsgdGhpcy5ub3RpZnlDaGFuZ2VkKCkgfSlcbiAgICAgICAgLy90aGlzLl9wcm9wcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpXG4gICAgfVxuXG4gICAgLy/lhYPntKDmmK/lkKbnpoHmraLlpI3liLbvvIzkvovlpoLmibnms6jlhYPntKBcbiAgICAvL2ZvcmJpZENvcHk6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHVibGljIHR5cGU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9ldmVudE1hcCA9IG5ldyBFdmVudE1hcCgpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VFbnRlcicsIChldnQpID0+IHsgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHsgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZSB9KTtcbiAgICB9XG4gICAgYWJzdHJhY3QgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGw7XG4gICAgYWJzdHJhY3Qgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbDtcbiAgICBhYnN0cmFjdCBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudDtcbiAgICBhYnN0cmFjdCBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXI7XG4gICAgYWJzdHJhY3QgZ2V0U2VsZkxlbmd0aCgpOiBudW1iZXI7XG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRNYXA/LmNsZWFyKHRoaXMpO1xuICAgICAgICB0aGlzLnBhaW50UmVuZGVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLm1lYXN1cmVSZW5kZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMpO1xuICAgIH1cbiAgICBhZGRFdmVudDxUIGV4dGVuZHMgRWxlbWVudEV2ZW50PihldmVudDogRXZlbnRUeXBlcywgaGFuZGxlOiAoZXZ0OiBUKSA9PiB2b2lkLCB1c2VDYXB0dXJlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50TWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50TWFwIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudE1hcD8uYWRkKHRoaXMsIGV2ZW50LCBoYW5kbGUsIHVzZUNhcHR1cmUpO1xuICAgIH1cbiAgICByZW1vdmVFdmVudChldmVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ldmVudE1hcC5yZW1vdmUodGhpcywgZXZlbnRJZCk7XG4gICAgfVxuICAgIHJlbW92ZUV2ZW50QnlUeXBlKGV2ZW50VHlwZTogRXZlbnRUeXBlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50TWFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2ZW50TWFwIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwLnJlbW92ZUJ5VHlwZSh0aGlzLCBldmVudFR5cGUpO1xuICAgIH1cbiAgICBpbnZva2VFdmVudChldmVudDogRXZlbnRUeXBlcywgZXZ0OiBFbGVtZW50RXZlbnQsIHVzZXJDYXB0dXJlID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudE1hcC5nZXQodGhpcywgZXZlbnQsIHVzZXJDYXB0dXJlKTtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goaXRlbSA9PiBpdGVtKGV2dCkpO1xuICAgIH1cbiAgICBiZWdpbk1lYXN1cmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFpbnRSZW5kZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIGdldEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcmVmcmVzaFN1YmplY3QoKTogU3ViamVjdDx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZyZXNoRXZlbnQ7XG4gICAgfVxuICAgIGdldCBvbkNoYW5nZVN1YmplY3QoKTogU3ViamVjdDx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZUV2ZW50O1xuICAgIH1cblxuICAgIHJlZnJlc2hWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZWZyZXNoRXZlbnQubmV4dCgpO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHB1Yk9uQ2hhbmdlKHNlbGZDaGFuZ2U6IHB1YkNoYW5nZVR5cGUpOiB2b2lkXG5cbiAgICB1bnN1YnNjcmliZShlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLm9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBzdWJzLmZvckVhY2goc3ViID0+IHsgc3ViLnVuc3Vic2NyaWJlKCkgfSk7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRzdWJzY3JpYmUoZWxlbWVudDogRWxlbWVudCwgLi4uc3ViOiBBcnJheTxTdWJzY3JpcHRpb24+KTogdm9pZCB7XG4gICAgICAgIGxldCBzdWJzID0gdGhpcy5vYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN1YnMpIHtcbiAgICAgICAgICAgIHN1YnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzLnNldChlbGVtZW50LCBzdWJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzLnB1c2goLi4uc3ViKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlvZPliY3oioLngrlcbiAgICAgKi9cbiAgICByZW1vdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuXG4vKipcbiAqIOacgOWwj+iKgueCueWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGVhZkVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBFbGVtZW50PFA+IHtcbiAgICBjdXJzb3JUeXBlOiBDdXJzb3JUeXBlID0gJ3RleHQnO1xuICAgIC8vYWJzdHJhY3QgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0KTogTGVhZlJlbmRlck9iamVjdDtcbiAgICBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBnZXRTZWxmTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHB1Yk9uQ2hhbmdlKHNlbGZDaGFuZ2U6IHB1YkNoYW5nZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5UcmFjayAmJiBzZWxmQ2hhbmdlID09PSAndHJhY2tlcicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk1vZGlmeSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmQ2hhbmdlID09PSAndHJhY2tlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuVHJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLk1vZGlmeTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkNoYW5nZUV2ZW50Lm5leHQoKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiDmnp3lubLoioLngrnvvIzljIXlkKvoi6XlubLkuKrmnp3lubLmiJbogIXlj7blrZDoioLngrlcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJyYW5jaEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBFbGVtZW50PFA+IHtcbiAgICBwcml2YXRlIGNoaWxyZW46IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgIH1cbiAgICBhZGRDaGlsZChjaGlsZDogRWxlbWVudCwgaW5kZXggPSAtMSk6IHZvaWQge1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcbiAgICAgICAgY29uc3QgcmVmU3ViID0gY2hpbGQucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvbkNoYW5nZVN1YiA9IGNoaWxkLm9uQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3RyYWNrZXInKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkc3Vic2NyaWJlKGNoaWxkLCByZWZTdWIsIG9uQ2hhbmdlU3ViKTtcbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKGNoaWxkOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGlscmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4uuafpeaJvuWIsOW9k+WJjeWFg+e0oCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcG9zZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGRCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxyZW5baW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3Bvc2VDaGlsZChjaGlsZDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgKDxhbnk+Y2hpbGQpLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgIH1cblxuICAgIGNsZWFySXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuY2hpbHJlbl07XG4gICAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZEJ5SW5kZXgoaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuY2hpbHJlbl07XG4gICAgICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNoaWxkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5sZW5ndGg7XG4gICAgfVxuXG4gICAgZmluZChwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4uZmluZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIGdldENoaWxkPFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuW2luZGV4XSBhcyBUO1xuICAgIH1cblxuICAgIGdldENoaWxkSW5kZXgoY2hpbGQ6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmluZGV4T2YoY2hpbGQpO1xuICAgIH1cblxuICAgIGdldENoaWxkTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIC8vcmV0dXJuIHRoaXMuY2hpbHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyAxICsgY3Vyci5nZXRDaGlsZExlbmd0aCgpLCAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgMSArIGN1cnIuZ2V0Q2hpbGRMZW5ndGgoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyciBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLmdldENoaWxkTGVuZ3RoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZ2V0U2VsZkxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMSArIHRoaXMuY2hpbHJlbi5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5nZXRTZWxmTGVuZ3RoKCk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuXG4gICAgdHJlZUZpbHRlcihwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoaXRlbSwgaSkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi5pdGVtLnRyZWVGaWx0ZXIocHJlZGljYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHRyZWVGaW5kKHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0sIGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRoID0gaXRlbS50cmVlRmluZChwcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJPbkNoYW5nZShzZWxmQ2hhbmdlOiBwdWJDaGFuZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2sgJiYgc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Nb2RpZnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLlRyYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Nb2RpZnk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldENoaWxkKGkpLnB1Yk9uQ2hhbmdlKCd0by1jaGlsZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25DaGFuZ2VFdmVudC5uZXh0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBwdWJDaGFuZ2VUeXBlID0gJ3NlbGYnIHwgJ3RyYWNrZXInIHwgJ3RvLWNoaWxkJztcbi8qKlxuICog6KGM5YaF57yW57uE5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVHcm91cEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHsgfVxuXG4vKipcbiAqIOWdl+e6p+WFg+e0oO+8jOebruWJjeWPquaciVDlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrQ29udGVudEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHsgfVxuXG4vKipcbiAqIOWMheWQq+Wdl+e6p+a4suafk+WFg+e0oOeahOWuueWZqOWFg+e0oCzkvovlpoJib2R544CBdGFibGUtY2VsbOOAgXRhYmxl562JXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHtcbiAgICBub0ZpbGxFbXB0eSE6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgcmVhZEVsZW1lbnRQcm9wczxUPiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHByb3BzOiBUIHwgdW5kZWZpbmVkO1xuICAgIGNoaWxkcmVuOiBhbnkgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVsZW1lbnRGYWN0b3J5PFQgPSBudWxsPiB7XG4gICAgb3B0aW9ucyE6IFZpZXdPcHRpb25zO1xuICAgIGFic3RyYWN0IG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgYWJzdHJhY3QgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFQ+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICB0YXJnZXQ6IEVsZW1lbnRcbiAgICBpc0Z1bGxTZWxlY3RlZDogYm9vbGVhbixcbiAgICBzdGFydE9mZnNldDogbnVtYmVyLFxuICAgIGVuZE9mZnNldDogbnVtYmVyLFxuICAgIHNlbGVjdGVkQ2hpbGRyZW46IEFycmF5PFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4sXG59XG5cbi8qKlxuICog57yW6L6R5qih5byPXG4gKi9cbmV4cG9ydCBlbnVtIEVkaXRNb2RlIHtcbiAgICAvKipcbiAgICAgKiDoh6rnlLHmqKHlvI/vvIzorr7orqHmqKHmnb/ml7bkvb/nlKhcbiAgICAgKi9cbiAgICBGcmVlID0gMCxcbiAgICAvKipcbiAgICAgKiDkuKXmoLzmqKHlvI/vvIzljLvnlJ/kuablhpnmqKHlvI/ml7bkvb/nlKgs5Y+q5Y+v5pu05pS55pWw5o2u5YWD5YC8XG4gICAgICovXG4gICAgU3RyaWN0ID0gMSxcbiAgICAvKipcbiAgICAgKiDmn6XnnIvmqKHlvI8s5Lu75L2V5L+u5pS55paH5qGj55qE5pON5L2c6YO95LiN5YWB6K6477yM5L2G5piv5Y+v6YCJ5Lit77yM5pyJ5ouW6JOdXG4gICAgICovXG4gICAgVmlldyA9IDIsXG4gICAgLyoqXG4gICAgICog56aB55So5qih5byP77yM5b2T5YmN5Yy65Z+f5LiN5Y+v54K55Ye777yM5LiN5Y+v6YCJ5Lit77yM6aG16ISa44CB6aG155yJ57yW6L6R5pe255qE5o6n5Yi2XG4gICAgICovXG4gICAgRGlzYWJsZWQgPSAzXG59XG5cbi8qKlxuICog5paH5qGj5qih5byPXG4gKi9cbmV4cG9ydCBlbnVtIERvY01vZGUge1xuICAgIERlc2lnbiA9IDAsXG4gICAgLyoqXG4gICAgICog5a6M5YWo57yW6L6R5qih5byPXG4gICAgICovXG4gICAgRWRpdCA9IDEsXG4gICAgLyoqXG4gICAgICog6KGo5Y2V57yW6L6R5qih5byPXG4gICAgICovXG4gICAgRm9ybUVkaXQgPSAyLFxuICAgIC8qKlxuICAgICAqIOinhuWbvuaooeW8j++8jOWPquiDveafpeeci1xuICAgICAqL1xuICAgIFZpZXcgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEJvb2xlYW5FbnVtIHtcbiAgICBOdWxsLFxuICAgIFRydWUsXG4gICAgRmFsc2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2NVc2VyIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgUGFnZU9wdGlvbnMge1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgX2hlaWdodDogbnVtYmVyID0gMDtcbiAgICBvcmllbnQ6IE9yaWVudFR5cGUgPSAncG9ydHJhaXQnO1xuICAgIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvcmllbnQ6IE9yaWVudFR5cGUgPSAncG9ydHJhaXQnKSB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5vcmllbnQgPSBvcmllbnQ7XG4gICAgfVxuICAgIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5vcmllbnQgPT09ICdsYW5kc2NhcGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0IHdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudCA9PT0gJ2xhbmRzY2FwZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHNldCBoZWlnaHQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIE9yaWVudFR5cGUgPSAnbGFuZHNjYXBlJyB8ICdwb3J0cmFpdCc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3T3B0aW9ucyB7XG4gICAgY29weVJpZ2h0SW5mbyE6IHN0cmluZztcbiAgICB3YXRlcm1hcms/OiBzdHJpbmc7XG4gICAgZHJhd0xpbmVSZWN0Q29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBkcmF3Q2hhclJlY3RDb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIGRyYXdTeW1ib2xzQ29sb3IgPSAncmdiKDEyOCwxMjgsMTI4KSc7XG4gICAgZGVmYXVsdEZvbnROYW1lID0gJ+Wui+S9kyc7XG4gICAgZGVmYXVsdEZvbnRTaXplID0gMTQ7XG4gICAgZGVmYXVsdENvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9ICdyZ2IoMTMxLDE3NSwxNTUsMC41KSc7XG4gICAgZGF0YUVsZU92ZXJsYXlzQ29sb3IgPSAncmdiKDEzMSwxNzUsMTU1LDAuNSknO1xuICAgIGRhdGFFbGVSZWFkT25seU92ZXJsYXlDb2xvciA9ICcjZDlkOWQ5JztcbiAgICBkYXRhRWxlT3V0bGluZUNvbG9yID0gJ3JnYigxMzEsMTc1LDE1NSwwLjcpJztcbiAgICB2aWV3QmFja2NvbG9yID0gJ3JnYigyMzAsMjMwLDIzMCknO1xuICAgIHBhcmFTeW1ib2xDb2xvciA9ICdyZ2IoMTI4LDEyOCwxMjgpJztcbiAgICBkYXRhR3JvdXBDb2xvciA9ICdyZ2IoMCw4MCwxNzkpJ1xuICAgIHNob3dMaW5lUmVjdCE6IGJvb2xlYW47XG4gICAgc2hvd0NoYXJSZWN0ITogYm9vbGVhbjtcbiAgICBzaG93UGFyYU1hcmshOiBib29sZWFuO1xuICAgIHNob3dUYWJDaGFyITogYm9vbGVhbjtcbiAgICBzaG93U3BhY2VDaGFyITogYm9vbGVhbjtcbiAgICBzaG93TGluZUJyZWFrITogYm9vbGVhbjtcbiAgICBib2R5TWFyZ2luVG9wID0gODtcbiAgICBkZXZNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2hvd0RlYnVnITogYm9vbGVhbjtcbiAgICByZXNvdXJjZU1vZGU6ICdsYXp5JyB8ICdpbW1lZGlhdGUnID0gJ2ltbWVkaWF0ZSc7XG4gICAgc2VydmVyTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNlY3JldEJyb3dzZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8v5Lit5paH54mI5byP77yM5aSE55CG5Lit5paH5o2i6KGM77yb5YmN572u5qCH54K55ZKM5ZCO572u5qCH54K5XG4gICAgY2hpbmVzZUxheW91dDogYm9vbGVhbiA9IHRydWU7XG4gICAgLy/mlbTpobXmqKHlvI/vvIzkuI3liIbpobVcbiAgICBwcml2YXRlIF9mdWxsUGFnZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBnZXQgZnVsbFBhZ2VWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsbFBhZ2VWaWV3O1xuICAgIH1cbiAgICBzZXQgZnVsbFBhZ2VWaWV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Z1bGxQYWdlVmlldyA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLm5leHQoJ2ZvcmNlJyk7XG4gICAgfVxuICAgIC8v5q+r57Gz5ZKM5YOP57Sg55qE6L2s5o2i5q+UXG4gICAgbW1Ub1BpeGVsc1JhdGlvOiBudW1iZXIgPSAwO1xuICAgIGN1cnNvcjogQ3Vyc29yVHlwZSA9ICd0ZXh0JztcbiAgICAvL+W9k+WJjeaWh+aho+WBj+enu+mHj++8jOWPluWGs+S6jua7muWKqOadoeS9jee9rlxuICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgIC8v5paH5qGj5aSn5bCPXG4gICAgZG9jUGFnZVNldHRpbmdzOiBQYWdlT3B0aW9ucyA9IG5ldyBQYWdlT3B0aW9ucygwLCAwKTtcbiAgICAvL+inhuWbvuWkp+WwjyxjYW52YXNcbiAgICB2aWV3U2V0dGluZ3MhOiB7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgIH07XG4gICAgcGFnZU51bUZvcm1hdDogc3RyaW5nID0gJ+esrHtpbmRleH3pobUv5YWxe2NvdW50femhtSc7XG4gICAgLy/ojrflj5ZjYW52YXPoioLngrnnmoTpq5jluqZcbiAgICBnZXQgdmlld1BhaW50SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIC8vcmV0dXJuIHRoaXMudmlld1NldHRpbmdzLmhlaWdodCAvIHRoaXMuc2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdTZXR0aW5ncy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YaF5a655Yy65Z+f55qE6auY5bqmXG4gICAgICog5ZCM5pe26ZmQ5a6aY2FudmFz55qE5pyA5bCP5a695bqmXG4gICAgICovXG4gICAgZ2V0IENvbnRlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgd2lkdGggPSB3aWR0aCArIHRoaXMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cbiAgICAvL+S4pOS4qumhteeahOmXtOi3nVxuICAgIGRvY1NwYWNlOiBudW1iZXIgPSAwO1xuICAgIC8v5piv5ZCm5pi+56S65a6h6ZiF56qX5Y+jXG4gICAgcHJpdmF0ZSBfc2hvd1Jldmlld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBnZXQgc2hvd1Jldmlld1dpbmRvdygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dSZXZpZXdXaW5kb3c7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgc2hvd1Jldmlld1dpbmRvdyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93UmV2aWV3V2luZG93ID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UubmV4dCgpO1xuICAgIH1cbiAgICAvL+WuoemYheeql+WPo+WuveW6plxuICAgIHJldmlld1dpbmRvd1dpZHRoOiBudW1iZXIgPSAyMDA7XG4gICAgLy/nvKnmlL5cbiAgICBwcml2YXRlIF9zY2FsZTogbnVtYmVyID0gMTtcbiAgICBnZXQgc2NhbGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlO1xuICAgIH1cbiAgICBzZXQgc2NhbGUodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc2NhbGUgPSB2YWw7XG4gICAgfVxuICAgIGRvY01vZGU6IERvY01vZGUgPSBEb2NNb2RlLkRlc2lnbjtcbiAgICAvL+aYr+WQpuW8gOWQr+mHjeWBmuWKn+iDvVxuICAgIGVuYWJsZVVuZG86IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8vIC8v5piv5ZCm5byA5ZCv55WZ55eV5qih5byPXG4gICAgLy8gcHJpdmF0ZSBfZW5hYmxlVHJhY2tDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgLy8gcHVibGljIGdldCBlbmFibGVUcmFja0NoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9lbmFibGVUcmFja0NoYW5nZXM7XG4gICAgLy8gfVxuICAgIC8vIHB1YmxpYyBzZXQgZW5hYmxlVHJhY2tDaGFuZ2VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgLy8gICAgIHRoaXMuX2VuYWJsZVRyYWNrQ2hhbmdlcyA9IHZhbHVlO1xuICAgIC8vICAgICB0aGlzLm9uQ2hhbmdlLm5leHQoJ2ZvcmNlJyk7XG4gICAgLy8gfVxuICAgIC8v5piv5ZCm5pi+56S65a6h6ZiF55eV6L+5XG4gICAgcHJpdmF0ZSBfc2hvd1RyYWNrQ2hhbmdlczogYm9vbGVhbiA9IHRydWU7XG4gICAgcHVibGljIGdldCBzaG93VHJhY2tDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1RyYWNrQ2hhbmdlcztcbiAgICB9XG4gICAgcHVibGljIHNldCBzaG93VHJhY2tDaGFuZ2VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dUcmFja0NoYW5nZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KCdmb3JjZScpO1xuICAgIH1cbiAgICAvL+WMu+WYseaJk+WNsOaooeW8j++8jOaWh+Wtl+ihjOaooeW8jyzlsIbooajmoLzlpJrooYzlr7nosaHovazmjaLkuLrlpJrkuKrooajmoLzooYzlr7nosaFcbiAgICB0ZXh0Um93TGluZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBlZGl0VXNlcjogRG9jVXNlciA9IHsgaWQ6ICcnLCBuYW1lOiAnJyB9O1xuICAgIC8v55WZ55eV5Yy65Z+f55qE55Sf5pWI5pe26Ze05q6177yM5ZCM5LiA55So5oi355qE55WZ55eV5Z2X5Zyo5q2k5pe26Ze05aSW6ZyA6KaB55Sf5oiQ5paw55qE55WZ55eV5Z2XXG4gICAgdHJhY2tDaGFuZ2VQZXJpb2Q6IG51bWJlciA9IDEwO1xuICAgIG9uQ2hhbmdlOiBTdWJqZWN0PCdkZW1hbmQnIHwgJ2ZvcmNlJz4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG59XG5cblxuZXhwb3J0IGNsYXNzIE1hcmdpblByb3BzIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0b3A6IG51bWJlciA9IDAsIHB1YmxpYyBib3R0b206IG51bWJlciA9IDAsIHB1YmxpYyBsZWZ0OiBudW1iZXIgPSAwLCBwdWJsaWMgcmlnaHQ6IG51bWJlciA9IDApIHsgfVxuICAgIGNsb25lKCk6IE1hcmdpblByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmVNYXJnaW4gPSBuZXcgTWFyZ2luUHJvcHModGhpcy50b3AsIHRoaXMuYm90dG9tLCB0aGlzLmxlZnQsIHRoaXMucmlnaHQpO1xuICAgICAgICByZXR1cm4gY2xvbmVNYXJnaW47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFkZGluZ1Byb3BzIGV4dGVuZHMgTWFyZ2luUHJvcHMgeyB9XG5cbmV4cG9ydCBjbGFzcyBCb3JkZXJQcm9wcyB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHdpZHRoOiBudW1iZXIgPSAwLCBwdWJsaWMgY29sb3I6IHN0cmluZyA9ICd0cmFuc3BhcmVudCcsIHB1YmxpYyBzdHlsZTogc3RyaW5nID0gJ3NvbGlkJykgeyB9XG4gICAgY2xvbmUoKTogQm9yZGVyUHJvcHMge1xuICAgICAgICByZXR1cm4gbmV3IEJvcmRlclByb3BzKHRoaXMud2lkdGgsIHRoaXMuY29sb3IsIHRoaXMuc3R5bGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElEaXNwb3NlIHtcbiAgICBhYnN0cmFjdCBkZXN0cm95KCk6IHZvaWQ7XG59XG5cblxuZXhwb3J0IHR5cGUgVGV4dEFsaWduID0gJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2p1c3RpZnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xufVxuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7IH1cblxuXG5leHBvcnQgdHlwZSBOdWxsYWJsZVR5cGU8VD4gPSB7XG4gICAgW1Byb3BOYW1lIGluIGtleW9mIFRdPzogVFtQcm9wTmFtZV1cbn07XG5cblxuZXhwb3J0IHR5cGUgUmVxdWlyZWRUeXBlPFQ+ID0ge1xuICAgIFtQcm9wTmFtZSBpbiBrZXlvZiBUXTogVFtQcm9wTmFtZV1cbn07XG5cbmV4cG9ydCB0eXBlIEltZ0xvYWRTdGF0dXMgPSAnbm8nIHwgJ2xvYWRpbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDYW5jZWxUb2tlbkZuIHtcbiAgICBjYW5jZWw/OiAoKSA9PiB2b2lkO1xuICAgIG9uRmluaXNoPzogKCkgPT4gdm9pZDtcbn0iLCJpbXBvcnQgeyBOdWxsYWJsZVR5cGUsIE9yaWVudFR5cGUsIFBhZGRpbmdQcm9wcywgVGV4dEFsaWduLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUcmFja1J1blR5cGVFbnVtIH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRWZXJ0QWxpZ24gPSAnc3VwZXJzY3JpcHQnIHwgJ3N1YnNjcmlwdCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICAvLyBvblByb3BlcnR5Q2hhbmdlZFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy8gcHJvcGVydHlDaGFuZ2VkKHByb3BlcnlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZFN1YmplY3QubmV4dChwcm9wZXJ5TmFtZSk7XG4gICAgLy8gfVxuICAgIGFic3RyYWN0IGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueTtcblxuICAgIHByaXZhdGUgX19hdHRhdGNoUHJvcGVydHk6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIHJlZ2lzdGVyUHJvcGVydHk8VD4ocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX19hdHRhdGNoUHJvcGVydHlbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9fYXR0YXRjaFByb3BlcnR5W3Byb3BlcnR5TmFtZV07XG4gICAgfVxuXG4gICAgZ2V0UHJvcGVydHk8VD4ocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19hdHRhdGNoUHJvcGVydHlbcHJvcGVydHlOYW1lXSBhcyBUO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRleHRQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGNvbG9yITogc3RyaW5nO1xuICAgIGZvbnROYW1lITogc3RyaW5nO1xuICAgIGZvbnRTaXplITogbnVtYmVyO1xuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnIHwgJ2JvbGQnID0gJ25vcm1hbCc7XG4gICAgZm9udFN0eWxlOiAnbm9ybWFsJyB8ICdpdGFsaWMnID0gJ25vcm1hbCc7XG4gICAgLy90ZXh0RGVjb3JhdGlvbjogJ25vbmUnIHwgJ3VuZGVybGluZScgfCAnb3ZlcmxpbmUnIHwgJ2xpbmUtdGhyb3VnaCcgPSAnbm9uZSc7XG4gICAgdW5kZXJsaW5lOiBib29sZWFuID0gZmFsc2U7XG4gICAgb3ZlcmxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsaW5ldGhyb3VnaDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGJhY2tncm91bmQhOiBzdHJpbmc7XG4gICAgbGV0dGVyU3BhY2UhOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDkuIrmoIfmiJbogIXkuIvmoIdcbiAgICAgKi9cbiAgICB2ZXJ0QWxpZ24hOiBUZXh0VmVydEFsaWduO1xuXG4gICAgLyoqXG4gICAgICog5a2X56ym6L655qGGXG4gICAgICovXG4gICAgYm9yZGVyITogYm9vbGVhbjtcblxuICAgIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX19jYWNoZUZvbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKHNvdXJjZTogVGV4dFByb3BzIHwgbnVsbCk6IFRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gc291cmNlID8/IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wc1ZhbHVlKHRoaXMsIGNsb25lKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHNldFByb3BzVmFsdWUoc291cmNlOiBUZXh0UHJvcHMsIHRhcmdldDogVGV4dFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRhcmdldC5jb2xvciA9IHNvdXJjZS5jb2xvcjtcbiAgICAgICAgdGFyZ2V0LmZvbnROYW1lID0gc291cmNlLmZvbnROYW1lO1xuICAgICAgICB0YXJnZXQuZm9udFNpemUgPSBzb3VyY2UuZm9udFNpemU7XG4gICAgICAgIHRhcmdldC5mb250V2VpZ2h0ID0gc291cmNlLmZvbnRXZWlnaHQ7XG4gICAgICAgIHRhcmdldC5mb250U3R5bGUgPSBzb3VyY2UuZm9udFN0eWxlO1xuICAgICAgICB0YXJnZXQudW5kZXJsaW5lID0gc291cmNlLnVuZGVybGluZTtcbiAgICAgICAgdGFyZ2V0Lm92ZXJsaW5lID0gc291cmNlLm92ZXJsaW5lO1xuICAgICAgICB0YXJnZXQubGluZXRocm91Z2ggPSBzb3VyY2UubGluZXRocm91Z2g7XG4gICAgICAgIHRhcmdldC5iYWNrZ3JvdW5kID0gc291cmNlLmJhY2tncm91bmQ7XG4gICAgICAgIHRhcmdldC5sZXR0ZXJTcGFjZSA9IHNvdXJjZS5sZXR0ZXJTcGFjZTtcbiAgICAgICAgdGFyZ2V0LnZlcnRBbGlnbiA9IHNvdXJjZS52ZXJ0QWxpZ247XG4gICAgICAgIHRhcmdldC5ib3JkZXIgPSBzb3VyY2UuYm9yZGVyO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VGV4dFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5jb2xvciAmJiB0aGlzLmNvbG9yICE9PSB2aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3IpIHtcbiAgICAgICAgICAgIHByb3BzW1wiY29sb3JcIl0gPSB0aGlzLmNvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnROYW1lICYmIHRoaXMuZm9udE5hbWUgIT09IHZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJmb250TmFtZVwiXSA9IHRoaXMuZm9udE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udFNpemUgIT09IHZpZXdPcHRpb25zLmRlZmF1bHRGb250U2l6ZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJmb250U2l6ZVwiXSA9IHRoaXMuZm9udFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9udFdlaWdodCAmJiB0aGlzLmZvbnRXZWlnaHQgIT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udFdlaWdodFwiXSA9IHRoaXMuZm9udFdlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHByb3BzW1widW5kZXJsaW5lXCJdID0gdGhpcy51bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3ZlcmxpbmUpIHtcbiAgICAgICAgICAgIHByb3BzW1wib3ZlcmxpbmVcIl0gPSB0aGlzLm92ZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICBwcm9wc1tcImxpbmV0aHJvdWdoXCJdID0gdGhpcy5saW5ldGhyb3VnaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICBwcm9wc1tcImJhY2tncm91bmRcIl0gPSB0aGlzLmJhY2tncm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGV0dGVyU3BhY2UpIHtcbiAgICAgICAgICAgIHByb3BzW1wibGV0dGVyU3BhY2VcIl0gPSB0aGlzLmxldHRlclNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRTdHlsZSAmJiB0aGlzLmZvbnRTdHlsZSAhPT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udFN0eWxlXCJdID0gdGhpcy5mb250U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmVydEFsaWduKSB7XG4gICAgICAgICAgICBwcm9wc1tcInZlcnRBbGlnblwiXSA9IHRoaXMudmVydEFsaWduO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJvcmRlcikge1xuICAgICAgICAgICAgcHJvcHNbXCJib3JkZXJcIl0gPSB0aGlzLmJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfX2NhY2hlRm9udCE6IHN0cmluZyB8IG51bGw7XG5cbiAgICBnZXRGb250KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9fY2FjaGVGb250KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2NhY2hlRm9udDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBmb250U3RyID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5mb250U3R5bGUgJiYgdGhpcy5mb250U3R5bGUgIT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICAgICAgZm9udFN0ciArPSB0aGlzLmZvbnRTdHlsZSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmZvbnRXZWlnaHQgJiYgdGhpcy5mb250V2VpZ2h0ICE9PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgICAgIGZvbnRTdHIgKz0gdGhpcy5mb250V2VpZ2h0ICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lvZPliY3lrZjlnKjkuIrmoIfmiJbogIXkuIvmoIfvvIzlpKflsI/kuLozLzVcbiAgICAgICAgICAgIGZvbnRTdHIgKz0gKHRoaXMudmVydEFsaWduID8gdGhpcy5mb250U2l6ZSAqIDMgLyA1IDogdGhpcy5mb250U2l6ZSkgKyAncHggJztcbiAgICAgICAgICAgIGZvbnRTdHIgKz0gZm9udE1hcEZ1bmMuZ2V0Rm9udE1hcCh0aGlzLmZvbnROYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX19jYWNoZUZvbnQgPSBmb250U3RyO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19jYWNoZUZvbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlcXVhbHMocHJvcHM6IFRleHRQcm9wcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYWNrZ3JvdW5kID09PSBwcm9wcy5iYWNrZ3JvdW5kXG4gICAgICAgICAgICAmJiB0aGlzLmNvbG9yID09PSBwcm9wcy5jb2xvclxuICAgICAgICAgICAgJiYgdGhpcy5mb250TmFtZSA9PT0gcHJvcHMuZm9udE5hbWVcbiAgICAgICAgICAgICYmIHRoaXMuZm9udFNpemUgPT09IHByb3BzLmZvbnRTaXplXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnRXZWlnaHQgPT09IHByb3BzLmZvbnRXZWlnaHRcbiAgICAgICAgICAgICYmIHRoaXMubGV0dGVyU3BhY2UgPT09IHByb3BzLmxldHRlclNwYWNlXG4gICAgICAgICAgICAmJiB0aGlzLnVuZGVybGluZSA9PT0gcHJvcHMudW5kZXJsaW5lXG4gICAgICAgICAgICAmJiB0aGlzLm92ZXJsaW5lID09PSBwcm9wcy5vdmVybGluZVxuICAgICAgICAgICAgJiYgdGhpcy5saW5ldGhyb3VnaCA9PT0gcHJvcHMubGluZXRocm91Z2hcbiAgICAgICAgICAgICYmIHRoaXMuZm9udFN0eWxlID09PSBwcm9wcy5mb250U3R5bGVcbiAgICAgICAgICAgICYmIHRoaXMudmVydEFsaWduID09PSBwcm9wcy52ZXJ0QWxpZ25cbiAgICAgICAgICAgICYmIHRoaXMuYm9yZGVyID09PSBwcm9wcy5ib3JkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICAvL+auteiQvem7mOiupOeahOaWh+acrOWxnuaAp1xuICAgIHRleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBpbmRlbnQgPSAwO1xuICAgIGhhbmdpbmcgPSAwO1xuICAgIGxpbmVIZWlnaHQgPSAxLjM7XG4gICAgdGV4dEFsaWduOiBUZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgbnVtYmVyVHlwZSA9IC0xO1xuICAgIHBhZ2VCcmVhayA9IGZhbHNlO1xuICAgIGNsb25lKGRlc3Q6IFBhcmFncmFwaFByb3BzIHwgbnVsbCA9IG51bGwpOiBQYXJhZ3JhcGhQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgUGFyYWdyYXBoUHJvcHMoKTtcbiAgICAgICAgY2xvbmUuaW5kZW50ID0gdGhpcy5pbmRlbnQ7XG4gICAgICAgIGNsb25lLm51bWJlclR5cGUgPSB0aGlzLm51bWJlclR5cGU7XG4gICAgICAgIGNsb25lLmxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7XG4gICAgICAgIGNsb25lLnRleHRBbGlnbiA9IHRoaXMudGV4dEFsaWduO1xuICAgICAgICBjbG9uZS50ZXh0UHJvcHMgPSB0aGlzLnRleHRQcm9wcy5jbG9uZShuZXcgVGV4dFByb3BzKCkpO1xuICAgICAgICAvL+W8uuWItuaNoumhteWxnuaAp+S4jeWPr+WkjeWItlxuICAgICAgICAvL2Nsb25lLnBhZ2VCcmVhaz10aGlzLnBhZ2VCcmVhaztcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8UGFyYWdyYXBoUHJvcHM+ID0ge307XG4gICAgICAgIGlmICh0aGlzLmluZGVudCkge1xuICAgICAgICAgICAgcHJvcHNbXCJpbmRlbnRcIl0gPSB0aGlzLmluZGVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYW5naW5nKSB7XG4gICAgICAgICAgICBwcm9wc1tcImhhbmdpbmdcIl0gPSB0aGlzLmhhbmdpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGluZUhlaWdodCAmJiB0aGlzLmxpbmVIZWlnaHQgIT09IDEuMykge1xuICAgICAgICAgICAgcHJvcHNbXCJsaW5lSGVpZ2h0XCJdID0gdGhpcy5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRleHRBbGlnbiAmJiB0aGlzLnRleHRBbGlnbiAhPT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIHByb3BzW1widGV4dEFsaWduXCJdID0gdGhpcy50ZXh0QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubnVtYmVyVHlwZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHByb3BzW1wibnVtYmVyVHlwZVwiXSA9IHRoaXMubnVtYmVyVHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50ZXh0UHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGR0ID0gdGhpcy50ZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpIGFzIFRleHRQcm9wcztcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkdCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcHJvcHNbXCJ0ZXh0UHJvcHNcIl0gPSBkdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdlQnJlYWspIHtcbiAgICAgICAgICAgIHByb3BzW1wicGFnZUJyZWFrXCJdID0gdGhpcy5wYWdlQnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICB3aWR0aCE6IG51bWJlcjtcbiAgICBoZWlnaHQhOiBudW1iZXI7XG4gICAgcGFkZGluZyE6IFBhZGRpbmdQcm9wcztcbiAgICBoZWFkZXJMaW5lID0gMTI7XG4gICAgZm9vdGVyTGluZSA9IDEyO1xuICAgIG9yaWVudDogT3JpZW50VHlwZSA9ICdwb3J0cmFpdCdcbiAgICBjcmVhdGVVc2VySWQhOiBzdHJpbmc7XG4gICAgY3JlYXRlVXNlck5hbWUhOiBzdHJpbmc7XG4gICAgY3JlYXRlRGF0ZSE6IHN0cmluZztcbiAgICBzY3JpcHRzITogc3RyaW5nO1xuXG4gICAgY2xvbmUoZGVzdDogRG9jdW1lbnRQcm9wcyk6IERvY3VtZW50UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERvY3VtZW50UHJvcHMoKTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUucGFkZGluZyA9IHRoaXMucGFkZGluZy5jbG9uZSgpO1xuICAgICAgICBjbG9uZS5oZWFkZXJMaW5lID0gdGhpcy5oZWFkZXJMaW5lO1xuICAgICAgICBjbG9uZS5mb290ZXJMaW5lID0gdGhpcy5mb290ZXJMaW5lO1xuICAgICAgICBjbG9uZS5zY3JpcHRzID0gdGhpcy5zY3JpcHRzO1xuICAgICAgICBjbG9uZS5jcmVhdGVVc2VySWQgPSB0aGlzLmNyZWF0ZVVzZXJJZDtcbiAgICAgICAgY2xvbmUuY3JlYXRlVXNlck5hbWUgPSB0aGlzLmNyZWF0ZVVzZXJOYW1lO1xuICAgICAgICBjbG9uZS5jcmVhdGVEYXRlID0gdGhpcy5jcmVhdGVEYXRlO1xuICAgICAgICBjbG9uZS5vcmllbnQgPSB0aGlzLm9yaWVudDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RG9jdW1lbnRQcm9wcz4gPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXG4gICAgICAgICAgICBoZWFkZXJMaW5lOiB0aGlzLmhlYWRlckxpbmUsXG4gICAgICAgICAgICBmb290ZXJMaW5lOiB0aGlzLmZvb3RlckxpbmUsXG4gICAgICAgICAgICBjcmVhdGVEYXRlOiB0aGlzLmNyZWF0ZURhdGUsXG4gICAgICAgICAgICBjcmVhdGVVc2VyTmFtZTogdGhpcy5jcmVhdGVVc2VyTmFtZSxcbiAgICAgICAgICAgIGNyZWF0ZVVzZXJJZDogdGhpcy5jcmVhdGVVc2VySWRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc2NyaXB0cykge1xuICAgICAgICAgICAgcHJvcHNbJ3NjcmlwdHMnXSA9IHRoaXMuc2NyaXB0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmllbnQgJiYgdGhpcy5vcmllbnQgIT09ICdwb3J0cmFpdCcpIHtcbiAgICAgICAgICAgIHByb3BzWydvcmllbnQnXSA9IHRoaXMub3JpZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGVja0JveFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgc2l6ZSE6IG51bWJlcjtcbiAgICBpc0NoZWNrZWQhOiBib29sZWFuO1xuICAgIC8v55So5LqO5aSN6YCJ5qGG5YiG57uEXG4gICAgZ3JvdXBOYW1lITogc3RyaW5nIHwgbnVsbDtcblxuICAgIGNsb25lKGRlc3Q6IENoZWNrQm94UHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBDaGVja0JveFByb3BzKCk7XG4gICAgICAgIGNsb25lLnNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIGNsb25lLmlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkO1xuICAgICAgICBjbG9uZS5ncm91cE5hbWUgPSB0aGlzLmdyb3VwTmFtZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgaXNDaGVja2VkOiB0aGlzLmlzQ2hlY2tlZCxcbiAgICAgICAgICAgIGdyb3VwTmFtZTogdGhpcy5ncm91cE5hbWUsXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG5cbiAgICBzaXplITogbnVtYmVyO1xuICAgIGlzQ2hlY2tlZCE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBSYWRpb0JveFByb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgUmFkaW9Cb3hQcm9wcygpO1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjbG9uZS5pc0NoZWNrZWQgPSB0aGlzLmlzQ2hlY2tlZDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgaXNDaGVjZWQ6IHRoaXMuaXNDaGVja2VkXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIG1pbkhlaWdodCE6IG51bWJlcjtcbiAgICBoZWFkZXJSb3chOiBib29sZWFuO1xuXG4gICAgY2xvbmUoZGVzdDogVGFibGVSb3dQcm9wcykge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFRhYmxlUm93UHJvcHMoKTtcbiAgICAgICAgY2xvbmUubWluSGVpZ2h0ID0gdGhpcy5taW5IZWlnaHQ7XG4gICAgICAgIGNsb25lLmhlYWRlclJvdyA9IHRoaXMuaGVhZGVyUm93O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxUYWJsZVJvd1Byb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5taW5IZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm1pbkhlaWdodFwiXSA9IHRoaXMubWluSGVpZ2h0O1xuICAgICAgICAgICAgcHJvcHNbXCJoZWFkZXJSb3dcIl0gPSB0aGlzLmhlYWRlclJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIHByb3BzWydoZWFkZXJSb3cnXSA9IHRoaXMuaGVhZGVyUm93O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFRhYmxlQWxpZ25tZW50ID0gJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG5cbiAgICAvL2F1dG8g5oiW6ICF5YW35L2T55qE5YC8XG4gICAgd2lkdGghOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgY29scyE6IEFycmF5PHtcbiAgICAgICAgd2lkdGg6IG51bWJlciB8IHN0cmluZztcbiAgICB9PjtcbiAgICBhbGlnbm1lbnQhOiBUYWJsZUFsaWdubWVudDtcbiAgICBib3JkZXI6ICdhbGwnIHwgJ25vbmUnID0gJ2FsbCc7XG4gICAgYWxsb3dCcmVha1JvdyE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBUYWJsZVByb3BzKTogVGFibGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgVGFibGVQcm9wcygpO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmNvbHMgPSBbLi4udGhpcy5jb2xzXTtcbiAgICAgICAgY2xvbmUuYWxpZ25tZW50ID0gdGhpcy5hbGlnbm1lbnQ7XG4gICAgICAgIGNsb25lLmJvcmRlciA9IHRoaXMuYm9yZGVyO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGNvbHM6IHRoaXMuY29scyxcbiAgICAgICAgICAgIGFsaWdubWVudDogdGhpcy5hbGlnbm1lbnQsXG4gICAgICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBDZWxsTWVyZ2VUeXBlID0gJ2NvbC1tZXJnZScgfCAncm93LW1lcmdlJztcbmV4cG9ydCB0eXBlIFZNZXJnZVR5cGUgPSAncmVzdGFydCcgfCAnY29udGludWUnO1xuZXhwb3J0IHR5cGUgSE1lcmdlVHlwZSA9ICdyZXN0YXJ0JyB8ICdjb250aW51ZSc7XG5leHBvcnQgdHlwZSBWZXJ0aWNhbEFsaWduID0gJ3RvcCcgfCAnbWlkZGxlJyB8ICdib3R0b20nO1xuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcblxuICAgIHZNZXJnZSE6IFZNZXJnZVR5cGUgfCBudWxsO1xuICAgIGhNZXJnZSE6IEhNZXJnZVR5cGUgfCBudWxsO1xuICAgIHZBbGlnbiE6IFZlcnRpY2FsQWxpZ24gfCBudWxsO1xuICAgIGJhY2tncm91bmRDb2xvciE6IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDlr7nop5Lnur9cbiAgICAgKi9cbiAgICBkaWFnb25hbCE6ICdtYWluJyB8ICdzdWInIHwgbnVsbDtcblxuICAgIGNsb25lKGRlc3Q6IFRhYmxlQ2VsbFByb3BzKTogVGFibGVDZWxsUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFRhYmxlQ2VsbFByb3BzKCk7XG4gICAgICAgIGNsb25lLnZNZXJnZSA9IHRoaXMudk1lcmdlO1xuICAgICAgICBjbG9uZS5oTWVyZ2UgPSB0aGlzLmhNZXJnZTtcbiAgICAgICAgY2xvbmUudkFsaWduID0gdGhpcy52QWxpZ247XG4gICAgICAgIGNsb25lLmJhY2tncm91bmRDb2xvciA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBjbG9uZS5kaWFnb25hbCA9IHRoaXMuZGlhZ29uYWw7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VGFibGVDZWxsUHJvcHM+ID0ge307XG4gICAgICAgIGlmICh0aGlzLnZNZXJnZSkge1xuICAgICAgICAgICAgcHJvcHNbJ3ZNZXJnZSddID0gdGhpcy52TWVyZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaE1lcmdlKSB7XG4gICAgICAgICAgICBwcm9wc1snaE1lcmdlJ10gPSB0aGlzLmhNZXJnZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52QWxpZ24gJiYgdGhpcy52QWxpZ24gIT09ICd0b3AnKSB7XG4gICAgICAgICAgICBwcm9wc1sndkFsaWduJ10gPSB0aGlzLnZBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIHByb3BzWydiYWNrZ3JvdW5kQ29sb3InXSA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpYWdvbmFsKSB7XG4gICAgICAgICAgICBwcm9wc1snZGlhZ29uYWwnXSA9IHRoaXMuZGlhZ29uYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIHRpdGxlITogc3RyaW5nO1xuICAgIHdpZHRoITogbnVtYmVyO1xuICAgIGhlaWdodCE6IG51bWJlcjtcbiAgICBzcmMhOiBzdHJpbmc7XG4gICAgYm9yZGVyITogJ2FsbCcgfCAnbm9uZSc7XG5cbiAgICBjbG9uZShkZXN0OiBQaWN0dXJlUHJvcHMpOiBQaWN0dXJlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFBpY3R1cmVQcm9wcygpO1xuICAgICAgICBjbG9uZS53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGNsb25lLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICBjbG9uZS5zcmMgPSB0aGlzLnNyYztcbiAgICAgICAgY2xvbmUuYm9yZGVyID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIGNsb25lLnRpdGxlID0gdGhpcy50aXRsZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFBpY3R1cmVQcm9wcz4gPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBzcmM6IHRoaXMuc3JjLFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlcixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMudGl0bGUpIHtcbiAgICAgICAgICAgIHByb3BzWyd0aXRsZSddID0gdGhpcy50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YURlY29yYXRlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBjb250ZW50ITogc3RyaW5nO1xuICAgIHNpemUhOiBudW1iZXI7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRGVjb3JhdGVQcm9wcyk6IERhdGFEZWNvcmF0ZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRGVjb3JhdGVQcm9wcygpO1xuICAgICAgICBjbG9uZS5jb250ZW50ID0gdGhpcy5jb250ZW50O1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIERhdGFFbGVUeXBlcyA9ICd0ZXh0JyB8ICdkcm9wbGlzdCcgfCAnZGF0ZScgfCAnY2hlY2snIHwgJ2ltZyc7XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVCYXNlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBuYW1lITogc3RyaW5nO1xuICAgIGZpZWxkTmFtZSE6IHN0cmluZztcbiAgICBjYXB0aW9uITogc3RyaW5nO1xuICAgIHJlcXVpcmVkITogYm9vbGVhbjtcbiAgICBwcmludGFibGUhOiBib29sZWFuO1xuICAgIHNlY3JldEJyb3dzZSE6IGJvb2xlYW47XG4gICAgZWRpdGFibGUhOiBib29sZWFuO1xuICAgIGRlbGV0ZWFibGUhOiBib29sZWFuO1xuICAgIG1pbkxlbmd0aCE6IG51bWJlcjtcbiAgICB0eXBlITogRGF0YUVsZVR5cGVzO1xuICAgIHVuZGVybGluZSE6IGJvb2xlYW47XG5cbiAgICBjbG9uZUJhc2VQcm9wcyhkZXN0UHJvcHM6IERhdGFFbGVCYXNlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wVmFsdWUodGhpcywgZGVzdFByb3BzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByb3BWYWx1ZShzb3VyY2U6IERhdGFFbGVCYXNlUHJvcHMsIHRhcmdldDogRGF0YUVsZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgICAgICB0YXJnZXQuaWQgPSBzb3VyY2UuaWQ7XG4gICAgICAgIHRhcmdldC5uYW1lID0gc291cmNlLm5hbWU7XG4gICAgICAgIHRhcmdldC5jYXB0aW9uID0gc291cmNlLmNhcHRpb247XG4gICAgICAgIHRhcmdldC5maWVsZE5hbWUgPSBzb3VyY2UuZmllbGROYW1lO1xuICAgICAgICB0YXJnZXQucmVxdWlyZWQgPSBzb3VyY2UucmVxdWlyZWQ7XG4gICAgICAgIHRhcmdldC5lZGl0YWJsZSA9IHNvdXJjZS5lZGl0YWJsZTtcbiAgICAgICAgdGFyZ2V0LmRlbGV0ZWFibGUgPSBzb3VyY2UuZGVsZXRlYWJsZTtcbiAgICAgICAgdGFyZ2V0LnNlY3JldEJyb3dzZSA9IHNvdXJjZS5zZWNyZXRCcm93c2U7XG4gICAgICAgIHRhcmdldC5wcmludGFibGUgPSBzb3VyY2UucHJpbnRhYmxlO1xuICAgICAgICB0YXJnZXQubWluTGVuZ3RoID0gc291cmNlLm1pbkxlbmd0aDtcbiAgICAgICAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgICAgICAgdGFyZ2V0LnVuZGVybGluZSA9IHNvdXJjZS51bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVCYXNlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRQcm9wVmFsdWUocHJvcHMsIHRoaXMpO1xuICAgIH1cblxuICAgIGdldEJhc2VQcm9wcyhwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlUHJvcHM+LCBvcHRpb25zOiBWaWV3T3B0aW9ucyk6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVByb3BzPiB7XG4gICAgICAgIHByb3BzW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBwcm9wc1tcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIHByb3BzW1wiZmllbGROYW1lXCJdID0gdGhpcy5maWVsZE5hbWU7XG4gICAgICAgIHByb3BzW1widHlwZVwiXSA9IHRoaXMudHlwZTtcbiAgICAgICAgaWYgKHRoaXMuY2FwdGlvbikge1xuICAgICAgICAgICAgcHJvcHNbXCJjYXB0aW9uXCJdID0gdGhpcy5jYXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBwcm9wc1tcInJlcXVpcmVkXCJdID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcmludGFibGUpIHtcbiAgICAgICAgICAgIHByb3BzW1wicHJpbnRhYmxlXCJdID0gdGhpcy5wcmludGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VjcmV0QnJvd3NlKSB7XG4gICAgICAgICAgICBwcm9wc1tcInNlY3JldEJyb3dzZVwiXSA9IHRoaXMuc2VjcmV0QnJvd3NlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgcHJvcHNbJ2VkaXRhYmxlJ10gPSB0aGlzLmVkaXRhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWFibGUpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZGVsZXRlYWJsZVwiXSA9IHRoaXMuZGVsZXRlYWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHByb3BzW1wibWluTGVuZ3RoXCJdID0gdGhpcy5taW5MZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICBwcm9wc1tcInVuZGVybGluZVwiXSA9IHRoaXMudW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVCYXNlVGV4dFByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAndGV4dCc7XG4gICAgfVxuXG4gICAgdmFsdWVUZXh0UHJvcHMhOiBUZXh0UHJvcHM7XG4gICAgbnVsbFRleHQhOiBzdHJpbmc7XG4gICAgbnVsbFRleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBkYXRhVHlwZTogJ3RleHQnIHwgJ2ludCcgfCAnZmxvYXQnIHwgJ2VtYWlsJyB8ICdkYXRlJyB8ICdwaG9uZScgfCAnemlwY29kZScgPSAndGV4dCc7XG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZUJhc2VUZXh0UHJvcHMgfCBudWxsID0gbnVsbCk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlQmFzZVRleHRQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLnZhbHVlVGV4dFByb3BzID0gdGhpcy52YWx1ZVRleHRQcm9wcy5jbG9uZShudWxsKTtcbiAgICAgICAgY2xvbmUubnVsbFRleHQgPSB0aGlzLm51bGxUZXh0O1xuICAgICAgICBjbG9uZS5udWxsVGV4dFByb3BzID0gdGhpcy5udWxsVGV4dFByb3BzLmNsb25lKG51bGwpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlVGV4dFByb3BzPiA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHZhbHVlVGV4dFByb3BzOiB0aGlzLnZhbHVlVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpLFxuICAgICAgICAgICAgbnVsbFRleHQ6IHRoaXMubnVsbFRleHQsXG4gICAgICAgICAgICBudWxsVGV4dFByb3BzOiB0aGlzLm51bGxUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgJiYgdGhpcy5kYXRhVHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBwcm9wc1snZGF0YVR5cGUnXSA9IHRoaXMuZGF0YVR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgZ2V0QmFzZVByb3BzKHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VUZXh0UHJvcHM+LCBvcHRpb25zOiBWaWV3T3B0aW9ucyk6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVRleHRQcm9wcz4ge1xuICAgICAgICBzdXBlci5nZXRCYXNlUHJvcHMocHJvcHMsIG9wdGlvbnMpO1xuICAgICAgICBwcm9wc1sndmFsdWVUZXh0UHJvcHMnXSA9IHRoaXMudmFsdWVUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucyk7XG4gICAgICAgIHByb3BzWydudWxsVGV4dFByb3BzJ10gPSB0aGlzLm51bGxUZXh0UHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucyk7XG4gICAgICAgIHByb3BzWydudWxsVGV4dCddID0gdGhpcy5udWxsVGV4dDtcbiAgICAgICAgcHJvcHNbJ2RhdGFUeXBlJ10gPSB0aGlzLmRhdGFUeXBlO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVCYXNlVGV4dFByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy52YWx1ZVRleHRQcm9wcyA9IHByb3BzLnZhbHVlVGV4dFByb3BzO1xuICAgICAgICB0aGlzLm51bGxUZXh0ID0gcHJvcHMubnVsbFRleHQ7XG4gICAgICAgIHRoaXMubnVsbFRleHRQcm9wcyA9IHByb3BzLm51bGxUZXh0UHJvcHM7XG4gICAgICAgIHRoaXMuZGF0YVR5cGUgPSBwcm9wcy5kYXRhVHlwZTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUVsZUxpc3RPcHRpb24ge1xuICAgIGNvZGU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlTGlzdFByb3BzIGV4dGVuZHMgRGF0YUVsZUJhc2VUZXh0UHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2Ryb3BsaXN0JztcbiAgICB9XG5cbiAgICBvcHRpb25zOiBBcnJheTxEYXRhRWxlTGlzdE9wdGlvbj4gPSBbXTtcbiAgICBkcm9wRG93blN0eWxlITogJ0Ryb3BEb3duTGlzdCcgfCAnRHJvcERvd24nO1xuICAgIC8qKlxuICAgICAqIOaYr+WQpuWFgeiuuOWkmumAiVxuICAgICAqL1xuICAgIG11bHRpU2VsZWN0ITogYm9vbGVhbjtcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVMaXN0UHJvcHMgfCBudWxsKTogRGF0YUVsZUxpc3RQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUxpc3RQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZShjbG9uZSk7XG4gICAgICAgIGNsb25lLm9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcbiAgICAgICAgY2xvbmUuZHJvcERvd25TdHlsZSA9IHRoaXMuZHJvcERvd25TdHlsZTtcbiAgICAgICAgY2xvbmUubXVsdGlTZWxlY3QgPSB0aGlzLm11bHRpU2VsZWN0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVMaXN0UHJvcHM+ID0ge1xuICAgICAgICAgICAgb3B0aW9uczogWy4uLnRoaXMub3B0aW9uc10sXG4gICAgICAgICAgICBtdWx0aVNlbGVjdDogdGhpcy5tdWx0aVNlbGVjdCxcbiAgICAgICAgICAgIGRyb3BEb3duU3R5bGU6IHRoaXMuZHJvcERvd25TdHlsZSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlTGlzdFByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gcHJvcHMub3B0aW9ucztcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0O1xuICAgICAgICB0aGlzLmRyb3BEb3duU3R5bGUgPSBwcm9wcy5kcm9wRG93blN0eWxlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Db250ZW50UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBjcmVhdGVJZCE6IHN0cmluZztcbiAgICBjcmVhdGVOYW1lITogc3RyaW5nO1xuICAgIGNyZWF0ZURhdGUhOiBEYXRlO1xuXG4gICAgY2xvbmUoZGVzdDogQ29tbUNvbnRlbnRQcm9wcyk6IENvbW1Db250ZW50UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IENvbW1Db250ZW50UHJvcHMoKTtcbiAgICAgICAgY2xvbmUuaWQgPSB0aGlzLmlkO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Qcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGlkITogc3RyaW5nO1xuICAgIG1hcmtUeXBlITogXCJzdGFydFwiIHwgXCJlbmRcIjtcblxuICAgIGNsb25lKGRlc3Q6IENvbW1Qcm9wcyk6IENvbW1Qcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgQ29tbVByb3BzKCk7XG4gICAgICAgIGNsb25lLmlkID0gdGhpcy5pZDtcbiAgICAgICAgY2xvbmUubWFya1R5cGUgPSB0aGlzLm1hcmtUeXBlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIG1hcmtUeXBlOiB0aGlzLm1hcmtUeXBlXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlQ2hlY2tQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2NoZWNrJztcbiAgICB9XG5cbiAgICBzaXplITogbnVtYmVyO1xuICAgIGNoZWNrZWQhOiBib29sZWFuO1xuICAgIGNoZWNrZWRWYWx1ZTogc3RyaW5nID0gJyc7XG4gICAgZ3JvdXBOYW1lITogc3RyaW5nO1xuICAgIG11bHRpU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlQ2hlY2tQcm9wcyB8IG51bGwpOiBEYXRhRWxlQ2hlY2tQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUNoZWNrUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjbG9uZS5ncm91cE5hbWUgPSB0aGlzLmdyb3VwTmFtZTtcbiAgICAgICAgY2xvbmUubXVsdGlTZWxlY3QgPSB0aGlzLm11bHRpU2VsZWN0O1xuICAgICAgICBjbG9uZS5jaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlQ2hlY2tQcm9wcz4gPSB7XG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lLFxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IHRoaXMubXVsdGlTZWxlY3QsXG4gICAgICAgICAgICBjaGVja2VkVmFsdWU6IHRoaXMuY2hlY2tlZFZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVDaGVja1Byb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgdGhpcy5ncm91cE5hbWUgPSBwcm9wcy5ncm91cE5hbWU7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSBwcm9wcy5jaGVja2VkVmFsdWU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlSW1hZ2VQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzdXBlci50eXBlID0gJ2ltZyc7XG4gICAgfVxuXG4gICAgd2lkdGghOiBudW1iZXI7XG4gICAgaGVpZ2h0ITogbnVtYmVyO1xuICAgIHNyYyE6IHN0cmluZztcbiAgICBib3JkZXIhOiAnYWxsJyB8ICdub25lJztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVJbWFnZVByb3BzIHwgbnVsbCk6IERhdGFFbGVJbWFnZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEYXRhRWxlSW1hZ2VQcm9wcygpO1xuICAgICAgICB0aGlzLmNsb25lQmFzZVByb3BzKGNsb25lKTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUuc3JjID0gdGhpcy5zcmM7XG4gICAgICAgIGNsb25lLmJvcmRlciA9IHRoaXMuYm9yZGVyO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVJbWFnZVByb3BzPiA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHNyYzogdGhpcy5zcmMsXG4gICAgICAgICAgICBib3JkZXI6IHRoaXMuYm9yZGVyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgdXBkYXRlUHJvcHMocHJvcHM6IERhdGFFbGVJbWFnZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZVByb3BzKHByb3BzKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICAgICAgdGhpcy5zcmMgPSBwcm9wcy5zcmM7XG4gICAgICAgIHRoaXMuYm9yZGVyID0gcHJvcHMuYm9yZGVyO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZURhdGVQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdkYXRlJztcbiAgICB9XG5cbiAgICBtaW5WYWx1ZT86IERhdGU7XG4gICAgbWF4VmFsdWU/OiBEYXRlO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlRGF0ZVByb3BzIHwgbnVsbCk6IERhdGFFbGVEYXRlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVEYXRlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmUoY2xvbmUpO1xuICAgICAgICBjbG9uZS5taW5WYWx1ZSA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIGNsb25lLm1heFZhbHVlID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgICAgY2xvbmUuZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZURhdGVQcm9wcz4gPSB7XG4gICAgICAgICAgICBtaW5WYWx1ZTogdGhpcy5taW5WYWx1ZSxcbiAgICAgICAgICAgIG1heFZhbHVlOiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLmZvcm1hdFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZURhdGVQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMubWluVmFsdWUgPSBwcm9wcy5taW5WYWx1ZTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IHByb3BzLm1heFZhbHVlO1xuICAgICAgICB0aGlzLmZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUNvbmRpdGlvbiB7XG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBtYXhMZW5ndGg6IG51bWJlciA9IC0xO1xuICAgIGRhdGFUeXBlOiAnc3RyaW5nJyB8ICdkYXRlJyB8ICd0aW1lJyB8ICdudW1iZXInIHwgJ2Zsb2F0JyA9ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZU1IUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICAvL+WInea9ruW5tOm+hFxuICAgIGFnZSE6IHN0cmluZztcbiAgICAvL+ihjOe7j+acn+WkqeaVsFxuICAgIGRheXMhOiBzdHJpbmc7XG4gICAgLy/mnIjnu4/lkajmnJ/lpKnmlbBcbiAgICBjeWNsZXMhOiBzdHJpbmc7XG4gICAgLy/mnKvmrKHmnIjnu4/ml7bpl7RcbiAgICBsYXN0RGF0ZSE6IHN0cmluZztcbiAgICAvL+mXree7j+W5tOm+hFxuICAgIGNsb3NlQWdlITogc3RyaW5nO1xuICAgIGtpbmQhOiBzdHJpbmc7XG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZU1IUHJvcHMgfCBudWxsKTogRGF0YUVsZU1IUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVNSFByb3BzKCk7XG4gICAgICAgIHRoaXMuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS5hZ2UgPSB0aGlzLmFnZTtcbiAgICAgICAgY2xvbmUuZGF5cyA9IHRoaXMuZGF5cztcbiAgICAgICAgY2xvbmUuY3ljbGVzID0gdGhpcy5jeWNsZXM7XG4gICAgICAgIGNsb25lLmxhc3REYXRlID0gdGhpcy5sYXN0RGF0ZTtcbiAgICAgICAgY2xvbmUuY2xvc2VBZ2UgPSB0aGlzLmNsb3NlQWdlO1xuICAgICAgICBjbG9uZS5raW5kID0gdGhpcy5raW5kO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlTUhQcm9wcz4gPSB7XG4gICAgICAgICAgICBhZ2U6IHRoaXMuYWdlLFxuICAgICAgICAgICAgZGF5czogdGhpcy5kYXlzLFxuICAgICAgICAgICAgY3ljbGVzOiB0aGlzLmN5Y2xlcyxcbiAgICAgICAgICAgIGxhc3REYXRlOiB0aGlzLmxhc3REYXRlLFxuICAgICAgICAgICAgY2xvc2VBZ2U6IHRoaXMuY2xvc2VBZ2UsXG4gICAgICAgICAgICBraW5kOiB0aGlzLmtpbmRcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFRyYWNrUnVuUHJvcHMge1xuICAgIHVzZXJJZCE6IHN0cmluZztcbiAgICB1c2VyTmFtZSE6IHN0cmluZztcbiAgICBkYXRlITogc3RyaW5nO1xuICAgIGlkITogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlOiBUcmFja1J1blR5cGVFbnVtKSB7XG4gICAgfVxuXG4gICAgY2xvbmUoZGVzdDogVHJhY2tSdW5Qcm9wcyB8IG51bGwpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QgPz8gbmV3IFRyYWNrUnVuUHJvcHModGhpcy50eXBlKTtcbiAgICAgICAgZGVzdC51c2VySWQgPSB0aGlzLnVzZXJJZDtcbiAgICAgICAgZGVzdC51c2VyTmFtZSA9IHRoaXMudXNlck5hbWU7XG4gICAgICAgIGRlc3QuZGF0ZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgZGVzdC5pZCA9IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VHJhY2tSdW5Qcm9wcz4gPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlcklkLFxuICAgICAgICAgICAgdXNlck5hbWU6IHRoaXMudXNlck5hbWUsXG4gICAgICAgICAgICBkYXRlOiB0aGlzLmRhdGUsXG4gICAgICAgICAgICBpZDogdGhpcy5pZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cblxuY2xhc3MgRm9udE1hcFN0cnVjdCB7XG4gICAgZm9udE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgbGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgcmVnaXN0ZXJGb250TWFwKG5hbWU6IHN0cmluZywga2V5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9udE1hcC5zZXQobmFtZSwga2V5TmFtZSk7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5mb250TWFwLnNpemU7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE1hcChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5mb250TWFwLmdldChuYW1lKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZvbnRNYXBGdW5jID0gbmV3IEZvbnRNYXBTdHJ1Y3QoKTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVQcm9wcyB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgdGl0bGUhOiBzdHJpbmc7XG4gICAgbXNnITogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cFByb3BzIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBuYW1lITogc3RyaW5nO1xuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVtZW50R3JvdXBQcm9wcyB8IG51bGwpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QgPz8gbmV3IERhdGFFbGVtZW50R3JvdXBQcm9wcygpO1xuICAgICAgICBkZXN0LmlkID0gdGhpcy5pZDtcbiAgICAgICAgZGVzdC5uYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcyB7XG4gICAgdHlwZTogJ2VuYTEzJyB8ICdjb2RlMTI4JyB8ICdjb2RlMzknIHwgJ3FyY29kZScgPSAnY29kZTEyOCc7XG4gICAgdGV4dDogc3RyaW5nID0gJyc7XG4gICAgd2lkdGg6IG51bWJlciA9IDA7XG4gICAgaGVpZ2h0OiBudW1iZXIgPSAwO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMgfCBudWxsKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0ID8/IG5ldyBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcygpO1xuICAgICAgICBkZXN0LnR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgIGRlc3QudGV4dCA9IHRoaXMudGV4dDtcbiAgICAgICAgZGVzdC53aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgIGRlc3QuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvZHlQYXJ0UHJvcHMge1xuICAgIHBhcnRJZCE6IHN0cmluZztcbn0iLCJpbXBvcnQgeyBCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBQb3NpdGlvbiwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IENvbW1lbnRSYW5nZVN0YXR1cyB9IGZyb20gXCIuL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tc0NvbnRhaW5lckVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY29tbS1saXN0Jyk7XG4gICAgICAgIHRoaXMubm9GaWxsRW1wdHkgPSB0cnVlO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC5tYXhXaWR0aCA9IG9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gcmVuZGVyLnJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tc0NvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICAvL+aJueazqOWGheWuueaYr+WQpuW3sue7j+mHjee7hCzlj6ropoHph43mlrDnu5jliLbnmoTml7blgJnnu4TlkIjkuIDmrKHljbPlj69cbiAgICBpc01lYXN1cmVDb21tITogYm9vbGVhbjtcbiAgICBzZWxlY3RlZFNldCE6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+O1xuICAgIGNvbW1lbnRSYW5nZVN0YXR1czogQXJyYXk8Q29tbWVudFJhbmdlU3RhdHVzPiA9IFtdO1xuICAgIGJlZ2luUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVjdC5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdibGFjaycsIDAuNSk7XG4gICAgfVxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG5cbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQ29tbWVudHNGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJjb21tLWxpc3RcIjtcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzRWxlID0gbmV3IENvbW1zQ29udGFpbmVyRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gY29tbWVudHNFbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTGVhZkVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IElubGluZUdyb3VwSW5wdXRFbGVtZW50LCB2YWxpZGF0ZUlubGluZUlucHV0UmVuZGVyT2JqIH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YURlY29yYXRlRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PGFueT4ge1xuICAgIC8vcHJvcHM6IERhdGFEZWNvcmF0ZVByb3BzO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhRWxlOiBJbmxpbmVHcm91cElucHV0RWxlbWVudCwgcHVibGljIGlzUHJlZml4OiBib29sZWFuKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWRlYycpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlIH0gPSBldnQuY3R4O1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCAmJiB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnBhcmVudCBhcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcyA9PT0gZ3JvdXAuZW5kRGVjb3JhdGUgJiYgc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShncm91cC5zdGFydERlY29yYXRlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFEZWNvcmF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgLy9yZW5kZXIucmVjdC53aWR0aCA9IHRoaXMuZFByb3BzLnNpemUgLyAyO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IDY7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IDE0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY2xvbmUoKTogRGF0YURlY29yYXRlRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFEZWNvcmF0ZUVsZW1lbnQodGhpcy5kYXRhRWxlLCB0aGlzLmlzUHJlZml4KTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIC8vY2xvbmUucmVuZGVyQ3R4ID0gdGhpcy5yZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRGVjb3JhdGVBcnJvd1JlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlckRlY29yUmVjdChjdHgsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZW5kZXJEZWNvclJlY3QoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGlmIChjdHguZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhRWxlUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyQnlQcmVkaWNhdGUodGhpcywgaXRlbSA9PiB2YWxpZGF0ZUlubGluZUlucHV0UmVuZGVyT2JqKGl0ZW0pKTtcbiAgICAgICAgaWYgKCFkYXRhRWxlUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUVsZVJlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlclBvcyhkYXRhRWxlUmVuZGVyLCB0aGlzLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgRGF0YURlY29yYXRlRWxlbWVudDtcbiAgICAgICAgbGV0IHsgeCwgeSwgaGVpZ2h0LCB3aWR0aCB9ID0gZGF0YUVsZVJlbmRlclBvcztcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gMjtcbiAgICAgICAgY29uc3QgcGFpbnRDb2xvciA9ICcjMDA1MGIzJztcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5zYXZlKCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucGFyZW50LnR5cGUgPT09ICdkYXRhLWdyb3VwJykge1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5zaGFkb3dCbHVyID0gNTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguc2hhZG93Q29sb3IgPSAnYmxhY2snO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmlzUHJlZml4KSB7XG4gICAgICAgICAgICB4ICs9IDI7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogeCArIGxpbmVXaWR0aCwgeSB9LCB7IHg6IHgsIHkgfSwgeyB4OiB4LCB5OiB5ICsgaGVpZ2h0IH0sIHsgeDogeCArIGxpbmVXaWR0aCwgeTogeSArIGhlaWdodCB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4ID0geCArIHdpZHRoIC0gMjtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiB4IC0gbGluZVdpZHRoLCB5IH0sIHsgeDogeCwgeSB9LCB7IHg6IHgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4OiB4IC0gbGluZVdpZHRoLCB5OiB5ICsgaGVpZ2h0IH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgfVxuICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFEZWNvcmF0ZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IERvY01vZGUsIEVsZW1lbnQsIElubGluZUdyb3VwRWxlbWVudCwgTGVhZkVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IElubGluZUdyb3VwUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEdvdEN1cnNvckV2ZW50LCBLZXlib3JhZEVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZUJhc2VQcm9wcywgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IERhdGFEZWNvcmF0ZUVsZW1lbnQgfSBmcm9tIFwiLi9kYXRhLWRlY29yYXRlLWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5cbi8qKlxuICog5omA5pyJ55qE5pWw5o2u5YWD57un5om/5LiK6L+w5Lik5Liq5oq96LGh57G7XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudExlYWY8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBMZWFmRWxlbWVudDxQPiB7XG4gICAgYWJzdHJhY3Qgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkO1xuICAgIGFic3RyYWN0IGdldFZhbHVlKCk6IGFueTtcbn1cblxuLyoqXG4gKiDlj6/kvpvovpPlhaXnmoTlhoXogZTlnZdcbiAqIOS9v+eUqOWcuuaZr++8muaVsOaNruWFg++8jOaVsOaNrue7hFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBJbmxpbmVHcm91cEVsZW1lbnQ8UD57XG4gICAgc3RhcnREZWNvcmF0ZSE6IERhdGFEZWNvcmF0ZUVsZW1lbnQ7XG4gICAgZW5kRGVjb3JhdGUhOiBEYXRhRGVjb3JhdGVFbGVtZW50O1xuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICAgICAgLy/ooYzlhoXlnZfkuI3lhYHorrjmjaLooYxcbiAgICAgICAgdGhpcy5hZGRFdmVudDxLZXlib3JhZEVsZW1lbnRFdmVudD4oJ0VsZW1lbnRLZXlEb3duJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGF0ZSwgc291cmNlRXZlbnQsIHNvdXJjZSB9ID0gZXZ0O1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIGlmIChJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUV2ZW50LnNoaWZ0S2V5ICYmIHNvdXJjZUV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5yZW1vdmVOdWxsVGV4dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNvdXJjZUV2ZW50LnNoaWZ0S2V5ICYmIHNvdXJjZUV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IGV2dC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIGlmIChJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnTG9zdEN1cnNvcicsIChldnQpID0+IHsgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTsgfSk7XG4gICAgfVxuXG4gICAgZmlsbERlY29yYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydERlY29yYXRlLCBlbmREZWNvcmF0ZSB9ID0gdGhpcy5jcmVhdGVEYXRhRGVjb3JhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoc3RhcnREZWNvcmF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGVuZERlY29yYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREZWNvcmF0ZSA9IHN0YXJ0RGVjb3JhdGU7XG4gICAgICAgICAgICB0aGlzLmVuZERlY29yYXRlID0gZW5kRGVjb3JhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRGVjb3JhdGUoKTogeyBzdGFydERlY29yYXRlOiBEYXRhRGVjb3JhdGVFbGVtZW50LCBlbmREZWNvcmF0ZTogRGF0YURlY29yYXRlRWxlbWVudCB9IHtcbiAgICAgICAgY29uc3Qgc3RhcnREZWNvcmF0ZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMsIHRydWUpO1xuICAgICAgICBjb25zdCBlbmREZWNvcmF0ZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0RGVjb3JhdGUsXG4gICAgICAgICAgICBlbmREZWNvcmF0ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGxEZWNvcmF0ZSgpO1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChjaGlsZDogRWxlbWVudDxhbnk+LCBpbmRleDogbnVtYmVyID0gLTEpOiB2b2lkIHtcbiAgICAgICAgaW5kZXggPSBpbmRleCA9PT0gLTEgPyB0aGlzLmxlbmd0aCA6IGluZGV4O1xuICAgICAgICBpbmRleCA9IGluZGV4ID4gdGhpcy5sZW5ndGggPyB0aGlzLmxlbmd0aCA6IGluZGV4O1xuICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgdGhpcy5zdGFydERlY29yYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudD8uYWRkQ2hpbGQoY2hpbGQsIHRoaXMuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmxlbmd0aCAmJiB0aGlzLmVuZERlY29yYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudD8uYWRkQ2hpbGQoY2hpbGQsIHRoaXMuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmFkZENoaWxkKGNoaWxkLCBpbmRleCk7XG4gICAgfVxuXG4gICAgY2xlYXJJbm5lckl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVJdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5zdGFydERlY29yYXRlICYmIGNoaWxkICE9PSB0aGlzLmVuZERlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlSXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlSXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMucmVtb3ZlQ2hpbGQoaXRlbSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8UCBleHRlbmRzIERhdGFFbGVCYXNlUHJvcHMgPSBEYXRhRWxlQmFzZVByb3BzICYgeyB2YWx1ZVRleHRQcm9wczogVGV4dFByb3BzIH0+IGV4dGVuZHMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ8UD4ge1xuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxHb3RDdXJzb3JFdmVudD4oJ0dvdEN1cnNvcicsIChldnQpID0+IHsgdGhpcy5vbkdvdEN1cnNvckV2ZW50KGV2dCkgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+KCdFbGVtZW50Q29udGV4dE1lbnUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWNvbjogJ1NldHRpbmdzJywgY2FwdGlvbjogJ+WGheWuueaOp+WItuiuvue9ricsIGV2ZW50T2JqOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIG9uR290Q3Vyc29yRXZlbnQoZXZ0OiBHb3RDdXJzb3JFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHNvdXJjZSwgc2VsZWN0aW9uU3RhdGUgfSA9IGV2dDtcbiAgICAgICAgaWYgKGV2dC5jdHgudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgLy/lvZPliY3mlbDmja7lhYPkuI3lj6/nvJbovpFcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSAmJiAhdGhpcy5wcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCA9PT0gdGhpcy5zdGFydERlY29yYXRlICYmIHN0YXJ0T2Zmc2V0ID09PSAwIHx8IHN0YXJ0Q29udHJvbCA9PT0gdGhpcy5lbmREZWNvcmF0ZSAmJiBzdGFydE9mZnNldCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb25TdGF0ZS5yYW5nZT8uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzb3VyY2UgPT09IHRoaXMuZW5kRGVjb3JhdGUgJiYgc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQgPT09IDAgJiYgdGhpcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHRoaXMuc3RhcnREZWNvcmF0ZSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhYnN0cmFjdCBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQ7XG4gICAgYWJzdHJhY3QgZ2V0VmFsdWUoKTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6aqM6K+B5pWw5o2u5YWD55qE5YC85piv5ZCm5ZCI5rOVXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgdmFsaWRhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVxdWlyZWQgJiYgdGhpcy5wcm9wcy5lZGl0YWJsZSAmJiAhdGhpcy5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+ivpeWtl+auteS4jeiDveS4uuepuic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3Q8VCBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgPSBEYXRhRWxlbWVudElubGluZUdyb3VwPiBleHRlbmRzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNhdmUoKTtcbiAgICAgICAgLy/nu5jliLbmlbDmja7lhYPljLrln5/lupXoibJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlDb2xvciA9IHRoaXMuZWxlbWVudC5wcm9wcy5lZGl0YWJsZSA/IGN0eC52aWV3T3B0aW9ucy5kYXRhRWxlT3ZlcmxheXNDb2xvciA6IGN0eC52aWV3T3B0aW9ucy5kYXRhRWxlUmVhZE9ubHlPdmVybGF5Q29sb3I7XG4gICAgICAgICAgICBjdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnkgLSAyLCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQgKyA0LCBvdmVybGF5Q29sb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMuc2VjcmV0QnJvd3NlICYmIGN0eC52aWV3T3B0aW9ucy5zZWNyZXRCcm93c2UpIHtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZmlsdGVyID0gXCJibHVyKDEwcHgpXCJcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgY29uc3QgeSA9IHBvc2l0aW9uLnkgKyAyICsgdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwb3NpdGlvbi54LCB5IH0sIHsgeDogcG9zaXRpb24ueCArIHRoaXMucmVjdC53aWR0aCwgeSB9XSwgMSwgJyM1OTU5NTknKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBjdHguY29udGVudENvbnRleHQucmVzdG9yZSgpO1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5wcm9wcy5wcmludGFibGUgJiYgY3R4LmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY2xlYXJSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YUVsZSA9IChlbGU6IEVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gZWxlIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRMZWFmIHx8IGVsZSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhRWxlUmVuZGVyT2JqID0gKHJlbmRlck9iajogUmVuZGVyT2JqZWN0KSA9PiB7XG4gICAgaWYgKHJlbmRlck9iai5lbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZURhdGFFbGUocmVuZGVyT2JqLmVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJbmxpbmVJbnB1dFJlbmRlck9iaiA9IChyZW5kZXJPYmo6IFJlbmRlck9iamVjdCkgPT4ge1xuICAgIGlmIChyZW5kZXJPYmouZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqLmVsZW1lbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cElucHV0RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiDmmK/lkKblnKjmlbDmja7lhYPlhoXpg6hcbiAqIEBwYXJhbSBjb250cm9sIFxuICogQHBhcmFtIG9mZnNldCBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzSW5TaWRlRGF0YUVsZW1lbnQoY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0aEVsZSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChjb250cm9sLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG4gICAgaWYgKG1hdGhFbGUpIHtcbiAgICAgICAgaWYgKChjb250cm9sID09PSBtYXRoRWxlLnN0YXJ0RGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAwKSB8fCAoY29udHJvbCA9PT0gbWF0aEVsZS5lbmREZWNvcmF0ZSAmJiBvZmZzZXQgPT09IDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIOaYr+WQpuWcqOWGheiBlOWdl+WGhemDqFxuICogQHBhcmFtIGNvbnRyb2wgXG4gKiBAcGFyYW0gb2Zmc2V0IFxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNJblNpZGVJbmxpbmVHcm91cElucHV0RWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRoRWxlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGNvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpIGFzIElubGluZUdyb3VwSW5wdXRFbGVtZW50O1xuICAgIGlmIChtYXRoRWxlKSB7XG4gICAgICAgIGlmICgoY29udHJvbCA9PT0gbWF0aEVsZS5zdGFydERlY29yYXRlICYmIG9mZnNldCA9PT0gMCkgfHwgKGNvbnRyb2wgPT09IG1hdGhFbGUuZW5kRGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbiIsImltcG9ydCB7UG9zaXRpb259IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZW54dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7Q29tbUNvbnRlbnRCYXNlRWxlbWVudCwgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0LH0gZnJvbSBcIi4vY29tbWVudC1jb250ZW50LWltcGxcIjtcbmltcG9ydCB7Q29tbWVudEVsZW1lbnQsIENvbW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQge0NvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuXG5pbnRlcmZhY2UgQ29tbU1hcFByb3BzIHtcbiAgICBjb21tTWFya1JlbmRlcjogQ29tbWVudFJlbmRlck9iamVjdCxcbiAgICBjb21tTWFya1BvczogUG9zaXRpb24sXG4gICAgY29tbUNvbnRlbnRSZW5kZXI6IENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxhbnk+LFxuICAgIGNvbW1Db250ZW50UG9zPzogUG9zaXRpb25cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRzVXRpbCB7XG4gICAgc3RhdGljIHJlbWVhc3VyZUNvbW1lbnRzKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBjb21tV2luZG93OiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCwgY29tbUNvbnRhaW5lcjogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QsIG1hcDogQXJyYXk8eyBlbGU6IENvbW1lbnRFbGVtZW50LCByZW5kZXI6IFJlbmRlck9iamVjdCwgcG9zOiBQb3NpdGlvbiB9Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tTWFwOiBBcnJheTxDb21tTWFwUHJvcHM+ID0gW107XG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihjb21tV2luZG93LCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29tbVJlbmRlciA9IGNvbW1Db250YWluZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCBjb21tRWxlID0gY29tbVJlbmRlci5lbGVtZW50IGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtYXBDb21tID0gbWFwLmZpbmQoaXRlbSA9PiBpdGVtLmVsZS5wcm9wcy5pZCA9PT0gY29tbUVsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAobWFwQ29tbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1NYXJrTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKG1hcENvbW0ucmVuZGVyLCBtYXBDb21tLnBvcyk7XG4gICAgICAgICAgICAgICAgbWFwQ29tbS5wb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50UmVuZGVyID0gY29tbVJlbmRlci5jbG9uZSgpIGFzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxhbnk+O1xuICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLnJlY3QueCA9IDA7XG4gICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIucmVjdC55ID0gbWFwQ29tbS5wb3MueTtcbiAgICAgICAgICAgICAgICBjb21tV2luZG93LmFkZENoaWxkKGNvbW1Db250ZW50UmVuZGVyKTtcbiAgICAgICAgICAgICAgICBjb21tTWFwLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb21tTWFya1JlbmRlcjogPENvbW1lbnRSZW5kZXJPYmplY3Q+bWFwQ29tbS5yZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1NYXJrUG9zOiBtYXBDb21tLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXI6IGNvbW1Db250ZW50UmVuZGVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1bUNvbW1lbnRIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1NYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbW1NYXBbaV07XG4gICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyID0gY29tbU1hcFtpIC0gMV0/LmNvbW1Db250ZW50UmVuZGVyO1xuICAgICAgICAgICAgY29uc3Qge2NvbW1Db250ZW50UmVuZGVyfSA9IG1hcDtcbiAgICAgICAgICAgIHN1bUNvbW1lbnRIZWlnaHQgKz0gY29tbUNvbnRlbnRSZW5kZXIucmVjdC5oZWlnaHQgKyA1O1xuICAgICAgICAgICAgaWYgKHByZXZSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7eTogcHJldlksIGhlaWdodDogcHJldkhlaWdodH0gPSBwcmV2UmVuZGVyLnJlY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSA8IHByZXZZICsgcHJldkhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBwcmV2WSArIHByZXZIZWlnaHQgKyA1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLmNvbW1NYXJrUmVuZGVyID0ge3JlbmRlcjogbWFwLmNvbW1NYXJrUmVuZGVyLCBwb3M6IG1hcC5jb21tTWFya1Bvc307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb21tTWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDb21tZW50TWFwID0gY29tbU1hcFtjb21tTWFwLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCB7Y29tbUNvbnRlbnRSZW5kZXI6IGxhc3RDb21tQ29udGVudFJlbmRlcn0gPSBsYXN0Q29tbWVudE1hcDtcbiAgICAgICAgY29uc3Qge3JlY3Q6IGxhc3RSZWN0fSA9IGxhc3RDb21tQ29udGVudFJlbmRlcjtcblxuICAgICAgICAvL+aJueazqOWGheWuuei2heWHuuaWh+aho++8jOmcgOimgemHjeaWsOaOkuW6j1xuICAgICAgICBpZiAobGFzdFJlY3QueSArIGxhc3RSZWN0LmhlaWdodCA+IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgLy/mgLvlhoXlrrnlsI/kuo7lrrnlmajpq5jluqYs5YiZ6L+b6KGM5YCS5o6SXG4gICAgICAgICAgICAvL+WQpuWImei/m+ihjOato+aOklxuICAgICAgICAgICAgaWYgKHN1bUNvbW1lbnRIZWlnaHQgPCBkb2NSZW5kZXIucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsYXN0UmVjdC55ID0gZG9jUmVuZGVyLnJlY3QuaGVpZ2h0IC0gbGFzdFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tTWFwLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbW1NYXBbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZSZW5kZXIgPSBjb21tTWFwW2kgKyAxXT8uY29tbUNvbnRlbnRSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtjb21tQ29udGVudFJlbmRlcn0gPSBtYXA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7eTogcHJldll9ID0gcHJldlJlbmRlci5yZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSArIGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0ID4gcHJldlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBwcmV2WSAtIGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5jb21tTWFya1JlbmRlciA9IHtyZW5kZXI6IG1hcC5jb21tTWFya1JlbmRlciwgcG9zOiBtYXAuY29tbU1hcmtQb3N9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKG51bGwpO1xuICAgIH1cbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBhZGRQYWdlcyhwYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQocGFnZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBMZWFmRWxlbWVudCwgUmVjdCwgRWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBQb3NpdGlvbiB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBIaXRFdmVudEluZm8sIEhpdFJlZ2lvbiB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFNlbGVjdGlvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUgPSBuZXcgU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgc25hcHNob3RTZWxlY3Rpb25TdGF0ZSE6IFNlbGVjdGlvblN0YXRlIHwgbnVsbDtcbiAgICBzZXRTZWxlY3Rpb25TdGF0ZShoaXRJbmZvOiB7IHN0YXJ0SGl0SW5mbzogSGl0RXZlbnRJbmZvLCBlbmRIaXRJbmZvOiBIaXRFdmVudEluZm8gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0SGl0SW5mbywgZW5kSGl0SW5mbyB9ID0gaGl0SW5mbztcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0SGl0SW5mbyA9IHN0YXJ0SGl0SW5mbztcbiAgICAgICAgaWYgKCFzdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHN0YXJ0UmFuZ2Uuc2V0U3RhcnQoc3RhcnRIaXRJbmZvLmVsZW1lbnQsIHN0YXJ0SGl0SW5mby5vZmZzZXQpO1xuICAgICAgICBpZiAoZW5kSGl0SW5mbykge1xuICAgICAgICAgICAgc3RhcnRSYW5nZS5zZXRFbmQoZW5kSGl0SW5mby5lbGVtZW50LCBlbmRIaXRJbmZvLm9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydFJhbmdlLnNldEVuZChzdGFydEhpdEluZm8uZWxlbWVudCwgc3RhcnRIaXRJbmZvLm9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShzdGFydFJhbmdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOiOt+WPlumAieWMuuWFseWQjOeahOelluWFiOaOp+S7tlxuICAgICovXG4gICAgc3RhdGljIGdldEFuY2VzdG9yQ29tbW9uQ29udHJvbChzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBlbmRDb250cm9sOiBMZWFmRWxlbWVudCk6IEJyYW5jaEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzdGFydE5lc3RQYXJlbnRzID0gdGhpcy5nZXROZXN0UGFyZW50cyhzdGFydENvbnRyb2wucGFyZW50KTtcbiAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sID0gdGhpcy5nZXRDb21tb25QYXJlbmV0KGVuZENvbnRyb2wucGFyZW50LCBzdGFydE5lc3RQYXJlbnRzKTtcbiAgICAgICAgaWYgKCFhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5YWs5YWx55qE56WW5YWI57uE5Lu2Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9yQ29tbW9uQ29udHJvbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blkJHkuIrnmoTltYzlpZfniLbnuqfoioLngrnpm4blkIhcbiAgICAgKiBAcGFyYW0gY29udHJvbCBcbiAgICAgKiBAcGFyYW0gYXJyYXkgXG4gICAgICovXG4gICAgc3RhdGljIGdldE5lc3RQYXJlbnRzKGNvbnRyb2w6IEJyYW5jaEVsZW1lbnQgfCBudWxsKTogQXJyYXk8QnJhbmNoRWxlbWVudD4ge1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtjb250cm9sLCAuLi50aGlzLmdldE5lc3RQYXJlbnRzKGNvbnRyb2wucGFyZW50KV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvbW1vblBhcmVuZXQoY29udHJvbDogQnJhbmNoRWxlbWVudCB8IG51bGwsIGFycmF5OiBBcnJheTxCcmFuY2hFbGVtZW50Pik6IEJyYW5jaEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyYXkuc29tZShpdGVtID0+IGl0ZW0gPT09IGNvbnRyb2wpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tb25QYXJlbmV0KGNvbnRyb2w/LnBhcmVudCwgYXJyYXkpO1xuICAgIH1cblxuICAgIHVwZGF0ZVNlbGVjdGlvblN0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jb21wYXJlU2VsZWN0aW9uRXF1YWxzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUmFuZ2UoKTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLnN0YXJ0Q29udHJvbCk7XG4gICAgICAgIGNvbnN0IGVuZENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChyYW5nZS5lbmRDb250cm9sKTtcbiAgICAgICAgaWYgKGVuZENvbnRyb2xJbmRleCA8IHN0YXJ0Q29udHJvbEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHJhbmdlLmNsb25lKCk7XG4gICAgICAgICAgICBjbG9uZS5zdGFydENvbnRyb2wgPSByYW5nZS5lbmRDb250cm9sO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRPZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQ7XG4gICAgICAgICAgICBjbG9uZS5lbmRDb250cm9sID0gcmFuZ2Uuc3RhcnRDb250cm9sO1xuICAgICAgICAgICAgY2xvbmUuZW5kT2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBjbG9uZS5lZGl0YWJsZSA9IHJhbmdlLmVkaXRhYmxlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShjbG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSA9IHJhbmdlLmVkaXRhYmxlO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sID0gcmFuZ2Uuc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2Uuc3RhcnRDb250cm9sKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZENvbnRyb2wgPSByYW5nZS5lbmRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2UuZW5kQ29udHJvbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBEb2N1bWVudFNlbGVjdGlvbi5nZXRBbmNlc3RvckNvbW1vbkNvbnRyb2wodGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5kQ29udHJvbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMgPSB0aGlzLmdldEVuYWJsZVRyYWNrQ2hhbmdlcyhyYW5nZS5zdGFydENvbnRyb2wpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3pgInljLrljLrln5/lhoXmmK/lkKbmlK/mjIHnlZnnl5VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RW5hYmxlVHJhY2tDaGFuZ2VzKGVsZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBib2R5ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVsZSwgRG9jdW1lbnRCb2R5RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBib2R5Py50cmFja0NoYW5nZXMgfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0aW9uRXF1YWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIGNvbnN0IHNuYXAgPSB0aGlzLnNuYXBzaG90U2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzbmFwICYmIHJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnRDb250cm9sID09PSBzbmFwLnN0YXJ0Q29udHJvbFxuICAgICAgICAgICAgICAgICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSBzbmFwLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgJiYgcmFuZ2UuZW5kQ29udHJvbCA9PT0gc25hcC5lbmRDb250cm9sXG4gICAgICAgICAgICAgICAgJiYgcmFuZ2UuZW5kT2Zmc2V0ID09PSBzbmFwLmVuZE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6L2s5o2i6YCJ5Yy65YaF5a65XG4gICAgICog5aSE55CG57uT5p2f6YCJ5Yy65Zyo5byA5aeL6YCJ5Yy65LmL5YmNXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1SYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5yYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0IH0gPSByYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoc3RhcnRDb250cm9sKTtcbiAgICAgICAgY29uc3QgZW5kQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVuZENvbnRyb2wpO1xuICAgICAgICBpZiAoKGVuZENvbnRyb2xJbmRleCA8IHN0YXJ0Q29udHJvbEluZGV4KSkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRDb250cm9sID0gZW5kQ29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgICAgICAgICAgY2xvbmUuZW5kQ29udHJvbCA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShjbG9uZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JhbmdlIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIHJhbmdlLmNhbGNSYW5nZSgpO1xuICAgICAgICBpZiAoKHJhbmdlLnN0YXJ0Q29udHJvbCA9PT0gcmFuZ2UuZW5kQ29udHJvbCAmJiByYW5nZS5zdGFydE9mZnNldCA+IHJhbmdlLmVuZE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlLmNhbGNSYW5nZSgpO1xuICAgIH1cblxuICAgIHRha2VTbmFwc2hvdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdFNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbG9uZSgpO1xuICAgIH1cblxuICAgIGNsZWFyU25hcHNob3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc25hcHNob3RTZWxlY3Rpb25TdGF0ZSA9IG51bGw7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25TdGF0ZSB7XG4gICAgZ2V0IHN0YXJ0Q29udHJvbCgpOiBMZWFmRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQ7XG4gICAgfVxuXG4gICAgc2V0IHN0YXJ0Q29udHJvbCh2YWx1ZTogTGVhZkVsZW1lbnQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0Q29udHJvbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBlbmRDb250cm9sKCk6IExlYWZFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZENvbnRyb2wgYXMgTGVhZkVsZW1lbnQ7XG4gICAgfVxuXG4gICAgc2V0IGVuZENvbnRyb2wodmFsdWU6IExlYWZFbGVtZW50IHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9lbmRDb250cm9sID0gdmFsdWU7XG4gICAgfVxuICAgIG9uQ2hhbmdlZEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBzdGFydENvbnRyb2xJbmRleCE6IG51bWJlcjtcbiAgICBzdGFydE9mZnNldCE6IG51bWJlcjtcbiAgICBlbmRDb250cm9sSW5kZXghOiBudW1iZXI7XG4gICAgZW5kT2Zmc2V0ITogbnVtYmVyO1xuICAgIGdldCBjb2xsYXBzZWQoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sSW5kZXgsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sSW5kZXgsIGVuZE9mZnNldCB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuICEoc3RhcnRDb250cm9sSW5kZXggIT09IGVuZENvbnRyb2xJbmRleCB8fCAoc3RhcnRDb250cm9sSW5kZXggPT09IGVuZENvbnRyb2xJbmRleCAmJiBzdGFydE9mZnNldCAhPT0gZW5kT2Zmc2V0KSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3N0YXJ0Q29udHJvbCE6IExlYWZFbGVtZW50IHwgbnVsbDtcbiAgICBwcml2YXRlIF9lbmRDb250cm9sITogTGVhZkVsZW1lbnQgfCBudWxsO1xuICAgIGFuY2VzdG9yQ29tbW9uQ29udHJvbCE6IEJyYW5jaEVsZW1lbnQgfCBudWxsO1xuICAgIHJhbmdlITogU2VsZWN0aW9uUmFuZ2UgfCBudWxsO1xuICAgIHN0YXJ0SGl0SW5mbyE6IEhpdEV2ZW50SW5mbyB8IG51bGw7XG4gICAgc2VsZWN0ZWRSYW5nZSE6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGw7XG4gICAgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHJlbmRlckNvbnRhaW5lciE6IERvY3VtZW50Q29udGFpbmVyUmVuZGVyO1xuICAgIGN1cnNvclBvcyE6IFJlY3QgfCBudWxsO1xuICAgIC8v6YCJ5Yy66YeN5paw6K6h566X77yM6Kem5Y+R5Ye95pWwXG4gICAgYWZ0ZXJTZWxlY3Rpb25DaGFuZ2VkOiAoKG5ld1ZhbDogU2VsZWN0aW9uU3RhdGUpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG4gICAgLy/lvZPliY3pgInljLrnmoTkuIrkuIvmlofmmK/lkKbmlK/mjIHnlZnnl5Xkv67mlLlcbiAgICBlbmFibGVUcmFja0NoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhcnRPZmZzZXQgPSAtMTtcbiAgICAgICAgdGhpcy5lbmRPZmZzZXQgPSAtMTtcbiAgICAgICAgdGhpcy5fc3RhcnRDb250cm9sID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZW5kQ29udHJvbCA9IG51bGw7XG4gICAgICAgIHRoaXMuYW5jZXN0b3JDb21tb25Db250cm9sID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGFydENvbnRyb2xJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmVuZENvbnRyb2xJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnNvclBvcyA9IG51bGw7XG4gICAgfVxuXG4gICAgYWRkUmFuZ2UocmFuZ2U6IFNlbGVjdGlvblJhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZEV2ZW50Lm5leHQoKTtcbiAgICB9XG4gICAgcmVzZXRSYW5nZShzdGFydENvbnRyb2w6IEVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICByYW5nZS5zZXRFbmQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIHRoaXMuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfVxuXG4gICAgc3Vycm91bmQoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGVsZSwgMCk7XG4gICAgICAgIHJhbmdlLnNldEVuZChlbGUsIC0xKTtcbiAgICAgICAgdGhpcy5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VsZWN0aW9uU3RhdGUge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICBjbG9uZS5fc3RhcnRDb250cm9sID0gdGhpcy5fc3RhcnRDb250cm9sO1xuICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNsb25lLl9lbmRDb250cm9sID0gdGhpcy5fZW5kQ29udHJvbDtcbiAgICAgICAgY2xvbmUuZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQ7XG4gICAgICAgIGNsb25lLmFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IHRoaXMuYW5jZXN0b3JDb21tb25Db250cm9sO1xuICAgICAgICBjbG9uZS5zdGFydENvbnRyb2xJbmRleCA9IHRoaXMuc3RhcnRDb250cm9sSW5kZXg7XG4gICAgICAgIGNsb25lLmVuZENvbnRyb2xJbmRleCA9IHRoaXMuZW5kQ29udHJvbEluZGV4O1xuICAgICAgICBjbG9uZS5zZWxlY3RlZFJhbmdlID0gdGhpcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG5cbn1cblxuXG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25SYW5nZSB7XG4gICAgc3RhcnRDb250cm9sITogRWxlbWVudDtcbiAgICBzdGFydE9mZnNldCE6IG51bWJlcjtcbiAgICBlbmRDb250cm9sITogRWxlbWVudDtcbiAgICBlbmRPZmZzZXQhOiBudW1iZXI7XG4gICAgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHNldFN0YXJ0KGNvbnRyb2w6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRDb250cm9sID0gY29udHJvbDtcbiAgICAgICAgdGhpcy5zdGFydE9mZnNldCA9IG9mZnNldDtcbiAgICB9XG4gICAgc2V0RW5kKGNvbnRyb2w6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW5kQ29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAgIHRoaXMuZW5kT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNldEluZm8odGhpcy5zdGFydENvbnRyb2wsIHRoaXMuc3RhcnRPZmZzZXQpO1xuICAgICAgICB0aGlzLnNldFN0YXJ0KHJlcy5jb250cm9sLCByZXMub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNFbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2V0SW5mbyh0aGlzLmVuZENvbnRyb2wsIHRoaXMuZW5kT2Zmc2V0KTtcbiAgICAgICAgdGhpcy5zZXRFbmQocmVzLmNvbnRyb2wsIHJlcy5vZmZzZXQpO1xuICAgIH1cblxuICAgIGNhbGNSYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWxjU3RhcnQoKTtcbiAgICAgICAgdGhpcy5jYWxjRW5kKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbmZvKGNvbnRyb2w6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogeyBjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCA9PT0gLTEgPyBjb250cm9sLnRleHQubGVuZ3RoIDogb2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID09PSAtMSA/IDEgOiBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4geyBjb250cm9sLCBvZmZzZXQgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfotoXntKLlvJUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKG9mZnNldCAtIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEluZm8oY2hpbGQsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKGNvbnRyb2wubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SW5mbyhjaGlsZCwgLTEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRJbmZvKGNoaWxkLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbCA9IHRoaXMuc3RhcnRDb250cm9sO1xuICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNsb25lLmVuZENvbnRyb2wgPSB0aGlzLmVuZENvbnRyb2w7XG4gICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEN1cnNvciB7XG4gICAgc3RhdGljIGdldEVsZW1lbnRDdXJzb3JQb3MoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGhpdFJlZ2lvbjogSGl0UmVnaW9uIHwgdW5kZWZpbmVkLCBkb2NOdW06IG51bWJlcik6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfSB7XG4gICAgICAgIGlmIChoaXRSZWdpb24gPT09ICdib2R5JyB8fCBoaXRSZWdpb24gPT09ICdyZXZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVuZGVyUG9zKGVsZSwgb2Zmc2V0LCBlbGUucGFpbnRSZW5kZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRSZWdpb24gPT09ICdmb290ZXInIHx8IGhpdFJlZ2lvbiA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY0NvbnRhaW5lciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihlbGUucGFpbnRSZW5kZXJzWzBdLCBEb2N1bWVudENvbnRhaW5lclJlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWRvY0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9jQ29udGFpbmVyIGlzIG51bGwnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGRvY051bSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjdXJyRG9jUGFpbnRSZW5kZXJzID0gZWxlLnBhaW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaXRlbSwgRG9jdW1lbnRSZW5kZXJPYmplY3QpID09PSBkb2NSZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlbmRlclBvcyhlbGUsIG9mZnNldCwgY3VyckRvY1BhaW50UmVuZGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgZGVidWdnZXI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5YWD57Sg5YGP56e76YeP5a+55bqU55qE5YWJ5qCH5L2N572uJylcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRFbGVtZW50UmVuZGVyUG9zKGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBwYWludHM6IEFycmF5PFJlbmRlck9iamVjdD4pOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0ge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFpbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFpbnRSZW5kZXIgPSBwYWludHNbaV0gYXMgVGV4dEdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGxldCBob3JYID0gMDtcbiAgICAgICAgICAgICAgICBpZiAocGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCArIGNvdW50IDwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSBvZmZzZXQgfHwgKGkgPT09IDAgJiYgY291bnQgKyAwLjUgPT09IG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChwYWludFJlbmRlciwgeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+S4iuagh+OAgeS4i+agh+S9jee9ruWkhOeQhlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFsnc3VwZXJzY3JpcHQnLCAnc3Vic2NyaXB0J10uaW5kZXhPZihlbGUucHJvcHMudmVydEFsaWduKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQgLT0gZWxlLnByb3BzLmZvbnRTaXplIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLnByb3BzLnZlcnRBbGlnbiA9PT0gJ3N1YnNjcmlwdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55ICs9IHJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCArPSBob3JYO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHBhaW50UmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICBob3JYICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50UmVuZGVyID0gcGFpbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHBhaW50UmVuZGVyLCB7IHg6IDAsIHk6IDAgfSlcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZWN0LnggKz0gcmVjdC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBwYWludFJlbmRlcixcbiAgICAgICAgICAgICAgICByZWN0XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrog73lrprkvY3liLDlhYPntKDkvY3nva4nKVxuICAgIH1cbn1cbiIsImltcG9ydCB7IFNlbGVjdGlvblJhbmdlIH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBMZWFmRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucywgTW9kaWZ5RmxhZyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgd2F0Y2hDaGFuZ2VkIH0gZnJvbSBcIi4uLy4uL25vdGlmeVwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlLCBUZXh0VW5pdHMgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIFRleHRHcm91cEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxUZXh0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUZXh0UHJvcHM7XG4gICAgdGV4dE1lYXN1cmVzOiBBcnJheTxUZXh0VW5pdHM+ID0gW107XG4gICAgaXNNZWFzdXJlOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0ZXh0Jyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHdhdGNoQ2hhbmdlZCh0aGlzLnByb3BzLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jbGVhckNhY2hlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgLy90aGlzLmFkZHN1YnNjcmliZSh0aGlzLCB0aGlzLnByb3BzLm9uUHJvcGVydHlDaGFuZ2VkU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLmNsZWFyVGV4dENhY2hlKCkgfSkpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50PENvbnRleHRNZW51RWxlbWVudEV2ZW50PignRWxlbWVudENvbnRleHRNZW51JywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3MgPSBldnQuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWNvbjogXCJFZGl0U3R5bGVcIiwgY2FwdGlvbjogXCLpgInkuK3moLflvI/nu4TlkIhcIiwgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0IHRleHQodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zcGxpY2UoMCwgdGhpcy50ZXh0TWVhc3VyZXMubGVuZ3RoLCB2YWwpO1xuICAgIH1cblxuICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBkZWxldGVDb3VudDogbnVtYmVyLCBhZGRUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgICAgICBhZGRUZXh0ID0gYWRkVGV4dCA/PyAnJztcbiAgICAgICAgY29uc3QgYWRkVGV4dFVuaXRzID0gYWRkVGV4dC5zcGxpdCgnJykubWFwKGNoYXIgPT4gKHsgc291cmNlU2l6ZTogMCwgYWN0dWFsU2l6ZTogMCwgY2hhciB9KSk7XG4gICAgICAgIGlmICh0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudGV4dE1lYXN1cmVzID0gYWRkVGV4dFVuaXRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKGluZGV4LCBkZWxldGVDb3VudCwgLi4uYWRkVGV4dFVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgfVxuXG4gICAgZ2V0IHRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRNZWFzdXJlcy5tYXAoaXRlbSA9PiBpdGVtLmNoYXIpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBpZiAoIXRoaXMuaXNNZWFzdXJlIHx8IHRoaXMubW9kaWZ5RmxhZyAhPT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICByZW5kZXJDdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHRVbml0cyh0aGlzLnRleHRNZWFzdXJlcywgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFRleHRHcm91cFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLmRpc2FibGVDbGljayA9IHRoaXMuZGlzYWJsZUNsaWNrO1xuICAgICAgICByZW5kZXIudGV4dE1lYXN1cmVzID0gWy4uLnRoaXMudGV4dE1lYXN1cmVzXTtcbiAgICAgICAgcmVuZGVyLm1lYXN1cmUoKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICAvL+S/rumlsOWFg+e0oOS4jeW6j+WIl+WMllxuICAgICAgICBpZiAodGhpcy5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGNsb25lLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgc3BsaWNlVGV4dChzdGFydE9mZnNldDogbnVtYmVyLCBlbmRPZmZzZXQ6IG51bWJlciwgeENvcHk6IGJvb2xlYW4pOiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGVuZE9mZnNldCA9IGVuZE9mZnNldCA9PT0gLTEgPyB0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGggOiBlbmRPZmZzZXQ7XG4gICAgICAgIGlmIChlbmRPZmZzZXQgPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoeENvcHkpIHtcbiAgICAgICAgICAgIGNsb25lLnRleHRNZWFzdXJlcyA9IHRoaXMudGV4dE1lYXN1cmVzLnNwbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmUudGV4dE1lYXN1cmVzID0gdGhpcy50ZXh0TWVhc3VyZXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPj0gc3RhcnRPZmZzZXQgJiYgaW5kZXggPCBlbmRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNsb25lLnRleHRNZWFzdXJlcyA9IGNsb25lLnRleHRNZWFzdXJlcy5tYXAoaXRlbSA9PiAoeyBzb3VyY2VTaXplOiAwLCBhY3R1YWxTaXplOiAwLCBjaGFyOiBpdGVtLmNoYXIgfSkpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgY2xlYXJUZXh0Q2FjaGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNNZWFzdXJlID0gZmFsc2U7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBUZXh0R3JvdXBSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PFRleHRHcm91cEVsZW1lbnQ+IHtcbiAgICB0ZXh0TWVhc3VyZXMhOiBBcnJheTxUZXh0VW5pdHM+O1xuICAgIHJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgLy9udWxsLXRleHTkuI3miZPljbBcbiAgICAgICAgaWYgKGN0eC5kcmF3TW9kZSA9PT0gJ3ByaW50JyAmJiB0aGlzLmVsZW1lbnQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMuYm9yZGVyKSB7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dFVuaXRzKHRoaXMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgICAgICAvLyBpZiAodGhpcy5lbGVtZW50LmlzTW91c2VlbnRlcikge1xuICAgICAgICAvLyAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgQ29tbW9uVXRpbC5yYW5kb21Db2xvcigpKTtcbiAgICAgICAgLy8gfVxuXG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRleHRHcm91cFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5kaXNhYmxlQ2xpY2sgPSB0aGlzLmRpc2FibGVDbGljaztcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci50ZXh0TWVhc3VyZXMgPSBbLi4udGhpcy50ZXh0TWVhc3VyZXNdO1xuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG4gICAgbWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWN0LndpZHRoID0gdGhpcy50ZXh0TWVhc3VyZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5hY3R1YWxTaXplLCAwKTtcbiAgICAgICAgdGhpcy5yZWN0LmhlaWdodCA9IHRoaXMuZWxlbWVudC5wcm9wcy5mb250U2l6ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0R3JvdXBGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RleHQnO1xuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFRleHRQcm9wcztcbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEuY29udGVudCBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHRleHRHcm91cCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRleHRHcm91cC50ZXh0ID0gdGV4dDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyh0ZXh0R3JvdXAucHJvcHMsIHByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGV4dEdyb3VwO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQmxvY2tDb250YWluZXJFbGVtZW50LCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgUGFkZGluZ1Byb3BzLCByZWFkRWxlbWVudFByb3BzLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBJbmxpbmVNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVDZWxsUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUYWJsZUNlbGxQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RiYycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlQ2VsbFByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gIXRoaXMuaXNOb3RCZU1lcmdlZENlbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkuI3ooqvlkIjlubbljZXlhYPmoLznmoTljZXlhYPmoLxcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBpc05vdEJlTWVyZ2VkQ2VsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaE1lcmdlICE9PSAnY29udGludWUnICYmIHRoaXMucHJvcHMudk1lcmdlICE9PSAnY29udGludWUnO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTm90QmVNZXJnZWRDZWxsKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgY2VsbFdpZHRoLCBjZWxsT2Zmc2V0IH0gPSB0aGlzLmdldENlbGxXaWR0aCgpO1xuICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gbmV3IFRhYmxlQ2VsbFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgY2VsbFJlbmRlci5yZWN0LndpZHRoID0gY2VsbFdpZHRoO1xuICAgICAgICBjZWxsUmVuZGVyLnJlY3QubWF4V2lkdGggPSBjZWxsV2lkdGg7XG4gICAgICAgIGNlbGxSZW5kZXIucGFkZGluZyA9IG5ldyBQYWRkaW5nUHJvcHMoMCwgMCwgNSwgNSk7XG4gICAgICAgIGNlbGxSZW5kZXIucmVjdC54ID0gY2VsbE9mZnNldDtcbiAgICAgICAgcmV0dXJuIGNlbGxSZW5kZXI7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd0YmMnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gICAgZ2V0Q2VsbFdpZHRoKCk6IHsgY2VsbFdpZHRoOiBudW1iZXIsIGNlbGxPZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGUgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIGxldCBjZWxsV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgoY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbE9mZnNldCA9IHRhYmxlLmdldENlbGxPZmZzZXRYKGNlbGxJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2VsbEluZGV4ICsgMTsgaSA8IHRhYmxlLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChuZXh0Q2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbFdpZHRoICs9IHRhYmxlLmdldENlbGxXaWR0aChpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgY2VsbFdpZHRoLCBjZWxsT2Zmc2V0IH07XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZUNlbGwoKTogVGFibGVDZWxsRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRjID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIHRjO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsUmVuZGVyT2JqZWN0IGV4dGVuZHMgSW5saW5lTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIHByaXZhdGUgcHJldkdsb2JhbEFscGhhID0gMTtcbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmNsaXAocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgeyBoTWVyZ2UsIHZNZXJnZSwgYmFja2dyb3VuZENvbG9yLCBkaWFnb25hbCB9ID0gKDxUYWJsZUNlbGxFbGVtZW50PnRoaXMuZWxlbWVudCkucHJvcHM7XG4gICAgICAgIGlmIChoTWVyZ2UgPT09ICdjb250aW51ZScgfHwgdk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZHbG9iYWxBbHBoYSA9IGN0eC5jb250ZW50Q29udGV4dC5nZXRHbG9iYWxBbHBoYSgpO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5zZXRHbG9iYWxBbHBoYSgwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yICYmIHRoaXMucmVjdC53aWR0aCAmJiB0aGlzLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBiYWNrZ3JvdW5kQ29sb3IpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpYWdvbmFsICYmIHRoaXMucmVjdC53aWR0aCAmJiB0aGlzLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICBsZXQgZGlhZ29uYWxTdGFydFggPSBkaWFnb25hbCA9PT0gJ21haW4nID8gcG9zaXRpb24ueCA6IHBvc2l0aW9uLnggKyB0aGlzLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBsZXQgZGlhZ29uYWxTdGFydFkgPSBwb3NpdGlvbi55O1xuICAgICAgICAgICAgbGV0IGRpYWdvbmFsRW5kWCA9IGRpYWdvbmFsID09PSAnbWFpbicgPyBwb3NpdGlvbi54ICsgdGhpcy5yZWN0LndpZHRoIDogcG9zaXRpb24ueDtcbiAgICAgICAgICAgIGxldCBkaWFnb25hbEVuZFkgPSBwb3NpdGlvbi55ICsgdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBkaWFnb25hbFN0YXJ0WCwgeTogZGlhZ29uYWxTdGFydFkgfSwgeyB4OiBkaWFnb25hbEVuZFgsIHk6IGRpYWdvbmFsRW5kWSB9XSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRiID0gdGhpcy5lbGVtZW50LnBhcmVudC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YlByb3BzID0gdGIucHJvcHM7XG4gICAgICAgIGlmICh0YlByb3BzLmJvcmRlciA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnIzAwMCcsIDEpO1xuICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQucm91bmRSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgNSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaE1lcmdlLCB2TWVyZ2UgfSA9ICg8VGFibGVDZWxsRWxlbWVudD50aGlzLmVsZW1lbnQpLnByb3BzO1xuICAgICAgICBpZiAoaE1lcmdlID09PSAnY29udGludWUnIHx8IHZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDEpO1xuICAgICAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5zZXRHbG9iYWxBbHBoYSgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRhYmxlQ2VsbFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmc/LmNsb25lKCk7XG4gICAgICAgIGNsb25lUmVuZGVyLm1hcmdpbiA9IHRoaXMubWFyZ2luPy5jbG9uZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUYWJsZUNlbGxQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RiYyc7XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxUYWJsZUNlbGxQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRjID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICB0Yy5wcm9wcy52TWVyZ2UgPSBwcm9wcz8udk1lcmdlID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmhNZXJnZSA9IHByb3BzPy5oTWVyZ2UgPz8gbnVsbDtcbiAgICAgICAgdGMucHJvcHMudkFsaWduID0gcHJvcHM/LnZBbGlnbiA/PyBudWxsO1xuICAgICAgICB0Yy5wcm9wcy5iYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcz8uYmFja2dyb3VuZENvbG9yID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmRpYWdvbmFsID0gcHJvcHM/LmRpYWdvbmFsID8/IG51bGw7XG4gICAgICAgIC8vdGMucmVuZGVyQ3R4ID0gcmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gdGM7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgRWxlbWVudCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9ucyxcbiAgICByZWFkRWxlbWVudFByb3BzXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFBhcmFncmFwaFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3QsXG4gICAgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsXG4gICAgUmVuZGVyT2JqZWN0XG59IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250ZW50RWxlbWVudDxQYXJhZ3JhcGhQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFBhcmFncmFwaFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigncCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFBhcmFncmFwaFByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdCYWNrc3BhY2VLZXknLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LnNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAocEZpcnN0TGVhZkVsZW1lbnQgPT09IGV2dC5zb3VyY2UgJiYgZXZ0LnNvdXJjZU9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubnVtYmVyVHlwZSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluZGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4oJ0VsZW1lbnRDb250ZXh0TWVudScsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IGV2dDtcbiAgICAgICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpY29uOiAnRGVsZXRlVGFibGUnLCBjYXB0aW9uOiAn5Yig6Zmk5q616JC9JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwc3ltYm9sID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEZvY3VzYWJsZUVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwc3ltYm9sLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEZvY3VzYWJsZUVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEZvY3VzYWJsZUVsZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFBhcmFncmFwaFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBuZXcgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcGFyYVJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3AnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KCk6IFBhcmFncmFwaEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaFJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICB9XG5cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJhd1Byb2plY3ROdW1iZXIoY3R4KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOe7mOWItumhueebruespuWPt1xuICAgICAqL1xuICAgIGRyYXdQcm9qZWN0TnVtYmVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJhRWxlbWVudC5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgIGlmIChwYXJhRWxlbWVudC5wYWludFJlbmRlcnMuaW5kZXhPZih0aGlzKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmUgPSB0aGlzLmdldENoaWxkKDApIGFzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKCFmaXJzdExpbmUpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5saW5lID0gZmlyc3RMaW5lLmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKCFmaXJzdElubGluZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbmxpbmVQYWludFBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZmlyc3RJbmxpbmUsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IC1jdHgudmlld09wdGlvbnMudHJhbnNsYXRlWVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJTeW1ib2xZID0gZmlyc3RJbmxpbmVQYWludFBvcy55ICsgTWF0aC5jZWlsKGZpcnN0SW5saW5lLnJlY3QuaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChzdHIsIHRleHRQcm9wcywgZmlyc3RJbmxpbmVQYWludFBvcy54IC0gcGFyYUVsZW1lbnQucGFyYVByb3BzLmluZGVudCwgbnVtYmVyU3ltYm9sWSwgMTQsIDE0KTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5maWxsQ2lyY3VsYXIoZmlyc3RJbmxpbmVQYWludFBvcy54IC0gcGFyYUVsZW1lbnQucHJvcHMuaW5kZW50ICsgMiwgbnVtYmVyU3ltYm9sWSwgNClcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbiAgICBjcmVhdGVMaW5lUmVjdCgpOiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGxpbmVSZWN0ID0gbmV3IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggPSB0aGlzLnJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiBsaW5lUmVjdDtcbiAgICB9XG5cblxufVxuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFBhcmFncmFwaFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAncCc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFBhcmFncmFwaFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcGFyYUVsZW1lbnQgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLmluZGVudCA9IHByb3BzPy5pbmRlbnQgPz8gMDtcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMuaGFuZ2luZyA9IHByb3BzPy5oYW5naW5nID8/IDA7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9IHByb3BzPy50ZXh0QWxpZ24gPz8gJ2xlZnQnO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5udW1iZXJUeXBlID0gcHJvcHM/Lm51bWJlclR5cGUgPz8gLTE7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLmxpbmVIZWlnaHQgPSBwcm9wcz8ubGluZUhlaWdodCA/PyAxLjM7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLnRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHM/LnRleHRQcm9wcywgcmVuZGVyQ3R4LnZpZXdPcHRpb25zKTtcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMucGFnZUJyZWFrID0gcHJvcHM/LnBhZ2VCcmVhayA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHBhcmFFbGVtZW50O1xuICAgIH1cbn1cblxuLyoqXG4gKiDmrrXokL3ooYzmoYZcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdCB7XG5cbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygn57uY5Yi25q616JC96KGMLWJlZ2luJyk7XG5cbiAgICB9XG5cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ+e7mOWItuauteiQveihjC1lbmQnKTtcbiAgICAgICAgLy9jdHguc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgIH1cblxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJsb2NrQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIE1vZGlmeUZsYWcsIHJlYWRFbGVtZW50UHJvcHMsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGFibGVSb3dQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0VsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVSb3dQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFRhYmxlUm93UHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0cicpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlUm93UHJvcHMoKTtcbiAgICAgICAgLy/lnKjlt67lvILmm7TmlrDkuK3vvIznlLHkuo7ooYzlhoXljZXlhYPmoLzlrZjlnKjlkIjlubbooYznmoTmg4XlhrXvvIzpnIDopoHlsIblvZPliY3ooYzlhoXlrZjlnKjlkIjlubbnmoTljZXlhYPmoLzvvIzlsIblhbbkv67mlLnmoIflv5fmlLnkuLrkv67mlLlcbiAgICAgICAgY29uc3QgY2hhbmdlU3ViID0gdGhpcy5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2spIHtcbiAgICAgICAgICAgICAgICAvL3RoaXMuY2hlY2tSb3dNb2RpZnlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZHN1YnNjcmliZSh0aGlzLCBjaGFuZ2VTdWIpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxlUm93UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndHInLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzPy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZVJvdyhjb2xzOiBudW1iZXIpOiBUYWJsZVJvd0VsZW1lbnQge1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIHRyLmFkZENoaWxkKFRhYmxlQ2VsbEVsZW1lbnQuY3JlYXRlQ2VsbCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDxUYWJsZVJvd0VsZW1lbnQ+IHtcbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICB9XG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRhYmxlUm93UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUYWJsZVJvd1Byb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndHInO1xuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VGFibGVSb3dQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBUYWJsZVJvd1Byb3BzO1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgdHIucHJvcHMubWluSGVpZ2h0ID0gcHJvcHM/Lm1pbkhlaWdodCA/PyAtMTtcbiAgICAgICAgdHIucHJvcHMuaGVhZGVyUm93ID0gcHJvcHM/LmhlYWRlclJvdztcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cblxufVxuIiwiZXhwb3J0IGludGVyZmFjZSBDb2x1bW5QYXJ0T2Zmc2V0IGV4dGVuZHMgQ29sdW1uUGFydCB7IG9mZnNldDogbnVtYmVyIH1cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uUGFydCB7IGluZGV4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIgfVxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5QYXRjaCB7IHR5cGU6ICdtb2RpZnknIHwgJ2luc2VydCcsIGRhdGE6IENvbHVtblBhcnQgfVxuZXhwb3J0IGNsYXNzIENvbHVtblBhdGNoVXRpbCB7XG4gICAgc3RhdGljIGdldFBhdGNoUGFja3MoY29sczogQXJyYXk8Q29sdW1uUGFydD4sIHNwbGl0Q29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBbQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9PiwgQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+XSB7XG4gICAgICAgIGNvbnN0IG9sZExpbmVQb2ludE1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKGNvbHMpO1xuICAgICAgICAvL+imgeWIhuWJsueahOWIl+WdkOagh1xuICAgICAgICBjb25zdCBuZXdMaW5lUG9pbnRNYXAgPSB0aGlzLmdldExpbmVQb2ludE1hcChzcGxpdENvbHMpO1xuICAgICAgICBjb25zdCByZXNBcnJheTogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IGFsbFBvaW50TWFwID0gb2xkTGluZVBvaW50TWFwLmNvbmNhdChuZXdMaW5lUG9pbnRNYXApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBvaW50TWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gYWxsUG9pbnRNYXBbaV07XG4gICAgICAgICAgICByZXNBcnJheS5hZGQocGFydC5vZmZzZXQpO1xuICAgICAgICAgICAgcmVzQXJyYXkuYWRkKHBhcnQub2Zmc2V0ICsgcGFydC53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnRzID0gQXJyYXkuZnJvbShyZXNBcnJheSkuc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QgLSBzZWNvbmQpO1xuICAgICAgICBjb25zdCBwYXRjaHM6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4gPSBbXTtcbiAgICAgICAgLy/ojrflj5blhbbku5booYznmoTmi4bliIbooaXkuIFcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RhcnRPZmZzZXQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwYXJ0RW5kT2Zmc2V0ID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5QYXJ0ID0gb2xkTGluZVBvaW50TWFwLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBpdGVtLm9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSBpdGVtLm9mZnNldCArIGl0ZW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID49IHBhcnRTdGFydE9mZnNldCAmJiBzdGFydE9mZnNldCA8IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmRPZmZzZXQgPiBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChzdGFydE9mZnNldCA8PSBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0ID49IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoam9pblBhcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoam9pblBhcnQub2Zmc2V0ID09PSBwYXJ0U3RhcnRPZmZzZXQgJiYgam9pblBhcnQub2Zmc2V0ICsgam9pblBhcnQud2lkdGggPT09IHBhcnRFbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGF0Y2hzLmZpbmQoaXRlbSA9PiBpdGVtLnBhcnQgPT09IGpvaW5QYXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2gucGF0Y2hzLnB1c2goeyB0eXBlOiAnaW5zZXJ0JywgZGF0YTogeyB3aWR0aDogcGFydEVuZE9mZnNldCAtIHBhcnRTdGFydE9mZnNldCwgaW5kZXg6IGpvaW5QYXJ0LmluZGV4IH0gfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OiBqb2luUGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoczogW3sgdHlwZTogJ21vZGlmeScsIGRhdGE6IHsgd2lkdGg6IHBhcnRFbmRPZmZzZXQgLSBwYXJ0U3RhcnRPZmZzZXQsIGluZGV4OiBqb2luUGFydC5pbmRleCB9IH1dXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v6I635Y+W5b2T5YmN6KGM55qE5ouG5YiG6KGl5LiBXG4gICAgICAgIGNvbnN0IGN1cnJSb3dQYXRoczogQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+ID0gW107XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbk1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKHRoaXMuZ2V0Q29sdW1uKHBvaW50cykpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0xpbmVQb2ludE1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0YXJ0T2Zmc2V0ID0gbmV3TGluZVBvaW50TWFwW2ldLm9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRFbmRPZmZzZXQgPSBuZXdMaW5lUG9pbnRNYXBbaV0ub2Zmc2V0ICsgbmV3TGluZVBvaW50TWFwW2ldLndpZHRoO1xuICAgICAgICAgICAgY29uc3Qgam9pblBhcnRzID0gYWxsQ29sdW1uTWFwLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IGl0ZW0ub2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IGl0ZW0ub2Zmc2V0ICsgaXRlbS53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnRPZmZzZXQgPj0gcGFydFN0YXJ0T2Zmc2V0ICYmIHN0YXJ0T2Zmc2V0IDwgcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGVuZE9mZnNldCA+IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0IDw9IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPj0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN1cnJSb3dQYXRocy5wdXNoKGpvaW5QYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwYXRjaHMsIGN1cnJSb3dQYXRoc107XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb2x1bW4ocG9pbnRzOiBBcnJheTxudW1iZXI+KTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvaW50cy5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHsgaW5kZXgsIHdpZHRoOiBwb2ludHNbaW5kZXggKyAxXSAtIHBvaW50c1tpbmRleF0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFNwbGl0Q29scyh3aWR0aDogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiBBcnJheTxDb2x1bW5QYXJ0PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxDb2x1bW5QYXJ0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7IHdpZHRoOiBNYXRoLmZsb29yKHdpZHRoIC8gY29scyksIGluZGV4OiBpIH0pO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLndpZHRoICs9IHdpZHRoIC0gaXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgMCk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRMaW5lUG9pbnRNYXAoaE1lcmdlQ29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBBcnJheTxDb2x1bW5QYXJ0T2Zmc2V0PiB7XG4gICAgICAgIGNvbnN0IGxpbmVQb2ludE1hcDogQXJyYXk8Q29sdW1uUGFydE9mZnNldD4gPSBbXTtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhNZXJnZUNvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGhNZXJnZUNvbHNbaV07XG4gICAgICAgICAgICBsaW5lUG9pbnRNYXAucHVzaCh7IGluZGV4OiBjb2wuaW5kZXgsIHdpZHRoOiBjb2wud2lkdGgsIG9mZnNldDogeCB9KTtcbiAgICAgICAgICAgIHggKz0gY29sLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lUG9pbnRNYXA7XG4gICAgfVxufSIsImltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50IH0gZnJvbSBcIi4uL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlUm93RWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLXJvdy1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlVXRpbCB7XG5cbiAgICBzdGF0aWMgY2FuRGVsZXRlVGFibGUoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSBzcztcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIHJldHVybiAhIXRiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDmoKHpqozlvZPliY3pgInljLrmmK/lkKblj6/ku6XmiafooYzlkIjlubbljZXlhYPmoLzmk43kvZxcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGNhbk1lcmdlQ2VsbHMoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCwgc2VsZWN0ZWRSYW5nZSB9ID0gc3M7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50ICYmIGVuZENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YlJlZ2lvbiA9IHRoaXMuZ2V0VGFibGVSZWN0U2VsZWN0ZWRSZWdpb24odGJFbGVtZW50LCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlICYmIHNlbGVjdGVkUmFuZ2UudGFyZ2V0ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsczogQXJyYXk8VGFibGVDZWxsRWxlbWVudD4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5zZWxlY3RlZENoaWxkcmVuLmV2ZXJ5KGNlbGwgPT4gc2VsZWN0ZWRDZWxscy5wdXNoKGNlbGwudGFyZ2V0IGFzIFRhYmxlQ2VsbEVsZW1lbnQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0YlJlZ2lvbi5zdGFydFJvdzsgaSA8PSB0YlJlZ2lvbi5lbmRSb3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiRWxlbWVudC5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHRiUmVnaW9uLnN0YXJ0Q29sOyBqIDw9IHRiUmVnaW9uLmVuZENvbDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyckNlbGwgPSBjdXJyUm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQ2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpICYmIHNlbGVjdGVkQ2VsbHMuaW5kZXhPZihjdXJyQ2VsbCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmqKrlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubbnu5PmnZ/ntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGIgXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SE1lcmdlRW5kSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBsZXQgaW5kZXggPSBjb2xJbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbEluZGV4ICsgMTsgaSA8IHRiLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBjdXJyUm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmqKrlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubblvIDlp4vntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGIgXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SE1lcmdlU3RhcnRJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbEluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDkuLvlkIjlubbljZXlhYPmoLwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubbnu5PmnZ/ntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGIgXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBpXG4gICAgICovXG4gICAgc3RhdGljIGdldFZNZXJnZUVuZEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubblvIDlp4vntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGIgXG4gICAgICogQHBhcmFtIHJvd0luZGV4IFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBpXG4gICAgICovXG4gICAgc3RhdGljIGdldFZNZXJnZVN0YXJ0SW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5Li75ZCI5bm25Y2V5YWD5qC8Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBtZXJnZUNlbGxzKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQgfSA9IHNzO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCB8fCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRiRWxlbWVudCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCA/IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA6IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCAmJiBlbmRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy90aGlzLmNvbWJpbmVDZWxsQ29udGVudCh0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21iaW5lQ2VsbHModGJFbGVtZW50LCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGVja1Jvd0JlTWVyZ2VkKHNzKTtcbiAgICAgICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlkIjlubbljZXlhYPmoLzlkI7pnIDopoHmoKHpqoxcbiAgICAgKiAxLuWmguaenOafkOS4quihjOeahOaJgOacieWNleWFg+agvOmDveS4jeaYr25vcm1hbO+8jOWImemcgOimgeWIoOmZpOW9k+WJjeihjFxuICAgICAqIDIu5aaC5p6c5p+Q5Liq5YiX55qE5omA5pyJ55qE5Y2V5YWD5qC86YO95LiN5pivbm9ybWFs77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN5YiXXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgY2hlY2tSb3dCZU1lcmdlZChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRiKSB7IHJldHVybiB9XG4gICAgICAgIGNvbnN0IGNvbHNDb3VudCA9IHRiLmdldENvbHNDb3VudCgpO1xuICAgICAgICBjb25zdCBmdWxsTWVyZ2VSb3dzOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghY2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lvZPliY3ooYzmiYDmnInnmoTljZXlhYPmoLzpg73ooqvlkIjlubbvvIzpnIDopoHliKDpmaRcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gY29sc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZnVsbE1lcmdlUm93cy5wdXNoKHJvdylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdWxsTWVyZ2VSb3dzLmZvckVhY2gocm93ID0+IHRoaXMucmVtb3ZlUm93KHJvdykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOihjFxuICAgICAqIEBwYXJhbSByb3cgXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlUm93KHJvdzogVGFibGVSb3dFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IHRiID0gcm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIHJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlRW5kSW5kZXggPiByb3dJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pihyb3dJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Um93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpLnByb3BzLnZNZXJnZSA9IHZNZXJnZUVuZEluZGV4IC0gcm93SW5kZXggPiAyID8gJ3Jlc3RhcnQnIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgdk1lcmdlRW5kSW5kZXggPSB0aGlzLmdldFZNZXJnZUVuZEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgKHZNZXJnZUVuZEluZGV4ID4gcm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgbmV4dFJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4ocm93SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgbmV4dFJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKS5jZWxsUHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgY29uc3Qgdk1lcmdlU3RhcnRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlU3RhcnRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85aSE5LqO5ZCI5bm26KGM55qE5pyA5ZCO5LiA6KGM77yM5bm25LiU5ZCI5bm255qE6KGM5pWw5Li6MuihjFxuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2VFbmRJbmRleCA9PT0gcm93SW5kZXggJiYgdk1lcmdlRW5kSW5kZXggLSB2TWVyZ2VTdGFydEluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3ZlQ2VsbCA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4odk1lcmdlU3RhcnRJbmRleCkuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSlcbiAgICAgICAgICAgICAgICAgICAgYWJvdmVDZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRiLnJlbW92ZUNoaWxkKHJvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5YiXXG4gICAgICogQHBhcmFtIHRiIFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVDb2wodGI6IFRhYmxlRWxlbWVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pihjb2xJbmRleCk7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRJbmRleCA+IGNvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGNvbEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLnByb3BzLmhNZXJnZSA9IGhNZXJnZUVuZEluZGV4IC0gY29sSW5kZXggPiAyID8gJ3Jlc3RhcnQnIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaE1lcmdlU3RhcnRJbmRleCA9IHRoaXMuZ2V0SE1lcmdlU3RhcnRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85aSE5LqO5ZCI5bm26KGM55qE5pyA5ZCO5LiA6KGM77yM5bm25LiU5ZCI5bm255qE6KGM5pWw5Li6MuihjFxuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRJbmRleCA9PT0gY29sSW5kZXggJiYgaE1lcmdlRW5kSW5kZXggLSBoTWVyZ2VTdGFydEluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlclZNZXJnZUNlbGwgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGhNZXJnZVN0YXJ0SW5kZXgpLmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpXG4gICAgICAgICAgICAgICAgICAgIG1hc3RlclZNZXJnZUNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdy5yZW1vdmVDaGlsZChjZWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0Yi5yZW1vdmVDb2woY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWFieagh+aJgOWcqOeahOW9k+WJjeihjFxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlQ3VyclJvdyhzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSBjdXJyUm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVtb3ZlUm93KGN1cnJSb3cpO1xuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWFieagh+aJgOWcqOeahOW9k+WJjeWIl1xuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlQ3VyckNvbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRiID0gY3VyclJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2wodGIsIHN0YXJ0Q2VsbC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCB9ID0gc3M7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgICAgICBsZXQgZW5kQ29sSW5kZXggPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Q29sSW5kZXggPD0gZW5kQ29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2wodGJFbGVtZW50LCBlbmRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZENvbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGJFbGVtZW50LnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3MuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkIjlubbljZXlhYPmoLxcbiAgICAgKi9cbiAgICBzdGF0aWMgY29tYmluZUNlbGxzKHRiRWxlbWVudDogVGFibGVFbGVtZW50LCBzdGFydENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQsIGVuZENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGJSZWdpb24gPSB0aGlzLmdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgY29uc3QgY2VsbENvbnRlbnRzOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gdGJSZWdpb24uc3RhcnRSb3c7IGkgPD0gdGJSZWdpb24uZW5kUm93OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0YkVsZW1lbnQuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSB0YlJlZ2lvbi5zdGFydENvbDsgaiA8PSB0YlJlZ2lvbi5lbmRDb2w7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJDZWxsID0gY3VyclJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKTtcbiAgICAgICAgICAgICAgICBjdXJyQ2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IHRiUmVnaW9uLnN0YXJ0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLnZNZXJnZSA9IGkgPT09IHRiUmVnaW9uLnN0YXJ0Um93ID8gJ3Jlc3RhcnQnIDogJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgY3VyckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VyckNlbGwgIT09IHN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsQ29udGVudHMucHVzaCguLi5FbGVtZW50VXRpbC5nZXRDaGlsZHJlbkVsZW1lbnRzKGN1cnJDZWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLmNsZWFySXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlkIjlubbnmoTljZXlhYPmoLzpg73mmK/nqbrmrrXokL3vvIzliJnkuI3lkIjlubblhoXlrrlcbiAgICAgICAgaWYgKCFjZWxsQ29udGVudHMuZXZlcnkoKGl0ZW0pID0+IChpdGVtIGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCAmJiBpdGVtLmxlbmd0aCA9PT0gMSkpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxDb250ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN0YXJ0Q2VsbC5hZGRDaGlsZChjZWxsQ29udGVudHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgY2FuU3BsaXRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQgfSA9IHNzO1xuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydENlbGwgPT09IGVuZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Q2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCBzdGFydENlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnRDZWxsIGlzIG51bGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgaE1lcmdlLCB2TWVyZ2UgfSA9IHN0YXJ0Q2VsbD8ucHJvcHM7XG4gICAgICAgICAgICByZXR1cm4gaE1lcmdlID09PSAncmVzdGFydCcgfHwgdk1lcmdlID09PSAncmVzdGFydCcgfHwgIWhNZXJnZSB8fCAhdk1lcmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWwhuWQiOW5tueahOWNleWFg+agvOWQiOW5tui/mOWOn1xuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzdG9yZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCB9ID0gc3M7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoc3RhcnRDZWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVDZWxsTWVyZ2Uoc3RhcnRDZWxsKTtcbiAgICAgICAgICAgIHNzLnJlc2V0UmFuZ2Uoc3RhcnRDZWxsLCAwKTtcbiAgICAgICAgICAgIHN0YXJ0Q2VsbC5yZWZyZXNoVmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVzdG9yZUNlbGxNZXJnZShjZWxsOiBUYWJsZUNlbGxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdk1lcmdlLCBoTWVyZ2UgfSA9IGNlbGwucHJvcHM7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBjZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGlmICh2TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09IFwicmVzdGFydFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDZWxsTWVyZ2UoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggKyAxOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSBcInJlc3RhcnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlQ2VsbE1lcmdlKGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Vk1lcmdlUm93cyh0YjogVGFibGVFbGVtZW50LCBtYXN0ZXJSb3dJbmRleDogbnVtYmVyLCBtYXN0ZXJDb2xJbmRleDogbnVtYmVyKTogQXJyYXk8VGFibGVSb3dFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBtYXN0ZXJSb3dJbmRleCArIDE7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gPFRhYmxlUm93RWxlbWVudD50Yi5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQobWFzdGVyQ29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgaW5zZXJ0Q29sKHNzOiBTZWxlY3Rpb25TdGF0ZSwgaW5zZXJ0Q29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSBzdGFydFJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJyQ29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29sc0NvdW50ID0gdGIuZ2V0Q29sc0NvdW50KCk7XG4gICAgICAgIGluc2VydENvbEluZGV4ID0gaW5zZXJ0Q29sSW5kZXggPCAwID8gMCA6IGluc2VydENvbEluZGV4O1xuICAgICAgICBpbnNlcnRDb2xJbmRleCA9IGluc2VydENvbEluZGV4ID4gY29sc0NvdW50ID8gY29sc0NvdW50IDogaW5zZXJ0Q29sSW5kZXg7XG4gICAgICAgIC8v5o+S5YWl5YiX6ZyA6KaB5bCG5LmL5YmN5YiX5YiG5YmyXG4gICAgICAgIGNvbnN0IGluc2VydENvbFdpZHRoID0gaW5zZXJ0Q29sSW5kZXggPT09IGNvbHNDb3VudCA/IHRiLmdldENlbGxXaWR0aChjb2xzQ291bnQgLSAxKSA6IHRiLmdldENlbGxXaWR0aChpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gTWF0aC5mbG9vcihpbnNlcnRDb2xXaWR0aCAvIDIpO1xuICAgICAgICBpZiAobmV3Q29sV2lkdGggPCAyMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfmj5LlhaXliJfnmoTmnIDlsI/lrr3luqbkuI3og73lsI/kuo4yMCzlvZPliY3kuLo6JyArIG5ld0NvbFdpZHRoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaSlcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgaWYgKGluc2VydENvbEluZGV4ID09PSAwIHx8IGluc2VydENvbEluZGV4ID09PSBjb2xzQ291bnQpIHtcbiAgICAgICAgICAgICAgICByb3cuYWRkQ2hpbGQobmV3Q2VsbCwgaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGluc2VydENvbEluZGV4KTtcbiAgICAgICAgICAgIGlmIChmb2N1c0NlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICAvL+iOt+WPluWQiOW5tuihjOeahOacgOWQjueahOihjOe0ouW8lVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoTWVyZ2VFbmRDb2xJbmRleCA9IHRoaXMuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGN1cnJDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRDb2xJbmRleCA+IGluc2VydENvbEluZGV4IHx8IChoTWVyZ2VFbmRDb2xJbmRleCA9PT0gaW5zZXJ0Q29sSW5kZXggJiYgY3VyckNvbEluZGV4IDwgaW5zZXJ0Q29sSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyAmJiBjdXJyQ29sSW5kZXggPiBpbnNlcnRDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmFkZENoaWxkKG5ld0NlbGwsIGluc2VydENvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRiLnNldENlbGxXaWR0aChpbnNlcnRDb2xJbmRleCA9PT0gY29sc0NvdW50ID8gaW5zZXJ0Q29sSW5kZXggLSAxIDogaW5zZXJ0Q29sSW5kZXgsIGluc2VydENvbFdpZHRoIC0gbmV3Q29sV2lkdGgpO1xuICAgICAgICB0Yi5pbnNlcnRDb2woaW5zZXJ0Q29sSW5kZXgsIG5ld0NvbFdpZHRoKTtcbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0Um93KHNzOiBTZWxlY3Rpb25TdGF0ZSwgaW5zZXJ0Um93SW5kZXg6IG51bWJlcik6IFRhYmxlUm93RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHN0YXJ0Um93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJSb3dJbmRleCA9IHN0YXJ0Um93LmdldEluZGV4KCk7XG4gICAgICAgIGluc2VydFJvd0luZGV4ID0gaW5zZXJ0Um93SW5kZXggPCAwID8gMCA6IGluc2VydFJvd0luZGV4O1xuICAgICAgICBpbnNlcnRSb3dJbmRleCA9IGluc2VydFJvd0luZGV4ID4gdGIubGVuZ3RoID8gdGIubGVuZ3RoIDogaW5zZXJ0Um93SW5kZXg7XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IFRhYmxlUm93RWxlbWVudC5jcmVhdGVSb3codGIuZ2V0Q29sc0NvdW50KCkpO1xuICAgICAgICAvL+aWsOihjOaPkuWcqOesrOS4gOihjOaIluiAheacgOWQjuS4gOihjFxuICAgICAgICBpZiAoaW5zZXJ0Um93SW5kZXggPT09IDAgfHwgaW5zZXJ0Um93SW5kZXggPT09IHRiLmxlbmd0aCkge1xuICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBpbnNlcnRSb3dJbmRleCk7XG4gICAgICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXN0Um93ID0gdGIuZ2V0Q2hpbGQoaW5zZXJ0Um93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0Um93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkZXN0Q2VsbCA9IGRlc3RSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXdSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN5Y2V5YWD5qC85piv5pmu6YCa5Y2V5YWD5qC85oiW6ICF5ZCI5bm25YiX55qE5pyA5ZCO5LiA5Liq5Y2V5YWD5qC877yM5YiZ5LiN5YGa5aSE55CGXG4gICAgICAgICAgICBpZiAoZGVzdENlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgLy/ojrflj5blkIjlubbliJfnmoTmnIDlkI7nmoTooYzntKLlvJVcbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VFbmRSb3dJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIGluc2VydFJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlRW5kUm93SW5kZXggPiBpbnNlcnRSb3dJbmRleCB8fCAodk1lcmdlRW5kUm93SW5kZXggPT09IGluc2VydFJvd0luZGV4ICYmIGN1cnJSb3dJbmRleCA8IGluc2VydFJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIC8vbmV3Q2VsbC5jZWxsUHJvcHMuaE1lcmdlID0gZGVzdENlbGwuY2VsbFByb3BzLmhNZXJnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlc3RDZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnICYmIGN1cnJSb3dJbmRleCA+IGluc2VydFJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy/lnKjkuIrmlrnmlrDlop7ooYzvvIznm67moIfooYzljZXlhYPmoLzlsZ7kuo7lkIjlubbnmoTotbfngrlcbiAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgLy9uZXdDZWxsLmNlbGxQcm9wcy5oTWVyZ2UgPSBkZXN0Q2VsbC5jZWxsUHJvcHMuaE1lcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBpbnNlcnRSb3dJbmRleCk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5LiL5pa55o+S5YWl6KGMXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydFJvd0JlbG93KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyclJvd0luZGV4ID0gc3RhcnRSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3coc3MsIGN1cnJSb3dJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOS4iuaWueaPkuWFpeihjFxuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRSb3dBYm92ZShzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJSb3dJbmRleCA9IHN0YXJ0Um93LmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Um93KHNzLCBjdXJyUm93SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOWPs+S+p+aPkuWFpeWIl1xuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRDb2xUb1JpZ2h0KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyckNvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29sKHNzLCBjdXJyQ29sSW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlt6bkvqfmj5LlhaXliJdcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0Q29sVG9MZWZ0KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyckNvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29sKHNzLCBjdXJyQ29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi3s+i9rOWIsOS4i+S4gOS4quWNleWFg+agvOS4rVxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKi9cbiAgICBzdGF0aWMgbW92ZU5leHRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBzdGFydENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IG5leHRDZWxsID0gdGhpcy5nZXROZXh0Q2VsbChzcyk7XG4gICAgICAgIGlmIChuZXh0Q2VsbCkge1xuICAgICAgICAgICAgc3MucmVzZXRSYW5nZShuZXh0Q2VsbCwgMCk7XG4gICAgICAgICAgICBuZXh0Q2VsbC5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5paw5aKe6KGMLOW5tuWumuS9jVxuICAgICAgICBjb25zdCBuZXdSb3cgPSB0aGlzLmluc2VydFJvdyhzcywgcm93SW5kZXggKyAxKTtcbiAgICAgICAgc3MucmVzZXRSYW5nZShuZXdSb3csIDApO1xuICAgICAgICBuZXdSb3cucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluS4i+S4gOS4quWPr+WumuS9jeeahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TmV4dENlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogVGFibGVDZWxsRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHN0YXJ0Q2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgdGIgPSBzdGFydENlbGwucGFyZW50LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaiA9IGkgPT09IHJvd0luZGV4ID8gY29sSW5kZXggKyAxIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBmb3IgKDsgaiA8IHRiLmdldENvbHNDb3VudCgpOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY3VyckNlbGwuaXNOb3RCZU1lcmdlZENlbGwoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyckNlbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCdnZXROZXh0Q2VsbCBpcyBudWxsJylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYnmoIfmmK/lkKblnKjmnIDlkI7kuIDkuKrljZXlhYPmoLzkuK1cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNMYXN0VmlzaWFibGVDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ2V0TmV4dENlbGwoc3MpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5b2T5YmNdGFibGVcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlVGFibGUoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0Yikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCflvZPliY3kvY3nva7kuI3lrZjlnKjooajmoLwnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0Yi5wYXJlbnQucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgdGIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85Y2V5YWD5qC85a+56KeS57q/XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSBkaWFnb25hbCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0VGFibGVDZWxsRGlhZ29uYWwoc3M6IFNlbGVjdGlvblN0YXRlLCBkaWFnb25hbDogJ21haW4nIHwgJ3N1YicpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0Yykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCflvZPliY3kvY3nva7kuI3lrZjlnKjooajmoLwnKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghdGMucHJvcHMuZGlhZ29uYWwgfHwgdGMucHJvcHMuZGlhZ29uYWwgIT09IGRpYWdvbmFsKSB7XG4gICAgICAgICAgICB0Yy5wcm9wcy5kaWFnb25hbCA9IGRpYWdvbmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHRjLnByb3BzLmRpYWdvbmFsID09PSBkaWFnb25hbCkge1xuICAgICAgICAgICAgdGMucHJvcHMuZGlhZ29uYWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRjLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bCG5b2T5YmN6KGo5qC85oiq5pat5oiQ5Lik5Liq55u46YK755qE6KGo5qC8XG4gICAgICogQHBhcmFtIHRiIFxuICAgICAqIEBwYXJhbSByb3dJbmRleCBcbiAgICAgKi9cbiAgICBzdGF0aWMgY3V0VGFibGUodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAocm93SW5kZXggPT09IDAgfHwgcm93SW5kZXggPT09IHRiLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdUYiA9IHRiLmNsb25lKGZhbHNlKSBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRiLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChsZW4gPiByb3dJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0Yi5nZXRDaGlsZChsZW4pO1xuICAgICAgICAgICAgbmV3VGIuYWRkQ2hpbGQoY2hpbGQuY2xvbmUodHJ1ZSksIDApO1xuICAgICAgICAgICAgdGIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdUYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0Yi5wYXJlbnQuYWRkQ2hpbGQobmV3VGIsIHRiLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOmAieWMuuWMuuWfn+acgOWkp+eahOefqeW9ouWMuuWfn1xuICAgICAqIEBwYXJhbSB0YiBcbiAgICAgKiBAcGFyYW0gc3RhcnRDZWxsIFxuICAgICAqIEBwYXJhbSBlbmRDZWxsIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YjogVGFibGVFbGVtZW50LCBzdGFydENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQsIGVuZENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiBJVGFibGVTZWxlY3RlZFJlZ2lvbiB7XG4gICAgICAgIGxldCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IHN0YXJ0Q29sID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGxldCBlbmRSb3cgPSBlbmRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBsZXQgZW5kQ29sID0gZW5kQ2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBpZiAoc3RhcnRSb3cgPiBlbmRSb3cpIHtcbiAgICAgICAgICAgIFtlbmRSb3csIHN0YXJ0Um93XSA9IFtzdGFydFJvdywgZW5kUm93XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRDb2wgPiBlbmRDb2wpIHtcbiAgICAgICAgICAgIFtlbmRDb2wsIHN0YXJ0Q29sXSA9IFtzdGFydENvbCwgZW5kQ29sXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBzdGFydENvbDsgaiA8PSBlbmRDb2w7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGhNZXJnZSwgdk1lcmdlIH0gPSBjZWxsLnByb3BzO1xuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IFRhYmxlVXRpbC5nZXRITWVyZ2VTdGFydEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kQ29sSW5kZXggPSBUYWJsZVV0aWwuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBzdGFydENvbCA9IE1hdGgubWluKHN0YXJ0Q29sLCBzdGFydENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sID0gTWF0aC5tYXgoZW5kQ29sLCBlbmRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRSb3dJbmRleCA9IFRhYmxlVXRpbC5nZXRWTWVyZ2VTdGFydEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUm93SW5kZXggPSBUYWJsZVV0aWwuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBzdGFydFJvdyA9IE1hdGgubWluKHN0YXJ0Um93LCBzdGFydFJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kUm93ID0gTWF0aC5tYXgoZW5kUm93LCBlbmRSb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IFRhYmxlVXRpbC5nZXRWTWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3dJbmRleCA+IGVuZFJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUm93ID0gcm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gVGFibGVVdGlsLmdldEhNZXJnZUVuZEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbEluZGV4ID4gZW5kQ29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2wgPSBjb2xJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sIH1cbiAgICB9XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVTZWxlY3RlZFJlZ2lvbiB7XG4gICAgc3RhcnRSb3c6IG51bWJlcjtcbiAgICBlbmRSb3c6IG51bWJlcjtcbiAgICBzdGFydENvbDogbnVtYmVyO1xuICAgIGVuZENvbDogbnVtYmVyO1xufSIsImltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tIFwiLi90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgQ29sdW1uUGFydCwgQ29sdW1uUGFydE9mZnNldCwgQ29sdW1uUGF0Y2gsIENvbHVtblBhdGNoVXRpbCB9IGZyb20gXCIuL3RhYmxlLXNwbGl0LWNlbGwtcGF0Y2hcIjtcbmltcG9ydCB7IFRhYmxlVXRpbCB9IGZyb20gXCIuL3RhYmxlLXV0aWxcIjtcbi8qKlxuICog5ouG5YiG5Y2V5YWD5qC8XG4gKiDonIDpgZPpmr7vvIzpmr7kuo7kuIrpnZLlpKnvvJvmi4bliIbljZXlhYPmoLzvvIzlpLTlj5Hnp4PvvIznsr7npZ7oobDvvIznnLznnZvmmI/vvIzouqvkvZPlup/jgIJcbiAqIFxuICogMS7mi4bliIbkuLrlpJrliJfop4TliJnvvJrkuI3lvbHlk43lhbbku5bliJflrr3luqbvvIzlsIblvZPliY3liJflrr3luqblnYfliIZcbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlU3BsaXRDZWxsIHtcbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiDmma7pgJrljZXlhYPmoLzlj6/ku6Xku7vmhI/mi4bliIbooYzlkozliJdcbiAgICAgKiDlt7LlkIjlubbnmoTljZXlhYPmoLzvvIzlj6/ku6Xmi4bliIbku7vmhI/mlbDph4/nmoTliJfvvJvlj6/ku6Xmi4bliIbnmoTmlbDph4/lv4XpobvkuLrlkIjlubbljZXlhYPmoLzmlbDph4/nmoTnuqbmlbBcbiAgICAgKi9cbiAgICBzdGF0aWMgc3BsaXRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgJiYgIWZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3BsaXROb3JtYWxDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3BsaXRNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgaWYgKCFmb2N1c0NlbGwuY2VsbFByb3BzLmhNZXJnZSkge1xuICAgICAgICAvLyAgICAgY29uc3QgeyBlbmRDb2xJbmRleCB9ID0gdGhpcy5ob3JTcGxpdEhvck5vcm1hbENlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAvLyAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIC8v5b2T5YmN5Y2V5YWD5qC85Li65qiq5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgY29uc3QgeyBlbmRDb2xJbmRleCB9ID0gdGhpcy5ob3JTcGxpdEhvck1lcmdlQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgIC8vICAgICB0aGlzLnZlclNwbGl0VmVyTWVyZ2VDZWxsKHNzLCByb3dzLCBlbmRDb2xJbmRleCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOaLhuWIhuaZrumAmueahOWNleWFg+agvFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHNwbGl0Tm9ybWFsQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHJvd3MgPSByb3dzIDwgMSA/IDEgOiByb3dzO1xuICAgICAgICBjb2xzID0gY29scyA8IDEgPyAxIDogY29scztcbiAgICAgICAgaWYgKHJvd3MgPT09IDEgJiYgY29scyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGIuZ2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgaWYgKGZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgfHwgZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5ouG5YiG5Li65aSa5YiXXG4gICAgICAgIGlmIChjb2xzID4gMSkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRDZWxsV2lkdGhzID0gdGhpcy5nZXRTcGxpdENvbHMoY2VsbFdpZHRoLCBjb2xzKTtcbiAgICAgICAgICAgIHRiLnNldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCwgc3BsaXRDZWxsV2lkdGhzWzBdLndpZHRoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXRDZWxsV2lkdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGIuaW5zZXJ0Q29sKGZvY3VzQ2VsbEluZGV4ICsgaSwgc3BsaXRDZWxsV2lkdGhzW2ldLndpZHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy/ojrflj5bkuLvljZXlhYPmoLxcbiAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gcm93LmdldENoaWxkKGZvY3VzQ2VsbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICByb3cuYWRkQ2hpbGQobmV3Q2VsbCwgZm9jdXNDZWxsSW5kZXggKyBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBmb2N1c1Jvd0luZGV4IHx8IGkgPiBmb2N1c1Jvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+eUseaZrumAmuWNleWFg+agvOi9rOWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dzID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBUYWJsZVJvd0VsZW1lbnQuY3JlYXRlUm93KHRiLmdldENvbHNDb3VudCgpKTtcbiAgICAgICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGZvY3VzUm93SW5kZXggKyBpKVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmV3Um93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBuZXdSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlckNlbGwgPSBmb2N1c1Jvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKVxuICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGZvY3VzQ2VsbEluZGV4IHx8IGogPiBmb2N1c0NlbGxJbmRleCArIGNvbHMgLSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy/ntKfmjKjkuIrnuqfnmoTljZXlhYPmoLzlrZjlnKjmqKrlkJHlkIjlubZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmi4bliIblkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHBhcmFtIHJvd3MgXG4gICAgICogQHBhcmFtIGNvbHMgXG4gICAgICovXG4gICAgc3RhdGljIHNwbGl0TWVyZ2VDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgcm93cyA9IHJvd3MgPCAxID8gMSA6IHJvd3M7XG4gICAgICAgIGNvbHMgPSBjb2xzIDwgMSA/IDEgOiBjb2xzO1xuICAgICAgICBpZiAocm93cyA9PT0gMSAmJiBjb2xzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjZWxsV2lkdGggPSB0Yi5nZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgJiYgIWZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZVJvd3MgPSB0aGlzLmdldFZNZXJnZVJvd3NDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICBjb25zdCBtZXJnZUNvbHMgPSB0aGlzLmdldEhNZXJnZUNvbHNDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICAvL+WPquacieaLhuWIhueahOihjOaVsOmcgOimgea7oei2s+atpOadoeS7tlxuICAgICAgICBpZiAobWVyZ2VSb3dzID4gMSAmJiByb3dzID4gMSkge1xuICAgICAgICAgICAgaWYgKHJvd3MgJSBtZXJnZVJvd3MgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOW9k+WJjeWQiOW5tueahOihjOaVsOS4ujoke21lcmdlUm93c30s5b2T5YmN5Y+v5ouG5YiG55qE6KGM5pWw5pivJHttZXJnZVJvd3N955qE57qm5pWwYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+aLhuWIhueahOihjOaVsOOAgeWIl+aVsOetieS6juWQiOW5tueahOihjOaVsOOAgeWIl+aVsFxuICAgICAgICAvL+aJp+ihjOi/mOWOn1xuICAgICAgICBpZiAobWVyZ2VDb2xzID09PSBjb2xzICYmIG1lcmdlUm93cyA9PT0gcm93cykge1xuICAgICAgICAgICAgVGFibGVVdGlsLnJlc3RvcmVDZWxsKHNzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXJnZUNvbHMgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW5kQ29sSW5kZXggfSA9IHRoaXMuaG9yU3BsaXRIb3JOb3JtYWxDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgIHRoaXMudmVyU3BsaXRWZXJNZXJnZUNlbGwoc3MsIHJvd3MsIGVuZENvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeWNleWFg+agvOS4uuaoquWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW5kQ29sSW5kZXggfSA9IHRoaXMuaG9yU3BsaXRIb3JNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ouG5YiG5qiq5ZCR5q2j5bi455qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSByb3dzIFxuICAgICAqIEBwYXJhbSBjb2xzIFxuICAgICAqL1xuICAgIHN0YXRpYyBob3JTcGxpdEhvck5vcm1hbENlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHsgc3RhcnRDb2xJbmRleDogbnVtYmVyLCBlbmRDb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRiLmdldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IHNwbGl0Q2VsbFdpZHRocyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNlbGxXaWR0aCwgY29scyk7XG4gICAgICAgIHRiLnNldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCwgc3BsaXRDZWxsV2lkdGhzWzBdLndpZHRoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzcGxpdENlbGxXaWR0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRiLmluc2VydENvbChmb2N1c0NlbGxJbmRleCArIGksIHNwbGl0Q2VsbFdpZHRoc1tpXS53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgcm93cyA9IHJvd3MgPCBtZXJnZVJvd3MgPyBtZXJnZVJvd3MgOiByb3dzO1xuICAgICAgICAvL+WQkeaMh+WumueahOWIl+aPkuWFpeaLhuWIhuWNleWFg+agvFxuICAgICAgICBpZiAoY29scyA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoZm9jdXNDZWxsSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cuYWRkQ2hpbGQobmV3Q2VsbCwgZm9jdXNDZWxsSW5kZXggKyBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBmb2N1c1Jvd0luZGV4IHx8IGkgPj0gZm9jdXNSb3dJbmRleCArIHJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v55Sx5pmu6YCa5Y2V5YWD5qC86L2s5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMuaE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9IG1hc3RlckNlbGwucHJvcHMudk1lcmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5Zyo6YCJ5Lit6KGM5LiL5o+S5YWl5ouG5YiG6KGMXG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5piv5pmu6YCa5Y2V5YWD5qC8XG4gICAgICAgIGlmICghZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgZGVidWdnZXJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCxcbiAgICAgICAgICAgIGVuZENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCArIGNvbHMgLSAxXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmqKrlkJHmi4bliIblkIjlubbnmoTljZXlhYPmoLwgXG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSByb3dzIFxuICAgICAqIEBwYXJhbSBjb2xzIFxuICAgICAqL1xuICAgIHN0YXRpYyBob3JTcGxpdEhvck1lcmdlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogeyBzdGFydENvbEluZGV4OiBudW1iZXIsIGVuZENvbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgaE1lcmdlQ29scyA9IHRoaXMuZ2V0SE1lcmdlQ29scyh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgsIGNvbHMpO1xuICAgICAgICBjb25zdCBjb2xzV2lkdGggPSBoTWVyZ2VDb2xzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIud2lkdGgsIDApXG4gICAgICAgIGNvbnN0IHNwbGl0Q29scyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNvbHNXaWR0aCwgY29scyk7XG4gICAgICAgIGNvbnN0IFtvdGhlclBhY2tzLCBjdXJyUGFja3NdID0gQ29sdW1uUGF0Y2hVdGlsLmdldFBhdGNoUGFja3MoaE1lcmdlQ29scywgc3BsaXRDb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUhvclNwbGl0Q29sdW1uUGF0Y2hQYWNrcyh0YiwgZm9jdXNSb3dJbmRleCwgMSwgb3RoZXJQYWNrcyk7XG4gICAgICAgIHRoaXMuYXBwbHlIb3JTcGxpdENvbHVtbkN1cnJQYXRjaFBhY2tzKHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCwgcm93cywgY3VyclBhY2tzKTtcbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCxcbiAgICAgICAgICAgIGVuZENvbEluZGV4OiB0aGlzLmdldFByZXBhcmVOZXdDb2xDb3VudHMob3RoZXJQYWNrcywgaE1lcmdlQ29scylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumcgOimgeaWsOWIm+W7uueahOWIl+aVsOmHj1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldFByZXBhcmVOZXdDb2xDb3VudHMocGFja3M6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4sIGhNZXJnZUNvbHM6IEFycmF5PENvbHVtblBhcnQ+KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbGFzdENvbEluZGV4ID0gaE1lcmdlQ29sc1toTWVyZ2VDb2xzLmxlbmd0aCAtIDFdLmluZGV4O1xuICAgICAgICBpZiAocGFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdENvbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDb2xQYWNrID0gcGFja3MuZmluZChwYWNrID0+IHBhY2sucGFydC5pbmRleCA9PT0gbGFzdENvbEluZGV4KTtcbiAgICAgICAgaWYgKCFsYXN0Q29sUGFjaykge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RDb2xJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdENvbEluZGV4ICsgbGFzdENvbFBhY2sucGF0Y2hzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2luc2VydCcpLmxlbmd0aFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW6lOeUqOaoquWQkeaLhuWIhuWNleWFg+agvOihpeS4gVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFwcGx5SG9yU3BsaXRDb2x1bW5QYXRjaFBhY2tzKHRiOiBUYWJsZUVsZW1lbnQsIGZvY3VzUm93SW5kZXg6IG51bWJlciwgc3BsaXRSb3dzOiBudW1iZXIsIHBhY2tzOiBBcnJheTx7IHBhcnQ6IENvbHVtblBhcnRPZmZzZXQsIHBhdGNoczogQXJyYXk8Q29sdW1uUGF0Y2g+IH0+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgcGFjayA9IHBhY2tzW2ldO1xuICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBwYWNrLnBhcnQuaW5kZXg7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gcGFjay5wYXRjaHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHBhY2sucGF0Y2hzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChwYXRjaC50eXBlID09PSAnbW9kaWZ5Jykge1xuICAgICAgICAgICAgICAgICAgICB0Yi5zZXRDZWxsV2lkdGgoY29sSW5kZXgsIHBhdGNoLmRhdGEud2lkdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0Y2gudHlwZSA9PT0gJ2luc2VydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGIuaW5zZXJ0Q29sKGNvbEluZGV4ICsgMSwgcGF0Y2guZGF0YS53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIC8v5ZCR5oyH5a6a55qE5YiX5o+S5YWl5ouG5YiG5Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+iOt+WPluS4u+WNleWFg+agvFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJSb3cuYWRkQ2hpbGQobmV3Q2VsbCwgY29sSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWtmOWcqOaoquWQkeWQiOW5tueahOWNleWFg+agvO+8jOi/m+ihjOWNleWFg+agvOWIhuaLhu+8jOaJk+ihpeS4gVxuICAgICAqIEBwYXJhbSB0YiBcbiAgICAgKiBAcGFyYW0gZm9jdXNSb3dJbmRleCBcbiAgICAgKiBAcGFyYW0gZm9jdXNDb2xJbmV4IFxuICAgICAqIEBwYXJhbSBzcGxpdFJvd3MgXG4gICAgICogQHBhcmFtIHBhY2tzIFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFwcGx5SG9yU3BsaXRDb2x1bW5DdXJyUGF0Y2hQYWNrcyh0YjogVGFibGVFbGVtZW50LCBmb2N1c1Jvd0luZGV4OiBudW1iZXIsIGZvY3VzQ29sSW5leDogbnVtYmVyLCBzcGxpdFJvd3M6IG51bWJlciwgcGFja3M6IEFycmF5PEFycmF5PENvbHVtblBhcnQ+Pik6IHZvaWQge1xuICAgICAgICAvL+iOt+WPluW9k+WJjeWIl+eahOWQiOW5tuihjOaVsFxuICAgICAgICBsZXQgdk1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NvbEluZXgpO1xuICAgICAgICB2TWVyZ2VSb3dzID0gdk1lcmdlUm93cyA9PT0gMSA/IDAgOiB2TWVyZ2VSb3dzO1xuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgZW5kUm93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCArIHZNZXJnZVJvd3MgLSAxKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlQ29scyA9IHBhY2tzW2ldO1xuICAgICAgICAgICAgaWYgKG1lcmdlQ29scy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBzdGFydFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IGVuZFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLmNvbWJpbmVDZWxscyh0Yiwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBtZXJnZUNvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgY2VsbCA9IGZvY3VzUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1tqXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvLyAgICAgY2VsbC5jZWxsUHJvcHMuaE1lcmdlID0gaiA9PT0gMCA/ICdyZXN0YXJ0JyA6ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0Um93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1swXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gZW5kUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1ttZXJnZUNvbHMubGVuZ3RoIC0gMV0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLmNvbWJpbmVDZWxscyh0Yiwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgKiDnurXlkJHmi4bliIblkIjlubbnmoTljZXlhYPmoLxcbiAgICAqIOWcqOaMh+WumuihjOS4i+aPkuWFpeWkjeWItuihjFxuICAgICog5a2Y5ZyoXG4gICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyB2ZXJTcGxpdFZlck1lcmdlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgZW5kQ29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IG1lcmdlUm93cyA9IDA7XG4gICAgICAgIGlmIChmb2N1c0NlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIG1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgICAgICBpZiAobWVyZ2VSb3dzICUgcm93cyAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Y+v5ouG5YiG55qE6KGM5pWw5b+F6aG75pivJHttZXJnZVJvd3N955qE57qm5pWwYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/kuI3lrZjlnKjlkIjlubbooYzvvIzliJnlkJHkuIvmlrDlop7ooYxcbiAgICAgICAgaWYgKG1lcmdlUm93cyA9PT0gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9jdXNSb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNSb3dDZWxsID0gZm9jdXNSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8v5YW25LuW5YiX6KaB57q15ZCR5ZCI5bm2XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZm9jdXNDZWxsSW5kZXggfHwgaSA+IGVuZENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvY3VzUm93Q2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1Jvd0NlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMuaE1lcmdlID0gZm9jdXNSb3dDZWxsLnByb3BzLmhNZXJnZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Um93LmFkZENoaWxkKGNlbGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGZvY3VzUm93SW5kZXggKyBpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lrZjlnKjlkIjlubbooYzvvIzliJnmjInnhafnuqbmlbDljZXkuKrlkIjlubbliIbmi4bkuLrlpJrkuKrlkIjlubZcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvL+aLhuWIhuihjOWSjOWQiOW5tuihjOebuOetie+8jOWImeaJp+ihjOi/mOWOn1xuICAgICAgICAgICAgaWYgKHJvd3MgPT09IG1lcmdlUm93cykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVyZ2VSb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCArIGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGZvY3VzQ2VsbEluZGV4OyBqIDw9IGVuZENvbEluZGV4OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXJnZVJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIHJvd3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXggKyBpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGZvY3VzQ2VsbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3BsaXRDb2xzKHdpZHRoOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IEFycmF5PENvbHVtblBhcnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PENvbHVtblBhcnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sczsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHsgd2lkdGg6IE1hdGguZmxvb3Iod2lkdGggLyBjb2xzKSwgaW5kZXg6IGkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ud2lkdGggKz0gd2lkdGggLSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLndpZHRoLCAwKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tueahOWIl1xuICAgICAqIEBwYXJhbSB0YiBcbiAgICAgKiBAcGFyYW0gY3VyclJvd0luZGV4IFxuICAgICAqIEBwYXJhbSBjdXJyQ29sSW5kZXggXG4gICAgICogQHBhcmFtIHNwbGl0Q29scyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRITWVyZ2VDb2xzKHRiOiBUYWJsZUVsZW1lbnQsIGN1cnJSb3dJbmRleDogbnVtYmVyLCBjdXJyQ29sSW5kZXg6IG51bWJlciwgc3BsaXRDb2xzOiBudW1iZXIpOiBBcnJheTxDb2x1bW5QYXJ0PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGN1cnJSb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbeyB3aWR0aDogdGIuZ2V0Q2VsbFdpZHRoKGN1cnJDb2xJbmRleCksIGluZGV4OiBjdXJyQ29sSW5kZXggfV07XG4gICAgICAgIGZvciAobGV0IGkgPSBjdXJyQ29sSW5kZXggKyAxOyBpIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IHdpZHRoOiB0Yi5nZXRDZWxsV2lkdGgoaSksIGluZGV4OiBpIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57q15ZCR5ZCI5bm255qE6KGM5pWwXG4gICAgICogQHBhcmFtIHRiIFxuICAgICAqIEBwYXJhbSBjdXJyUm93SW5kZXggXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Vk1lcmdlUm93c0NvdW50KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSA8VGFibGVDZWxsRWxlbWVudD4oPFRhYmxlUm93RWxlbWVudD50Yi5nZXRDaGlsZChyb3dJbmRleCkpLmdldENoaWxkKGNvbEluZGV4KVxuICAgICAgICBpZiAoc3RhcnRDZWxsLnByb3BzLnZNZXJnZSAhPT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgLSByb3dJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSAtIHJvd0luZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tueahOihjOaVsFxuICAgICAqIEBwYXJhbSB0YiBcbiAgICAgKiBAcGFyYW0gY3VyclJvd0luZGV4IFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldEhNZXJnZUNvbHNDb3VudCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pihyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pihjb2xJbmRleClcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbC5wcm9wcy5oTWVyZ2UgIT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSBjb2xJbmRleCArIDE7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpIC0gY29sSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgLSBjb2xJbmRleDtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUG9zaXRpb24sXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBDb250ZW50TWVudUl0ZW0sIENvbnRleHRNZW51RWxlbWVudEV2ZW50LCBLZXlib3JhZEVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGFibGVQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IFRhYmxlU3BsaXRDZWxsIH0gZnJvbSBcIi4vdGFibGUtc3BsaXQtY2VsbFwiO1xuaW1wb3J0IHsgVGFibGVVdGlsIH0gZnJvbSBcIi4vdGFibGUtdXRpbFwiO1xuXG4vKipcbiAqIOiuoeeul+ihqOagvOWIl1xuICovXG5mdW5jdGlvbiBjYWxjVGFibGVDb2xzKGVsZW1lbnQ6IFRhYmxlRWxlbWVudCk6IEFycmF5PHsgd2lkdGg6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHBlcmNlbnRDb2xzOiBBcnJheTx7IHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgfT4gPSBbXTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgcGVyY2VudFN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZWxlbWVudC5wcm9wcy5jb2xzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29sLndpZHRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGVyY2VudENvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgcGVyY2VudFN1bSArPSBOdW1iZXIucGFyc2VGbG9hdChjb2wud2lkdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VtICs9IGNvbC53aWR0aCBhcyBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbWVhc3VyZVJlbmRlciA9IGVsZW1lbnQubWVhc3VyZVJlbmRlciBhcyBSZW5kZXJPYmplY3Q7XG4gICAgY29uc3QgdGJXaWR0aCA9IG1lYXN1cmVSZW5kZXIucmVjdC5tYXhXaWR0aCBhcyBudW1iZXI7XG4gICAgaWYgKHBlcmNlbnRDb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcmVtYWluV2lkdGggPSB0YldpZHRoIC0gc3VtO1xuICAgICAgICBsZXQgcmVtYWluU3VtID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwZXJjZW50Q29sIG9mIHBlcmNlbnRDb2xzKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50V2lkdGggPSBOdW1iZXIucGFyc2VGbG9hdChwZXJjZW50Q29sLndpZHRoLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICBwZXJjZW50Q29sLndpZHRoID0gTWF0aC5mbG9vcihyZW1haW5XaWR0aCAqIHBlcmNlbnRXaWR0aCAvIHBlcmNlbnRTdW0pO1xuICAgICAgICAgICAgcmVtYWluU3VtICs9IHBlcmNlbnRDb2wud2lkdGggYXMgbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW1haW5XaWR0aCAtIHJlbWFpblN1bSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbFdpZHRoID0gcGVyY2VudENvbHNbcGVyY2VudENvbHMubGVuZ3RoIC0gMV0ud2lkdGggYXMgbnVtYmVyO1xuICAgICAgICAgICAgcGVyY2VudENvbHNbcGVyY2VudENvbHMubGVuZ3RoIC0gMV0ud2lkdGggPSBjb2xXaWR0aCArIChyZW1haW5XaWR0aCAtIHJlbWFpblN1bSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJyYXk6IEFycmF5PHsgd2lkdGg6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIgfT4gPSBbXTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQucHJvcHMuY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQucHJvcHMuY29sc1tpXS53aWR0aCBhcyBudW1iZXI7XG4gICAgICAgIGFycmF5LnB1c2goeyB3aWR0aCwgb2Zmc2V0IH0pO1xuICAgICAgICBvZmZzZXQgKz0gd2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxUYWJsZVByb3BzPiB7XG4gICAgLy9wcm9wczogVGFibGVQcm9wcztcbiAgICBwcml2YXRlIF9hY3R1YWxDb2xzUHJvcHMhOiBBcnJheTx7IHdpZHRoOiBudW1iZXIsIG9mZnNldDogbnVtYmVyIH0+IHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RiJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGFibGVQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4oJ0VsZW1lbnRDb250ZXh0TWVudScsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IGV2dDtcbiAgICAgICAgICAgIGlmIChUYWJsZVV0aWwuY2FuRGVsZXRlVGFibGUoc2VsZWN0aW9uU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAnRGVsZXRlVGFibGUnLCBjYXB0aW9uOiAn5Yig6Zmk6KGo5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFRhYmxlVXRpbC5jYW5NZXJnZUNlbGxzKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICAgICAgICAgIGV2dC5tZW51cy5wdXNoKHsgaWNvbjogJ01lcmdlRHVwbGljYXRlJywgY2FwdGlvbjogJ+WQiOW5tuWNleWFg+agvCcsIGV2ZW50T2JqOiB7IG9uQ2xpY2s6IChjZXZ0KSA9PiB7IFRhYmxlVXRpbC5tZXJnZUNlbGxzKHNlbGVjdGlvblN0YXRlKSB9IH0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVGFibGVVdGlsLmNhblNwbGl0Q2VsbChzZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBldnQubWVudXMucHVzaCh7IGljb246ICdTcGxpdCcsIGNhcHRpb246ICfmi4bliIbljZXlhYPmoLwnLCBldmVudE9iajogeyBvbkNsaWNrOiAoY2V2dCkgPT4geyBUYWJsZVNwbGl0Q2VsbC5zcGxpdENlbGwoc2VsZWN0aW9uU3RhdGUsIDAsIDIpIH0gfSB9KTtcbiAgICAgICAgICAgICAgICBldnQubWVudXMucHVzaCh7IGljb246ICdDb21iaW5lJywgY2FwdGlvbjogJ+WQiOW5tuWNleWFg+agvOi/mOWOnycsIGV2ZW50T2JqOiB7IG9uQ2xpY2s6IChjZXZ0KSA9PiB7IFRhYmxlVXRpbC5yZXN0b3JlQ2VsbChzZWxlY3Rpb25TdGF0ZSkgfSB9IH0pO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldnQubWVudXMucHVzaCh7IGljb246IFwiSW5zZXJ0XCIsIGNhcHRpb246ICfkuIrmlrnmj5LlhaXmrrXokL0nLCBldmVudE9iajogeyBvbkNsaWNrOiAoY2V2dCkgPT4geyB0aGlzLnBhcmVudC5hZGRDaGlsZChQYXJhZ3JhcGhFbGVtZW50LmNyZWF0ZUVsZW1lbnQoKSwgdGhpcy5nZXRJbmRleCgpKTsgdGhpcy5yZWZyZXNoVmlldygpIH0gfSB9KTtcbiAgICAgICAgICAgIGV2dC5tZW51cy5wdXNoKHsgaWNvbjogXCJJbnNlcnRcIiwgY2FwdGlvbjogJ+S4i+aWueaPkuWFpeauteiQvScsIGV2ZW50T2JqOiB7IG9uQ2xpY2s6IChjZXZ0KSA9PiB7IHRoaXMucGFyZW50LmFkZENoaWxkKFBhcmFncmFwaEVsZW1lbnQuY3JlYXRlRWxlbWVudCgpLCB0aGlzLmdldEluZGV4KCkgKyAxKTsgdGhpcy5yZWZyZXNoVmlldygpIH0gfSB9KTtcblxuXG4gICAgICAgICAgICBldnQubWVudXMgPSByZW1vdmVEdXBsaWNhdGVzRXZlbnQoZXZ0Lm1lbnVzKTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8S2V5Ym9yYWRFbGVtZW50RXZlbnQ+KCdFbGVtZW50S2V5RG93bicsIChldnQpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+ihqOagvEVsZW1lbnRLZXlEb3duJywgZXZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUV2ZW50ID0gZXZ0LnNvdXJjZUV2ZW50O1xuICAgICAgICAgICAgLy/mjInkuIt0YWLplK5cbiAgICAgICAgICAgIGlmIChzb3VyY2VFdmVudC5rZXlDb2RlID09PSA5ICYmICFzb3VyY2VFdmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUYWJsZVV0aWwubW92ZU5leHRDZWxsKGV2dC5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDojrflj5blrp7pmYXmtYvph4/nmoTlrr3luqbvvIzlsIZhdXRv44CB55m+5YiG5q+U5YiX5a695bqm6L+b6KGM6L2s5YyW5Li6IG51bWJlciDnsbvlnotcbiAgICAgKi9cbiAgICBnZXQgYWN0dWFsQ29sc1Byb3BzKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdHVhbENvbHNQcm9wcykge1xuICAgICAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gY2FsY1RhYmxlQ29scyh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsQ29sc1Byb3BzO1xuICAgIH1cblxuICAgIGdldENlbGxXaWR0aChjZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChjZWxsSW5kZXggPj0gdGhpcy5hY3R1YWxDb2xzUHJvcHMubGVuZ3RoIHx8IGNlbGxJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxDb2xzUHJvcHNbY2VsbEluZGV4XS53aWR0aDtcbiAgICB9XG5cbiAgICBnZXRDZWxsT2Zmc2V0WChjZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbENvbHNQcm9wc1tjZWxsSW5kZXhdLm9mZnNldDtcbiAgICB9XG5cbiAgICBzZXRDZWxsV2lkdGgoY2VsbEluZGV4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLmFjdHVhbENvbHNQcm9wc1tpbmRleF0ud2lkdGggPSB3aWR0aDtcbiAgICAgICAgaWYgKGNlbGxJbmRleCA+PSB0aGlzLmFjdHVhbENvbHNQcm9wcy5sZW5ndGggfHwgY2VsbEluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuY29sc1tjZWxsSW5kZXhdLndpZHRoID0gd2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5YiX55qE5a6a5LmJXG4gICAgICogQHBhcmFtIGluZGV4IFxuICAgICAqIEBwYXJhbSB3aWR0aCBcbiAgICAgKi9cbiAgICBpbnNlcnRDb2woaW5kZXg6IG51bWJlciwgd2lkdGg6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMuc3BsaWNlKGluZGV4LCAwLCB7IHdpZHRoIH0pO1xuICAgICAgICB0aGlzLl9hY3R1YWxDb2xzUHJvcHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWIl+eahOWumuS5iVxuICAgICAqIEBwYXJhbSBpbmRleCBcbiAgICAgKi9cbiAgICByZW1vdmVDb2woaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBnZXRDb2xzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsQ29sc1Byb3BzLmxlbmd0aDtcbiAgICB9XG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gbnVsbDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIC8vdGhpcy5wcm9wcy53aWR0aCA9IHRoaXMubWVhc3VyZVJlbmRlcj8ucmVjdC53aWR0aCBhcyBudW1iZXI7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RiJyxcbiAgICAgICAgICAgIHByb3BzOiB7IC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucykgfVxuICAgICAgICB9XG4gICAgICAgIHByb3BzLnByb3BzLndpZHRoID0gdGhpcy5tZWFzdXJlUmVuZGVyPy5yZWN0LndpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVUYWJsZShyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IFRhYmxlRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCB0YlByb3BzID0gbmV3IFRhYmxlUHJvcHMoKTtcbiAgICAgICAgdGFibGUucHJvcHMgPSB0YlByb3BzO1xuICAgICAgICB0YlByb3BzLmJvcmRlciA9ICdhbGwnO1xuICAgICAgICB0YlByb3BzLmNvbHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIHRiUHJvcHMuY29scy5wdXNoKHsgd2lkdGg6IFwiMVwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICB0YWJsZS5hZGRDaGlsZChUYWJsZVJvd0VsZW1lbnQuY3JlYXRlUm93KGNvbHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzRXZlbnQoZXZlbnRzOiBDb250ZW50TWVudUl0ZW1bXSk6IENvbnRlbnRNZW51SXRlbVtdIHtcbiAgICBsZXQgYXJyOiBDb250ZW50TWVudUl0ZW1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgbGV0IGtleXMgPSBhcnIubWFwKGl0ZW0gPT4gaXRlbS5jYXB0aW9uKTtcbiAgICAgICAgaWYgKCFrZXlzLmluY2x1ZGVzKGV2ZW50c1tpXS5jYXB0aW9uKSkge1xuICAgICAgICAgICAgYXJyLnVuc2hpZnQoZXZlbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDxUYWJsZUVsZW1lbnQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnNldFJlbmRlcldpZHRoKG1heFdpZHRoKTtcbiAgICB9XG5cbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgLy/nu5jliLbooajmoLznur9cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy5ib3JkZXIgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3dSZW5kZXIgPSB0aGlzLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgcm93UG9zOiBQb3NpdGlvbiA9IHsgeDogcm93UmVuZGVyLnJlY3QueCArIHBvc2l0aW9uLngsIHk6IHJvd1JlbmRlci5yZWN0LnkgKyBwb3NpdGlvbi55IH07XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd1JlbmRlci5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQb3M6IFBvc2l0aW9uID0geyB4OiBjZWxsUmVuZGVyLnJlY3QueCArIHJvd1Bvcy54LCB5OiBjZWxsUmVuZGVyLnJlY3QueSArIHJvd1Bvcy55IH07XG4gICAgICAgICAgICAgICAgLy/nu5jliLbljZXlhYPmoLzkuIrovrnmoYZcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLngsIGNlbGxQb3MueSwgY2VsbFJlbmRlci5yZWN0LndpZHRoLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55IH1dKTtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+e7mOWItuW3pui+ueahhlxuICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCwgY2VsbFBvcy55LCAxLCBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9XSk7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnkgfSwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v57uY5Yi25Y+z6L655qGGXG4gICAgICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZmlsbFJlY3QoY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCBjZWxsUG9zLnksIDEsIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5maWxsTGluZXMoW3sgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfV0pO1xuICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgLy/nu5jliLbkuIvovrnmoYZcbiAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLngsIGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQsIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgMSk7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfV0pO1xuICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IH0sIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgIC8vY2VsbFJlbmRlci5iZWdpblJlbmRlcihjdHgsIHsgeDogcG9zaXRpb24ueCArIGNlbGxSZW5kZXIub2Zmc2V0WCwgeTogcG9zaXRpb24ueSArIGNlbGxSZW5kZXIub2Zmc2V0WSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGFibGVGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VGFibGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RiJztcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBUYWJsZVByb3BzO1xuICAgICAgICBjb25zdCB0YiA9IG5ldyBUYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY29scyA9IHByb3BzLmNvbHM7XG4gICAgICAgIGNvbnN0IHRiUHJvcHMgPSB0Yi5wcm9wcztcbiAgICAgICAgdGJQcm9wcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXIgfHwgJ2FsbCc7XG4gICAgICAgIHRiUHJvcHMuY29scyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICB0YlByb3BzLmNvbHMucHVzaCh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbC53aWR0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGIucHJvcHMgPSB0YlByb3BzO1xuICAgICAgICByZXR1cm4gdGI7XG4gICAgfVxuXG59XG5cbi8qKlxuICog6KGMLeihqOagvOa4suafk+aooeW8j1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dExpbmVSZW5kZXJNb2RlKGVsZTogVGFibGVFbGVtZW50LCBvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YiA9IGVsZS5tZWFzdXJlUmVuZGVyIGFzIFRhYmxlUmVuZGVyT2JqZWN0O1xuICAgIGNvbnN0IHJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgLy/ooajmoLzlpLTkuI3lgZrlpITnkIZcbiAgICAgICAgaWYgKCg8VGFibGVSb3dFbGVtZW50PnJvdy5lbGVtZW50KS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgICAgLy/ojrflj5blvZPliY3ooYznmoTmloflrZfooYzmlbBcbiAgICAgICAgY29uc3QgbWF4TGluZXNDb3VudCA9IGdldFJvd01heFRleHRMaW5lcyhyb3cpO1xuICAgICAgICBpZiAobWF4TGluZXNDb3VudCA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgbWF4TGluZXNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gcm93LmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KCkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgbmV3Um93LnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3Qocm93LnJlY3QpO1xuICAgICAgICAgICAgICAgIHRiLmluc2VydENoaWxkKG5ld1Jvdywgcm93LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgICAgICAvL+WkjeWItuihjOaWh+Wtl+WIsOaWsOihjOS4rVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcm93Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaykgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gY2VsbC5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zLCByZW5kZXJDdHgpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdFxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoY2VsbC5yZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jvdy5hZGRDaGlsZChuZXdDZWxsKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNwbGl0VGV4dGxpbmVUb05ld1Jvdyhyb3csIG1heExpbmVzQ291bnQsIG9wdGlvbnMsIHJlbmRlckN0eCk7XG4gICAgfVxuICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0Yik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICog6I635Y+W5b2T5YmN6KGM55qE5paH5a2X6KGM5pWwXG4gKiBAcGFyYW0gcm93IFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIGdldFJvd01heFRleHRMaW5lcyhyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICBsZXQgY2VsbE1heExpbmVzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjZWxsLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gY2VsbC5nZXRDaGlsZChrKSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjZWxsTWF4TGluZXMgKz0gcGFyYVJlbmRlci5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY291bnQgPSBjZWxsTWF4TGluZXMgPiBjb3VudCA/IGNlbGxNYXhMaW5lcyA6IGNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5cbi8qKlxuICog5bCG5aSa6KGM5paH5pys56e75Yqo5Yiw5paw6KGM5LitXG4gKiBAcGFyYW0gcm93IFxuICogQHBhcmFtIG1heExpbmVzQ291bnQgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gc3BsaXRUZXh0bGluZVRvTmV3Um93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QsIG1heExpbmVzQ291bnQ6IG51bWJlciwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogdm9pZCB7XG4gICAgaWYgKG1heExpbmVzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgcGFyYUxpbmVzID0gRWxlbWVudFV0aWwuZ2V0Q2VsbFBhcmFMaW5lcyhjZWxsKTtcbiAgICAgICAgaWYgKHBhcmFMaW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgcGFyYUxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBvdXR0ZXJMaW5lUmVjdCA9IHBhcmFMaW5lc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBvdXR0ZXJMaW5lUmVjdC5wYXJlbnQgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuXG4gICAgICAgICAgICBjb25zdCBuZXdQYXJhUmVuZGVyID0gcGFyYVJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zLCByZW5kZXJDdHgpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIG5ld1BhcmFSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChwYXJhUmVuZGVyLnJlY3QpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdPdXR0ZXJMaW5lUmVjdCA9IG91dHRlckxpbmVSZWN0LmNsb25lKCk7XG4gICAgICAgICAgICBuZXdPdXR0ZXJMaW5lUmVjdC5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KG91dHRlckxpbmVSZWN0LnJlY3QpO1xuICAgICAgICAgICAgbmV3UGFyYVJlbmRlci5hZGRDaGlsZChuZXdPdXR0ZXJMaW5lUmVjdCk7XG5cbiAgICAgICAgICAgIHBhcmFSZW5kZXIucmVtb3ZlQ2hpbGQob3V0dGVyTGluZVJlY3QpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHBhcmFSZW5kZXIpO1xuXG4gICAgICAgICAgICBpZiAocGFyYVJlbmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjZWxsLnJlbW92ZUNoaWxkKHBhcmFSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRSb3cgPSByb3cucGFyZW50LmdldENoaWxkKHJvdy5nZXRJbmRleCgpICsgaikgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBzcGxpdENlbGwgPSBzcGxpdFJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBzcGxpdENlbGwuYWRkQ2hpbGQobmV3UGFyYVJlbmRlcik7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUobmV3UGFyYVJlbmRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGIgPSByb3cucGFyZW50IGFzIFRhYmxlUmVuZGVyT2JqZWN0O1xuICAgIGNvbnN0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMaW5lc0NvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXggKyBpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNlbGwpO1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyb3cpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tICcuL2RvY3VtZW50LXNlbGVjdGlvbidcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIFJhbmdlVXRpbCB7XG5cbiAgICBzdGF0aWMgZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyLCBlbmRDb250cm9sOiBMZWFmRWxlbWVudCwgZW5kT2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhYmxlU2VsZWN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCB0YkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgPT09IGVuZENvbnRyb2wgJiYgc3RhcnRDb250cm9sLnBhcmVudCA9PT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2xsYXBzZWRSYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IHRoaXMuZ2V0U3RhcnRGb3JiYWNrVHJlZURhdGEoc3RhcnRDb250cm9sLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIG51bGwsIHN0YXJ0T2Zmc2V0KS5zZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IHRoaXMuZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKGVuZENvbnRyb2wsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgbnVsbCwgZW5kT2Zmc2V0KS5zZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gYW5jZXN0b3JDb21tb25Db250cm9sLmdldENoaWxkSW5kZXgoc3RhcnRSYW5nZS50YXJnZXQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5nZXRDaGlsZEluZGV4KGVuZFJhbmdlLnRhcmdldCk7XG4gICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRJbmRleCArIDEsIGVuZEluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VFcXVhbHMoc3RhcnRSYW5nZSwgZW5kUmFuZ2UpKSB7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoc3RhcnRSYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoc3RhcnRSYW5nZSk7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goZW5kUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoY29tbW9uUmFuZ2UpO1xuICAgICAgICByZXR1cm4gY29tbW9uUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvbGxhcHNlZFJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZE9mZnNldDogbnVtYmVyLCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYW5jZXN0b3JDb21tb25Db250cm9sLFxuICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIDEsXG4gICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCldXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOmAieWMuueahOWGheWuuVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2wgXG4gICAgICogQHBhcmFtIHN0YXJ0T2Zmc2V0IFxuICAgICAqIEBwYXJhbSBlbmRDb250cm9sIFxuICAgICAqIEBwYXJhbSBlbmRPZmZzZXQgXG4gICAgICogQHBhcmFtIHRiIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVNlbGVjdGlvblJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZENvbnRyb2w6IExlYWZFbGVtZW50LCBlbmRPZmZzZXQ6IG51bWJlciwgdGI6IFRhYmxlRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoc3RhcnRDZWxsICYmIGVuZENlbGwgJiYgc3RhcnRDZWxsLnBhcmVudC5wYXJlbnQgPT09IHRiICYmIGVuZENlbGwucGFyZW50LnBhcmVudCA9PT0gdGIpIHtcbiAgICAgICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IGVuZFJvd0luZGV4ID0gZW5kQ2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBzdGFydENvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgZW5kQ29sSW5kZXggPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb2xJbmRleCA+IGVuZENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgW3N0YXJ0Q29sSW5kZXgsIGVuZENvbEluZGV4XSA9IFtlbmRDb2xJbmRleCwgc3RhcnRDb2xJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRSb3dJbmRleCA+IGVuZFJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgW3N0YXJ0Um93SW5kZXgsIGVuZFJvd0luZGV4XSA9IFtlbmRSb3dJbmRleCwgc3RhcnRSb3dJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWdpb24gPSB7IHN0YXJ0Um93OiBzdGFydFJvd0luZGV4LCBlbmRSb3c6IGVuZFJvd0luZGV4LCBzdGFydENvbDogc3RhcnRDb2xJbmRleCwgZW5kQ29sOiBlbmRDb2xJbmRleCB9Oy8vdGhpcy5nZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YiwgeyBzdGFydFJvdzogc3RhcnRSb3dJbmRleCwgZW5kUm93OiBlbmRSb3dJbmRleCwgc3RhcnRDb2w6IHN0YXJ0Q29sSW5kZXgsIGVuZENvbDogZW5kQ29sSW5kZXggfSk7XG4gICAgICAgICAgICBzdGFydFJvd0luZGV4ID0gcmVnaW9uLnN0YXJ0Um93O1xuICAgICAgICAgICAgZW5kUm93SW5kZXggPSByZWdpb24uZW5kUm93O1xuICAgICAgICAgICAgc3RhcnRDb2xJbmRleCA9IHJlZ2lvbi5zdGFydENvbDtcbiAgICAgICAgICAgIGVuZENvbEluZGV4ID0gcmVnaW9uLmVuZENvbDtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JhbmdlczogQXJyYXk8U2VsZWN0aW9uQ29udGVudFJhbmdlPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93SW5kZXg7IGkgPD0gZW5kUm93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSYW5nZXM6IEFycmF5PFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sSW5kZXg7IGogPD0gZW5kQ29sSW5kZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChjZWxsKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbExhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChjZWxsKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsRmlyc3RMZWFmRWxlbWVudCAmJiAhY2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFJhbmdlID0gdGhpcy5nZXRTZWxjdGlvblJhbmdlKGNlbGxGaXJzdExlYWZFbGVtZW50LCAwLCBjZWxsTGFzdExlYWZFbGVtZW50LCAxLCBjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSYW5nZXMucHVzaChjZWxsUmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1JhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcm93LFxuICAgICAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydENvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZENvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbLi4uY2VsbFJhbmdlc11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJvd1JhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRDb2xJbmRleCA9PT0gMCAmJiBlbmRDb2xJbmRleCA9PT0gcm93Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgcm93UmFuZ2VzLnB1c2gocm93UmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFibGVSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogdGIsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydFJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kUm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogWy4uLnJvd1Jhbmdlc11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJsZVJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRSb3dJbmRleCA9PT0gMCAmJiBlbmRSb3dJbmRleCA9PT0gdGIubGVuZ3RoIC0gMSAmJiB0YWJsZVJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLmlzRnVsbFNlbGVjdGVkKTtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZVJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3ljZXlhYPmoLzlkozooajmoLzkuI3lr7nlupQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTdGFydEZvcmJhY2tUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQsIGNoaWxkRGF0YTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICE9PSBhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHBhcmVudCwgcGFyZW50LmdldENoaWxkSW5kZXgoY29udHJvbCkgKyAxLCAtMSk7XG4gICAgICAgICAgICBpZiAoY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi51bnNoaWZ0KGNoaWxkRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4udW5zaGlmdCh0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgb2Zmc2V0LCAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFydEZvcmJhY2tUcmVlRGF0YShwYXJlbnQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgcmFuZ2UsIC05OSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBhbmNlc3RvckNvbW1vbkNvbnRyb2wsXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogLTEsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgb2Zmc2V0LCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvclJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaChjaGlsZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChhbmNlc3RvclJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiBhbmNlc3RvclJhbmdlO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEVuZEZvcndhcmRUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQsIGNoaWxkRGF0YTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAhPT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShwYXJlbnQsIDAsIHBhcmVudC5nZXRDaGlsZEluZGV4KGNvbnRyb2wpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sLCAwLCBvZmZzZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQocmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKHBhcmVudCwgYW5jZXN0b3JDb21tb25Db250cm9sLCByYW5nZSwgLTk5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yUmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGFuY2VzdG9yQ29tbW9uQ29udHJvbCxcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgMCwgb2Zmc2V0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5jZXN0b3JSYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoYW5jZXN0b3JSYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gYW5jZXN0b3JSYW5nZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldENoaWxkVHJlZURhdGEoY29udHJvbDogRWxlbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBjb250cm9sLFxuICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmQsXG4gICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbXVxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBlbmQgPT09IC0xID8gY29udHJvbC50ZXh0Lmxlbmd0aCA6IGVuZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gZW5kID09PSAtMSA/IDEgOiBlbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZW5kID0gZW5kID09PSAtMSA/IGNvbnRyb2wubGVuZ3RoIDogZW5kO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjaGlsZCwgMCwgLTEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNldFJhbmdlRnVsbFNlbGVjdGVkKHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSA9IHNlbGVjdGlvblJhbmdlO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHN0YXJ0T2Zmc2V0ID09PSAwICYmIGVuZE9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2UudGFyZ2V0LnRleHQubGVuZ3RoXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRPZmZzZXQgPT09IDAgJiYgZW5kT2Zmc2V0ID09PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHNlbGVjdGlvblJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW4gPSBzZWxlY3Rpb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuO1xuICAgICAgICAgICAgLy/ooqvlkIjlubbnmoR0YWJsZS1jZWxs77yM5YaF5a655Li6ZW1wdHlcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IHNlbGVjdGVkQ2hpbGRyZW5bMF07XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW1JbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGZpcnN0SXRlbS50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBzZWxlY3RlZENoaWxkcmVuW3NlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbUluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgobGFzdEl0ZW0udGFyZ2V0KTtcbiAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQgPSBsYXN0SXRlbUluZGV4O1xuICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBmaXJzdEl0ZW1JbmRleCA9PT0gMCAmJiBmaXJzdEl0ZW0uaXNGdWxsU2VsZWN0ZWQgJiYgbGFzdEl0ZW1JbmRleCA9PT0gcGFyZW50Lmxlbmd0aCAtIDEgJiYgbGFzdEl0ZW0uaXNGdWxsU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZ2VFcXVhbHMoc2VsUmFuZ2UxOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNlbFJhbmdlMjogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzZWxSYW5nZTEudGFyZ2V0ID09PSBzZWxSYW5nZTIudGFyZ2V0ICYmIHNlbFJhbmdlMS5zdGFydE9mZnNldCA9PT0gc2VsUmFuZ2UyLnN0YXJ0T2Zmc2V0ICYmIHNlbFJhbmdlMS5lbmRPZmZzZXQgPT09IHNlbFJhbmdlMi5lbmRPZmZzZXQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pgInljLrojIPlm7Tmm7TmraPpgInljLrlhoXlrrnnirbmgIFcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRSYW5nZSBcbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhdGUgXG4gICAgICovXG4gICAgc3RhdGljIGZpeFNlbGVjdGlvblN0YXRlQnlSYW5nZShzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIHNlbGVjdGVkUmFuZ2UgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSB0aGlzLmdldFN0YXJ0UmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IHRoaXMuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgIT09IHN0YXJ0Q29udHJvbCB8fCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzdGFydE9mZnNldCB8fCBlbmRSYW5nZS50YXJnZXQgIT09IGVuZENvbnRyb2wgfHwgZW5kUmFuZ2UuZW5kT2Zmc2V0ICE9PSBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBzc1JhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICBzc1JhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIHNzUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHNzUmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTdGFydFJhbmdlVGFyZ2V0KHBhcmVudFJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsIHtcbiAgICAgICAgaWYgKHBhcmVudFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50UmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldFN0YXJ0UmFuZ2VUYXJnZXQocGFyZW50UmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RW5kUmFuZ2VUYXJnZXQocGFyZW50UmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGwge1xuICAgICAgICBpZiAocGFyZW50UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRSYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRFbmRSYW5nZVRhcmdldChwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog5b6q546v6YCS5b2S5omn6KGM6YCJ5Yy65a+56LGh5pa55rOVXG4gICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgKiBAcGFyYW0gaGFuZGxlciBcbiAgICAqL1xuICAgIHN0YXRpYyByZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgaGFuZGxlcjogKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaGFuZGxlcihyYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lhYPntKDmmK/lkKbooqvlrozlhajpgInkuK1cbiAgICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIGVsZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlLCAoY2hpbGRSYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkUmFuZ2UudGFyZ2V0ID09PSBlbGUgJiYgY2hpbGRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxufSIsImltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgUG9zaXRpb24sIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQnJhbmNoUmVuZGVyT2JqZWN0LCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudENvbnRhaW5lclJlbmRlciB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQ29tbWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IENvbW1lbnRzVXRpbCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtdXRpbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5leHBvcnQgaW50ZXJmYWNlIFByaW50T3B0aW9ucyB7XG4gICAgYmVmb3JlUHJpbnRQYWdlOiAocGFnZUluZGV4OiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIGFmdGVyUHJpbnRQYWdlOiAocGFnZUluZGV4OiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiB2b2lkO1xufVxuZXhwb3J0IGNsYXNzIEVsZW1lbnRQYWludCB7XG4gICAgLy/lrZjlgqjlhYPntKDlkoznu5jliLblhYPntKDnmoTmmKDlsITlhbPns7tcbiAgICAvL3BhaW50RWxlbWVudE1hcDogTWFwPEVsZW1lbnQsIEFycmF5PFJlbmRlck9iamVjdD4+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc2VsZWN0ZWRTZXRzITogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT47XG4gICAgcHJpdmF0ZSBtZWFzdXJlQ29tbUNvbnRhaW5lciE6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgIHByaXZhdGUgcmVQYWludCE6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHByaXZhdGUgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpIHsgfVxuICAgIC8v5a6h6ZiF5qCH6K6w55qE5L2N572u5a+55bqU5YWz57O7XG4gICAgcGFpbnRDb21tTWFwITogQXJyYXk8eyBlbGU6IENvbW1lbnRFbGVtZW50LCByZW5kZXI6IFJlbmRlck9iamVjdCwgcG9zOiBQb3NpdGlvbiB9PjtcbiAgICBwYWludFBhZ2VQb3MhOiBQb3NpdGlvbjtcbiAgICBkcmF3UGFnZXMoZG9jQ29udGFpbmVyOiBEb2N1bWVudENvbnRhaW5lclJlbmRlciwgc2VsZWN0ZWRTZXRzOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPiwgbWVhc3VyZUNvbW1Db250YWluZXI6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0LCByZVBhaW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVQYWludCA9IHJlUGFpbnQ7XG4gICAgICAgIHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIgPSBtZWFzdXJlQ29tbUNvbnRhaW5lcjtcbiAgICAgICAgY29uc3QgeyB2aWV3U2V0dGluZ3MsIGRvY1BhZ2VTZXR0aW5ncywgdmlld0JhY2tjb2xvciB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJDdHguY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNldHMgPSBzZWxlY3RlZFNldHM7XG4gICAgICAgIGRvY0NvbnRhaW5lci5yZWN0LnggPSBNYXRoLmZsb29yKCh2aWV3U2V0dGluZ3Mud2lkdGggLSBkb2NQYWdlU2V0dGluZ3Mud2lkdGgpIC8gMik7XG4gICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdCgwLCAwLCB2aWV3U2V0dGluZ3Mud2lkdGgsIHZpZXdTZXR0aW5ncy5oZWlnaHQsIHZpZXdCYWNrY29sb3IpO1xuICAgICAgICBjb25zdCBwYWdlQ291bnQgPSBkb2NDb250YWluZXIubGVuZ3RoO1xuICAgICAgICBjb25zdCBjb250YWluZXJQb3MgPSB7IHg6IGRvY0NvbnRhaW5lci5yZWN0LngsIHk6IGRvY0NvbnRhaW5lci5yZWN0LnkgLSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9ID0gZG9jLnJlY3Q7XG4gICAgICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgY29udGFpbmVyUG9zLngsIHk6IHJ5ICsgY29udGFpbmVyUG9zLnkgfTtcbiAgICAgICAgICAgIGxldCBpblZpZXdQb3J0OiBib29sZWFuIHwgdW5kZWZpbmVkID0gKGN1cnJQb3NpdGlvbi55ID49IDAgJiYgY3VyclBvc2l0aW9uLnkgPD0gdGhpcy52aWV3T3B0aW9ucy52aWV3UGFpbnRIZWlnaHQpIHx8IChjdXJyUG9zaXRpb24ueSA8IDAgJiYgY3VyclBvc2l0aW9uLnkgKyByaCA+IDApO1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICAgICAgLy9pblZpZXdQb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWludENvbW1NYXAgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGFpbnRQYWdlUG9zID0gY3VyclBvc2l0aW9uO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVuZGVyT2JqZWN0KGRvYywgY29udGFpbmVyUG9zLCBpblZpZXdQb3J0KTtcbiAgICAgICAgICAgIGlmIChpblZpZXdQb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VkUGFnZVBhaW50Q29tcGxldGVkKGRvYywgY29udGFpbmVyUG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGRvY0NvbnRhaW5lci5lbmRSZW5kZXIodGhpcy5yZW5kZXJDdHgsIGNvbnRhaW5lclBvcylcbiAgICAgICAgdGhpcy5yZW5kZXJDdHguY29tbWl0KG51bGwpO1xuICAgIH1cblxuICAgIGRyYXdSZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3Q8YW55PiwgcGFyZW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0sIHBhcmVudEluVmlld1BvcnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVuZGVyT2JqZWN0LmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLnJlUGFpbnQgJiYgZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5wYWludFJlbmRlcnMucHVzaChyZW5kZXJPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgLy/liKTmlq3lvZPliY3nu5jliLblhYPntKDmmK/lkKblnKjop4bnqpflhoVcbiAgICAgICAgbGV0IGluVmlld1BvcnQ6IGJvb2xlYW4gPSBwYXJlbnRJblZpZXdQb3J0O1xuICAgICAgICBpZiAocGFyZW50SW5WaWV3UG9ydCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICBpblZpZXdQb3J0ID0gKGN1cnJQb3NpdGlvbi55ID49IDAgJiYgY3VyclBvc2l0aW9uLnkgPD0gdGhpcy52aWV3T3B0aW9ucy52aWV3UGFpbnRIZWlnaHQpIHx8IChjdXJyUG9zaXRpb24ueSA8IDAgJiYgY3VyclBvc2l0aW9uLnkgKyByaCA+IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChpblZpZXdQb3J0IHx8IHRoaXMucmVQYWludCkge1xuICAgICAgICAgICAgICAgIC8v5a6h6ZiF56qX5Y+j6YeN5paw6K6h566X5L2N572uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlck9iamVjdC5pc01lYXN1cmVDb21tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50c1V0aWwucmVtZWFzdXJlQ29tbWVudHModGhpcy5yZW5kZXJDdHgsIHJlbmRlck9iamVjdCwgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lciwgdGhpcy5wYWludENvbW1NYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0LmlzTWVhc3VyZUNvbW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5iZWdpblJlbmRlcih0aGlzLnJlbmRlckN0eCwgY3VyclBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3UmVuZGVyT2JqZWN0KGNoaWxkLCBjdXJyUG9zaXRpb24sIGluVmlld1BvcnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5lbmRSZW5kZXIodGhpcy5yZW5kZXJDdHgsIGN1cnJQb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGluVmlld1BvcnQpIHtcbiAgICAgICAgICAgICAgICByZW5kZXJPYmplY3QucmVuZGVyKHRoaXMucmVuZGVyQ3R4LCBjdXJyUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lrqHpmIXkv6Hmga9cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgJiYgZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09ICdjb21tJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1FbGVtZW50ID0gZWxlbWVudCBhcyBDb21tZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY29tbUVsZW1lbnQucHJvcHMubWFya1R5cGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ojrflj5blvZPliY3nu5jliLblhYPntKDnm7jlr7nkuo7lvZPliY3pobXnmoTlnZDmoIdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludENvbW1NYXAucHVzaCh7IGVsZTogY29tbUVsZW1lbnQsIHJlbmRlcjogcmVuZGVyT2JqZWN0LCBwb3M6IHsgeDogY3VyclBvc2l0aW9uLnggLSB0aGlzLnBhaW50UGFnZVBvcy54LCB5OiBjdXJyUG9zaXRpb24ueSAtIHRoaXMucGFpbnRQYWdlUG9zLnkgfSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lpITnkIbpgInkuK3mi5bok51cbiAgICAgICAgaWYgKGluVmlld1BvcnQgJiYgdGhpcy5zZWxlY3RlZFNldHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRTZXRzLmdldChlbGVtZW50KSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0geyB4OiBjdXJyUG9zaXRpb24ueCwgeTogY3VyclBvc2l0aW9uLnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3MocmVuZGVyT2JqZWN0LCB7IHg6IGN1cnJQb3NpdGlvbi54LCB5OiBjdXJyUG9zaXRpb24ueSB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KG92ZXJsYXlSZWN0LngsIHBhcmFMaW5lUG9zLnksIG92ZXJsYXlSZWN0LndpZHRoLCBwYXJhTGluZVBvcy5oZWlnaHQsIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHJhbmdlLmVuZE9mZnNldCA+IHJhbmdlLnN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0WCwgZW5kWCB9ID0gRWxlbWVudFV0aWwuZ2V0VGV4dFJlbmRlckhvclgoPFRleHRHcm91cFJlbmRlck9iamVjdD5yZW5kZXJPYmplY3QsIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVJlY3Qud2lkdGggPSBlbmRYIC0gc3RhcnRYO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVJlY3QueCArPSBzdGFydFg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3Qob3ZlcmxheVJlY3QueCwgcGFyYUxpbmVQb3MueSwgb3ZlcmxheVJlY3Qud2lkdGgsIHBhcmFMaW5lUG9zLmhlaWdodCwgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQgJiYgZWxlbWVudC50eXBlID09PSAndGJjJykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChjdXJyUG9zaXRpb24ueCwgY3VyclBvc2l0aW9uLnksIHJlbmRlck9iamVjdC5yZWN0LndpZHRoLCByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluVmlld1BvcnQgJiYgdGhpcy52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ICYmIHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuc2VsZWN0ZWRTZXQuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCB8fCByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBEYXRhRWxlbWVudFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5zZWxlY3RlZFNldC5nZXQoZWxlbWVudCkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFJhbmdlUGFpbnRDb2xvciA9ICcjZmZkNTkxJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLmNvbW1lbnRSYW5nZVN0YXR1cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWVudFJhbmdlU3RhdHVzID0gdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudFJhbmdlU3RhdHVzLmNvbW1Db250ZW50LmZvY3VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShjb21tZW50UmFuZ2VTdGF0dXMucmFuZ2UsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRSYW5nZVBhaW50Q29sb3IgPSAnI2ZhOGMxNic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0geyB4OiBjdXJyUG9zaXRpb24ueCwgeTogY3VyclBvc2l0aW9uLnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHJlbmRlck9iamVjdCwgeyB4OiBjdXJyUG9zaXRpb24ueCwgeTogY3VyclBvc2l0aW9uLnkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChvdmVybGF5UmVjdC54LCBwYXJhTGluZVBvcy55LCBvdmVybGF5UmVjdC53aWR0aCwgcGFyYUxpbmVQb3MuaGVpZ2h0LCBjb21tZW50UmFuZ2VQYWludENvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkemhtemdoue7mOWItue7k+adn+S6i+S7tlxuICAgICAqL1xuICAgIGludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhcmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgcmVuZGVyT2JqZWN0LnBhZ2VQYWludENvbXBsZXRlZCh0aGlzLnJlbmRlckN0eCwgY3VyclBvc2l0aW9uKTtcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQocmVuZGVyT2JqZWN0LmdldENoaWxkKGkpLCBjdXJyUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGRyYXdQYWdlKHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlLCByZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyZW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnkgfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmVuZGVyT2JqZWN0LmJlZ2luUmVuZGVyKHJlbmRlckN0eCwgY3VyclBvc2l0aW9uKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3UGFnZShyZW5kZXJDdHgsIGNoaWxkLCBjdXJyUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyT2JqZWN0LmVuZFJlbmRlcihyZW5kZXJDdHgsIGN1cnJQb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnJlbmRlcihyZW5kZXJDdHgsIGN1cnJQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGdldExlYWZFbGVtZW50UGFpbnRNYXAoZWxlbWVudDogTGVhZkVsZW1lbnQsIHNoYWRvd1JlbmRlckluZGV4ID0gMCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5wYWludFJlbmRlcnNbc2hhZG93UmVuZGVySW5kZXhdIGFzIExlYWZSZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgZ2V0U2hhZG93UmVuZGVySW5kZXgoZWxlbWVudDogTGVhZkVsZW1lbnQsIHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnBhaW50UmVuZGVycy5pbmRleE9mKHJlbmRlcik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IFBvc2l0aW9uLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFVuaXRzIHtcbiAgICBzb3VyY2VTaXplOiBudW1iZXIsXG4gICAgYWN0dWFsU2l6ZTogbnVtYmVyLFxuICAgIGNoYXI6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJDb250ZW54dFR5cGUgPSB7XG4gICAgY29udGVudENvbnRleHQ6IFBhaW50Q29udGVudDtcbiAgICBvdmVybGF5c0NvbnRleHQ6IFBhaW50Q29udGVudDtcbiAgICBkcmF3TW9kZTogJ3ZpZXcnIHwgJ3ByaW50JztcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQ7XG4gICAgY29tbWl0KHBhZ2VTZXR0aW5nOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0gfCBudWxsKTogdm9pZFxufTtcblxuZXhwb3J0IGNsYXNzIFJlbmRlckNvbnRlbnh0IHtcbiAgICBjb250ZW50Q29udGV4dCE6IFBhaW50Q29udGVudDtcbiAgICBvdmVybGF5c0NvbnRleHQhOiBQYWludENvbnRlbnQ7XG4gICAgZHJhd01vZGU6ICd2aWV3JyB8ICdwcmludCcgPSAndmlldyc7XG4gICAgcHJpdmF0ZSBjb250ZW50T2ZmQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvdmVybGF5T2ZmQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbWFpbkN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBwdWJsaWMgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY3JlYXRlTmF0aXZlQ2FudmFzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVOYXRpdmVDYW52YXMoKSB7XG4gICAgICAgIHRoaXMuY29udGVudE9mZkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLm92ZXJsYXlPZmZDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgdGhpcy5jb250ZW50Q29udGV4dCA9IG5ldyBQYWludENvbnRlbnQodGhpcy5jb250ZW50T2ZmQ2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQgPSBuZXcgUGFpbnRDb250ZW50KHRoaXMub3ZlcmxheU9mZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0Q2FudmFzUHJvcHMoKTtcbiAgICB9XG5cbiAgICAvLyBwcml2YXRlIGNyZWF0ZU9mZnNjcmVlbkNhbnZhcygpIHtcbiAgICAvLyAgICAgdGhpcy5jb250ZW50T2ZmQ2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcygyNTAsIDI1MCk7XG4gICAgLy8gICAgIHRoaXMub3ZlcmxheU9mZkNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoMjUwLCAyNTApO1xuICAgIC8vICAgICB0aGlzLmNvbnRlbnRDb250ZXh0ID0gbmV3IFBhaW50Q29udGVudCh0aGlzLmNvbnRlbnRPZmZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHRoaXMudmlld09wdGlvbnMpO1xuICAgIC8vICAgICB0aGlzLm92ZXJsYXlzQ29udGV4dCA9IG5ldyBQYWludENvbnRlbnQodGhpcy5vdmVybGF5T2ZmQ2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAvLyAgICAgdGhpcy5zZXRDYW52YXNQcm9wcygpO1xuICAgIC8vIH1cblxuICAgIHNldENhbnZhc1Byb3BzKHBhZ2VTZXR0aW5nOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBwYWdlU2V0dGluZyA9IHsgd2lkdGg6IHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoLCBoZWlnaHQ6IHRoaXMudmlld09wdGlvbnMudmlld1BhaW50SGVpZ2h0IH1cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICBwYWdlU2V0dGluZy53aWR0aCArPSB0aGlzLnZpZXdPcHRpb25zLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBhZ2VTZXR0aW5nID0gcGFnZVNldHRpbmcgfHwge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnZpZXdPcHRpb25zLnZpZXdQYWludEhlaWdodFxuICAgICAgICB9O1xuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLmNvbnRlbnRPZmZDYW52YXMsIHRoaXMuY29udGVudENvbnRleHQuY3R4LCBwYWdlU2V0dGluZywgdGhpcy52aWV3T3B0aW9ucy5zY2FsZSlcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5vdmVybGF5T2ZmQ2FudmFzLCB0aGlzLm92ZXJsYXlzQ29udGV4dC5jdHgsIHBhZ2VTZXR0aW5nLCB0aGlzLnZpZXdPcHRpb25zLnNjYWxlKVxuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLm1haW5DdHguY2FudmFzLCB0aGlzLm1haW5DdHgsIHBhZ2VTZXR0aW5nLCB0aGlzLnZpZXdPcHRpb25zLnNjYWxlKVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnRDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgIHRoaXMubWFpbkN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5tYWluQ3R4LmNhbnZhcy53aWR0aCwgdGhpcy5tYWluQ3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNvbW1pdChwYWdlU2V0dGluZzogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgLy9wYWdlU2V0dGluZyA9IHBhZ2VTZXR0aW5nIHx8IHsgd2lkdGg6IHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoLCBoZWlnaHQ6IHRoaXMudmlld09wdGlvbnMudmlld1BhaW50SGVpZ2h0IH07XG4gICAgICAgIGlmICghcGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nID0geyB3aWR0aDogdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3Mud2lkdGgsIGhlaWdodDogdGhpcy52aWV3T3B0aW9ucy52aWV3UGFpbnRIZWlnaHQgfVxuICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgICAgIHBhZ2VTZXR0aW5nLndpZHRoICs9IHRoaXMudmlld09wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gcGFnZVNldHRpbmc7XG4gICAgICAgIC8vdGhpcy5tYWluQ3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm1haW5DdHguY2FudmFzLndpZHRoLCB0aGlzLm1haW5DdHguY2FudmFzLmhlaWdodCk7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5T2ZmQ2FudmFzLndpZHRoIHx8ICF0aGlzLm92ZXJsYXlPZmZDYW52YXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1haW5DdHguZHJhd0ltYWdlKHRoaXMub3ZlcmxheU9mZkNhbnZhcywgMCwgMCwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKHdpZHRoLCB0aGlzLnZpZXdPcHRpb25zLnNjYWxlKSwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKGhlaWdodCkpO1xuICAgICAgICAvL2NvbnNvbGUudGltZSgnZHJhd0ltYWdlJyk7XG4gICAgICAgIHRoaXMubWFpbkN0eC5kcmF3SW1hZ2UodGhpcy5jb250ZW50T2ZmQ2FudmFzLCAwLCAwLCBFbGVtZW50VXRpbC5nZXREcHJOdW1iZXIod2lkdGgsIHRoaXMudmlld09wdGlvbnMuc2NhbGUpLCBFbGVtZW50VXRpbC5nZXREcHJOdW1iZXIoaGVpZ2h0KSk7XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCdkcmF3SW1hZ2UnKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhaW50Q29udGVudCB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBwcml2YXRlIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XG4gICAgfVxuXG4gICAgc2V0R2xvYmFsQWxwaGEoYWxwaGE6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IGFscGhhO1xuICAgIH1cblxuICAgIGdldEdsb2JhbEFscGhhKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC5nbG9iYWxBbHBoYTtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGRyYXdUZXh0KHRleHQ6IHN0cmluZywgdGV4dFByb3BzOiBUZXh0UHJvcHMsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGV4dFByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dFByb3BzLmJhY2tncm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGV4dFByb3BzLmNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgY29uc3QgdmVydEhlaWdodCA9IHRleHRQcm9wcy52ZXJ0QWxpZ24gPT09ICdzdXBlcnNjcmlwdCcgPyAwIDogaGVpZ2h0O1xuICAgICAgICB0aGlzLmN0eC5maWxsVGV4dCh0ZXh0LCB4LCB5ICsgdmVydEhlaWdodCAtIGhlaWdodCAvIDcpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGlmICh0ZXh0UHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0xpbmUoeCwgeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gMikpLCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3TGluZSh4LCB5ICsgaGVpZ2h0LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5lKHgsIHksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlsbENpcmN1bGFyKHg6IG51bWJlciwgeTogbnVtYmVyLCByOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5hcmMoeCwgeSwgciwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBkcmF3VGV4dFVuaXRzKHRleHRHcm91cFJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0RWxlID0gdGV4dEdyb3VwUmVuZGVyLmVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gdGV4dEVsZS5wcm9wcztcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0ZXh0R3JvdXBSZW5kZXIucmVjdDtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSB0ZXh0UHJvcHMuY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpO1xuICAgICAgICBpZiAodGV4dFByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgdGV4dFByb3BzLmJhY2tncm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0xpbmUoeCwgeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gMikpLCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3TGluZSh4LCB5ICsgaGVpZ2h0LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5lKHgsIHksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3JYID0gMDtcbiAgICAgICAgbGV0IHZlcnRIZWlnaHQgPSBoZWlnaHQgLSAoaGVpZ2h0IC8gNyk7XG4gICAgICAgIGlmICh0ZXh0UHJvcHMudmVydEFsaWduID09PSAnc3VwZXJzY3JpcHQnKSB7XG4gICAgICAgICAgICAvL+WIsHRvcFxuICAgICAgICAgICAgdmVydEhlaWdodCAtPSB0ZXh0UHJvcHMuZm9udFNpemUgKiAyIC8gNTtcbiAgICAgICAgICAgIC8vdG9w5Zyo5ZCR5LiK5pS257ypIC10b3DooYzpl7Tot51cbiAgICAgICAgICAgIC8vdmVydEhlaWdodCAtPSB0ZXh0UHJvcHMuZm9udFNpemUgKiB0aGlzLmdldFBhcmFMaW5lSGVpZ2h0KHRleHRFbGUpIC8gMjBcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRHcm91cFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPSB0ZXh0R3JvdXBSZW5kZXIudGV4dE1lYXN1cmVzW2ldO1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodW5pdC5jaGFyLCB4ICsgaG9yWCwgeSArIHZlcnRIZWlnaHQpO1xuICAgICAgICAgICAgaG9yWCArPSB1bml0LmFjdHVhbFNpemU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGdldFBhcmFMaW5lSGVpZ2h0KHRleHRFbGU6IFRleHRHcm91cEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHRleHRFbGUsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXBhcmEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq6IO95om+5Yiw54i257qn5q616JC95YWD57SgJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyYS5wcm9wcy5saW5lSGVpZ2h0O1xuICAgIH1cblxuICAgIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZywgdGV4dFByb3BzOiBUZXh0UHJvcHMpOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSB0ZXh0UHJvcHMuY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpO1xuICAgICAgICBjb25zdCB0ZXh0TWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICByZXR1cm4geyB3aWR0aDogdGV4dE1lYXN1cmUud2lkdGgsIGhlaWdodDogdGV4dFByb3BzLmZvbnRTaXplIH07XG4gICAgfVxuXG5cbiAgICBtZWFzdXJlVGV4dFVuaXRzKHVuaXRzOiBBcnJheTxUZXh0VW5pdHM+LCB0ZXh0UHJvcHM6IFRleHRQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgY29uc3QgbGV0dGVyU3BhY2UgPSB0ZXh0UHJvcHMubGV0dGVyU3BhY2UgPz8gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHVuaXRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dE1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dChjaGFyLmNoYXIpO1xuICAgICAgICAgICAgY2hhci5hY3R1YWxTaXplID0gdGV4dE1lYXN1cmUud2lkdGggKyBsZXR0ZXJTcGFjZTtcbiAgICAgICAgICAgIGNoYXIuc291cmNlU2l6ZSA9IHRleHRNZWFzdXJlLndpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5jbGVhclJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgfVxuXG4gICAgc2F2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgIH1cblxuICAgIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cblxuICAgIHN0cm9rZVJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBzdHJva2VDb2xvciA9ICdibGFjaycsIHN0cm9rZVdpZHRoID0gMSk6IHZvaWQge1xuICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gc3Ryb2tlV2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgLy90aGlzLnN0cm9rZUxpbmVzKFt7IHgsIHkgfSwgeyB4OiB4ICsgd2lkdGgsIHkgfSwgeyB4OiB4ICsgd2lkdGgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0IH0sIHsgeCwgeSB9XSwgc3Ryb2tlV2lkdGgsIHN0cm9rZUNvbG9yKTtcbiAgICB9XG5cbiAgICAvL3N0cm9rZVJlY3RJbWFnZURhdGEoeDpudW1iZXIpXG5cbiAgICBkcmF3TGluZSh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgbGluZUNvbG9yID0gJ2JsYWNrJywgbGluZVdpZHRoID0gMSk6IHZvaWQge1xuICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBsaW5lQ29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGZpbGxSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZmlsbENvbG9yID0gJ3doaXRlJywgc2hhZG93Qmx1ciA9IDAsIHNoYWRvd0NvbG9yID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICB0aGlzLmN0eC5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjtcbiAgICAgICAgdGhpcy5jdHguc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHN0cm9rZUxpbmVzKGxpbmVzOiBBcnJheTxQb3NpdGlvbj4sIHdpZHRoID0gMSwgc3Ryb2tlQ29sb3IgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvcjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVDYXAgPSAncm91bmQnO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gbGluZXNbaV07XG4gICAgICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGZpbGxMaW5lcyhsaW5lczogQXJyYXk8UG9zaXRpb24+LCB3aWR0aCA9IDEsIGZpbGxDb2xvciA9ICdibGFjaycpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gbGluZXNbaV07XG4gICAgICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuXG4gICAgZHJhd0NoZWNrQm94KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Ryb2tlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAnYmxhY2snLCAxKTtcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoIC8gNCkpLCB5OiB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSkgfSk7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgeDogeCArIChNYXRoLmNlaWwod2lkdGggLyAyKSksIHk6IHkgKyAoTWF0aC5mbG9vcihoZWlnaHQgKiAzIC8gNCkpIH0pO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoICogMyAvIDQpKSwgeTogeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gNCkpIH0pO1xuICAgICAgICAgICAgdGhpcy5zdHJva2VMaW5lcyhsaW5lcywgMiwgJ3JlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd1JhZGlvQm94KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHggPSB4ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xuICAgICAgICB5ID0geSArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMik7XG4gICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCB3aWR0aCwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCBNYXRoLmZsb29yKHdpZHRoIC8gNSAqIDMpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnu5jliLblm77niYdcbiAgICAgKiBAcGFyYW0gaW1hZ2VcbiAgICAgKiBAcGFyYW0gc3ggaW1hZ2XnmoTnn6nlvaLvvIjoo4HliarvvInpgInmi6nmoYbnmoTlt6bkuIrop5IgWCDovbTlnZDmoIdcbiAgICAgKiBAcGFyYW0gc3kgaW1hZ2XnmoTnn6nlvaLvvIjoo4HliarvvInpgInmi6nmoYbnmoTlt6bkuIrop5IgWSDovbTlnZDmoIdcbiAgICAgKiBAcGFyYW0gc1dpZHRoIGltYWdl55qE55+p5b2i77yI6KOB5Ymq77yJ6YCJ5oup5qGG55qE5a695bqmXG4gICAgICogQHBhcmFtIHNIZWlnaHQgaW1hZ2XnmoTnn6nlvaLvvIjoo4HliarvvInpgInmi6nmoYbnmoTpq5jluqZcbiAgICAgKiBAcGFyYW0gZHggaW1hZ2XnmoTlt6bkuIrop5LlnKjnm67moIdjYW52YXPkuIogWCDovbTlnZDmoIdcbiAgICAgKiBAcGFyYW0gZHkgaW1hZ2XnmoTlt6bkuIrop5LlnKjnm67moIdjYW52YXPkuIogWSDovbTlnZDmoIdcbiAgICAgKiBAcGFyYW0gZFdpZHRoIGltYWdl5Zyo55uu5qCHY2FudmFz5LiK57uY5Yi255qE5a695bqmXG4gICAgICogQHBhcmFtIGRIZWlnaHQgaW1hZ2XlnKjnm67moIdjYW52YXPkuIrnu5jliLbnmoTpq5jluqZcbiAgICAgKi9cbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQsIHN4OiBudW1iZXIsIHN5OiBudW1iZXIsIHNXaWR0aDogbnVtYmVyLCBzSGVpZ2h0OiBudW1iZXIsIGR4OiBudW1iZXIsIGR5OiBudW1iZXIsIGRXaWR0aDogbnVtYmVyLCBkSGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBzeCwgc3ksIHNXaWR0aCwgc0hlaWdodCwgZHgsIGR5LCBkV2lkdGgsIGRIZWlnaHQpO1xuICAgIH1cblxuICAgIGRyYXdEYXNoTGluZShwb2ludHM6IEFycmF5PFBvc2l0aW9uPiwgbGluZURhc2g6IEFycmF5PG51bWJlcj4sIGxpbmVDb2xvciA9ICdibGFjaycsIGxpbmVXaWR0aCA9IDEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5zZXRMaW5lRGFzaChsaW5lRGFzaCk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gbGluZUNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgeCArPSAwLjU7XG4gICAgICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcm91bmRSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcmFkaXVzOiBudW1iZXIgfCB7IHRsOiBudW1iZXIsIHRyOiBudW1iZXIsIGJyOiBudW1iZXIsIGJsOiBudW1iZXIgfSwgZmlsbDogYm9vbGVhbiwgc3Ryb2tlOiBib29sZWFuKSB7XG4gICAgICAgIHggKz0gMC41O1xuICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJva2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzdHJva2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcmFkaXVzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmFkaXVzID0geyB0bDogcmFkaXVzLCB0cjogcmFkaXVzLCBicjogcmFkaXVzLCBibDogcmFkaXVzIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdFJhZGl1cyA9IHsgdGw6IDAsIHRyOiAwLCBicjogMCwgYmw6IDAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIHNpZGUgaW4gZGVmYXVsdFJhZGl1cykge1xuICAgICAgICAgICAgICAgIHJhZGl1c1tzaWRlXSA9IHJhZGl1c1tzaWRlXSB8fCBkZWZhdWx0UmFkaXVzW3NpZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAxO1xuICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCArIHJhZGl1cy50bCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGggLSByYWRpdXMudHIsIHkpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHggKyB3aWR0aCwgeSwgeCArIHdpZHRoLCB5ICsgcmFkaXVzLnRyKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIHJhZGl1cy5icik7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4ICsgd2lkdGggLSByYWRpdXMuYnIsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHJhZGl1cy5ibCwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSArIGhlaWdodCwgeCwgeSArIGhlaWdodCAtIHJhZGl1cy5ibCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5ICsgcmFkaXVzLnRsKTtcbiAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyh4LCB5LCB4ICsgcmFkaXVzLnRsLCB5KTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGNsaXAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmNsaXAoKTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgT3JpZW50VHlwZSwgUGFnZU9wdGlvbnMsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRQYWludCB9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0IH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IGpzUERGIH0gZnJvbSAnanNwZGYnXG5cbmV4cG9ydCBjbGFzcyBkb2N1bWVudFByaW50IHtcbiAgICBzdGF0aWMgcHJpbnQoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW5kZXJDYW52YXNOb2RlcyA9IHRoaXMuZ2V0UmVuZGVyQ2FudmFzTm9kZXMoc3MsIHZpZXdPcHRpb25zLCBkb2NDdHgsIHByaW50UmFuZ2VzKTtcbiAgICAgICAgaWYgKCFyZW5kZXJDYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6IqC54K5Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnROb2RlcyhyZW5kZXJDYW52YXNOb2RlcywgeyAuLi5kb2NDdHguZG9jdW1lbnQucHJvcHMgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi255qEY2FudmFz6IqC54K5XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyBcbiAgICAgKiBAcGFyYW0gZG9jQ3R4IFxuICAgICAqIEBwYXJhbSBwcmludFJhbmdlcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRSZW5kZXJDYW52YXNOb2RlcyhzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGRjID0gc3MucmVuZGVyQ29udGFpbmVyO1xuICAgICAgICBjb25zdCBjYW52YXNMaXN0OiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4gPSBbXTtcbiAgICAgICAgY29uc3QgcHJpbnRQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcHJpbnRSYW5nZXMgfHwgcHJpbnRSYW5nZXMuc29tZShwYWdlSW5kZXggPT4gcGFnZUluZGV4ID09PSBpKSkge1xuICAgICAgICAgICAgICAgIHByaW50UGFnZXMucHVzaCg8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ZGMuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbnRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2FudmFzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5jdXJzb3IgPSAndGV4dCc7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzTm9kZS5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKGNhbnZhc05vZGUsIGN0eCwgdmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckN0eCA9IG5ldyBSZW5kZXJDb250ZW54dChjdHgsIHZpZXdPcHRpb25zLCBkb2NDdHgpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LnNldENhbnZhc1Byb3BzKHZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgICAgICByZW5kZXJDdHguZHJhd01vZGUgPSAncHJpbnQnO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gcHJpbnRQYWdlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChkb2MucmVjdCk7XG4gICAgICAgICAgICBkb2MucmVjdC54ID0gMDtcbiAgICAgICAgICAgIGRvYy5yZWN0LnkgPSAwO1xuICAgICAgICAgICAgRWxlbWVudFBhaW50LmRyYXdQYWdlKHJlbmRlckN0eCwgZG9jLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICByZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJDdHgubWFpbkN0eC5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm1haW5DdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICByZW5kZXJDdHguY29tbWl0KHZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgICAgICBkb2MucmVjdCA9IHRtcDtcbiAgICAgICAgICAgIGNhbnZhc0xpc3QucHVzaChjYW52YXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTGlzdFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWvvOWHumJhc2U2NFxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMgXG4gICAgICogQHBhcmFtIGRvY0N0eCBcbiAgICAgKiBAcGFyYW0gcHJpbnRSYW5nZXMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGV4cG9ydENhbnZhc05vZGVzKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJDYW52YXNOb2Rlcyhzcywgdmlld09wdGlvbnMsIGRvY0N0eCwgcHJpbnRSYW5nZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWvvOWHulBERlxuICAgICAqIEBwYXJhbSBmaWxlTmFtZVxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqIEBwYXJhbSBkb2NDdHhcbiAgICAgKiBAcGFyYW0gcHJpbnRSYW5nZXNcbiAgICAgKi9cbiAgICBzdGF0aWMgZXhwb3J0UERGKGZpbGVOYW1lOiBzdHJpbmcsIHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldFJlbmRlckNhbnZhc05vZGVzKHNzLCB2aWV3T3B0aW9ucywgZG9jQ3R4LCBwcmludFJhbmdlcyk7XG4gICAgICAgIGV4cG9ydENhbnZhc1RvUERGKGZpbGVOYW1lLCBub2RlcywgeyAuLi5kb2NDdHguZG9jdW1lbnQucHJvcHMgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lvZPliY3pobVcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zIFxuICAgICAqL1xuICAgIHN0YXRpYyBwcmludEN1cnJQYWdlKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRIaXRJbmZvIH0gPSBzcztcbiAgICAgICAgaWYgKCFzdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NQYWdlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHN0YXJ0SGl0SW5mby5yZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgaWYgKCFkb2NQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmludChzcywgdmlld09wdGlvbnMsIGRvY0N0eCwgW2RvY1BhZ2UuZ2V0SW5kZXgoKV0pO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJpbnRUZW1wbGF0ZSh7IHdpZHRoLCBoZWlnaHQsIG9yaWVudCB9OiBQYWdlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyID0gYFxuICAgIDwhRE9DVFlQRSBodG1sPlxuICAgIDxodG1sIGxhbmc9XCJ6aFwiPlxuICAgIDxoZWFkPlxuICAgICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XG4gICAgICA8dGl0bGU+PC90aXRsZT5cbiAgICAgIDxzdHlsZSA+XG4gICAgICBodG1sLFxuICAgICAgYm9keSB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG4gICAgICAqIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIH1cbiAgICAgIEBwYWdlIHtcbiAgICAgICAgICBzaXplOiAke29yaWVudH07XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuICAgICAgZGl2IHtcbiAgICAgICAgICB3aWR0aDogJHt3aWR0aH1tbTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAke2hlaWdodH1tbTtcbiAgICAgICAgICBmb250LXNpemU6IDA7XG4gICAgICB9XG4gICAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgYm9keSB7XG4gICAgICAgICAgICAgIHdpZHRoOiAke3dpZHRofW1tO1xuICAgICAgICAgICAgICBoZWlnaHQ6ICR7aGVpZ2h0fW1tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkaXYge1xuICAgICAgICAgICAgICB3aWR0aDogaW5pdGlhbDtcbiAgICAgICAgICAgICAgbWluLWhlaWdodDogaW5pdGlhbDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICA8L3N0eWxlPlxuICAgIDwvaGVhZD5cbiAgICA8Ym9keT48L2JvZHk+XG4gICAgPC9odG1sPlxuICAgIGAucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykucmVwbGFjZSgvJy9nLCAnXFxcXFxcJycpO1xuICAgIHJldHVybiBzdHI7XG59XG5cblxudHlwZSBQcmludFBhcGVyT3B0aW9ucyA9IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIG9yaWVudDogT3JpZW50VHlwZTtcbn07XG5cbi8qKlxuICog5omT5Y2wRE9NXG4gKiBAcGFyYW0gcHJpbnROb2RlcyBcbiAqIEBwYXJhbSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludE5vZGVzKHByaW50Tm9kZXM6IEFycmF5PE5vZGU+LCBvcHRpb25zOiBQcmludFBhcGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHByaW50SUZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcbiAgICBwcmludElGcmFtZS5zcmMgPSAnYWJvdXQ6YmxhbmsnO1xuICAgIHByaW50SUZyYW1lLnN0eWxlLmJvcmRlcldpZHRoID0gJzAnO1xuICAgIHByaW50SUZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgIHByaW50SUZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcmludElGcmFtZSk7XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQub3BlbihcInRleHQvaHRtbFwiLCBcInByaW50ZXJcIik7XG4gICAgaWYgKCFwcmludE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+aJk+WNsOiKgueCuScpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByaW50U2l6ZTogUGFnZU9wdGlvbnMgPSBuZXcgUGFnZU9wdGlvbnMob3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQsIG9wdGlvbnMub3JpZW50KTtcbiAgICBjb25zdCBpZnJhbWVIVE1MID0gY3JlYXRlUHJpbnRUZW1wbGF0ZShwcmludFNpemUpO1xuICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LndyaXRlKGlmcmFtZUhUTUwpO1xuICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LmNsb3NlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmludE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBwcmludE5vZGVzW2ldO1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGl0ZW0pO1xuICAgICAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdilcbiAgICB9XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5wcmludCgpO1xuICAgICAgICBwcmludElGcmFtZS5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChwcmludElGcmFtZSk7XG4gICAgfSwgMCk7XG59XG5cbi8qKlxuICogY2FudmFz6IqC54K55a+85Ye65YiwUERGXG4gKiBAcGFyYW0gZmlsZU5hbWUgXG4gKiBAcGFyYW0gbm9kZXMgXG4gKiBAcGFyYW0gb3B0aW9ucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhc1RvUERGKGZpbGVOYW1lOiBzdHJpbmcsIG5vZGVzOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4sIG9wdGlvbnM6IFByaW50UGFwZXJPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICBmaWxlTmFtZSA9ICdkb2N1bWVudC5wZGYnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvW1xcL1xcXFw6Kj9cIjw+fF0vZywgJ18nKTtcbiAgICAgICAgaWYgKCFmaWxlTmFtZS5lbmRzV2l0aCgnLnBkZicpKSB7XG4gICAgICAgICAgICBmaWxlTmFtZSArPSAnLnBkZic7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGRmID0gbmV3IGpzUERGKG9wdGlvbnMub3JpZW50LCAncHgnLCBbb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHRdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IG5vZGVzW2ldO1xuICAgICAgICBjb25zdCBpbWdEYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMCk7XG4gICAgICAgIHBkZi5hZGRJbWFnZShpbWdEYXRhLCAnSlBFRycsIDAsIDAsIG9wdGlvbnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0KTtcbiAgICAgICAgaWYgKGkgPCBub2Rlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBwZGYuYWRkUGFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBkZi5zYXZlKGZpbGVOYW1lKTtcbn0iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IFJlY3QgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQm9yZGVyVHlwZSB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmludGVyZmFjZSBQb3NpdGlvbiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1vblV0aWwge1xuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo55+p5b2i5qGG5YaFXG4gICAgICogQHBhcmFtIHJlY3QgXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlY3Q6IFJlY3QsIHBvc2l0aW9uOiBQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb24ueCA+PSByZWN0LnhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54IDw9IHJlY3QueCArIHJlY3Qud2lkdGhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ID49IHJlY3QueVxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzSW5zaWRlUmVjdEJ5UmVjdChyZWN0OiBSZWN0LCBwb3NpdGlvbjogUmVjdCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb24ueCA+PSByZWN0LnhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54IDw9IHJlY3QueCArIHJlY3Qud2lkdGhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ID49IHJlY3QueVxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ICsgcG9zaXRpb24uaGVpZ2h0IDw9IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueCArIHBvc2l0aW9uLndpZHRoIDw9IHJlY3QueCArIHJlY3Qud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo55+p5b2i55qE6L655qGG5LiKXG4gICAgICogQHBhcmFtIHJlY3QgXG4gICAgICogQHBhcmFtIGJvcmRlcldpZHRoIFxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJblJlY3RCb3JkZXIocmVjdDogUmVjdCwgYm9yZGVyV2lkdGg6IG51bWJlciwgcG9zaXRpb246IFBvc2l0aW9uKTogeyBib3JkZXJUeXBlOiBCb3JkZXJUeXBlIH0ge1xuICAgICAgICBjb25zdCBsZWZ0Qm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IGJvcmRlcldpZHRoLCBoZWlnaHQ6IHJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyUmVjdDogUmVjdCA9IHsgeDogcmVjdC53aWR0aCAtIGJvcmRlcldpZHRoLCB5OiAwLCB3aWR0aDogYm9yZGVyV2lkdGgsIGhlaWdodDogcmVjdC5oZWlnaHQsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgdG9wQm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IHJlY3Qud2lkdGgsIGhlaWdodDogYm9yZGVyV2lkdGgsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgYm90dG9tQm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogcmVjdC5oZWlnaHQgLSBib3JkZXJXaWR0aCwgd2lkdGg6IHJlY3Qud2lkdGgsIGhlaWdodDogYm9yZGVyV2lkdGgsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgbGV0IGJvcmRlclR5cGU6IEJvcmRlclR5cGUgPSAnbm9uZSc7XG4gICAgICAgIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24obGVmdEJvcmRlclJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgYm9yZGVyVHlwZSA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmlnaHRCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbih0b3BCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAndG9wJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24oYm90dG9tQm9yZGVyUmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICBib3JkZXJUeXBlID0gJ2JvdHRvbSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYm9yZGVyVHlwZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWdkOagh+aYr+WQpuWcqOWbvueJh+eahOe8qeaUvuaTjeS9nOeCueS4ilxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luUGljdHVyZVJlc2l6ZVBvaW50KHJlY3Q6IFJlY3QsIHBvczogUG9zaXRpb24sIHI6IG51bWJlcik6IHsgYm9yZGVyVHlwZTogQm9yZGVyVHlwZSB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcmVjdDtcbiAgICAgICAgY29uc3QgeCA9IDA7XG4gICAgICAgIGNvbnN0IHkgPSAwO1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHR5cGU6IEJvcmRlclR5cGUgfT4gPSBbeyB4LCB5LCB0eXBlOiAnbGVmdC10b3AnIH0sIHsgeDogeCArIHdpZHRoLCB5LCB0eXBlOiAncmlnaHQtdG9wJyB9LCB7IHg6IHggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgeTogeSwgdHlwZTogJ3RvcC1taWRkbGUnIH0sIHsgeCwgeTogeSArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMiksIHR5cGU6ICdsZWZ0LW1pZGRsZScgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAnbGVmdC1ib3R0b20nIH0sIHsgeDogd2lkdGgsIHk6IE1hdGguZmxvb3IoaGVpZ2h0IC8gMiksIHR5cGU6ICdyaWdodC1taWRkbGUnIH0sIHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAncmlnaHQtYm90dG9tJyB9LCB7IHg6IHggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgeTogeSArIGhlaWdodCwgdHlwZTogJ2JvdHRvbS1taWRkbGUnIH1dO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCB7IHg6IHB4LCB5OiBweSB9ID0gcG9pbnQ7XG4gICAgICAgICAgICBpZiAoKChweCAtIHBvcy54KSAqIChweCAtIHBvcy54KSArIChweSAtIHBvcy55KSAqIChweSAtIHBvcy55KSkgPCByICogcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGJvcmRlclR5cGU6IHBvaW50LnR5cGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICog5pW05b2i56ym5ZCI6L+e57q/6KaB5rGCXG4gICAgKiBAcGFyYW0gcG9pbnRzIFxuICAgICogQHBhcmFtIHdpZHRoIFxuICAgICogQHBhcmFtIHN0cm9rZUNvbG9yIFxuICAgICovXG4gICAgc3RhdGljIHJlc2hhcnBQb2ludHMocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4pOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBsZXQgcHJldlBvaW50OiBQb3NpdGlvbiA9IHBvaW50c1swXTtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICBhcnJheS5wdXNoKHByZXZQb2ludCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAvL+S4jeWcqOWQjOS4gOawtOW5s+e6v1xuICAgICAgICAgICAgaWYgKGN1cnJQb2ludC55ICE9PSBwcmV2UG9pbnQueSAmJiBjdXJyUG9pbnQueCAhPT0gcHJldlBvaW50LngpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHsgeDogY3VyclBvaW50LngsIHk6IHByZXZQb2ludC55IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJyYXkucHVzaChjdXJyUG9pbnQpO1xuICAgICAgICAgICAgcHJldlBvaW50ID0gY3VyclBvaW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0T2Zmc2V0WChub2RlOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vZGUucGFyZW50RWxlbWVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgY3VyciA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgcmV0dXJuIGN1cnIgLSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHJhbmRvbUNvbG9yKCkge1xuICAgICAgICBsZXQgc3RyID0gXCIjXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICBzdHIgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreS4gOS4quaVsOWAvOaYr+WQpuWcqOWPpuS4gOS4quaVsOWAvOeahOWinuebiuWMuumXtOS4rVxuICAgICAqIEBwYXJhbSB2YWwgXG4gICAgICogQHBhcmFtIG9mZnNldCBcbiAgICAgKiBAcGFyYW0gY29tcGFyZVZhbHVlIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBBcHByb3htYXRlVmFsdWVJblJhbmdlKHZhbDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlciwgY29tcGFyZVZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh2YWwgLSBvZmZzZXQpIDw9IGNvbXBhcmVWYWx1ZSAmJiAodmFsICsgb2Zmc2V0KSA+PSBjb21wYXJlVmFsdWU7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZ2V0RW1wdHlWYWx1ZTxUPih2YWw6IFQsIGVtcHR5VmFsOiBUKTogVCB7XG4gICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlubbpm4ZcbiAgICAgKiBAcGFyYW0gYXJyYXkgXG4gICAgICogQHBhcmFtIGRlbGV0ZUl0ZW1zIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVVbmlvblNldDxUPihhcnJheTogQXJyYXk8VD4sIGRlbGV0ZUl0ZW1zOiBBcnJheTxUPik6IEFycmF5PFQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXlTZXQgPSBuZXcgU2V0KGFycmF5KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRlbGV0ZUl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGFycmF5U2V0LmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgIGFycmF5U2V0LmRlbGV0ZShpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFycmF5U2V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbnVsbFRvU3RyaW5nKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXROb3coZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCksIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlVGV4dCh0ZXh0OiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZyA9IC9cXHsoLio/KVxcfS9nO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGV4dDtcbiAgICAgICAgbGV0IG1hdGNoO1xuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZWcuZXhlYyh0ZXh0KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG1hdGNoWzBdLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvL+iOt+WPluWSjOW9k+WJjeaXpeacn+ebuOW3rueahOenkuaVsFxuICAgIHN0YXRpYyBnZXROb3dEaWZmU2Vjb25kcyhkYXRlOiBEYXRlIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgZGF0ZSA9IHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IG5vdy5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgLyAxMDAwO1xuICAgIH1cblxuICAgIC8v6aqM6K+B5b2T5YmN5a2X56ym5Liy5piv5ZCm5Li65pel5pyf5qC85byPXG4gICAgc3RhdGljIGlzRGF0ZShzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZWcgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC87XG4gICAgICAgIHJldHVybiByZWcudGVzdChzdHIpO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQmxvY2tDb250YWluZXJFbGVtZW50LCBEb2NNb2RlLCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgTWFyZ2luUHJvcHMsIFBhZGRpbmdQcm9wcywgcmVhZEVsZW1lbnRQcm9wcywgUmVjdCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tICcuLi8uLi9lbGVtZW50LXByb3BzJztcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyRWxlbWVudCB9IGZyb20gXCIuL2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50Rm9vdGVyRWxlbWVudCB9IGZyb20gXCIuL2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IGRvY3VtZW50UHJpbnQgfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtcHJpbnRcIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyRWxlbWVudCB9IGZyb20gXCIuLi9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8RG9jdW1lbnRQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERvY3VtZW50UHJvcHM7XG4gICAgdmlld09wdGlvbnMhOiBWaWV3T3B0aW9ucztcbiAgICBib2R5RWxlbWVudCE6IERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgaGVhZGVyRWxlbWVudCE6IERvY3VtZW50SGVhZGVyRWxlbWVudDtcbiAgICBmb290ZXJFbGVtZW50ITogRG9jdW1lbnRGb290ZXJFbGVtZW50O1xuICAgIGNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCE6IENvbW1zQ29udGFpbmVyRWxlbWVudDtcbiAgICBoZWFkZXJFZGl0U3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RvYycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERvY3VtZW50UHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxDb250ZXh0TWVudUVsZW1lbnRFdmVudD4oJ0VsZW1lbnRDb250ZXh0TWVudScsIChjZXZ0KSA9PiB7XG4gICAgICAgICAgICBjZXZ0Lm1lbnVzLnB1c2goeyBpY29uOiAnUHJpbnQnLCBjYXB0aW9uOiAn5omT5Y2w5omA5pyJ6aG1JywgZXZlbnRPYmo6IHsgb25DbGljazogKGV2dCkgPT4geyBkb2N1bWVudFByaW50LnByaW50KGNldnQuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMsIGNldnQuY3R4KSB9IH0gfSk7XG4gICAgICAgICAgICBjZXZ0Lm1lbnVzLnB1c2goeyBpY29uOiAnUHJpbnQnLCBjYXB0aW9uOiAn5omT5Y2w5b2T5YmN6aG1JywgZXZlbnRPYmo6IHsgb25DbGljazogKGV2dCkgPT4geyBkb2N1bWVudFByaW50LnByaW50Q3VyclBhZ2UoY2V2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucywgY2V2dC5jdHgpIH0gfSB9KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucyk6IERvY3VtZW50UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogZG9jUGl4ZWxzV2lkdGgsIGhlaWdodDogZG9jUGl4ZWxzSGVpZ2h0IH0gPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncztcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyT2JqZWN0ID0gbmV3IERvY3VtZW50UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC53aWR0aCA9IGRvY1BpeGVsc1dpZHRoO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC5tYXhXaWR0aCA9IGRvY1BpeGVsc1dpZHRoO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC5tYXhIZWlnaHQgPSBkb2NQaXhlbHNIZWlnaHQ7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0LmhlaWdodCA9IGRvY1BpeGVsc0hlaWdodDtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LmVsZW1lbnQgPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9ID0gdGhpcy5wcm9wcy5wYWRkaW5nO1xuICAgICAgICBsZXQgeyBoZWFkZXJMaW5lOiBoZWFkTGluZSwgZm9vdGVyTGluZTogZm9vdExpbmUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgbW1Ub1BpeGVsc1JhdGlvIH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICBoZWFkTGluZSA9IGhlYWRMaW5lICogbW1Ub1BpeGVsc1JhdGlvO1xuICAgICAgICBmb290TGluZSA9IGZvb3RMaW5lICogbW1Ub1BpeGVsc1JhdGlvO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucGFkZGluZy50b3AgPSBNYXRoLmZsb29yKHRvcCAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLmJvdHRvbSA9IE1hdGguZmxvb3IoYm90dG9tICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcubGVmdCA9IE1hdGguZmxvb3IobGVmdCAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLnJpZ2h0ID0gTWF0aC5mbG9vcihyaWdodCAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5oZWFkZXJMaW5lID0gaGVhZExpbmU7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5mb290ZXJMaW5lID0gZm9vdExpbmU7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5tYXJnaW4udG9wID0gb3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgcmV0dXJuIGRvY1JlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RvYycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOmhtei+uei3nVxuICAgICAqIEBwYXJhbSBtYXJnaW5Qcm9wcyBcbiAgICAgKi9cbiAgICB1cGRhdGVNYXJnaW4obWFyZ2luUHJvcHM6IFBhcnRpYWw8TWFyZ2luUHJvcHM+LCB1bml0OiAnbW0nIHwgJ2NtJyA9ICdjbScpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSA9IG1hcmdpblByb3BzIGFzIE1hcmdpblByb3BzO1xuICAgICAgICBjb25zdCBwYWRkaWcgPSB0aGlzLnByb3BzLnBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gdW5pdCA9PT0gJ2NtJyA/IDEwIDogMTtcbiAgICAgICAgcGFkZGlnLnRvcCA9IHRvcCAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcuYm90dG9tID0gYm90dG9tICogcmF0aW87XG4gICAgICAgIHBhZGRpZy5sZWZ0ID0gbGVmdCAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcucmlnaHQgPSByaWdodCAqIHJhdGlvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouW8gOWQr+mhteeciemhteiEmue8lui+keWKn+iDvVxuICAgICAqL1xuICAgIHN3aXRjaFBhZ2VIZWFkZXJFZGl0b3Ioc3M6IFNlbGVjdGlvblN0YXRlLCBlbGU6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgIT09IERvY01vZGUuRGVzaWduKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhlYWRlckVkaXRTdGF0ZSAmJiAoIWVsZSB8fCAoZWxlID09PSB0aGlzLmhlYWRlckVsZW1lbnQgfHwgZWxlID09PSB0aGlzLmZvb3RlckVsZW1lbnQpKSkge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb290ZXJFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFZGl0U3RhdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGVhZGVyRWRpdFN0YXRlICYmICghZWxlIHx8IGVsZSA9PT0gdGhpcy5ib2R5RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb290ZXJFbGVtZW50LmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFZGl0U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcihlbGU6IEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlKTtcbiAgICB9XG4gICAgaGVhZGVyTGluZSE6IG51bWJlcjtcbiAgICBmb290ZXJMaW5lITogbnVtYmVyO1xuICAgIGJlZ2luUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBkb2NXaWR0aCwgaGVpZ2h0OiBkb2NIZWlnaHQgfSA9IGN0eC52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3M7XG4gICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgZG9jV2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICd3aGl0ZScsIDUsICdibGFjaycpO1xuICAgICAgICAvLyBpZiAoY3R4LmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgLy8gICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIGRvY1dpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnYmxhY2snLCAwLjUpO1xuICAgICAgICAvLyB9XG4gICAgfVxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dFAgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIHRleHRQLmZvbnROYW1lID0gJ+alt+S9kyc7XG4gICAgICAgIHRleHRQLmZvbnRTaXplID0gMTI7XG4gICAgICAgIGlmIChjdHgudmlld09wdGlvbnMuY29weVJpZ2h0SW5mbykge1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGN0eC52aWV3T3B0aW9ucy5jb3B5UmlnaHRJbmZvLCB0ZXh0UCwgcG9zaXRpb24ueCArIDUsIHBvc2l0aW9uLnkgKyA1LCAxMDAsIDEyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyYXdEb2NQYWdlTnVtKGN0eCwgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5wYWRkaW5nO1xuICAgICAgICBsZXQgcGFkZGluZ1BvcyA9IHsgeDogcGFkZGluZy5sZWZ0ICsgcG9zaXRpb24ueCwgeTogcGFkZGluZy50b3AgKyBwb3NpdGlvbi55IH07XG4gICAgICAgIGNvbnN0IGRyYXdMaW5lV2lkdGggPSAwLjU7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDIwO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBkb2NXaWR0aCB9ID0gY3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncztcbiAgICAgICAgY29uc3QgZG9jSGVpZ2h0ID0gdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggLSBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7IHg6IHBhZGRpbmdQb3MueCwgeTogcGFkZGluZ1Bvcy55IC0gbGluZVdpZHRoIH1dLCBkcmF3TGluZVdpZHRoKTtcbiAgICAgICAgcGFkZGluZ1BvcyA9IHsgeDogZG9jV2lkdGggLSBwYWRkaW5nLnJpZ2h0ICsgcG9zaXRpb24ueCwgeTogcGFkZGluZy50b3AgKyBwb3NpdGlvbi55IH07XG4gICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcGFkZGluZ1Bvcy54ICsgbGluZVdpZHRoLCB5OiBwYWRkaW5nUG9zLnkgfSwgcGFkZGluZ1BvcywgeyB4OiBwYWRkaW5nUG9zLngsIHk6IHBhZGRpbmdQb3MueSAtIGxpbmVXaWR0aCB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgICAgIHBhZGRpbmdQb3MgPSB7IHg6IHBhZGRpbmcubGVmdCArIHBvc2l0aW9uLngsIHk6IGRvY0hlaWdodCAtIHRoaXMucGFkZGluZy5ib3R0b20gKyBwb3NpdGlvbi55IH07XG4gICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcGFkZGluZ1Bvcy54IC0gbGluZVdpZHRoLCB5OiBwYWRkaW5nUG9zLnkgfSwgcGFkZGluZ1BvcywgeyB4OiBwYWRkaW5nUG9zLngsIHk6IHBhZGRpbmdQb3MueSArIGxpbmVXaWR0aCB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgICAgIHBhZGRpbmdQb3MgPSB7IHg6IGRvY1dpZHRoIC0gcGFkZGluZy5sZWZ0ICsgcG9zaXRpb24ueCwgeTogZG9jSGVpZ2h0IC0gdGhpcy5wYWRkaW5nLmJvdHRvbSArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggKyBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7IHg6IHBhZGRpbmdQb3MueCwgeTogcGFkZGluZ1Bvcy55ICsgbGluZVdpZHRoIH1dLCBkcmF3TGluZVdpZHRoKTtcbiAgICAgICAgdGhpcy5kcmF3V2F0ZXJtYXJrKGN0eCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuawtOWNsFxuICAgICAqIEBwYXJhbSBjdHggXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd1dhdGVybWFyayhjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGN0eC52aWV3T3B0aW9ucy53YXRlcm1hcmspIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGVybWFyayA9IGN0eC52aWV3T3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgudHJhbnNsYXRlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICBjb25zdCBkZWdyZWVzID0gTWF0aC5hdGFuKGhlaWdodCAvIHdpZHRoKSAqIDE4MCAvIE1hdGguUElcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgucm90YXRlKGRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICBjb25zdCBkID0gTWF0aC5zcXJ0KHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDYwO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHdhdGVybWFyaywgdGV4dFByb3BzKS53aWR0aFxuICAgICAgICAgICAgY29uc3QgeCA9IGQgLyAyIC0gdGV4dFdpZHRoIC8gMjtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KClcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZmlsbFRleHQod2F0ZXJtYXJrLCB4LCAzMCk7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuaWh+aho+mhteeggVxuICAgICAqL1xuICAgIGRyYXdEb2NQYWdlTnVtKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYWdlV2lkdGggPSBjdHgudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmdldEluZGV4KCkgKyAxO1xuICAgICAgICBjb25zdCBzdHIgPSBDb21tb25VdGlsLnBhcnNlVGV4dChjdHgudmlld09wdGlvbnMucGFnZU51bUZvcm1hdCwgeyBpbmRleDogcGFnZUluZGV4LCBjb3VudDogdGhpcy5wYXJlbnQubGVuZ3RoIH0pO1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5Lu/5a6LJztcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRleHRQcm9wcy5mb250U3R5bGUgPSAnaXRhbGljJztcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChzdHIsIHRleHRQcm9wcyk7XG4gICAgICAgIGNvbnN0IGFsaWduQ2VudGVyWCA9IHBvc2l0aW9uLnggKyBNYXRoLmNlaWwocGFnZVdpZHRoIC8gMikgLSBNYXRoLmNlaWwoc2l6ZS53aWR0aCAvIDIpXG4gICAgICAgIGNvbnN0IHBhaW50WSA9IHBvc2l0aW9uLnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQgLSA1O1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoc3RyLCB0ZXh0UHJvcHMsIGFsaWduQ2VudGVyWCwgcGFpbnRZLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci5oZWFkZXJMaW5lID0gdGhpcy5oZWFkZXJMaW5lO1xuICAgICAgICBjbG9uZVJlbmRlci5mb290ZXJMaW5lID0gdGhpcy5mb290ZXJMaW5lO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERvY3VtZW50UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkb2MnO1xuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RG9jdW1lbnRQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IG5ldyBEb2N1bWVudEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERvY3VtZW50UHJvcHM7XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gZG9jdW1lbnRFbGVtZW50LnByb3BzO1xuICAgICAgICBkb2NQcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBkb2NQcm9wcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIGRvY1Byb3BzLnBhZGRpbmcgPSBuZXcgUGFkZGluZ1Byb3BzKHByb3BzLnBhZGRpbmcudG9wLCBwcm9wcy5wYWRkaW5nLmJvdHRvbSwgcHJvcHMucGFkZGluZy5sZWZ0LCBwcm9wcy5wYWRkaW5nLnJpZ2h0KTtcbiAgICAgICAgZG9jUHJvcHMuaGVhZGVyTGluZSA9IHByb3BzLmhlYWRlckxpbmUgPz8gMTI7XG4gICAgICAgIGRvY1Byb3BzLmZvb3RlckxpbmUgPSBwcm9wcy5mb290ZXJMaW5lID8/IDEyO1xuICAgICAgICBkb2NQcm9wcy5zY3JpcHRzID0gcHJvcHMuc2NyaXB0cztcbiAgICAgICAgZG9jUHJvcHMuY3JlYXRlVXNlcklkID0gcHJvcHMuY3JlYXRlVXNlcklkO1xuICAgICAgICBkb2NQcm9wcy5jcmVhdGVVc2VyTmFtZSA9IHByb3BzLmNyZWF0ZVVzZXJOYW1lO1xuICAgICAgICBkb2NQcm9wcy5jcmVhdGVEYXRlID0gcHJvcHMuY3JlYXRlRGF0ZTtcbiAgICAgICAgZG9jUHJvcHMub3JpZW50ID0gcHJvcHMub3JpZW50ID8/ICdwb3J0cmFpdCc7XG4gICAgICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBSZWN0LCBTZXJpYWxpemVQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgTW91c2VFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCB9IGZyb20gXCIuL2RvYy1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keUVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIC8v5b2T5YmN5Yy65Z+f5YaF5piv5ZCm55WZ55eVXG4gICAgdHJhY2tDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdib2R5Jyk7XG4gICAgICAgIC8vdGhpcy5lZGl0TW9kZSA9IEVkaXRNb2RlLkZyZWU7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoRWRpdE1vZGUoZXZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2JvZHknLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2hFZGl0TW9kZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0VsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUodGhpcywgRG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgaWYgKGRvY0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY0VsZW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcihldnQuc2VsZWN0aW9uU3RhdGUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRG9jdW1lbnRCb2R5RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50Qm9keUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7XG4gICAgYmVnaW5SZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ+e7mOWItumhteWGheWuuS1iZWdpbicpO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiBjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDAuNSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC52aWV3T3B0aW9ucy5zaG93RGVidWcpIHtcbiAgICAgICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAncmdiKDE3NywxNzcsMTc3LDAuNCknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ+e7mOWItumhteWGheWuuS1lbmQnKTtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2sgJiYgY3R4LmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBpZiAoY2xvbmVEYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdib2R5JztcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbn1cblxuIiwiaW1wb3J0IHsgQmxvY2tDb250YWluZXJFbGVtZW50LCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgUmVjdCwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IE1vdXNlRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGb290ZXJFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2Zvb3RlcicpO1xuICAgICAgICAvL3RoaXMuZWRpdE1vZGUgPSBFZGl0TW9kZS5EaXNhYmxlZDtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVkaXRNb2RlKGV2dCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50Rm9vdGVyRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN3aXRjaEVkaXRNb2RlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IHRoaXMucGFyZW50IGFzIERvY3VtZW50RWxlbWVudDtcbiAgICAgICAgZG9jRWxlbWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKGV2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3QgPSBuZXcgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJldHVybiByZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdmb290ZXInLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgLy/liKTmlq3pobXnnInmmK/lkKbkuLrovpPlhaXlhoXlrrlcbiAgICAgICAgY29uc3QgaXNGb290ZXJFbXB0eSA9IEVsZW1lbnRVdGlsLmNoZWNrRW1wdHlDb250ZW50KHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiBjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgaWYgKGlzRm9vdGVyRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDEpO1xuICAgICAgICBpZiAoY3R4LnZpZXdPcHRpb25zLnNob3dEZWJ1Zykge1xuICAgICAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdyZ2IoMTIyLDEyMiwxMjIsMC40KScpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZvb3RlckZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZm9vdGVyJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKTtcbiAgICAgICAgLy9lbGVtZW50LnJlbmRlckN0eCA9IHJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQmxvY2tDb250YWluZXJFbGVtZW50LCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IE1vdXNlRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRIZWFkZXJFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2hlYWRlcicpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVkaXRNb2RlKGV2dCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICAvL3RoaXMuZWRpdE1vZGUgPSBFZGl0TW9kZS5EaXNhYmxlZDtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRIZWFkZXJFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoRWRpdE1vZGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFbGVtZW50ID0gdGhpcy5wYXJlbnQgYXMgRG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBkb2NFbGVtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IoZXZ0LnNlbGVjdGlvblN0YXRlLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0ID0gbmV3IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnaGVhZGVyJyxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIGJlZ2luUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICAvL+WIpOaWremhteecieaYr+WQpuS4uui+k+WFpeWGheWuuVxuICAgICAgICBjb25zdCBpc0hlYWRlckVtcHR5ID0gRWxlbWVudFV0aWwuY2hlY2tFbXB0eUNvbnRlbnQodGhpcyk7XG4gICAgICAgIC8v5a2Y5Zyo6L6T5YWl5YaF5a655pe277yM57uY5Yi26aG155yJLemhteS9k+WIhuWJsue6v1xuICAgICAgICBpZiAoIWlzSGVhZGVyRW1wdHkgfHwgIXRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckxpbmVZID0gdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3TGluZShwb3NpdGlvbi54LCBwb3NpdGlvbi55ICsgaGVhZGVyTGluZVksIHRoaXMucmVjdC53aWR0aCwgJ2JsYWNrJywgMC41KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiBjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgaWYgKGlzSGVhZGVyRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDAuNyk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygn57uY5Yi26aG15aS0LWVuZCcpO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiBjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHgudmlld09wdGlvbnMuc2hvd0RlYnVnKSB7XG4gICAgICAgICAgICBjdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ3JnYigxMjIsMTIyLDEyMiwwLjQpJylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SGVhZGVyRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdoZWFkZXInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERvY3VtZW50SGVhZGVyRWxlbWVudCgpO1xuICAgICAgICAvL2VsZW1lbnQucmVuZGVyQ3R4ID0gcmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmV4cG9ydCBjbGFzcyBQU3ltYm9sRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50IHtcbiAgICB0ZXh0UHJvcHM6IFRleHRQcm9wcztcbiAgICBkZWZhdWx0SGVpZ2h0ID0gMTQ7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdwc3ltJyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsIGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlOiBzcyB9ID0gZXZ0O1xuICAgICAgICAgICAgLy/lvLrliLblhYnmoIflrprkvY3liLDmrrXokL3nrKblj7fkuYvliY1cbiAgICAgICAgICAgIC8vb2Zmc2V0PTHvvIzmrrXokL3lm57ovabml7bvvIzlr7zoh7TlkIjlubbnmoRidWdcbiAgICAgICAgICAgIGlmIChzcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3Muc3RhcnRDb250cm9sID09PSB0aGlzICYmIHNzLnN0YXJ0T2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV2dC5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHRoaXMsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnRTaXplID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5mb250TmFtZSA9ICflrovkvZMnO1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5jb2xvciA9ICcjOGM4YzhjJztcbiAgICB9XG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBuZXcgUFN5bWJvbFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgc3ltYm9sLnJlY3QuaGVpZ2h0ID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICBzeW1ib2wucmVjdC53aWR0aCA9IDc7XG4gICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgfVxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY2xvbmUoKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBTeW1ib2xFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQU3ltYm9sUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxQU3ltYm9sRWxlbWVudD4ge1xuICAgIHJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGN0eC5kcmF3TW9kZSA9PT0gJ3ByaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dCgn4qS2JywgdGhpcy5lbGVtZW50LnRleHRQcm9wcywgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgMjAsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgIH1cbiAgICAvL+e7mOWItuauteiQveespuWPt1xuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQU3ltYm9sUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG59XG5cbiIsImltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IHZhbGlkYXRlRGF0YUVsZSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW0gfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTZXJpYWxpemUge1xuICAgIHN0YXRpYyBzZXJpYWxpemUoZWxlbWVudDogRWxlbWVudCwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlbGVtZW50LnNlcmlhbGl6ZSh2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBsZXQgcHJldkVsZTogeyBlbGU6IEVsZW1lbnQsIHByb3BzOiBhbnkgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZUNoaWxkID0gdGhpcy5zZXJpYWxpemUoY2hpbGQsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ3RleHQnICYmIHByZXZFbGUgJiYgcHJldkVsZS5lbGUudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoPFRleHRHcm91cEVsZW1lbnQ+Y2hpbGQpLnByb3BzLmVxdWFscygoPFRleHRHcm91cEVsZW1lbnQ+cHJldkVsZS5lbGUpLnByb3BzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkVsZS5wcm9wcy5jb250ZW50ICs9ICg8YW55PnNlcmlhbGl6ZUNoaWxkKS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZXJpYWxpemVDaGlsZC5jb21wbGV0ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplQ2hpbGQucHJvcHMgPSBzZXJpYWxpemVDaGlsZC5wcm9wcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlcmlhbGl6ZUNoaWxkLnByb3BzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZXJpYWxpemVDaGlsZC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVDaGlsZC5jaGlsZHJlbiAmJiBzZXJpYWxpemVDaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZXJpYWxpemVDaGlsZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4ucHVzaChzZXJpYWxpemVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZFbGUgPSB7IGVsZTogY2hpbGQsIHByb3BzOiBzZXJpYWxpemVDaGlsZCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zZXJpYWxpemUodmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZVN0cmluZyhlbGVtZW50OiBFbGVtZW50LCBvcHRpb25zOiB7IGFsbDogYm9vbGVhbiB9ID0geyBhbGw6IGZhbHNlIH0pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW9wdGlvbnMuYWxsICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgIWVsZW1lbnQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMuc2VyaWFsaXplU3RyaW5nKGl0ZW0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5qb2luKCcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieS4reeahOe7k+aehFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTZWxlY3RlZFN0cnVjdChzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKHNzLmNvbGxhcHNlZCB8fCAhc3Muc3RhcnRDb250cm9sIHx8ICFzcy5zZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IHNzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5jbG9uZVJhbmdlKHJhbmdlLCBmYWxzZSwgJ2NvcHknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3nmoTmlofmnKxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRUZXh0KHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdHJ1Y3QgPSB0aGlzLmdldFNlbGVjdGVkU3RydWN0KHNzLCB2aWV3T3B0aW9ucykgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgaWYgKHNlbGVjdGVkU3RydWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVTdHJpbmcoc2VsZWN0ZWRTdHJ1Y3QsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTZWxlY3RlZEpTT04oc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFN0cnVjdCA9IHRoaXMuZ2V0U2VsZWN0ZWRTdHJ1Y3Qoc3MsIHZpZXdPcHRpb25zKSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICBpZiAoc2VsZWN0ZWRTdHJ1Y3QpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnNlcmlhbGl6ZShzZWxlY3RlZFN0cnVjdCwgdmlld09wdGlvbnMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmBjeWOhuaMh+WumuWFg+e0oOWGhemDqOaJgOacieaVsOaNruWFg+WIl+ihqFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXREYXRhRWxlbWVudHMoZWxlbWVudDogQnJhbmNoRWxlbWVudCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goLi4udGhpcy5nZXREYXRhRWxlbWVudHMoaXRlbSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuXG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhRWxlbWVudFZhbHVlU3RydWN0IHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nXG59XG4iLCJpbXBvcnQge1xuICAgIElubGluZUdyb3VwRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9ucyxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LCByZWFkRWxlbWVudFByb3BzXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IFRyYWNrUnVuUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQgeyBHZXRUcmFja1RpcHNFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSBcIm5hbm9pZFwiO1xuZXhwb3J0IGVudW0gVHJhY2tSdW5UeXBlRW51bSB7XG4gICAgSW5zZXJ0ZWQgPSAnaW5zLXJ1bicsXG4gICAgRGVsZXRlZCA9ICdkZWwtcnVuJyxcbn1cbnR5cGUgTnVsbGFibGVUeXBlPFQ+ID0gVCB8IG51bGw7XG5leHBvcnQgY2xhc3MgVHJhY2tSdW5FbGVtZW50IGV4dGVuZHMgSW5saW5lR3JvdXBFbGVtZW50PFRyYWNrUnVuUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3Rvcih0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pIHtcbiAgICAgICAgc3VwZXIodHJhY2tUeXBlKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBUcmFja1J1blByb3BzKHRyYWNrVHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8R2V0VHJhY2tUaXBzRXZlbnQ+KCdHZXRUcmFja1RpcHMnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQudHJhY2tUaXBzID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrUnVuVHlwZTogdGhpcy50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0sXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5wcm9wcy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgICBkYXRlOiB0aGlzLnByb3BzLmRhdGUsXG4gICAgICAgICAgICAgICAgY29udGVudDogRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcywgeyBhbGw6IHRydWUgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhldnQudHJhY2tUaXBzLmNvbnRlbnQpO1xuXG4gICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRyYWNrUnVuRWxlbWVudCh0aGlzLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBOdWxsYWJsZVR5cGU8UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaG93VHJhY2tDaGFuZ2VzICYmIHRoaXMudHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRyYWNrUnVuUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNwbGl0KGluZGV4OiBudW1iZXIpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwIHx8IGluZGV4ID09PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVHJhY2tSdW5FbGVtZW50KHRoaXMudHlwZSBhcyBUcmFja1J1blR5cGVFbnVtKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYWNrUnVuUmVuZGVyT2JqZWN0IGV4dGVuZHMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VHJhY2tSdW5FbGVtZW50PiB7XG4gICAgY29uc3RydWN0b3IoZWxlOiBUcmFja1J1bkVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlKTtcbiAgICB9XG5cbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/ICdncmVlbicgOiAncmVkJztcbiAgICAgICAgLy9jdHgub3ZlcmxheXNDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBjb2xvcik7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVHJhY2tSdW5SZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcG9zaXRpb247XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/ICdncmVlbicgOiAncmVkJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCB7IHJlY3QgfSA9IGNoaWxkUmVuZGVyO1xuICAgICAgICAgICAgaWYgKGNoaWxkUmVuZGVyLmVsZW1lbnQgJiYgY2hpbGRSZW5kZXIuZWxlbWVudC50eXBlID09PSAnZGVsLXJ1bicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBsaW5lWSA9IHkgKyByZWN0LnkgKyByZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGxpbmVZID0gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/IGxpbmVZIDogbGluZVkgLSByZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd0xpbmUoeCArIHJlY3QueCwgbGluZVksIHJlY3Qud2lkdGgsIGNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bkVsZW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VHJhY2tSdW5Qcm9wcz57XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VHJhY2tSdW5Qcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogVHJhY2tSdW5FbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IFRyYWNrUnVuRWxlbWVudChkYXRhLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSk7XG4gICAgICAgIGVsZS5wcm9wcy51c2VySWQgPSBkYXRhLnByb3BzPy51c2VySWQgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy51c2VyTmFtZSA9IGRhdGEucHJvcHM/LnVzZXJOYW1lID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuZGF0ZSA9IGRhdGEucHJvcHM/LmRhdGUgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5pZCA9IGRhdGEucHJvcHM/LmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQgfHwgdHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkO1xuICAgIH1cblxuXG59XG5cbiIsImltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgUmVjdCxcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEhpdFJlZ2lvbiB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlQmFzZVByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lckVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudElubGluZUdyb3VwfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlckVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QsIFBhcmFncmFwaFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgUFN5bWJvbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUNlbGxSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50LCBUYWJsZVJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IFRyYWNrUnVuRWxlbWVudCwgVHJhY2tSdW5UeXBlRW51bSB9IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCxcbiAgICBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsXG4gICAgQm9yZGVyVHlwZSxcbiAgICBCcmFuY2hSZW5kZXJPYmplY3QsXG4gICAgQ3Vyc29yVHlwZSxcbiAgICBJbmxpbmVHcm91cFJlbmRlck9iamVjdCxcbiAgICBMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5cblxudHlwZSBQQUlSID0geyB4OiBudW1iZXIsIHk6IG51bWJlciB9O1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFV0aWwge1xuXG5cbiAgICBzdGF0aWMgc2V0Q2FudmFzUHJvcHMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0sIHNjYWxlOiBudW1iZXIgPSAxKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIChjYW52YXMgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0T2Zmc2NyZWVuQ2FudmFzKGNhbnZhcywgY3R4IGFzIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnMsIHNjYWxlKTtcbiAgICAgICAgLy8gICAgIHJldHVyblxuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdmlld09wdGlvbnM7XG4gICAgICAgIGxldCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgICAgICBpZiAoc2NhbGUgPiAxKSB7XG4gICAgICAgICAgICBkcHIgKj0gc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgZHByID0gTWF0aC5jZWlsKGRwcik7XG4gICAgICAgIGNvbnN0IHNjYWxlV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogZHByKSAvIGRwcjtcbiAgICAgICAgY29uc3Qgc2NhbGVIZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIGRwcikgLyBkcHI7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHNjYWxlV2lkdGggKyAncHgnO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKyAncHgnO1xuICAgICAgICBjYW52YXMud2lkdGggPSBzY2FsZVdpZHRoICogZHByO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKiBkcHI7XG4gICAgICAgIGN0eC5zY2FsZShkcHIsIGRwcik7XG4gICAgfVxuXG4gICAgLy8gc3RhdGljIHNldE9mZnNjcmVlbkNhbnZhcyhjYW52YXM6IE9mZnNjcmVlbkNhbnZhcywgY3R4OiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0sIHNjYWxlOiBudW1iZXIgPSAxKTogdm9pZCB7XG5cbiAgICAvLyAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2aWV3T3B0aW9ucztcbiAgICAvLyAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgLy8gICAgIGlmIChzY2FsZSA+IDEpIHtcbiAgICAvLyAgICAgICAgIGRwciAqPSBzY2FsZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAvLyAgICAgY29uc3Qgc2NhbGVXaWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiBkcHIpIC8gZHByO1xuICAgIC8vICAgICBjb25zdCBzY2FsZUhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogZHByKSAvIGRwcjtcbiAgICAvLyAgICAgY2FudmFzLndpZHRoID0gc2NhbGVXaWR0aCAqIGRwcjtcbiAgICAvLyAgICAgY2FudmFzLmhlaWdodCA9IHNjYWxlSGVpZ2h0ICogZHByO1xuICAgIC8vICAgICBjdHguc2NhbGUoZHByLCBkcHIpO1xuICAgIC8vIH1cblxuICAgIHN0YXRpYyBnZXREcHJOdW1iZXIodmFsOiBudW1iZXIsIHNjYWxlOiBudW1iZXIgPSAxKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgICAgIGlmIChzY2FsZSA+IDEpIHtcbiAgICAgICAgICAgIGRwciAqPSBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogZHByKSAvIGRwclxuICAgIH1cblxuICAgIHN0YXRpYyByZWFkVGV4dFByb3BzKGRlc3Q6IFRleHRQcm9wcyB8IG51bGwsIHByb3BzOiBUZXh0UHJvcHMgfCB1bmRlZmluZWQsIG9wdGlvbnM6IFZpZXdPcHRpb25zKTogVGV4dFByb3BzIHtcbiAgICAgICAgaWYgKCFwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGV4dFByb3BzKGRlc3QsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IGRlc3QgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBwcm9wcy5jb2xvciB8fCBvcHRpb25zLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gcHJvcHMuZm9udE5hbWUgfHwgb3B0aW9ucy5kZWZhdWx0Rm9udE5hbWU7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IHByb3BzLmZvbnRTaXplIHx8IG9wdGlvbnMuZGVmYXVsdEZvbnRTaXplO1xuICAgICAgICB0ZXh0UHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyO1xuICAgICAgICBpZiAocHJvcHMuZm9udFdlaWdodCkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmZvbnRXZWlnaHQgPSBwcm9wcy5mb250V2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5mb250U3R5bGUpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U3R5bGUgPSBwcm9wcy5mb250U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLnVuZGVybGluZSA9IHByb3BzLnVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5saW5ldGhyb3VnaCA9IHByb3BzLmxpbmV0aHJvdWdoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5vdmVybGluZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLm92ZXJsaW5lID0gcHJvcHMub3ZlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5iYWNrZ3JvdW5kID0gcHJvcHMuYmFja2dyb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMubGV0dGVyU3BhY2UpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5sZXR0ZXJTcGFjZSA9IHByb3BzLmxldHRlclNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy52ZXJ0QWxpZ24pIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy52ZXJ0QWxpZ24gPSBwcm9wcy52ZXJ0QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHRQcm9wcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVhZEVsZUJhc2VQcm9wcyhkZXN0OiBEYXRhRWxlQmFzZVByb3BzLCBwcm9wczogRGF0YUVsZUJhc2VQcm9wcyk6IERhdGFFbGVCYXNlUHJvcHMge1xuICAgICAgICBkZXN0LmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICBkZXN0Lm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICBkZXN0LmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICBkZXN0LmVkaXRhYmxlID0gcHJvcHMuZWRpdGFibGUgPz8gdHJ1ZTtcbiAgICAgICAgZGVzdC5maWVsZE5hbWUgPSBwcm9wcy5maWVsZE5hbWU7XG4gICAgICAgIGRlc3QubWluTGVuZ3RoID0gcHJvcHMubWluTGVuZ3RoO1xuICAgICAgICBkZXN0LnByaW50YWJsZSA9IHByb3BzLnByaW50YWJsZSA/PyB0cnVlO1xuICAgICAgICBkZXN0LnJlcXVpcmVkID0gcHJvcHMucmVxdWlyZWQ7XG4gICAgICAgIGRlc3Quc2VjcmV0QnJvd3NlID0gcHJvcHMuc2VjcmV0QnJvd3NlO1xuICAgICAgICBkZXN0LmRlbGV0ZWFibGUgPSBwcm9wcy5kZWxldGVhYmxlO1xuICAgICAgICBkZXN0LnVuZGVybGluZSA9IHByb3BzLnVuZGVybGluZTtcbiAgICAgICAgZGVzdC50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5YaF5a655Yy65Z+f5pyA5aSn6auY5bqmXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByZW5kZXJIZWlnaHRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBpbm5lclJlY3RNYXhIZWlnaHQocmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlbmRlckhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgeyBwYWRkaW5nIH0gPSByZW5kZXI7XG4gICAgICAgIHJldHVybiByZW5kZXJIZWlnaHQgLSBwYWRkaW5nLnRvcCAtIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruWGheahhuWGheWuuemrmOW6pu+8jOabtOaWsOWkluahhuahhuS9k+mrmOW6plxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gaW5uZXJSZWN0XG4gICAgICovXG4gICAgc3RhdGljIHVwZGF0ZVJlbmRlckhlaWdodEJ5SW5uZXJSZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBpbm5lclJlY3Q6IFJlY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBwYWRkaW5nLCBtYXJnaW4gfSA9IHJlbmRlcjtcbiAgICAgICAgLy/lpJblsYLlrrnlmajpq5jluqbnrYnkuo7lhoXlrrnpq5jluqYr5aSW6L656LedK+WGhei+uei3nVxuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSBpbm5lclJlY3QuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWdl+e6p+WFg+e0oOmZkOWItuWwuuWvuFxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcGFyZW50TGltaXRSZWN0XG4gICAgICovXG4gICAgc3RhdGljIHNldEJsb2NrRWxlbWVudExpbWl0U2l6ZShyZW5kZXI6IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHwgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LCBwYXJlbnRMaW1pdFJlY3Q6IFJlY3QpOiB2b2lkIHtcbiAgICAgICAgcmVuZGVyLnJlY3QueCA9IHBhcmVudExpbWl0UmVjdC54O1xuICAgICAgICByZW5kZXIucmVjdC55ID0gcGFyZW50TGltaXRSZWN0LnkgKyBwYXJlbnRMaW1pdFJlY3QuaGVpZ2h0O1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHBhcmVudExpbWl0UmVjdC5tYXhXaWR0aCA/PyAwO1xuICAgICAgICByZW5kZXIucmVjdC5tYXhXaWR0aCA9IHBhcmVudExpbWl0UmVjdC5tYXhXaWR0aDtcbiAgICAgICAgaWYgKHBhcmVudExpbWl0UmVjdC5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0Lm1heEhlaWdodCA9IHBhcmVudExpbWl0UmVjdC5tYXhIZWlnaHQgLSBwYXJlbnRMaW1pdFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YWL6ZqG5qGG5L2TXG4gICAgICogQHBhcmFtIHJlY3RcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBjbG9uZVJlY3QocmVjdDogUmVjdCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlY3QgPSBuZXcgUmVjdCgpO1xuICAgICAgICBjbG9uZVJlY3QueCA9IHJlY3QueDtcbiAgICAgICAgY2xvbmVSZWN0LnkgPSByZWN0Lnk7XG4gICAgICAgIGNsb25lUmVjdC53aWR0aCA9IHJlY3Qud2lkdGg7XG4gICAgICAgIGNsb25lUmVjdC5oZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICAgICAgY2xvbmVSZWN0Lm1heEhlaWdodCA9IHJlY3QubWF4SGVpZ2h0O1xuICAgICAgICBjbG9uZVJlY3QubWF4V2lkdGggPSByZWN0Lm1heFdpZHRoO1xuICAgICAgICByZXR1cm4gY2xvbmVSZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmHjeaWsOmZkOWumuWtkOWFg+e0oOS7peWPiuW9k+WJjemrmOW6puWAvCzlubbov5Tlm57lhoXovrnmoYblhoXlrrnpq5jluqZcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIHJlc2V0WCDmtYvph4/mrrXokL3lpJbmoYbml7bvvIzlhoXmoYbkuI3pnIDopoHph43nva5477yM5Zug5Li65YaF5qGG5bey57uP5a2Y5Zyo5a+56b2QXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtZWFzdXJlKHJlbmRlcjogQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIHJlc2V0WCA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbWVhc3VyZVRhYmxlUm93KHJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnJlbWVhc3VyZVRhYmxlTWVyZ2UocmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbm5lclJlY3QgPSByZW5kZXIuZ2V0SW5ubmVyUmVjdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChyZXNldFgpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnJlY3QueCA9IGlubmVyUmVjdC54O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZS5yZWN0LnkgPSBpbm5lclJlY3QuaGVpZ2h0ICsgaW5uZXJSZWN0LnkgKyBsaW5lLm1hcmdpbi50b3A7XG4gICAgICAgICAgICBsaW5lLnJlY3QubWF4V2lkdGggPSBpbm5lclJlY3QubWF4V2lkdGg7XG4gICAgICAgICAgICBpbm5lclJlY3QuaGVpZ2h0ICs9IGxpbmUucmVjdC5oZWlnaHQgKyBsaW5lLm1hcmdpbi50b3AgKyBsaW5lLm1hcmdpbi5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLnVwZGF0ZVJlbmRlckhlaWdodChpbm5lclJlY3QpO1xuICAgICAgICByZXR1cm4gaW5uZXJSZWN0LmhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtZWFzdXJlVGFibGVSb3cocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCwgZm9yZWNlQ29sSW5kZXggPSAtMSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm93TWluSGVpZ2h0ID0gcm93RWxlLnByb3BzLm1pbkhlaWdodCA+IDE5ID8gcm93RWxlLnByb3BzLm1pbkhlaWdodCA6IDE5O1xuICAgICAgICBsZXQgbWF4Q2VsbGhlaWdodCA9IHJvd01pbkhlaWdodDtcbiAgICAgICAgLy/pmZDliLbooYzmnIDlsI/pq5jluqZcbiAgICAgICAgbWF4Q2VsbGhlaWdodCA9IG1heENlbGxoZWlnaHQgPCAxOSA/IDE5IDogbWF4Q2VsbGhlaWdodDtcbiAgICAgICAgLy/ojrflj5booYzlhoXpnZ7nurXlkJHlkIjlubbljZXlhYPmoLznmoTmnIDpq5jljZXlhYPmoLzpq5jluqZcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCB7IHZNZXJnZSB9ID0gKDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudCkucHJvcHM7XG4gICAgICAgICAgICBpZiAoY2VsbFJlbmRlci5yZWN0LmhlaWdodCA+IG1heENlbGxoZWlnaHQgJiYgKHZNZXJnZSAhPT0gJ3Jlc3RhcnQnIHx8IGkgPT09IGZvcmVjZUNvbEluZGV4KSkge1xuICAgICAgICAgICAgICAgIG1heENlbGxoZWlnaHQgPSBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5b6q546v6K6+572u5Y2V5YWD5qC86auY5bqm5Li66KGM5YaF5pyA5aSn5Y2V5YWD5qC86auY5bqmXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gPFRhYmxlQ2VsbEVsZW1lbnQ+Y2VsbFJlbmRlci5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgeyB2TWVyZ2UgfSA9IGNlbGxFbGVtZW50LnByb3BzO1xuICAgICAgICAgICAgaWYgKCh2TWVyZ2UgIT09ICdyZXN0YXJ0JyB8fCBpID09PSBmb3JlY2VDb2xJbmRleCkgfHwgY2VsbFJlbmRlci5yZWN0LmhlaWdodCA8IG1heENlbGxoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID0gbWF4Q2VsbGhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5aSE55CG5Y2V5YWD5qC85YaF5a6557q15ZCR5bGF5LitXG4gICAgICAgICAgICB0aGlzLm1lYXN1cmVDZWxsVkFsaWduKGNlbGxSZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8v6K6+572u6KGM6auYXG4gICAgICAgIHJvd1JlbmRlci51cGRhdGVSZW5kZXJIZWlnaHQobWF4Q2VsbGhlaWdodCk7XG4gICAgICAgIHJldHVybiBtYXhDZWxsaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOihjOe7mOWItuWFg+e0oOeahOWGheWuuemrmOW6pu+8jOeUqOS6jue8qeaUvuihjOmrmOW6puaXtu+8jOiOt+WPluacgOWwj+WGheWuuemrmOW6pu+8jOe8qeaUvueahOmrmOW6puS4jeiDveWwj+S6juWGheWuueacgOWwj+mrmOW6plxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgbGV0IG1heENlbGxoZWlnaHQgPSAxOTtcbiAgICAgICAgLy/pmZDliLbooYzmnIDlsI/pq5jluqZcbiAgICAgICAgLy/ojrflj5booYzlhoXpnZ7nurXlkJHlkIjlubbljZXlhYPmoLznmoTmnIDpq5jljZXlhYPmoLzpq5jluqZcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY2VsbENvbnRlbnRIZWlnaHQgPSB0aGlzLmdldFRhYmxlQ2VsbFJlbmRlckNvbnRlbnRIZWlnaHQoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICBjb25zdCB7IHZNZXJnZSB9ID0gKDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudCkucHJvcHM7XG4gICAgICAgICAgICBpZiAoY2VsbENvbnRlbnRIZWlnaHQgPiBtYXhDZWxsaGVpZ2h0ICYmIHZNZXJnZSAhPT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgbWF4Q2VsbGhlaWdodCA9IGNlbGxDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhDZWxsaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWNleWFg+agvOWGheWuuemrmOW6plxuICAgICAqIOWNleWFg+agvOaaguS4jeWkhOeQhuS4iuS4i21hcmdpbuOAgXBhZGRpbmdcbiAgICAgKiBAcGFyYW0gY2VsbFJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlQ2VsbFJlbmRlckNvbnRlbnRIZWlnaHQoY2VsbFJlbmRlcjogVGFibGVDZWxsUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQgKz0gY2VsbFJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbljZXlhYPmoLzlhoXlrrnnurXlkJHlr7npvZBcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgbWVhc3VyZUNlbGxWQWxpZ24ocmVuZGVyOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGNFbGVtZW50ID0gcmVuZGVyLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3QgeyB2QWxpZ24gfSA9IHRjRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKCF2QWxpZ24gfHwgdkFsaWduID09PSAndG9wJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdW1IZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3BhY2VIZWlnaHQgPSAwO1xuICAgICAgICBzcGFjZUhlaWdodCA9IHZBbGlnbiA9PT0gJ21pZGRsZScgPyBNYXRoLmZsb29yKChyZW5kZXIucmVjdC5oZWlnaHQgLSBzdW1IZWlnaHQpIC8gMikgOiB2QWxpZ24gPT09ICdib3R0b20nID8gcmVuZGVyLnJlY3QuaGVpZ2h0IC0gc3VtSGVpZ2h0IDogMFxuICAgICAgICBpZiAoc3BhY2VIZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB5ID0gc3BhY2VIZWlnaHQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC55ID0geTtcbiAgICAgICAgICAgIHkgKz0gcmVuZGVyLmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YeN5paw5rWL6YeP5ZCI5bm25Y2V5YWD5qC86auY5bqmXG4gICAgICogQHBhcmFtIHRiUmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtZWFzdXJlVGFibGVNZXJnZSh0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgLy/mmK/lkKbpnIDopoHph43mlrDorqHnrpcs5Li76KaB6Kej5Yaz77ya5LmL5YmN5ZCI5bm26K6h566X55qE5YiX77yM5Y+v6IO95Lya6KKr5ZCO6Z2i5ZCI5bm26K6h566X55qE5YiX5omA5b2x5ZON77yM6ZyA6KaB5YaN5qyh6YeN5paw6K6h566X5rWL6YePXG4gICAgICAgIGxldCBuZWVkUmVDYWxjID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGJSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiUmVuZGVyLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGUgPSBjZWxsUmVuZGVyLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZNZXJnZSB9ID0gZWxlLnByb3BzO1xuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVJbmRleCA9IGVsZS5nZXRJbmRleCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250aW51ZVJvd3MgPSB0aGlzLmdldENvbnRpbnVlVk1lcmdlUmVuZGVyUm93cyh0YlJlbmRlciwgaSwgZWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRpbnVlUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5ZCR5LiL5LiN5a2Y5Zyo5ZCI5bm255qE5Y2V5YWD5qC877yM5b2T5YmN5ZCI5bm255qE5Y2V5YWD5qC85piv6KKrY3V06L+H5p2l55qE77yM5bm25LiU5b2T5YmN5Y2V5YWD5qC86auY5bqm6auY5LqO6KGM5YaF6auY5bqm6ZyA6KaBcmVtZWFzdXJl5b2T5YmN6KGMXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbFJlbmRlci5yZWN0LmhlaWdodCA+IHJvdy5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtZWFzdXJlVGFibGVSb3cocm93LCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkUmVDYWxjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVlQ2VsbEhlaWdodCA9IGNvbnRpbnVlUm93cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLnJlY3QuaGVpZ2h0LCAwKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvd0hlaWdodCA9IGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgLSByb3cucmVjdC5oZWlnaHQgLSBjb250aW51ZUNlbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIC8v5rqi5Ye655qE6auY5bqm5Yqg5Yiw5pyA5ZCO5LiA5Liq5ZCI5bm25Y2V5YWD5qC85LitXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyZmxvd0hlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RSb3cgPSBjb250aW51ZVJvd3NbY29udGludWVSb3dzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJvdy5yZWN0LmhlaWdodCArPSBvdmVyZmxvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplQ2VsbFRvRmlsbFJvdyhsYXN0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZUNhbGMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlci5yZWN0LmhlaWdodCA9IHJvdy5yZWN0LmhlaWdodCArIGNvbnRpbnVlQ2VsbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmVlZFJlQ2FsYykge1xuICAgICAgICAgICAgdGhpcy5yZW1lYXN1cmVUYWJsZU1lcmdlKHRiUmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQkeS4i+e6teWQkeWQiOW5tueahOihjFxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldENvbnRpbnVlVk1lcmdlUmVuZGVyUm93cyhyZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogVGFibGVSb3dSZW5kZXJPYmplY3RbXSB7XG4gICAgICAgIGNvbnN0IHJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3dSZW5kZXIgPSByZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByb3dFbGUgPSByb3dSZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSByb3dFbGUuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB7IHZNZXJnZSB9ID0gZWxlLnByb3BzO1xuICAgICAgICAgICAgaWYgKHZNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93cy5wdXNoKHJvd1JlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5qiq5ZCR5b2T5YmN6KKr5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgc3RhdGljIGdldEhvcml6b250YWxSZXN0YXJ0Q2VsbEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRWZXJ0aWNhbFJlc3RhcnRDZWxsSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvCcpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCI5bm25Y2V5YWD5qC85Li75Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogeyByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRDZWxsSW5kZXggPSB0aGlzLmdldEhvcml6b250YWxSZXN0YXJ0Q2VsbEluZGV4KHRiLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0Yiwgcm93SW5kZXgsIHJlc3RhcnRDZWxsSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgY29uc3QgcmVzdGFydFJvd0luZGV4ID0gdGhpcy5nZXRWZXJ0aWNhbFJlc3RhcnRDZWxsSW5kZXgodGIsIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZXN0YXJ0Q2VsbFBvc2l0aW9uKHRiLCByZXN0YXJ0Um93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByb3dJbmRleCwgY29sSW5kZXggfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiwg+aVtOWNleWFg+agvOmrmOW6puWhq+a7oeaVtOS4quihjOeahOmrmOW6plxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHJlc2l6ZUNlbGxUb0ZpbGxSb3cocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNlbGwucmVjdC5oZWlnaHQgPSByb3cucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWFg+e0oOeahOWFqOWxgOe0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29udHJvbEluZGV4KGNvbnRyb2w6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb250cm9sLmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb3VudGVyICs9IGNoaWxkLmdldFNlbGZMZW5ndGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudGVyICsgdGhpcy5nZXRDb250cm9sSW5kZXgocGFyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YWo5bGA57Si5byV5L2N572u6I635Y+W5YWD57SgXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gY291bnRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENvbnRyb2xCeUluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY291bnRlci5jdXJySW5kZXgrKztcbiAgICAgICAgaWYgKGNvdW50ZXIuY3VyckluZGV4ID09PSBjb3VudGVyLmluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRDb250cm9sQnlJbmRleChjb250cm9sLmdldENoaWxkKGkpLCBjb3VudGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQjOe6p+e0p+aMqOWJjeaWueeahOWFhOW8n+WFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJldlNpYmxpbmdFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LmdldENoaWxkKGluZGV4IC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCM57qn57Sn5oyo5LiL5pa555qE5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXh0U2libGluZ0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgcGFyZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LmdldENoaWxkKGluZGV4ICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgdHlwZTogVHJhY2tSdW5UeXBlRW51bSwgdXNlcklkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdFbGUgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGUudHlwZSA9PT0gdHlwZSAmJiBuZXh0U2libGluZ0VsZS5wcm9wcy51c2VySWQgPT09IHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZ0VsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJldlNpYmxpbmdUcmFja0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgdHlwZTogVHJhY2tSdW5UeXBlRW51bSwgdXNlcklkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcHJldlNpYmxpbmdFbGUgPSB0aGlzLmdldFByZXZTaWJsaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZXZTaWJsaW5nRWxlIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAocHJldlNpYmxpbmdFbGUudHlwZSA9PT0gdHlwZSAmJiBwcmV2U2libGluZ0VsZS5wcm9wcy51c2VySWQgPT09IHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2U2libGluZ0VsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pu5jorqTphY3nva7liJvlu7rplb/mlofmnKxcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXdUZXh0R3JvdXAodGV4dFByb3BzOiBUZXh0UHJvcHMpOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KClcbiAgICAgICAgdGV4dFByb3BzLmNsb25lKHRleHQucHJvcHMpO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVGV4dFByb3BzKGRlc3Q6IFRleHRQcm9wcyB8IG51bGwsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IGRlc3QgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9IHZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZTtcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gdmlld09wdGlvbnMuZGVmYXVsdENvbG9yO1xuICAgICAgICByZXR1cm4gdGV4dFByb3BzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWuueWZqOWGheeahOacgOWwj+a4suafk+WFg+e0oOmbhuWQiFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gYXJyYXlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0QXZhaWxIaXRMZWFmUmVuZGVyT2JqZWN0cyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IEFycmF5PHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJQb3MueCArIHJlbmRlci5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJQb3MueSArIHJlbmRlci5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlci5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTx7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiA9IFtdO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goLi4udGhpcy5nZXRBdmFpbEhpdExlYWZSZW5kZXJPYmplY3RzKGNoaWxkLCB7IHg6IHJlbmRlck9iamVjdFJlY3QueCwgeTogcmVuZGVyT2JqZWN0UmVjdC55IH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBhcnJheS5wdXNoKHsgcmVuZGVyOiByZW5kZXIsIHJlY3Q6IHJlbmRlck9iamVjdFJlY3QgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blrrnlmajlhoXnmoTmnIDlsI/muLLmn5PlhYPntKDpm4blkIhcbiAgICAgKiBAcGFyYW0gcGFyUG9zXG4gICAgICogQHBhcmFtIGFycmF5XG4gICAgICovXG4gICAgc3RhdGljIGdldEF2YWlsSGl0UmVuZGVyT2JqZWN0cyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IEFycmF5PHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHRoaXMuZ2V0UmVuZGVyT2JqZWN0QWJzb2x1dGVSZWN0KHJlbmRlciwgcGFyUG9zKTtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfT4gPSBbXTtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0F2YWlsSGl0UmVuZGVyKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHsgcmVuZGVyOiBjaGlsZCwgcmVjdDogdGhpcy5nZXRSZW5kZXJPYmplY3RBYnNvbHV0ZVJlY3QoY2hpbGQsIHJlbmRlck9iamVjdFJlY3QpIH0pXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgYXJyYXkucHVzaCh7IHJlbmRlcjogcmVuZGVyLCByZWN0OiByZW5kZXJPYmplY3RSZWN0IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi25YWD57Sg55qE57ud5a+55L2N572u5qGGXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlbmRlck9iamVjdEFic29sdXRlUmVjdChyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IFJlY3Qge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyUG9zLnggKyByZW5kZXIucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyUG9zLnkgKyByZW5kZXIucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXIucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqZWN0UmVjdDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOajgOafpeW9k+WJjee7mOWItuWFg+e0oOaYr+WQpuWxnuS6juacieaViOeCueWHu+WFg+e0oFxuICAgICAqL1xuICAgIHN0YXRpYyBjaGVja0F2YWlsSGl0UmVuZGVyKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyZW5kZXIuZWxlbWVudCAmJiByZW5kZXIuZWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZSA9IHJlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChyb3dFbGUucHJvcHMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0VsZS5wYWludFJlbmRlcnMuaW5kZXhPZihyZW5kZXIpID09PSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhcmVuZGVyLmRpc2FibGVDbGljaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpqozor4Hngrnlh7vlj6/mk43kvZzmgKdcbiAgICAgKiDkuLvopoHpmZDliLbpobXnnInpobXohJrnmoTnvJbovpHmqKHlvI9cbiAgICAgKi9cbiAgICBzdGF0aWMgdmVyaWZ5SGl0YWJsZShzb3VyY2VFbGVtZW50OiBMZWFmRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFzb3VyY2VFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50cyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEVsZW1lbnRzKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkLmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIDkuKrngrnliLDkuIDkuKrnn6nlvaLmnIDnn63nmoTot53nprtcbiAgICAgKiBAcGFyYW0gcmVjdFxuICAgICAqIEBwYXJhbSBwXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGlzdGFuY2VUb1JlY3QocmVjdDogUmVjdCwgcDogUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PHsgZjogUEFJUiwgczogUEFJUiB9PiA9IFtdO1xuICAgICAgICBsaW5lcy5wdXNoKHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGlzdGFuY2VzID0gbGluZXMubWFwKGl0ZW0gPT4gdGhpcy5taW5EaXN0YW5jZShpdGVtLmYsIGl0ZW0ucywgcCkpXG4gICAgICAgIHJldHVybiBNYXRoLm1pbiguLi5kaXN0YW5jZXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBtaW5EaXN0YW5jZShBOiBQQUlSLCBCOiBQQUlSLCBFOiBQQUlSKSB7XG5cbiAgICAgICAgY29uc3QgQUI6IFBBSVIgPSB7IHg6IEIueCAtIEEueCwgeTogQi55IC0gQS55IH1cblxuICAgICAgICBjb25zdCBCRTogUEFJUiA9IHsgeDogRS54IC0gQi54LCB5OiBFLnkgLSBCLnkgfTtcblxuICAgICAgICBjb25zdCBBRTogUEFJUiA9IHsgeDogRS54IC0gQS54LCB5OiBFLnkgLSBBLnkgfVxuXG4gICAgICAgIGNvbnN0IEFCX0JFID0gKEFCLnggKiBCRS54ICsgQUIueSAqIEJFLnkpO1xuICAgICAgICBjb25zdCBBQl9BRSA9IChBQi54ICogQUUueCArIEFCLnkgKiBBRS55KTtcblxuICAgICAgICBsZXQgcmVxQW5zID0gMDtcblxuICAgICAgICBpZiAoQUJfQkUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB5ID0gRS55IC0gQi55O1xuICAgICAgICAgICAgY29uc3QgeCA9IEUueCAtIEIueDtcbiAgICAgICAgICAgIHJlcUFucyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICAgICAgfSBlbHNlIGlmIChBQl9BRSA8IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBFLnkgLSBBLnk7XG4gICAgICAgICAgICBjb25zdCB4ID0gRS54IC0gQS54O1xuICAgICAgICAgICAgcmVxQW5zID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeDEgPSBBQi54O1xuICAgICAgICAgICAgY29uc3QgeTEgPSBBQi55O1xuICAgICAgICAgICAgY29uc3QgeDIgPSBBRS54O1xuICAgICAgICAgICAgY29uc3QgeTIgPSBBRS55O1xuICAgICAgICAgICAgY29uc3QgbW9kID0gTWF0aC5zcXJ0KHgxICogeDEgKyB5MSAqIHkxKTtcbiAgICAgICAgICAgIHJlcUFucyA9IE1hdGguYWJzKHgxICogeTIgLSB5MSAqIHgyKSAvIG1vZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxQW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueItue6p+Wxgue6p+a4suafk+WvueixoVxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQYXJlbnRSZW5kZXJzKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogQXJyYXk8UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBbcmVuZGVyLCAuLi50aGlzLmdldFBhcmVudFJlbmRlcnMocmVuZGVyLnBhcmVudCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlbmRlck1hcEVsZW1lbnRzKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCByZW5kZXJzID0gdGhpcy5nZXRQYXJlbnRSZW5kZXJzKHJlbmRlcik7XG4gICAgICAgIHJldHVybiByZW5kZXJzLm1hcChyZW5kZXIgPT4gcmVuZGVyLmVsZW1lbnQpLmZpbHRlcihlbGUgPT4gZWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVyPFQgZXh0ZW5kcyBCcmFuY2hSZW5kZXJPYmplY3Q+KGNoaWxkOiBSZW5kZXJPYmplY3QsIHBhcmVudFR5cGU6IHsgbmV3KC4uLmFyZ3M6IGFueSk6IFQgfSk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgcGFyZW50VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVuZGVyKGNoaWxkLnBhcmVudCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVyQnlQcmVkaWNhdGUoY2hpbGQ6IFJlbmRlck9iamVjdCwgcHJlZGljYXRlOiAoaXRlbTogUmVuZGVyT2JqZWN0KSA9PiBib29sZWFuKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRSZW5kZXJCeVByZWRpY2F0ZShjaGlsZC5wYXJlbnQsIHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bniLbnuqflsYLnuqflhYPntKDlr7nosaFcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFBhcmVudEVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtlbGVtZW50LCAuLi50aGlzLmdldFBhcmVudEVsZW1lbnRzKGVsZW1lbnQucGFyZW50KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmnIDlkI7kuIDkuKrlrZDlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldExhc3RMZWFmRWxlbWVudChlbGVtZW50OiBFbGVtZW50LCBwcmVkaWNhdGU6IG51bGwgfCAoKGl0ZW06IEVsZW1lbnQpID0+IGJvb2xlYW4pID0gbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKGVsZW1lbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBlbGVtZW50Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRMYXN0TGVhZkVsZW1lbnQoZWxlbWVudC5nZXRDaGlsZChpKSwgcHJlZGljYXRlKVxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluesrOS4gOS4quWtkOWFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50LmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5Lik5Liq5YWD57Sg5piv5ZCm5Zyo5ZCM5LiA5Liq5q616JC95LitXG4gICAgICogQHBhcmFtIGVsZW1lbnQxXG4gICAgICogQHBhcmFtIGVsZW1lbnQyXG4gICAgICovXG4gICAgc3RhdGljIGlzSW5TYW1lUGFyYWdyYXBoKGVsZW1lbnQxOiBFbGVtZW50LCBlbGVtZW50MjogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXIxID0gdGhpcy5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudDEsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwYXIyID0gdGhpcy5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudDIsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcGFyMSA9PT0gcGFyMjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Qm9yZGVyQ3Vyc29yKGJvcmRlclR5cGU6IEJvcmRlclR5cGUpOiBDdXJzb3JUeXBlIHtcbiAgICAgICAgc3dpdGNoIChib3JkZXJUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdub25lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvdy1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2wtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbC1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvdy1yZXNpemUnXG4gICAgICAgICAgICBjYXNlICdsZWZ0LW1pZGRsZSc6XG4gICAgICAgICAgICBjYXNlICdyaWdodC1taWRkbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAndy1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAndG9wLW1pZGRsZSc6XG4gICAgICAgICAgICBjYXNlICdib3R0b20tbWlkZGxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3MtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQtdG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0LWJvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZS1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQtdG9wJzpcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQtYm90dG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25lLXJlc2l6ZSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50QnlUeXBlPFAgZXh0ZW5kcyBFbGVtZW50LCBUPihjaGlsZDogUCB8IG51bGwsIHBhcmVudFR5cGU6IHsgbmV3KC4uLmFyZ3M6IGFueSk6IFQgfSk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgcGFyZW50VHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50QnlUeXBlKGNoaWxkLnBhcmVudCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyZW50KGNoaWxkOiBFbGVtZW50IHwgbnVsbCwgcHJlZGljYXRlOiAoaXRlbTogRWxlbWVudCkgPT4gYm9vbGVhbik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWRpY2F0ZShjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudChjaGlsZC5wYXJlbnQsIHByZWRpY2F0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOS/ruato+auteiQveWGheWuuVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGZpeFBhcmFncmFwaENvbnRlbnQoY29udHJvbDogUGFyYWdyYXBoRWxlbWVudCk6IHZvaWQge1xuICAgICAgICAvL+WmguaenOacgOWQjuS4gOS4quWFg+e0oOS4jeaYr+auteiQveespuWPt++8jOWImeihpei2s1xuICAgICAgICBpZiAoIShjb250cm9sLmdldENoaWxkKGNvbnRyb2wubGVuZ3RoIC0gMSkgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuYWRkQ2hpbGQobmV3IFBTeW1ib2xFbGVtZW50KCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxQU3ltYm9sRWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29udHJvbC5yZW1vdmVDaGlsZChpdGVtKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mraPlnZfnuqflrrnlmajlhoXlrrlcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqL1xuICAgIHN0YXRpYyBmaXhCbG9ja0NvbnRhaW5lcihjb250cm9sOiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbnRyb2wubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlQ2VsbEVsZW1lbnQgJiYgKGNvbnRyb2wucHJvcHMudk1lcmdlID09PSAnY29udGludWUnIHx8IGNvbnRyb2wucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb250cm9sLm5vRmlsbEVtcHR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udHJvbC5hZGRDaGlsZChuZXcgUGFyYWdyYXBoRWxlbWVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi25YWD57Sg55u45a+55LqO5pW05Liq55S75biD55qE57ud5a+55L2N572uXG4gICAgICog5pW05Liq55S75biD57uY5Yi255qE5pe25YCZ5LiN5LiA5a6a5LuOeD0wLHk9MOaXtue7mOWItueahO+8jOS4i+aLiea7muWKqOaXtu+8jOS4iumdouS7jui0n3nlnZDmoIflvIDlp4vnu5jliLZcbiAgICAgKiDlpoLmnpzorqHnrpfmn5DkuKrlhYPntKDnm7jlr7nnlLvluIPnmoTlt6bkuIrop5LnmoTnu53lr7nlnZDmoIfkvY3nva7vvIzpnIDopoFjaGlsZFBvc+eahHnlgLzlh4/ljrt0cmFuc2xhdGVZXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByZWZQb3Mg5Y+C54Wn5L2N572uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcmVmUG9zOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogUG9zaXRpb24ge1xuICAgICAgICByZWZQb3MgPSByZWZQb3MgPz8geyB4OiAwLCB5OiAwIH07XG4gICAgICAgIGNvbnN0IGN1cnJQb3M6IFBvc2l0aW9uID0geyB4OiByZW5kZXIucmVjdC54ICsgcmVmUG9zLngsIHk6IHJlbmRlci5yZWN0LnkgKyByZWZQb3MueSB9O1xuICAgICAgICBpZiAoIXJlbmRlci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyUG9zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyLnBhcmVudCwgY3VyclBvcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBjaGlsZFBvczogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyLCBjaGlsZFBvcyk7XG4gICAgICAgIHJldHVybiB7IC4uLnBvcywgd2lkdGg6IHJlbmRlci5yZWN0LndpZHRoLCBoZWlnaHQ6IHJlbmRlci5yZWN0LmhlaWdodCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgIH1cblxuXG5cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Lit5Yy65Z+f55qE5byA5aeL5Yy65Z+fXG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgcmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5bMF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Lit5Yy65Z+f55qE5byA5aeL5Yy65Z+fXG4gICAgICogQHBhcmFtIHJhbmdlIFxcXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmIChyYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCByYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMYXN0U2VsZWN0ZWRSYW5nZShyYW5nZS5zZWxlY3RlZENoaWxkcmVuW3JhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlhYvpmobpgInljLrlhoXlrrlcbiAgICAgKiBAcGFyYW0gcmFuZ2VcbiAgICAgKiBAcGFyYW0gaXNEZWxldGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBjbG9uZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIGlzRGVsZXRlOiBib29sZWFuLCBjbG9uZU1vZGU6ICdjbG9uZScgfCAnc291cmNlJyB8ICdjb3B5JyA9ICdjbG9uZScpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0LCBpc0Z1bGxTZWxlY3RlZCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgc2VsZWN0ZWRDaGlsZHJlbiB9ID0gcmFuZ2U7XG4gICAgICAgIGlmIChpc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgLy/kv67ppbDlhYPntKDkuI3og73lpI3liLYg5a6h6ZiF5qCH6K6w44CB5pWw5o2u5YWDTnVsbFRleHRcbiAgICAgICAgICAgIGlmIChjbG9uZU1vZGUgPT09ICdjb3B5JyAmJiB0YXJnZXQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBjbG9uZU1vZGUgPT09ICdzb3VyY2UnID8gdGFyZ2V0IDogdGFyZ2V0LmNsb25lKHRydWUpO1xuICAgICAgICAgICAgaWYgKGlzRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgc3RhcnRPZmZzZXQgIT09IGVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUYXJnZXQgPSB0YXJnZXQuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUYXJnZXQgPSB0YXJnZXQuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5Q2hpbGQgPSB0aGlzLmNsb25lUmFuZ2Uoc2VsZWN0ZWRDaGlsZHJlbltpXSwgaXNEZWxldGUsIGNsb25lTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3B5Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY29weUNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5VGFyZ2V0ID0gdGFyZ2V0LmNsb25lKGZhbHNlKSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29weVRhcmdldC5hZGRDaGlsZChpdGVtKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcHlUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaJgOacieeahOWtkOe6p+WFg+e0oFxuICAgICAqIEBwYXJhbSBicmFuY2hFbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDaGlsZHJlbkVsZW1lbnRzKGJyYW5jaEVsZTogQnJhbmNoRWxlbWVudCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBicmFuY2hFbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goYnJhbmNoRWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCS5b2S5ZCR5YmN5a+75om+5pyA6L+R55qE5YWD57SgXG4gICAgICogQHBhcmFtIGN1cnJFbGVtZW50XG4gICAgICogQHBhcmFtIGluUGFyYSAg5piv5ZCm5Zyo5ZCM5LiA5q616JC95Lit5a+75om+XG4gICAgICogQHBhcmFtIGZvckN1cnNvciDmn6Xmib7nu5PmnpzmmK/lkKbnlKjkuo7lhYnmoIflrprkvY1cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsLCBpblBhcmE6IGJvb2xlYW4gPSBmYWxzZSwgZm9yQ3Vyc29yOiBib29sZWFuID0gZmFsc2UpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgICAgICAvL+WIoOmZpOeVmeeXleWdl+eahG1lYXN1cmVSZW5kZXLlnKjkuI3mmL7npLrnlZnnl5XmqKHlvI/kuIvvvIzkuI3nlJ/miJByZW5kZXJcbiAgICAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50IHx8ICghY3VyckVsZW1lbnQubWVhc3VyZVJlbmRlciAmJiAhKGN1cnJFbGVtZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5pWw5o2u5YWD5LiN5Y+v57yW6L6R77yM5YiZ55u05o6l6Lez6L+HXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmICFwYXJlbnQucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIHBhcmVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAgICAgaWYgKCFpbmRleCkge1xuICAgICAgICAgICAgaWYgKGluUGFyYSAmJiBwYXJlbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcHJldkVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZFbGVtZW50ICYmICFwcmV2RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2RWxlbWVudCB8fCBwcmV2RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocHJldkVsZW1lbnQpO1xuICAgICAgICAgICAgLy/nlKjkuo7lhYnmoIflrprkvY1cbiAgICAgICAgICAgIGlmIChmb3JDdXJzb3IgJiYgbGFzdExlYWZFbGVtZW50ICYmIGxhc3RMZWFmRWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQobGFzdExlYWZFbGVtZW50LCBpblBhcmEsIGZvckN1cnNvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHByZXZFbGVtZW50LnBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvqrnjq/lkJHliY3lr7vmib7lj6/lrprkvY3nmoTmlbDmja7lhYNcbiAgICAgKiBAcGFyYW0gY3VyckVsZW1lbnQgXG4gICAgICovXG4gICAgc3RhdGljIGdldFByZXZEYXRhRWxlbWVudChjdHg6IEVkaXRvckNvbnRleHQsIGN1cnJFbGVtZW50OiBEYXRhRWxlbWVudElubGluZUdyb3VwKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IG51bGwge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gY3R4LmdldEN1cnJlbnRDdHgoY3VyckVsZW1lbnQpLmdldENvbnRyb2xJbnN0YW5jZUxpc3QoKS5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YUVsZS5pbmRleE9mKGN1cnJFbGVtZW50KTtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFFbGVbaV0uZGlzYWJsZUNsaWNrICYmIGRhdGFFbGVbaV0ucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFFbGVbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog6YCS5b2S5ZCR5YmN5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50Rm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAvLyAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50KSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgaWYgKCFpbmRleCkge1xuICAgIC8vICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShwYXJlbnQpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgY29uc3QgcHJldkVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaW5kZXggLSAxKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGxhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChwcmV2RWxlbWVudCk7XG4gICAgLy8gICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhKHByZXZFbGVtZW50Py5wYXJlbnQpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlj6/ngrnlh7vlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmFGb3JIaXQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgbGV0IGVsZTogTGVhZkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvLyAgICAgZG8ge1xuICAgIC8vICAgICAgICAgZWxlID0gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICB9IHdoaWxlIChlbGUgJiYgZWxlLmRpc2FibGVDbGljaylcbiAgICAvLyAgICAgcmV0dXJuIGVsZTtcbiAgICAvLyB9XG5cblxuICAgIC8qKlxuICAgICAqIOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsLCBpblBhcmE6IGJvb2xlYW4gPSBmYWxzZSwgZm9yQ3Vyc29yOiBib29sZWFuID0gZmFsc2UpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQgfHwgIWN1cnJFbGVtZW50Lm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5pWw5o2u5YWD5LiN5Y+v57yW6L6R77yM5YiZ55u05o6l6Lez6L+HXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmICFwYXJlbnQucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIHBhcmVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAgICAgaWYgKGluZGV4ID09PSBwYXJlbnQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaWYgKGluUGFyYSAmJiBwYXJlbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBwYXJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQgJiYgIW5leHRFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW5leHRFbGVtZW50IHx8IG5leHRFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQobmV4dEVsZW1lbnQpO1xuICAgICAgICAgICAgLy/nlKjkuo7lhYnmoIflrprkvY1cbiAgICAgICAgICAgIGlmIChmb3JDdXJzb3IgJiYgbGFzdExlYWZFbGVtZW50ICYmIGxhc3RMZWFmRWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQobGFzdExlYWZFbGVtZW50LCBpblBhcmEsIGZvckN1cnNvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KG5leHRFbGVtZW50LnBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgIC8vICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICBpZiAoaW5kZXggPT09IHBhcmVudC5sZW5ndGggLSAxKSB7XG4gICAgLy8gICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpbmRleCArIDEpO1xuICAgIC8vICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChuZXh0RWxlbWVudCk7XG4gICAgLy8gICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKG5leHRFbGVtZW50LnBhcmVudCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYUZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50Rm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGM5YaF5pyA5aSn5riy5p+T5Y2V5YWD5qC86auY5bqm77yM5Li76KaB5aSE55CG57q15ZCR5ZCI5bm25Y2V5YWD5qC86Zeu6aKYXG4gICAgICogQHBhcmFtIHJvd1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJvd01heENlbGxIZWlnaHQocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJvdy5nZXRDaGlsZChpKS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IHJvdy5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4SGVpZ2h0O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5piv5ZCm5Li656m65YaF5a65XG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqL1xuICAgIHN0YXRpYyBjaGVja0VtcHR5Q29udGVudChlbGU6IEJyYW5jaFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZWxlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZW5kZXIgPSBlbGUuZ2V0Q2hpbGQoMCk7XG4gICAgICAgICAgICBpZiAoZmlyc3RSZW5kZXIgaW5zdGFuY2VvZiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDxQYXJhZ3JhcGhFbGVtZW50PihmaXJzdFJlbmRlci5lbGVtZW50KSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5rWL6YeP6KGM5YaF57yW57uE5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqL1xuICAgIHN0YXRpYyByZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihyZW5kZXI6IElubGluZUdyb3VwUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaXRlbS5yZWN0LnggPSB4O1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBpdGVtLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBpdGVtLnJlY3Qud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpdGVtLnJlY3QueSA9IG1heEhlaWdodCAtIGl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB4O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmFMaW5lUG9zKGNoaWxkUmVuZGVyOiBSZW5kZXJPYmplY3QsIGNoaWxkUmVuZGVyUG9zOiBQb3NpdGlvbik6IFJlY3Qge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZFJlbmRlci5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QocGFyZW50LnJlY3QpO1xuICAgICAgICByZWN0LnggPSBjaGlsZFJlbmRlclBvcy54IC0gY2hpbGRSZW5kZXIucmVjdC54O1xuICAgICAgICByZWN0LnkgPSBjaGlsZFJlbmRlclBvcy55IC0gY2hpbGRSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiByZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyYUxpbmVQb3MocGFyZW50LCByZWN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlclBvcyhwYXJlbnRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXJQb3M6IFBvc2l0aW9uKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkUmVuZGVyLnBhcmVudDtcbiAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChwYXJlbnQucmVjdCk7XG4gICAgICAgIHJlY3QueCA9IGNoaWxkUmVuZGVyUG9zLnggLSBjaGlsZFJlbmRlci5yZWN0Lng7XG4gICAgICAgIHJlY3QueSA9IGNoaWxkUmVuZGVyUG9zLnkgLSBjaGlsZFJlbmRlci5yZWN0Lnk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhcmVudFJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRSZW5kZXJQb3MocGFyZW50UmVuZGVyLCBwYXJlbnQsIHJlY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLblhYPntKDmiYDlnKjnmoTljLrln59cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogSGl0UmVnaW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVnaW9uKHJlbmRlci5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJPYmplY3RSZWdpb24ocmVuZGVyLnBhcmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5paH5qGj5YWD57Sg5omA5Zyo55qE5Yy65Z+fXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFbGVtZW50UmVnaW9uKGVsZW1lbnQ6IEVsZW1lbnQpOiBIaXRSZWdpb24gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCByZWdpb25UYXJnZXQgPSB0aGlzLmdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiByZWdpb25UYXJnZXQ/LnR5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudDogRWxlbWVudCB8IG51bGwpOiB7IHR5cGU6IEhpdFJlZ2lvbiwgdGFyZ2V0OiBCcmFuY2hFbGVtZW50IH0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdib2R5JywgdGFyZ2V0OiBlbGVtZW50IH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZvb3RlckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdmb290ZXInLCB0YXJnZXQ6IGVsZW1lbnQgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERvY3VtZW50SGVhZGVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2hlYWRlcicsIHRhcmdldDogZWxlbWVudCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQ29tbXNDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAncmV2aWV3JywgdGFyZ2V0OiBlbGVtZW50IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVnaW9uVGFyZ2V0KGVsZW1lbnQucGFyZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lnZDmoIfns7vnu5/lgY/np7vkvY3ojrflj5bmiYDlnKjnmoTmlofmnKzlgY/np7vkvY3nva5cbiAgICAgKiBAcGFyYW0gdGV4dFJlbmRlclxuICAgICAqIEBwYXJhbSB4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VGV4dFJlbmRlck9mZnNldCh0ZXh0UmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGVsZSA9IHRleHRSZW5kZXIuZWxlbWVudCBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGV4dFJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpO1xuICAgICAgICBpZiAoIWRvY1JlbmRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb2NSZW5kZXIgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlUGFpbnRSZW5kZXJzID0gZWxlLnBhaW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaXRlbSwgRG9jdW1lbnRSZW5kZXJPYmplY3QpID09PSBkb2NSZW5kZXIpO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZVBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZWxlUGFpbnRSZW5kZXJzW2ldIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgIT09IHRleHRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb3VudCArPSByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGhvclggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaG9yWCArIHJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZSA+PSB4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9yWCArIE1hdGguZmxvb3IocmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplIC8gMikgPiB4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IDAgJiYgaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaiArIGNvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhvclggKz0gcmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQgKyByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOW9k+WJjeaWh+acrOWFg+e0oOeahOWFieagh+WBj+enu+mHjycpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRIaXRSZW5kZXJPZmZzZXQocmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0UmVuZGVyT2Zmc2V0KHJlbmRlciwgeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQgJiYgcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKHJlbmRlci5yZWN0LndpZHRoIC8gMikgPj0geCA/IDAgOiAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRSZW5kZXJIb3JYKGN1cnJSZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kT2Zmc2V0OiBudW1iZXIpOiB7IHN0YXJ0WDogbnVtYmVyLCBlbmRYOiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHRleHRFbGUgPSBjdXJyUmVuZGVyLmVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgbGV0IGVuZFggPSAwO1xuICAgICAgICBsZXQgc3RhcnRYID0gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0RWxlLnBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFpbnRSZW5kZXIgPSB0ZXh0RWxlLnBhaW50UmVuZGVyc1tpXSBhcyBUZXh0R3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocGFpbnRSZW5kZXIgIT09IGN1cnJSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb3VudCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgKyBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoIDwgc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IGVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA9PT0gY291bnQgKyBqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgKyBqID09PSBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYID0gZW5kWDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbmRYICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGFydFgsIGVuZFggfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIDkuKrlhYPntKDnu5PlsL7lgY/np7vph49cbiAgICAgKiDmlofmnKzku6XlrZfnrKbplb/luqbov5vooYznoa7lrppcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RWxlbWVudEVuZE9mZnNldChlbGU6IExlYWZFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lvZPliY3lgY/np7vph4/mmK/lkKbmmK/mnIDnu4jlgY/np7vph49cbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0VsZW1lbnRFbmRPZmZzZXQoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudEVuZE9mZnNldChlbGUpID09PSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W55u05o6l5a2Q6IqC54K555qE5omA5pyJ5riy5p+T5YWD57SgXG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENoaWxkUmVuZGVyczxUIGV4dGVuZHMgUmVuZGVyT2JqZWN0PihlbGU6IEJyYW5jaFJlbmRlck9iamVjdCk6IEFycmF5PFQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGVsZS5nZXRDaGlsZChpKSBhcyBUKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN5Y2V5YWD5qC85YaF5omA5pyJ55qE5q616JC96KGMXG4gICAgICogQHBhcmFtIGNlbGxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDZWxsUGFyYUxpbmVzKGNlbGw6IFRhYmxlQ2VsbFJlbmRlck9iamVjdCk6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhID0gY2VsbC5nZXRDaGlsZChpKSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHBhcmEuZ2V0Q2hpbGQoaikgYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSYW5kb21Db2xvcihzZWVkOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGxldHRlcnMgPSAnMDEyMzQ1Njc4OUFCQ0RFRic7XG4gICAgICAgIGxldCBjb2xvciA9ICcjJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIGNvbG9yICs9IGxldHRlcnNbTWF0aC5mbG9vcih0aGlzLmdldFNlZWRSYW5kb20oc2VlZCkgKiAxNildO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG5cblxuICAgIHN0YXRpYyBnZXRTZWVkUmFuZG9tKHNlZWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoXCIwLlwiICsgTWF0aC5zaW4oc2VlZCAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKCkuc3Vic3RyKDYpKTtcbiAgICB9XG5cblxuICAgIHN0YXRpYyBmaW5kQ2hpbGRSZW5kZXIocmVuZGVyOiBCcmFuY2hSZW5kZXJPYmplY3QsIHByZWRpY2F0ZTogKGNoaWxkOiBSZW5kZXJPYmplY3QpID0+IGJvb2xlYW4pOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUocmVuZGVyLmdldENoaWxkKGkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZ2V0RGF0YUVsZW1lbnQoZWxlOiBFbGVtZW50KTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudChlbGUsIGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG4gICAgfVxufVxuXG4iLCJpbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50Q3Vyc29yLCBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IFBvc2l0aW9uLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgSGl0RXZlbnRJbmZvIH0gZnJvbSBcIi4vZnJhbWV3b3JrL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlUm93UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ZyYW1ld29yay9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU9wdGlvbnMge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgcGFnZVBMOiBudW1iZXI7XG4gICAgcGFnZVBSOiBudW1iZXI7XG4gICAgZG9jTGVmdDogbnVtYmVyO1xuXG59XG5leHBvcnQgY2xhc3MgRG9jUnVsZSB7XG4gICAgcHJpdmF0ZSBjdHghOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBSdWxlT3B0aW9ucztcbiAgICAvL+agh+WwuumrmOW6plxuICAgIHByaXZhdGUgcnVsZUhlaWdodCA9IDMwO1xuICAgIC8v5b2T5YmN5qCH5bC655qE5L2N572uXG4gICAgcHJpdmF0ZSB0aHVtYlg6IHtcbiAgICAgICAgaW5kZW50OiBudW1iZXIsXG4gICAgICAgIGhhbmdpbmc6IG51bWJlclxuICAgIH1cbiAgICBwcml2YXRlIG1vdXNlRG93blBvcyE6IFBvc2l0aW9uIHwgbnVsbDtcbiAgICBwcml2YXRlIGluZGVudFRodW1iUG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIGhhbmdUaHVtYlBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBtb3VzZURvd25UaHVtYlR5cGU6ICdub25lJyB8ICdpbmRlbnQnIHwgJ2hhbmcnID0gJ25vbmUnO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwdWJsaWMgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwdWJsaWMgc3M6IFNlbGVjdGlvblN0YXRlKSB7XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgcGFnZVBMOiAwLFxuICAgICAgICAgICAgcGFnZVBSOiAwLFxuICAgICAgICAgICAgZG9jTGVmdDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRodW1iWCA9IHtcbiAgICAgICAgICAgIGluZGVudDogMCxcbiAgICAgICAgICAgIGhhbmdpbmc6IDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNlZG93bihldnQpKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNlbW92ZShldnQpKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgKGV2dCkgPT4gdGhpcy5jYW52YXNNb3VzZXVwKGV2dCkpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5jYW52YXNNb3VzZWRvd24pO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMuY2FudmFzTW91c2Vtb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5jYW52YXNNb3VzZXVwKTtcbiAgICB9XG5cbiAgICBzZXRSdWxlT3B0aW9ucyhvcHRpb25zOiBSdWxlT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjb252ZXJ0UmF0aW8gPSB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbztcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhZ2VQTCA9IE1hdGguZmxvb3IodGhpcy5vcHRpb25zLnBhZ2VQTCAqIGNvbnZlcnRSYXRpbyk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wYWdlUFIgPSBNYXRoLmZsb29yKHRoaXMub3B0aW9ucy5wYWdlUFIgKiBjb252ZXJ0UmF0aW8pO1xuICAgICAgICB0aGlzLnNjYWxlVmlldygpO1xuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyh0aGlzLmNhbnZhcywgdGhpcy5jdHgsIHsgd2lkdGg6IHRoaXMuZ2V0UGFyZW50V2lkdGgoKSwgaGVpZ2h0OiB0aGlzLnJ1bGVIZWlnaHQgfSk7XG4gICAgICAgIC8vdGhpcy5jYW52YXMuc3R5bGUubGVmdCA9IHRoaXMub3B0aW9ucy5kb2NMZWZ0ICsgJ3B4JztcbiAgICB9XG5cbiAgICBnZXRQYXJlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNhbnZhcy5wYXJlbnRFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsbFJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdJbmRlbnRUaHVtYih4OiBudW1iZXIsIHk6IG51bWJlcik6IEFycmF5PFBvc2l0aW9uPiB7XG4gICAgICAgIGNvbnN0IHBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgIHggLT0gNDtcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiB4LCB5IH0pO1xuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHgsIHk6IHkgKyAzIH0pO1xuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHggKyA0LCB5OiB5ICsgNyB9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiB4ICsgOCwgeTogeSArIDMgfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogeCArIDgsIHkgfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogeCwgeSB9KTtcbiAgICAgICAgdGhpcy5kcmF3TGluZShwb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd0hhbmdUaHVtYih4OiBudW1iZXIsIHk6IG51bWJlcik6IEFycmF5PFBvc2l0aW9uPiB7XG4gICAgICAgIGNvbnN0IHBvaW50czogQXJyYXk8eyB4OiBudW1iZXIsIHk6IG51bWJlciB9PiA9IFtdO1xuICAgICAgICB4IC09IDQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogeCwgeSB9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiB4LCB5OiB5IC0gMyB9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiB4ICsgNCwgeTogeSAtIDcgfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogeCArIDgsIHk6IHkgLSAzIH0pO1xuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHggKyA4LCB5IH0pO1xuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHgsIHkgfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogeCwgeTogeSArIDMgfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogeCArIDgsIHk6IHkgKyAzIH0pO1xuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHggKyA4LCB5OiB5IH0pO1xuICAgICAgICB0aGlzLmRyYXdMaW5lKHBvaW50cyk7XG4gICAgICAgIHJldHVybiBwb2ludHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IFwiOHB4ICdUaW1lcyBOZXcgUm9tYW4nXCI7XG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmUud2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3TGluZShwb2ludHM6IEFycmF5PFBvc2l0aW9uPik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBcIndoaXRlXCI7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDAuNTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwb2ludHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB7IHgsIHkgfSA9IHBvaW50c1tqXTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3VGV4dCh0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gXCI4cHggJ1RpbWVzIE5ldyBSb21hbidcIjtcbiAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCwgeSArIDggLSAxKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOaWsOeahOeKtuaAgVxuICAgICAqIEBwYXJhbSBpbmRlbnQgXG4gICAgICogQHBhcmFtIGhhbmcgXG4gICAgICovXG4gICAgcmVmcmVzaFJ1bGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5ydWxlSGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUodGhpcy5vcHRpb25zLmRvY0xlZnQsIDApO1xuICAgICAgICB0aGlzLmRyYXdSdWxlKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbnZhc01vdXNlZG93bihldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpY2tQb3MgPSB0aGlzLmdldE1vdXNlUG9zKGV2dCk7XG4gICAgICAgIGlmICh0aGlzLnBvaW50SW5Qb2x5KGNsaWNrUG9zLCB0aGlzLmluZGVudFRodW1iUG9pbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPSAnaW5kZW50JztcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gY2xpY2tQb3M7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb2ludEluUG9seShjbGlja1BvcywgdGhpcy5oYW5nVGh1bWJQb2ludHMpKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9ICdoYW5nJztcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gY2xpY2tQb3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuacqueCueWHu+WcqOmHjOmdolwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW91c2VQb3MoZXZ0OiBNb3VzZUV2ZW50KTogUG9zaXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogZXZ0Lm9mZnNldFggLSB0aGlzLm9wdGlvbnMuZG9jTGVmdCxcbiAgICAgICAgICAgIHk6IGV2dC5vZmZzZXRZXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbnZhc01vdXNlbW92ZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFsnaW5kZW50JywgJ2hhbmcnXS5pbmRleE9mKHRoaXMubW91c2VEb3duVGh1bWJUeXBlKSA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubW91c2VEb3duUG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FudmFzUG9zID0gdGhpcy5nZXRNb3VzZVBvcyhldnQpO1xuICAgICAgICBsZXQgbW92ZVggPSBjYW52YXNQb3MueCAtIHRoaXMubW91c2VEb3duUG9zLng7XG4gICAgICAgIC8v6Iez5bCR56e75YqoNXB45YaN6L+b6KGM5L+u5pS5XG4gICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IG1vdmVYICUgNTtcbiAgICAgICAgaWYgKE1hdGguYWJzKHJlbWFpbmRlcikgPCAzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVtYWluZGVyIDwgMCkge1xuICAgICAgICAgICAgICAgIG1vdmVYIC09IDUgKyByZW1haW5kZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vdmVYICs9IDUgLSByZW1haW5kZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vdmVYID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FudmFzUG9zLnggPSB0aGlzLm1vdXNlRG93blBvcy54ICsgbW92ZVg7XG4gICAgICAgIGNvbnN0IHBhcmEgPSB0aGlzLmdldEN1cnJQYXJhKCk7XG4gICAgICAgIGlmICghcGFyYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJhIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9PT0gJ2luZGVudCcpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmluZGVudCArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmluZGVudCA9IHRoaXMudGh1bWJYLmluZGVudCA8IDAgPyAwIDogdGhpcy50aHVtYlguaW5kZW50O1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gdGhpcy50aHVtYlguaW5kZW50ID4gdGhpcy5vcHRpb25zLndpZHRoID8gdGhpcy5vcHRpb25zLndpZHRoIDogdGhpcy50aHVtYlguaW5kZW50O1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBjYW52YXNQb3M7XG4gICAgICAgICAgICBwYXJhLnByb3BzLmluZGVudCArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMuZHJhd1J1bGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPT09ICdoYW5nJykge1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSB0aGlzLnRodW1iWC5oYW5naW5nIDwgMCA/IDAgOiB0aGlzLnRodW1iWC5oYW5naW5nO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyA9IHRoaXMudGh1bWJYLmhhbmdpbmcgPiB0aGlzLm9wdGlvbnMud2lkdGggPyB0aGlzLm9wdGlvbnMud2lkdGggOiB0aGlzLnRodW1iWC5oYW5naW5nO1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25Qb3MgPSBjYW52YXNQb3M7XG4gICAgICAgICAgICBwYXJhLnByb3BzLmhhbmdpbmcgKz0gbW92ZVg7XG4gICAgICAgICAgICB0aGlzLmRyYXdSdWxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbnZhc01vdXNldXAoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMubW91c2VEb3duVGh1bWJUeXBlID0gJ25vbmUnO1xuICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IG51bGw7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHBvaW50SW5Qb2x5KHB0OiBQb3NpdGlvbiwgcG9seTogQXJyYXk8UG9zaXRpb24+KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAtMSwgbCA9IHBvbHkubGVuZ3RoLCBqID0gbCAtIDE7ICsraSA8IGw7IGogPSBpKSB7XG4gICAgICAgICAgICBpZiAoKChwb2x5W2ldLnkgPD0gcHQueSAmJiBwdC55IDwgcG9seVtqXS55KSB8fCAocG9seVtqXS55IDw9IHB0LnkgJiYgcHQueSA8IHBvbHlbaV0ueSkpICYmIHB0LnggPCAoKHBvbHlbal0ueCAtIHBvbHlbaV0ueCkgKiAocHQueSAtIHBvbHlbaV0ueSkpIC8gKHBvbHlbal0ueSAtIHBvbHlbaV0ueSkgKyBwb2x5W2ldLngpIHtcbiAgICAgICAgICAgICAgICBjID0gIWNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOe7mOWItlxuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd1J1bGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QoMCwgMCwgdGhpcy5vcHRpb25zLnBhZ2VQTCwgdGhpcy5ydWxlSGVpZ2h0LCBcInJnYigxOTgsMTk4LDE5OClcIik7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QodGhpcy5vcHRpb25zLndpZHRoIC0gdGhpcy5vcHRpb25zLnBhZ2VQUiwgMCwgdGhpcy5vcHRpb25zLnBhZ2VQUiwgdGhpcy5ydWxlSGVpZ2h0LCBcInJnYigxOTgsMTk4LDE5OClcIik7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNTA7IGorKykge1xuICAgICAgICAgICAgY29uc3QgZ2FudFdpZHRoID0gMjA7XG4gICAgICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgY29uc3QgeCA9IGogKiBnYW50V2lkdGg7XG4gICAgICAgICAgICBpZiAoeCA+IHRoaXMub3B0aW9ucy53aWR0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeSA9IDEwO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4LCB5IH0sIHsgeCwgeTogeSArIDEwIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmF3TGluZShwb2ludHMpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gdGhpcy5tZWFzdXJlVGV4dChqICsgXCJcIik7XG4gICAgICAgICAgICB0aGlzLmRyYXdUZXh0KGogKyAnJywgeCArIE1hdGguZmxvb3IoKGdhbnRXaWR0aCAtIHRleHRXaWR0aCkgLyAyKSwgeSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0UnVsZU1hcmtzUG9zKCk7XG4gICAgICAgIHRoaXMuaW5kZW50VGh1bWJQb2ludHMgPSB0aGlzLmRyYXdJbmRlbnRUaHVtYih0aGlzLnRodW1iWC5pbmRlbnQsIDYpO1xuICAgICAgICB0aGlzLmhhbmdUaHVtYlBvaW50cyA9IHRoaXMuZHJhd0hhbmdUaHVtYih0aGlzLnRodW1iWC5oYW5naW5nLCAyNSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlTWFya3NQb3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgc3RhcnRIaXRJbmZvIH0gPSB0aGlzLnNzO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluZGVudCA9IHBhcmEucHJvcHMuaW5kZW50O1xuICAgICAgICBjb25zdCBoYW5naW5nID0gcGFyYS5wcm9wcy5oYW5naW5nO1xuICAgICAgICBjb25zdCB7IHN0YXJ0UmVnaW9uLCBoaXREb2NJbmRleCB9ID0gdGhpcy5zcy5zdGFydEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvO1xuICAgICAgICBjb25zdCBjdXJzb3JQb3NpID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXgpO1xuICAgICAgICAvL+W9k+WJjeauteiQvVxuICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGN1cnNvclBvc2kucmVuZGVyLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/lvZPliY3mrrXokL3kvY3nva5cbiAgICAgICAgY29uc3QgcGFyYVJlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocGFyYVJlbmRlcilcbiAgICAgICAgLy/lvZPliY3mlofmoaNcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHBhcmFSZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/lvZPliY3mlofmoaPkvY3nva5cbiAgICAgICAgY29uc3QgZG9jUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIpXG4gICAgICAgIHRoaXMudGh1bWJYLmluZGVudCA9IHBhcmFSZW5kZXJQb3MueCAtIGRvY1JlbmRlclBvcy54ICsgaW5kZW50O1xuICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nID0gcGFyYVJlbmRlclBvcy54IC0gZG9jUmVuZGVyUG9zLnggKyBoYW5naW5nO1xuICAgICAgICB0aGlzLnNldFBhcmVudE1hcmtzUG9zKHBhcmFSZW5kZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VyclBhcmEoKTogUGFyYWdyYXBoRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc3M7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQYXJlbnRNYXJrc1BvcyhjaGlsZFJlbmRlcjogUmVuZGVyT2JqZWN0KTogQXJyYXk8eyBwb3M6IFBvc2l0aW9uIH0+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PHsgcG9zOiBQb3NpdGlvbiB9PiA9IFtdO1xuICAgICAgICBjb25zdCBwYXJlbnRSZW5kZXIgPSBjaGlsZFJlbmRlci5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50UmVuZGVyIHx8IHBhcmVudFJlbmRlciBpbnN0YW5jZW9mIERvY3VtZW50UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudFJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocGFyZW50UmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlcilcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHBhcmVudFJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhjZWxsUmVuZGVyKVxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0NlbGxNYXJrKHBvcy54IC0gZG9jUmVuZGVyUG9zLngsIDAsIGNlbGxSZW5kZXIucGFkZGluZy5sZWZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMuc2V0UGFyZW50TWFya3NQb3MocGFyZW50UmVuZGVyKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdDZWxsTWFyayh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QoeCwgeSwgd2lkdGgsIHRoaXMucnVsZUhlaWdodCwgJ3JnYigxOTgsMTk4LDE5OCwwLjIpJylcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDAuMztcbiAgICAgICAgICAgIHRoaXMuY3R4LnNldExpbmVEYXNoKFswLjUsIDAuNSwgMC41XSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCArIGksIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyBpLCB5ICsgdGhpcy5ydWxlSGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzY2FsZVZpZXcoKTogdm9pZCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBzY2FsZSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgLy90aGlzLmNhbnZhcy5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAnY2VudGVyIGNlbnRlcic7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY2FudmFzLnBhcmVudEVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIGlmIChzY2FsZSA9PT0gMSkge1xuICAgICAgICAgICAgcGFyZW50LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3RoaXMudmlld09wdGlvbnMuc2NhbGV9KWA7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgVmlld09wdGlvbnMsIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCwgdGV4dExpbmVSZW5kZXJNb2RlIH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcblxuLyoqXG4qIOaWh+Wtl+ihjOa4suafk+aooeW8j1xu55So5LqO5Yy75Zix5omT5Y2w5qih5byPXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blRleHRMaW5lUmVuZGVyKGVsZTogRWxlbWVudCwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zLnRleHRSb3dMaW5lTW9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlbGUgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgdGV4dExpbmVSZW5kZXJNb2RlKGVsZSwgb3B0aW9ucywgcmVuZGVyQ3R4KTtcbiAgICAgICAgcmVtZWFzdXJlUGFyZW50UmVuZGVycyhlbGUubWVhc3VyZVJlbmRlcilcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcnVuVGV4dExpbmVSZW5kZXIoZWxlLmdldENoaWxkKGkpLCBvcHRpb25zLCByZW5kZXJDdHgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1lYXN1cmVQYXJlbnRSZW5kZXJzKHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyIGFzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0KVxuICAgIHJlbWVhc3VyZVBhcmVudFJlbmRlcnMocmVuZGVyLnBhcmVudClcblxufSIsImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuXG4vKipcbiAqIOW9k+WJjeaVsOaNruWFg+WGheWuuemVv+W6puWwj+S6juacgOWwj+mVv+W6puaXtu+8jOmcgOimgeW9k+WJjeWFg+e0oOaSkeW8gOS7pei+vuWIsOacgOWwj+mVv+W6plxuICovXG5leHBvcnQgY2xhc3MgRmlsbE51bGxTcGFjZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudCB7XG4gICAgLy/pnIDopoHloavlhYXnmoTplb/luqZcbiAgICBsZW5ndGghOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdmaWxsLW51bGwnKTtcbiAgICAgICAgdGhpcy5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbE51bGxTcGFjZUVsZW1lbnQoKTtcbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgIH1cbiAgICByZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICAgIGlmIChjdHgudmlld09wdGlvbnMuc2hvd0RlYnVnKSB7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAncmVkJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn0iLCJpbXBvcnQgeyBydW5UZXh0TGluZVJlbmRlciB9IGZyb20gXCIuL2RvY3VtZW50LXRleHRsaW5lLW1vZGVcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIElubGluZUdyb3VwRWxlbWVudCxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBNb2RpZnlGbGFnLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlQmFzZVByb3BzLCBEYXRhRWxlQmFzZVRleHRQcm9wcywgVGV4dFByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgeyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kZWNvcmF0ZS9maWxsLW51bGwtc3BhY2UtaW1wbGVcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCxcbiAgICBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsXG4gICAgQnJhbmNoUmVuZGVyT2JqZWN0LFxuICAgIElubGluZUdyb3VwUmVuZGVyT2JqZWN0LFxuICAgIExlYWZSZW5kZXJPYmplY3QsXG4gICAgUmVuZGVyT2JqZWN0XG59IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmludGVyZmFjZSBJQ3V0TGluZURhdGEgeyBmaXJzdEl0ZW06IFJlbmRlck9iamVjdCB8IG51bGwsIGxhc3RJdGVtOiBSZW5kZXJPYmplY3QgfCBudWxsLCBicj86IGJvb2xlYW4gfVxuLyoqXG4gKiDmtYvph4/pmLbmrrXvvIznlJ/miJBSZW5kZXItVUlcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRNZWFzdXJlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM6IFZpZXdPcHRpb25zLCBwcml2YXRlIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKSB7IH1cblxuICAgIG1lYXN1cmVEb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnRFbGVtZW50KTogRG9jdW1lbnRSZW5kZXJPYmplY3Qge1xuICAgICAgICB0aGlzLmNsZWFyUGFpbnRDYWNoZShkb2N1bWVudCk7XG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IHRoaXMubWVhc3VyZUNvbnRyb2woZG9jdW1lbnQsIHRoaXMub3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGgpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICB0aGlzLnNldE1lYXN1cmVDb21wbGV0ZWRNb2RpZnlGbGFnKGRvY3VtZW50KTtcbiAgICAgICAgcnVuVGV4dExpbmVSZW5kZXIoZG9jdW1lbnQsIHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICByZXR1cm4gZG9jUmVuZGVyO1xuICAgIH1cblxuICAgIG1lYXN1cmVDb250cm9sKGVsZW1lbnQ6IEVsZW1lbnQsIG1heFdpZHRoOiBudW1iZXIpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5tZWFzdXJlUmVuZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQmxvY2tDb250ZW50RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gcmVuZGVyO1xuICAgICAgICAgICAgLy/mtYvph4/pmLbmrrXvvIzlj6rpmZDliLbmnIDlpKflrr3luqbljbPlj69cbiAgICAgICAgICAgIHJlbmRlci5zZXRSZW5kZXJXaWR0aChtYXhXaWR0aCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVQYXJhZ3JhcGgoZWxlbWVudCwgcmVuZGVyIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2NrQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgRWxlbWVudFV0aWwuZml4QmxvY2tDb250YWluZXIoZWxlbWVudCk7XG4gICAgICAgICAgICBsZXQgcmVuZGVyOiBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Nb2RpZnkgfHwgZWxlbWVudC5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLlRyYWNrKSB7XG4gICAgICAgICAgICAgICAgRWxlbWVudFV0aWwuZml4QmxvY2tDb250YWluZXIoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZW5kZXIgPSBlbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlci5yZWN0Lm1heFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5zZXRSZW5kZXJXaWR0aChtYXhXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlciBpcyBudWxsJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IHJlbmRlcjtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyTWF4V2lkdGggPSByZW5kZXIuZ2V0SW5uZXJNYXhXaWR0aCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQ29udGVudEVMZW1lbnQgPSBjaGlsZCBhcyBCbG9ja0NvbnRlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gdGhpcy5tZWFzdXJlQ29udHJvbChibG9ja0NvbnRlbnRFTGVtZW50LCBpbm5lck1heFdpZHRoKSBhcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVuZGVyLmFkZENoaWxkKGNoaWxkUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlJ/miJDmrrXokL0gVUkg5qCRXG4gICAgICogQHBhcmFtIHBhcmEgXG4gICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAgKi9cbiAgICBtZWFzdXJlUGFyYWdyYXBoKHBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIHJlbmRlcjogUGFyYWdyYXBoUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQocGFyYSk7XG4gICAgICAgIHRoaXMuc2V0UGFyYWdyYXBoRGVmYXVsdFRleHRQcm9wcyhwYXJhKTtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0czogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyYS5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSB0aGlzLmdldElubGluZUdyb3VwUmVuZGVySXRlbShjaGlsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5wdXNoKGNoaWxkLm1lYXN1cmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlUmVuZGVyID0gY2hpbGQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdHMucHVzaChjaGlsZC5tZWFzdXJlUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZWFzdXJlSW5uZXJQYXJhZ3JhcGgocmVuZGVyLCBwYXJhLCByZW5kZXJPYmplY3RzKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruauteiQvem7mOiupOaWh+acrOWxnuaAp1xuICAgICAqIOW9k+WJjeauteiQveWxnuS6juepuuauteiQveaXtu+8jOmUruWFpeaWh+acrOaXtu+8jOaWh+acrOeahOm7mOiupOWxnuaAp1xuICAgICAqL1xuICAgIHNldFBhcmFncmFwaERlZmF1bHRUZXh0UHJvcHMocGFyYTogUGFyYWdyYXBoRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYXN0VGV4dEdyb3VwID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHBhcmEsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgY29uc3QgZGVmYXVsdFRleHRQcm9wcyA9IGxhc3RUZXh0R3JvdXAgPyBsYXN0VGV4dEdyb3VwLnByb3BzLmNsb25lKG5ldyBUZXh0UHJvcHMoKSkgOiBFbGVtZW50VXRpbC5jcmVhdGVUZXh0UHJvcHMobnVsbCwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKHBhcmEucHJvcHMudGV4dFByb3BzICYmIHBhcmEucHJvcHMudGV4dFByb3BzLmVxdWFscyhkZWZhdWx0VGV4dFByb3BzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBhcmEucHJvcHMudGV4dFByb3BzID0gZGVmYXVsdFRleHRQcm9wcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7mrrXokL1VSeWFg+e0oO+8jOi/m+ihjOaOkuWIl1xuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIHBhcmFncmFwaCBcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0cyBcbiAgICAgKi9cbiAgICBtZWFzdXJlSW5uZXJQYXJhZ3JhcGgocmVuZGVyOiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QsIHBhcmFncmFwaDogUGFyYWdyYXBoRWxlbWVudCwgcmVuZGVyT2JqZWN0czogQXJyYXk8UmVuZGVyT2JqZWN0Pikge1xuICAgICAgICBsZXQgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgLy/ooYzlhoXmoYZcbiAgICAgICAgY29uc3QgaW5uZXJMaW5lUmVjdHM6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBjb25zdCBhZGRJbm5lckxpbmVGdW5jID0gKGxpbmVSZWN0OiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdHMucHVzaChsaW5lUmVjdCk7XG4gICAgICAgICAgICBpZiAobGluZVJlY3QucmVjdC5tYXhXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGlzICcgKyBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlubmVyTGluZVJlY3RzLmluZGV4T2YobGluZVJlY3QpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5wcm9wcy5pbmRlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggLT0gcGFyYWdyYXBoLnByb3BzLmluZGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggLT0gcGFyYWdyYXBoLnByb3BzLmhhbmdpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGFkZElubmVyTGluZUZ1bmMobGluZVJlY3QpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGxldCBjdXJySXRlbSA9IHJlbmRlck9iamVjdHNbaSsrXTtcbiAgICAgICAgY29uc3QgaW5DbG9zZUJvZHkgPSBwYXJhZ3JhcGgucGFyZW50LnR5cGUgPT09ICdib2R5JztcbiAgICAgICAgd2hpbGUgKGN1cnJJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IGxpbmVSZWN0LnJlY3QubWF4V2lkdGggYXMgbnVtYmVyO1xuICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSByZW5kZXJPYmplY3RzW2ldO1xuICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGxhc3RJdGVtLCBiciB9ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGN1cnJJdGVtLCBuZXh0SXRlbSwgbWF4V2lkdGggLSBsaW5lUmVjdC5yZWN0LndpZHRoLCBsaW5lUmVjdC5sZW5ndGggPT09IDAsIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5zcGxpY2UoaSwgMCwgbGFzdEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJySXRlbSA9IGZpcnN0SXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgICAgICBhZGRJbm5lckxpbmVGdW5jKGxpbmVSZWN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVSZWN0LmFkZENoaWxkKGN1cnJJdGVtKTtcbiAgICAgICAgICAgIGN1cnJJdGVtLnJlY3QueCA9IGxpbmVSZWN0LnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBpZiAoY3Vyckl0ZW0ucmVjdC5oZWlnaHQgPiBsaW5lUmVjdC5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QuaGVpZ2h0ID0gY3Vyckl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lUmVjdC5yZWN0LndpZHRoICs9IGN1cnJJdGVtLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBpZiAoYnIpIHtcbiAgICAgICAgICAgICAgICAvL2xpbmVSZWN0LnJlY3QubWF4V2lkdGggPSBsaW5lUmVjdC5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0ID0gcmVuZGVyLmNyZWF0ZUxpbmVSZWN0KCk7XG4gICAgICAgICAgICAgICAgYWRkSW5uZXJMaW5lRnVuYyhsaW5lUmVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJySXRlbSA9IHJlbmRlck9iamVjdHNbaSsrXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyTGluZVJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckxpbmVSZWN0ID0gaW5uZXJMaW5lUmVjdHNbaV0gYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpbm5lckxpbmVSZWN0LnJlY3QueCA9IHRoaXMuZ2V0UGFyYUxpbmVSZWN0U3RhcnRYKGlubmVyTGluZVJlY3RzLmxlbmd0aCwgaSwgcGFyYWdyYXBoLCByZW5kZXIsIGlubmVyTGluZVJlY3QpO1xuICAgICAgICAgICAgLy/pmZDliLbmnIDlpKfooYzpq5hcbiAgICAgICAgICAgIGNvbnN0IG1heExpbmVIZWlnaHQgPSBNYXRoLmZsb29yKDE0ICogMS4zKTtcbiAgICAgICAgICAgIC8vZmlsbExpbmVIZWlnaHTloavlhYXooYzpq5hcbiAgICAgICAgICAgIGxldCBmaWxsTGluZUhlaWdodCA9IE1hdGguY2VpbChpbm5lckxpbmVSZWN0LnJlY3QuaGVpZ2h0ICogKHBhcmFncmFwaC5wcm9wcy5saW5lSGVpZ2h0IC0gMSkpO1xuICAgICAgICAgICAgZmlsbExpbmVIZWlnaHQgPSBmaWxsTGluZUhlaWdodCA+IG1heExpbmVIZWlnaHQgPyBtYXhMaW5lSGVpZ2h0IDogZmlsbExpbmVIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCArIGZpbGxMaW5lSGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IE1hdGguY2VpbChmaWxsTGluZUhlaWdodCAvIDIpO1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCA9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlubmVyTGluZVJlY3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWFmID0gaW5uZXJMaW5lUmVjdC5nZXRDaGlsZChqKTtcbiAgICAgICAgICAgICAgICBsZWFmLnJlY3QueSA9IGlubmVyTGluZVJlY3QucmVjdC5oZWlnaHQgLSBwYWRkaW5nQm90dG9tIC0gbGVhZi5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vcmVuZGVyLnJlY3QuaGVpZ2h0ICs9IGxpbmVSZWN0LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgb3V0dGVyTGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgIG91dHRlckxpbmVSZWN0LnJlY3Qud2lkdGggPSBvdXR0ZXJMaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgICAgIG91dHRlckxpbmVSZWN0LmFkZENoaWxkKGlubmVyTGluZVJlY3QpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKG91dHRlckxpbmVSZWN0LCBmYWxzZSk7XG4gICAgICAgICAgICByZW5kZXIuYWRkQ2hpbGQob3V0dGVyTGluZVJlY3QpO1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluauteiQveihjOW4g+WxgOaoquWQkeWdkOagh+i1t+Wni+S9jee9ru+8jOiiq+auteiQvXRleHQtYWxpZ27lvbHlk41cbiAgICAgKi9cbiAgICBnZXRQYXJhTGluZVJlY3RTdGFydFgoY291bnRlcjogbnVtYmVyLCBwYXJhTGluZUluZGV4OiBudW1iZXIsIHBhcmFFbGVtZW50OiBQYXJhZ3JhcGhFbGVtZW50LCBwYXJhUmVuZGVyT2JqZWN0OiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QsIHBhcmFMaW5lUmVuZGVyOiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIC8v5bem5a+56b2Q77yM6aaW6KGM57yp6L+bXG4gICAgICAgIGxldCBpbmRlbnQgPSBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQ7XG4gICAgICAgIC8v5a2Y5Zyo6aG555uu56ym5Y+3XG4gICAgICAgIGlmIChwYXJhTGluZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgaW5kZW50ID0gcGFyYUVsZW1lbnQucHJvcHMuaGFuZ2luZztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYUVsZW1lbnQucHJvcHMudGV4dEFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3BhY2UgPSBwYXJhUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChyZW1haW5TcGFjZSAvIDIpICsgaW5kZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3BhY2UgPSBwYXJhUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIHJlbWFpblNwYWNlICsgaW5kZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ2p1c3RpZnknKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJVbml0Q291bnQgPSB0aGlzLmdldFJlbmRlclVuaXRMZW5ndGgocGFyYUxpbmVSZW5kZXIpO1xuICAgICAgICAgICAgaWYgKHBhcmFMaW5lSW5kZXggPT09IGNvdW50ZXIgLSAxIHx8IHJlbmRlclVuaXRDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFjZVdpZHRoID0gKDxudW1iZXI+cGFyYUxpbmVSZW5kZXIucmVjdC5tYXhXaWR0aCAtIHBhcmFMaW5lUmVuZGVyLnJlY3Qud2lkdGgpIC8gKHJlbmRlclVuaXRDb3VudCAtIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBbGlnbkp1c3RpZnkocGFyYUxpbmVSZW5kZXIsIDAsIHNwYWNlV2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGluZGVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuKTnq6/lr7npvZBcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBjb3VudCBcbiAgICAgKiBAcGFyYW0gc3BhY2VXaWR0aCBcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFsaWduSnVzdGlmeShyZW5kZXI6IFJlbmRlck9iamVjdCwgY291bnQ6IG51bWJlciwgc3BhY2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclJlbmRlciA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb3VudCArPSB0aGlzLnNldEFsaWduSnVzdGlmeShjdXJyUmVuZGVyLCBjb3VudCwgc3BhY2VXaWR0aCk7XG4gICAgICAgICAgICAgICAgY3VyclJlbmRlci5yZWN0LnggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICB3aWR0aCArPSBjdXJyUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IGNvdW50ID09PSAwID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgZm9yICg7IGkgPCByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZSA9IHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZSArIHNwYWNlV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCArPSBzcGFjZVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmrrXokL3ooYzmuLLmn5PljZXkvY3kuKrmlbAs5a2X56ym6ZyA6KaB6K6h566X5Li65a2X56ym6ZW/5bqmXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lOiBSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYUxpbmUudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFMaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gdGhpcy5nZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWIsOi+vuiuoeeul+S9jee9ricpXG4gICAgfVxuXG5cbiAgICBnZXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oaXRlbTogSW5saW5lR3JvdXBFbGVtZW50KTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGlubGluZUdyb3VwUmVuZGVyID0gaXRlbS5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICghaW5saW5lR3JvdXBSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBpdGVtLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY2hpbGQuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSBjaGlsZC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lR3JvdXBSZW5kZXIuYWRkQ2hpbGQoY2hpbGQubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZVJlbmRlciA9IHRoaXMuZ2V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmFkZENoaWxkKGl0ZW0ubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihpbmxpbmVHcm91cFJlbmRlcik7XG4gICAgICAgIC8v6ZmQ5Yi25pyA5bCP6ZW/5bqmXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgLy/pnIDopoHloavlhYVudWxsLXRleHRcbiAgICAgICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bGxUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBudWxsVGV4dC5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBudWxsVGV4dC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VUZXh0UHJvcHMgPSAoPGFueT5pdGVtKS5wcm9wcyBhcyBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICAgICAgICAgICAgICBudWxsVGV4dC50ZXh0ID0gYmFzZVRleHRQcm9wcy5udWxsVGV4dCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgYmFzZVRleHRQcm9wcy5udWxsVGV4dFByb3BzLmNsb25lKG51bGxUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudWxsVGV4dFJlbmRlciA9IG51bGxUZXh0LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgICAgICBpbmxpbmVHcm91cFJlbmRlci5pbnNlcnRDaGlsZChudWxsVGV4dFJlbmRlciwgMSk7XG4gICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSAoPGFueT5pdGVtKS5wcm9wcyBhcyBEYXRhRWxlQmFzZVByb3BzO1xuICAgICAgICAgICAgbGV0IG1pbkxlbmd0aCA9IHByb3BzLm1pbkxlbmd0aCA/PyAxNDtcbiAgICAgICAgICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCA8IDE0ID8gMTQgOiBtaW5MZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXAgJiYgaW5saW5lR3JvdXBSZW5kZXIucmVjdC53aWR0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxOdWxsU3BhY2UgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICAgICAgICAgIGZpbGxOdWxsU3BhY2UucmVjdC53aWR0aCA9IG1pbkxlbmd0aCAtIGlubGluZUdyb3VwUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgZmlsbE51bGxTcGFjZS5yZWN0LmhlaWdodCA9IGlubGluZUdyb3VwUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmluc2VydENoaWxkKGZpbGxOdWxsU3BhY2UsIGlubGluZUdyb3VwUmVuZGVyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmxpbmVHcm91cFJlbmRlcjtcbiAgICB9XG5cblxuICAgIGN1dFJlbmRlckl0ZW0ocmVuZGVyOiBSZW5kZXJPYmplY3QsIG5leHRSZW5kZXI6IFJlbmRlck9iamVjdCwgbGltaXRXaWR0aDogbnVtYmVyLCBsaW5lRW1wdHk6IGJvb2xlYW4sIGluQ2xvc2VCb2R5OiBib29sZWFuKTogSUN1dExpbmVEYXRhIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA+IGxpbWl0V2lkdGggJiYgcmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0VGV4dFJlbmRlcihyZW5kZXIsIG5leHRSZW5kZXIsIGxpbWl0V2lkdGgsIGxpbmVFbXB0eSwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRGaWxsTnVsbFJlbmRlcihyZW5kZXIsIGxpbWl0V2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlci5yZWN0LndpZHRoIDwgbGltaXRXaWR0aCB8fCBsaW5lRW1wdHkgfHwgcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ2JyJyB8fCByZW5kZXIuZWxlbWVudC50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IHJlbmRlciwgbGFzdEl0ZW06IG51bGwsIGJyOiByZW5kZXIuZWxlbWVudC50eXBlID09PSAnYnInIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dElubGluZUdyb3VwUmVuZGVySXRlbShyZW5kZXIsIGxpbWl0V2lkdGgsIGxpbmVFbXB0eSwgaW5DbG9zZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5Yiw6L6+6K6h566X6L6555WMJylcbiAgICB9XG5cbiAgICBjdXRUZXh0UmVuZGVyKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGxldCBzdW1XaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IHJlbmRlci5jbG9uZSgpIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgY3V0UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPSAwO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtV2lkdGggKz0gcmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgaWYgKHN1bVdpZHRoID4gbGltaXRXaWR0aCkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lRW1wdHkgJiYgaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lkI7nva7moIfngrnlpITnkIZcbiAgICAgICAgaSA9IHRoaXMucGF0Y2hIYW5kbGVQb3N0UHVuY3R1YXRpb24ocmVuZGVyLCBuZXh0UmVuZGVyLCBpLCBpbkNsb3NlQm9keSwgbGluZUVtcHR5KTtcbiAgICAgICAgLy/liY3nva7moIfngrnlpITnkIZcbiAgICAgICAgaSA9IHRoaXMucGF0Y2hIYW5kbGVMZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyLCBpLCBsaW5lRW1wdHkpO1xuICAgICAgICBpZiAoaSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH1cblxuICAgICAgICBjdXRSZW5kZXIudGV4dE1lYXN1cmVzID0gcmVuZGVyLnRleHRNZWFzdXJlcy5zcGxpY2UoMCwgaSk7XG4gICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIGN1dFJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyLCBicjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWJjee9ruagh+eCuSzliY3nva7moIfngrnkuI3og73lh7rnjrDlnKjmnKvlsL5cbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBpIFxuICAgICAqL1xuICAgIHByaXZhdGUgcGF0Y2hIYW5kbGVMZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIGk6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGkgPT09IDEgJiYgbGluZUVtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250YWluTGVhZGluZ1B1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbaV0/LmNoYXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gaS0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWQjue9ruagh+eCue+8jOWQjue9ruagh+eCueS4jeiDveWHuueOsOWcqOihjOmmllxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIGkgXG4gICAgICogQHBhcmFtIGxpbmVFbXB0eSBcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhdGNoSGFuZGxlUG9zdFB1bmN0dWF0aW9uKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGk6IG51bWJlciwgaW5DbG9zZUJvZHk6IGJvb2xlYW4sIGxpbmVFbXB0eTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGlmIChpID09PSByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8v57Sn6Lef552A55qE5a2X56ym5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXJTdGFydFN5bWJvbEluVGV4dFN0YXJ0KG5leHRSZW5kZXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbkNsb3NlQm9keSAmJiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpICsgMV0/LmNoYXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpID4gMSAmJiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICogQHBhcmFtIHN0ciBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnRhaW5Qb3N0UHVuY3R1YXRpb24oc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICchKSwuOjs/XX3CqMK3y4fLieKAleKAluKAmeKAneKApuKItuOAgeOAguOAg+OAheOAieOAi+OAjeOAj+OAkeOAleOAl++8ge+8gu+8h++8ie+8jO+8ju+8mu+8m++8n++8ve+9gO+9nO+9ne+9nu+/oCcuaW5kZXhPZihzdHIpID4gLTE7XG4gICAgfVxuXG4gICAgLy/mmK/lkKbljIXlkKvliY3nva7moIfngrlcbiAgICBwcml2YXRlIGNvbnRhaW5MZWFkaW5nUHVuY3R1YXRpb24oc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICfigJjigJzjgIjjgIrjgIzjgI7jgJDjgJTjgJbvvIjvvLvvvZvvv6EnLmluZGV4T2Yoc3RyKSA+IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+acrOW8gOWktOaYr+WQpuWMheWQq+WQjue9ruagh+eCuVxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250YWluZXJTdGFydFN5bWJvbEluVGV4dFN0YXJ0KHJlbmRlcjogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpblBvc3RQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzWzBdLmNoYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXRGaWxsTnVsbFJlbmRlcihyZW5kZXI6IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlcik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGlmIChsaW1pdFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXRSZW5kZXIgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICAgICAgY3V0UmVuZGVyLnJlY3Qud2lkdGggPSBsaW1pdFdpZHRoO1xuICAgICAgICAgICAgY3V0UmVuZGVyLnJlY3QuaGVpZ2h0ID0gcmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSByZW5kZXIucmVjdC53aWR0aCAtIGxpbWl0V2lkdGg7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IGN1dFJlbmRlciwgbGFzdEl0ZW06IHJlbmRlciB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IHJlbmRlciwgbGFzdEl0ZW06IG51bGwgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGM5YaF57yW57uE5YWD57Sg6LaF5Ye66KGM5YaF5Y+v55So56m66Ze077yM6ZyA6KaB5qC55o2u5Ymp5L2Z56m66Ze06ZW/5bqm6L+b6KGM5oiq5patXG4gICAgICovXG4gICAgY3V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKHJlbmRlcjogSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgZW1wdHlMaW5lOiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IHJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBsZXQgYnIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4ucmVuZGVyLmdldEl0ZW1zKCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh4ICsgY2hpbGQucmVjdC53aWR0aCA+IGxpbWl0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGxhc3RJdGVtLCBicjogY2hpbGRCciB9ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGNoaWxkLCBpdGVtc1tpICsgMV0sIGxpbWl0V2lkdGggLSB4LCBlbXB0eUxpbmUgJiYgY3V0UmVuZGVyLmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoZmlyc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXRlbXMucHVzaChsYXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pdGVtcy5zcGxpY2UoaSArIDEsIDAsIGxhc3RJdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyID0gY2hpbGRCciB8fCBicjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY3V0UmVuZGVyLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/ova/mjaLooYznrKZcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudCAmJiBjaGlsZC5lbGVtZW50LnR5cGUgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICAgICAgYnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCArIGNoaWxkLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3RJdGVtLCBicjogY2hpbGRCciB9ID0gdGhpcy5jdXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oY2hpbGQsIGxpbWl0V2lkdGggLSB4LCBlbXB0eUxpbmUgJiYgY3V0UmVuZGVyLmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoZmlyc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiciA9IGNoaWxkQnIgfHwgYnI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1dFJlbmRlci5hZGRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBjaGlsZC5yZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3V0UmVuZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBudWxsLCBsYXN0SXRlbTogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKGN1dFJlbmRlcik7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKHJlbmRlcik7XG4gICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyLmxlbmd0aCA/IHJlbmRlciA6IG51bGwsIGJyIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55rWL6YeP5a6M5q+V5ZCO55qE5YWD57Sg54q25oCBXG4gICAgICogQHBhcmFtIGVsZSBcbiAgICAgKi9cbiAgICBzZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZS5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Ob25lO1xuICAgIH1cblxuICAgIGNsZWFyUGFpbnRDYWNoZShlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgZWxlLmJlZ2luTWVhc3VyZSgpO1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUGFpbnRDYWNoZShlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5kTWVhc3VyZXMoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kTWVhc3VyZXMoZWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbiIsImltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LCBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0LCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgUmVjdCwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQsIFRhYmxlUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRSZW5kZXJDdXQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogVmlld09wdGlvbnMsIHByaXZhdGUgcmVuZGVyQ29udGV4dDogUmVuZGVyQ29udGVueHRUeXBlKSB7IH1cblxuICAgIGN1dFBhZ2UoZG9jdW1lbnRSZW5kZXI6IERvY3VtZW50UmVuZGVyT2JqZWN0LCBkb2N1bWVudEVsZW1lbnQ6IERvY3VtZW50RWxlbWVudCk6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGdWxsVmlld0RvY1JlbmRlcihkb2N1bWVudFJlbmRlciwgZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgwKSBhcyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgYm9keVJlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDEpLmNsb25lKCkgYXMgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBmb290ZXJSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgyKSBhcyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgY29tbWVudHNSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgzKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJMaW5lLCBmb290ZXJMaW5lIH0gPSBkb2N1bWVudFJlbmRlcjtcbiAgICAgICAgbGV0IGJvZHlNYXJnaW5Ub3AgPSBoZWFkZXJMaW5lICsgaGVhZGVyUmVuZGVyLnJlY3QuaGVpZ2h0ICsgNjtcbiAgICAgICAgbGV0IGJvZHlNYXJnaW5Cb3R0b20gPSBmb290ZXJMaW5lICsgZm9vdGVyUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCB7IHRvcDogYm9keVRvcCwgYm90dG9tOiBib2R5Qm90dG9tIH0gPSBkb2N1bWVudFJlbmRlci5wYWRkaW5nO1xuICAgICAgICBib2R5TWFyZ2luVG9wID0gYm9keU1hcmdpblRvcCA+IGJvZHlUb3AgPyBib2R5TWFyZ2luVG9wIDogYm9keVRvcDtcbiAgICAgICAgYm9keU1hcmdpbkJvdHRvbSA9IGJvZHlNYXJnaW5Cb3R0b20gPiBib2R5Qm90dG9tID8gYm9keU1hcmdpbkJvdHRvbSA6IGJvZHlCb3R0b207XG4gICAgICAgIGRvY3VtZW50UmVuZGVyLnBhZGRpbmcudG9wID0gYm9keU1hcmdpblRvcDtcbiAgICAgICAgZG9jdW1lbnRSZW5kZXIucGFkZGluZy5ib3R0b20gPSBib2R5TWFyZ2luQm90dG9tO1xuICAgICAgICBjb25zdCBib2R5TGltaXRSZWN0ID0gZG9jdW1lbnRSZW5kZXIuZ2V0SW5ubmVyUmVjdCgpO1xuICAgICAgICBjb25zdCBib2R5QXJyYXk6IEFycmF5PERvY3VtZW50Qm9keVJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgbGV0IHsgZW1wdHlCb2R5OiBwYWdlQm9keVJlbmRlciwgaW5uZXJSZWN0OiBib2R5SW5uZXJMaW1pdFJlY3QgfSA9IHRoaXMuY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXIsIGJvZHlMaW1pdFJlY3QpO1xuICAgICAgICBib2R5QXJyYXkucHVzaChwYWdlQm9keVJlbmRlcik7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlQm9keUhvbGRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW1wdHlCb2R5LCBpbm5lclJlY3QgfSA9IHRoaXMuY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXIsIGJvZHlMaW1pdFJlY3QpO1xuICAgICAgICAgICAgcGFnZUJvZHlSZW5kZXIgPSBlbXB0eUJvZHk7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QgPSBpbm5lclJlY3Q7XG4gICAgICAgICAgICBib2R5QXJyYXkucHVzaChwYWdlQm9keVJlbmRlcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYXBwZW5kVG9Cb2R5ID0gKGl0ZW06IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5yZWN0LnkgPSBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ICsgaXRlbS5tYXJnaW4udG9wO1xuICAgICAgICAgICAgcGFnZUJvZHlSZW5kZXIuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ICs9IGl0ZW0ucmVjdC5oZWlnaHQgKyBpdGVtLm1hcmdpbi50b3AgKyBpdGVtLm1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICAvL+S4iuS4gOS4quWFg+e0oOeahGJvdHRvbS1tYXJnaW5cbiAgICAgICAgICAgIC8vYm9keUlubmVyTGltaXRSZWN0LnByZXZNYXJnaW4gPSBpdGVtLm1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICBFbGVtZW50VXRpbC51cGRhdGVSZW5kZXJIZWlnaHRCeUlubmVyUmVjdChwYWdlQm9keVJlbmRlciwgYm9keUlubmVyTGltaXRSZWN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrUGFnZUJyZWFrKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlQm9keUhvbGRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXI6IG51bGwgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgPSBib2R5UmVuZGVyLmdldENoaWxkKGkpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgd2hpbGUgKGNsb25lQmxvY2tDb250ZW50UmVuZGVyKSB7XG4gICAgICAgICAgICBpZiAoYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodCAtIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5yZWN0LmhlaWdodCAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLm1hcmdpbi5ib3R0b20gLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4udG9wIDwgMCkge1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUF2YWlsSGVpZ2h0ID0gYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodCAtIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4uYm90dG9tIC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIubWFyZ2luLnRvcDtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWGheahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KGNsb25lQmxvY2tDb250ZW50UmVuZGVyLCBib2R5QXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJlbmRlck9iamVjdCA9IHRoaXMuY3V0UmVuZGVySXRlbShjbG9uZUJsb2NrQ29udGVudFJlbmRlciwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgIC8v6Iez5bCR5pyJ5LiA5Liq5Z2X57qn6KGM5YWD57Sg6KKr5YiH5Ymy5Ye65p2lXG4gICAgICAgICAgICAgICAgaWYgKGN1dFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0JvZHkoY3V0UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3JlYXRlQm9keUhvbGRlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcHBlbmRUb0JvZHkoY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGlmICgrK2kgPCBib2R5UmVuZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZUJsb2NrQ29udGVudFJlbmRlciA9IGJvZHlSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lQmxvY2tDb250ZW50UmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb2NQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGxldCBwYWdlWTogbnVtYmVyID0gdGhpcy5vcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGJvZHlBcnJheVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50UmVuZGVyID0gZG9jdW1lbnRFbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jUGFnZXMucHVzaChkb2N1bWVudFJlbmRlcik7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5yZWN0LnkgPSBwYWdlWTtcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVjdCA9IGRvY3VtZW50UmVuZGVyLmdldElubm5lclJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSGVhZGVyUmVuZGVyID0gaGVhZGVyUmVuZGVyLmNsb25lKCk7XG4gICAgICAgICAgICBjbG9uZUhlYWRlclJlbmRlci5yZWN0LnggPSBsaW1pdFJlY3QueDtcbiAgICAgICAgICAgIGNsb25lSGVhZGVyUmVuZGVyLnJlY3QueSA9IGhlYWRlckxpbmU7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChjbG9uZUhlYWRlclJlbmRlcik7XG4gICAgICAgICAgICBib2R5LnJlY3QueCA9IGxpbWl0UmVjdC54O1xuICAgICAgICAgICAgYm9keS5yZWN0LnkgPSBib2R5TWFyZ2luVG9wO1xuICAgICAgICAgICAgYm9keS5yZWN0LmhlaWdodCA9IGJvZHlJbm5lckxpbWl0UmVjdC5tYXhIZWlnaHQ7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChib2R5KTtcbiAgICAgICAgICAgIHBhZ2VZICs9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0ICsgdGhpcy5vcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVGb290ZXJSZW5kZXIgPSBmb290ZXJSZW5kZXIuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lRm9vdGVyUmVuZGVyLnJlY3QueCA9IGxpbWl0UmVjdC54O1xuICAgICAgICAgICAgY2xvbmVGb290ZXJSZW5kZXIucmVjdC55ID0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQgLSBib2R5TWFyZ2luQm90dG9tO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY2xvbmVGb290ZXJSZW5kZXIpO1xuICAgICAgICAgICAgLy/lrqHpmIXmqKHlvI/vvIzmt7vliqDlrqHpmIXnqpflj6NcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiBjb21tZW50c1JlbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRzQ29udGFpbmVyID0gY29tbWVudHNSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnBhZGRpbmcudG9wID0gYm9keU1hcmdpblRvcDtcbiAgICAgICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LmhlaWdodCA9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNvbW1lbnRzQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LnggPSBkb2N1bWVudFJlbmRlci5yZWN0LnggKyBkb2N1bWVudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGggKz0gdGhpcy5vcHRpb25zLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb2NQYWdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUGFnZUJyZWFrKGl0ZW06IFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoaXRlbS5lbGVtZW50ICYmIGl0ZW0uZWxlbWVudC50eXBlID09PSAncCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBpdGVtLmVsZW1lbnQgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwLnByb3BzLnBhZ2VCcmVhaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRGdWxsVmlld0RvY1JlbmRlcihkb2N1bWVudFJlbmRlcjogRG9jdW1lbnRSZW5kZXJPYmplY3QsIGRvY3VtZW50RWxlbWVudDogRG9jdW1lbnRFbGVtZW50KTogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgY29uc3QgY29tbWVudHNSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgzKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgY29tbWVudHNDb250YWluZXIgPSBjb21tZW50c1JlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC09IGNvbW1lbnRzQ29udGFpbmVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCBib2R5UmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMSkgYXMgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlbW92ZUNoaWxkKGNvbW1lbnRzUmVuZGVyKTtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNvbW1lbnRzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnBhZGRpbmcudG9wID0gYm9keVJlbmRlci5yZWN0Lnk7XG4gICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LmhlaWdodCA9IGRvY3VtZW50UmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucmVjdC54ID0gZG9jdW1lbnRSZW5kZXIucmVjdC54ICsgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGggKz0gdGhpcy5vcHRpb25zLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZG9jdW1lbnRSZW5kZXIgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3RdXG4gICAgfVxuXG4gICAgY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXI6IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCwgbGltaXRSZWN0OiBSZWN0KTogeyBlbXB0eUJvZHk6IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCwgaW5uZXJSZWN0OiBSZWN0ICYgeyBwcmV2TWFyZ2luOiBudW1iZXIgfSB9IHtcbiAgICAgICAgY29uc3QgcGFnZUJvZHlSZW5kZXIgPSBib2R5UmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldEJsb2NrRWxlbWVudExpbWl0U2l6ZShwYWdlQm9keVJlbmRlciwgbGltaXRSZWN0KTtcbiAgICAgICAgY29uc3QgYm9keUlubmVyTGltaXRSZWN0ID0gcGFnZUJvZHlSZW5kZXIuZ2V0SW5ubmVyUmVjdCgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZ1bGxQYWdlVmlldykge1xuICAgICAgICAgICAgYm9keUlubmVyTGltaXRSZWN0LmhlaWdodCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZW1wdHlCb2R5OiBwYWdlQm9keVJlbmRlciwgaW5uZXJSZWN0OiB7IC4uLmJvZHlJbm5lckxpbWl0UmVjdCwgcHJldk1hcmdpbjogMCB9IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5Ymy5riy5p+T5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlciDooqvliIflibLnmoTlr7nosaFcbiAgICAgKiBAcGFyYW0gbGltaXRIZWlnaHQgXG4gICAgICogQHBhcmFtIGFkZEZ1bmMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgY3V0UmVuZGVySXRlbShyZW5kZXI6IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCwgbGltaXRIZWlnaHQ6IG51bWJlcik6IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dFJvd1JlbmRlckl0ZW0ocmVuZGVyLCBsaW1pdEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRUYWJsZShyZW5kZXIsIGxpbWl0SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IHJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNsb25lUmVuZGVyLnNldFJlbmRlcldpZHRoKHJlbmRlci5yZWN0LndpZHRoKTtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgc3VtSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnJlbmRlci5nZXRJdGVtcygpXTtcbiAgICAgICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgICAgIGxldCBibG9ja0xpbmUgPSBjaGlsZHJlbltqXTtcbiAgICAgICAgICAgIHdoaWxlIChibG9ja0xpbmUpIHtcbiAgICAgICAgICAgICAgICAvL3N1bUhlaWdodCA9IEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsY0Jsb2NrTGluZUhlaWdodCA9IHRoaXMuZ2V0QmxvY2tMaW5lSGVpZ2h0KGJsb2NrTGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGNCbG9ja0xpbmVIZWlnaHQgKyBzdW1IZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tMaW5lIGluc3RhbmNlb2YgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdmFpbEhlaWdodCA9IGxpbWl0SGVpZ2h0IC0gc3VtSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KHJlbmRlciwgYXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3V0UmVuZGVyT2JqZWN0ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGJsb2NrTGluZSwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1dFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKGN1dFJlbmRlck9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGN1dFJlbmRlck9iamVjdC5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0xpbmUgPSBjaGlsZHJlblsrK2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGJsb2NrTGluZSk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKGJsb2NrTGluZSk7XG4gICAgICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBibG9ja0xpbmUucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJsb2NrTGluZSA9IGNoaWxkcmVuWysral07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNsb25lUmVuZGVyKTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgICAgICAgICAgaWYgKGNsb25lUmVuZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5Ymy5riy5p+T5YWD57SgXG4gICAgICogQHBhcmFtIHRiUmVuZGVyIOiiq+WIh+WJsueahOWvueixoVxuICAgICAqIEBwYXJhbSBsaW1pdEhlaWdodCBcbiAgICAgKiBAcGFyYW0gYWRkRnVuYyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBjdXRUYWJsZSh0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QsIGxpbWl0SGVpZ2h0OiBudW1iZXIpOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY2xvbmVUYlJlbmRlciA9IHRiUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBUYWJsZVJlbmRlck9iamVjdDtcbiAgICAgICAgY2xvbmVUYlJlbmRlci5zZXRSZW5kZXJXaWR0aCh0YlJlbmRlci5yZWN0LndpZHRoKTtcbiAgICAgICAgbGV0IHN1bUhlaWdodCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbLi4udGJSZW5kZXIuZ2V0SXRlbXMoKV07XG4gICAgICAgIC8v6I635Y+W6Leo6aG16ZyA6KaB6YeN5aSN5pi+56S655qE6KGMXG4gICAgICAgIGNvbnN0IGhlYWRlclJvd3MgPSB0aGlzLmdldEhlYWRlclJvd3ModGJSZW5kZXIpO1xuICAgICAgICAvL+i3qOmhteWktOeahOmrmOW6plxuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBoZWFkZXJSb3dzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIucmVjdC5oZWlnaHQsIDApO1xuICAgICAgICBpZiAoaGVhZGVySGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvcHlIZWFkZXJSb3dzID0gaGVhZGVyUm93cy5tYXAoaXRlbSA9PiBpdGVtLmNsb25lKCkpO1xuICAgICAgICAvL+iOt+WPluacgOWQjuS4gOS4quaIquaWreihjCzpnIDopoHmoLnmja7miKrmlq3ooYzliKTmlq3mnIDlkI7kuIDkuKrmiKrmlq3nmoTooYzkvY3nva5cbiAgICAgICAgY29uc3QgY3V0T2ZmUm93cyA9IHJvd3MuZmlsdGVyKHJvdyA9PiBsaW1pdEhlaWdodCA+PSByb3cucmVjdC55ICYmIGxpbWl0SGVpZ2h0IDw9IHJvdy5yZWN0LnkgKyByb3cucmVjdC5oZWlnaHQpXG4gICAgICAgICAgICAubWFwKChyb3cpID0+ICh7IHJvd0luZGV4OiAoPFRhYmxlUm93RWxlbWVudD5yb3cuZWxlbWVudCkuZ2V0SW5kZXgoKSwgcm93IH0pKVxuICAgICAgICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IHNlY29uZC5yb3dJbmRleCAtIGZpcnN0LnJvd0luZGV4KTtcbiAgICAgICAgaWYgKGN1dE9mZlJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+aXoOazleiOt+WPluaIquaWreihjCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpvaW5Sb3cgPSBjdXRPZmZSb3dzWzBdLnJvdztcbiAgICAgICAgbGV0IGogPSAwO1xuICAgICAgICBsZXQgY3VyclJvdyA9IHJvd3Nbal07XG4gICAgICAgIGNvbnN0IGN1dFJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICB3aGlsZSAoY3VyclJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93Q29udGVudEhlaWdodCA9IHRoaXMuZ2V0QmxvY2tMaW5lSGVpZ2h0KGN1cnJSb3cpO1xuICAgICAgICAgICAgaWYgKHJvd0NvbnRlbnRIZWlnaHQgKyBzdW1IZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyUm93IGluc3RhbmNlb2YgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlpJbmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxIZWlnaHQgPSBsaW1pdEhlaWdodCAtIHN1bUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQgPSBFbGVtZW50VXRpbC5pbm5lclJlY3RNYXhIZWlnaHQodGJSZW5kZXIsIGF2YWlsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3V0Um93ID0gdGhpcy5jdXRSb3dSZW5kZXJJdGVtKGN1cnJSb3csIGxpbWl0UmVuZGVySW5udGVySGVpZ2h0KSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1dFJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVUYlJlbmRlci5hZGRDaGlsZChjdXRSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGN1dFJvdy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1dFJvd3MucHVzaChjdXJyUm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyUm93ID09PSBqb2luUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyUm93ID0gcm93c1srK2pdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRiUmVuZGVyLnJlbW92ZUNoaWxkKGN1cnJSb3cpO1xuICAgICAgICAgICAgICAgIGNsb25lVGJSZW5kZXIuYWRkQ2hpbGQoY3VyclJvdyk7XG4gICAgICAgICAgICAgICAgc3VtSGVpZ2h0ICs9IGN1cnJSb3cucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgY3VyclJvdyA9IHJvd3NbKytqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpeEN1dFRhYmxlKHRiUmVuZGVyLCBjdXRSb3dzKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNsb25lVGJSZW5kZXIpO1xuICAgICAgICAvL+WtmOWcqOi3qOmhtemcgOimgemHjeWkjeaYvuekuueahOihjOWktO+8jOWImemcgOimgemHjeaWsOaUvue9ruihjOWktFxuICAgICAgICBpZiAoY29weUhlYWRlclJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb3B5SGVhZGVyUm93cy5mb3JFYWNoKChyLCBpKSA9PiB0YlJlbmRlci5pbnNlcnRDaGlsZChyLCBpKSlcbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUodGJSZW5kZXIpO1xuICAgICAgICBpZiAoY2xvbmVUYlJlbmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lVGJSZW5kZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjdXRSb3dSZW5kZXJJdGVtKHJlbmRlcjogVGFibGVSb3dSZW5kZXJPYmplY3QsIGxpbWl0SGVpZ2h0OiBudW1iZXIpOiBUYWJsZVJvd1JlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQucHJvcHMubWluSGVpZ2h0ID4gMCAmJiByZW5kZXIucmVjdC5oZWlnaHQgPiBsaW1pdEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmVSb3dSZW5kZXIgPSByZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QoKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgY2xvbmVSb3dSZW5kZXIucmVjdC53aWR0aCA9IHJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICBjbG9uZVJvd1JlbmRlci5yZWN0Lm1heFdpZHRoID0gcmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICBjb25zdCBjZWxsUmVuZGVycyA9IFsuLi5yZW5kZXIuZ2V0SXRlbXMoKV0gYXMgQXJyYXk8VGFibGVDZWxsUmVuZGVyT2JqZWN0PjtcbiAgICAgICAgY29uc3QgY3V0Q2VsbFJlbmRlcnM6IEFycmF5PFJlbmRlck9iamVjdCB8IG51bGw+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBjZWxsUmVuZGVyc1tpXTtcbiAgICAgICAgICAgIGlmIChjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWkluahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsSGVpZ2h0ID0gbGltaXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlhoXmoYblsLrlr7hcbiAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlbmRlcklubnRlckhlaWdodCA9IEVsZW1lbnRVdGlsLmlubmVyUmVjdE1heEhlaWdodChjZWxsUmVuZGVyLCBhdmFpbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3V0Q2VsbFJlbmRlciA9IHRoaXMuY3V0UmVuZGVySXRlbShjZWxsUmVuZGVyLCBsaW1pdFJlbmRlcklubnRlckhlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKGN1dENlbGxSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3V0Q2VsbFJlbmRlcnMucHVzaChjdXRDZWxsUmVuZGVyKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dENlbGxSZW5kZXJzLnB1c2gobnVsbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lQ2VsbFJlbmRlciA9IGNlbGxSZW5kZXIgYXMgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICByZW5kZXIucmVtb3ZlQ2hpbGQoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICAgICAgY3V0Q2VsbFJlbmRlcnMucHVzaChjbG9uZUNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgICAgICBpZiAoY3V0Q2VsbFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gaXRlbSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8v6KGl6b2Q5Y2V5YWD5qC8XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1dENlbGxSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNlbGxSZW5kZXIgPSBjdXRDZWxsUmVuZGVyc1tpXSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXIgPSBjZWxsUmVuZGVyc1tpXS5jbG9uZSgpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbG9uZVJvd1JlbmRlci5hZGRDaGlsZChjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVJvd1JlbmRlcik7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVSb3dSZW5kZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICog5L+u5aSNLT7lt7Lnu4/miKrmlq3nmoTlkIjlubbljZXlhYPmoLzopoHlkJHkuIvnp7vliqjliLDlkIjpgILnmoTkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJSZW5kZXIgXG4gICAgICogQHBhcmFtIGN1dFJvd3MgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaXhDdXRUYWJsZSh0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QsIGN1dFJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICBpZiAoIWN1dFJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGJFbGUgPSB0YlJlbmRlci5lbGVtZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYmVsb3dNZXJnZVJvd3MgPSBuZXcgU2V0PFRhYmxlUm93UmVuZGVyT2JqZWN0PigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiUmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0YlJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSb3cgPSB0YlJlbmRlci5nZXRDaGlsZChpICsgMSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAoIW5leHRSb3cpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY3V0Um93cy5zb21lKGl0ZW0gPT4gaXRlbSA9PT0gcm93KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdy5sZW5ndGggPT09IHRiRWxlLmdldENvbHNDb3VudCgpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0Z1bGxSb3cocm93KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsRWxlID0gY2VsbC5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBjZWxsRWxlLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmV4aXN0c0NlbGxSZW5kZXIobmV4dFJvdywgY29sSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydENvbEluZGV4ID0gdGhpcy5nZXRSb3dJbnNlcnRDZWxsSW5kZXgoY2VsbCwgbmV4dFJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRDb2xJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydENvbEluZGV4MiA9IHRoaXMuZ2V0Um93SW5zZXJ0Q2VsbEluZGV4KGNlbGwsIG5leHRSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlnKjntKfmjKjkuIvmlrnmib7liLDlj6/ku6XmlL7nva7nmoTkvY3nva4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL3Jvdy5yZW1vdmVDaGlsZChjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5pbnNlcnRDaGlsZChjZWxsLCBpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJlbG93TWVyZ2VSb3dzLmFkZChyb3cpO1xuICAgICAgICAgICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUobmV4dFJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZWxvd01lcmdlUm93cy5zaXplKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBiZWxvd01lcmdlUm93cykge1xuICAgICAgICAgICAgICAgIHRiUmVuZGVyLnJlbW92ZUNoaWxkKHJvdyk7XG4gICAgICAgICAgICAgICAgcm93LmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUodGJSZW5kZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5b2T5YmN5piv5ZCm5piv5LiA5Liq5a6M5pW055qE6KGM77yM5rKh5pyJTnVsbOWNleWFg+agvO+8jOajgOafpeW9k+WJjeaYr+WQpui/mOmcgOimgeWQkeS4i+WQiOW5tlxuICAgICAqIEBwYXJhbSByb3cgXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGVja0Z1bGxSb3cocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNlbGwucmVjdC54ICE9PSB4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBjZWxsLnJlY3Qud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggPT09IHJvdy5yZWN0LndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhpc3RzQ2VsbFJlbmRlcihyb3dSZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBjZWxsSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjZWxsRWxlID0gY2VsbFJlbmRlci5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbEVsZS5nZXRJbmRleCgpID09PSBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja0xpbmVIZWlnaHQocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCBtYXhDZWxsSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUhlaWdodCA9IHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUhlaWdodCA+IG1heENlbGxIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4Q2VsbEhlaWdodCA9IGl0ZW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1heENlbGxIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlci5yZWN0LmhlaWdodDtcbiAgICB9XG5cblxuICAgIGdldFJvd0luc2VydENlbGxJbmRleChzb3VyY2VDZWxsOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QsIGRlc3RSb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0Um93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gZGVzdFJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gY2VsbC5yZWN0O1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNlbGwucmVjdC54IDwgcmVjdC54KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdENlbGwgPSBkZXN0Um93LmdldENoaWxkKGRlc3RSb3cubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChzb3VyY2VDZWxsLnJlY3QueCA+PSBsYXN0Q2VsbC5yZWN0LnggKyBsYXN0Q2VsbC5yZWN0LndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVzdFJvdy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SGVhZGVyUm93cyh0YjogVGFibGVSZW5kZXJPYmplY3QpOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4ge1xuICAgICAgICBjb25zdCByb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93UmVuZGVyID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByb3dFbGUgPSByb3dSZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocm93RWxlLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaChyb3dSZW5kZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93cztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiXG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgTGVhZkVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBSYW5nZVV0aWwgfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuXG5cblxuXG4vKipcbiAqIOeUqOS6juWkhOeQhumAieWMuuaLluiTnVxuICovXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uT3ZlcmxheXMge1xuICAgIHByaXZhdGUgc2VsZWN0aW9uUmFuZ2UhOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsO1xuICAgIHNlbGVjdGVkU2V0czogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUpIHsgfVxuXG4gICAgZ2V0U2VsZWN0aW9uVHJlZURhdGEoKTogdm9pZCB7XG4gICAgICAgIGxldCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBjb2xsYXBzZWQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzLmNsZWFyKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIWVuZENvbnRyb2wgfHwgIWFuY2VzdG9yQ29tbW9uQ29udHJvbCkge1xuICAgICAgICAgICAgLy90aGlzLnNlbGVjdGlvblJhbmdlPy5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aD0wO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tb25SYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZSA9IGNvbW1vblJhbmdlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNldHMuY2xlYXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXhTdGFydEVsZW1lbnQgPSB0aGlzLmZpeFN0YXJ0U2VsZWN0aW9uRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICBzdGFydENvbnRyb2wgPSBmaXhTdGFydEVsZW1lbnQuZWxlbWVudDtcbiAgICAgICAgc3RhcnRPZmZzZXQgPSBmaXhTdGFydEVsZW1lbnQub2Zmc2V0O1xuICAgICAgICBjb25zdCBmaXhFbmRFbGVtZW50ID0gdGhpcy5maXhFbmRTZWxlY3Rpb25FbGVtZW50KGVuZENvbnRyb2wsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgZW5kQ29udHJvbCA9IGZpeEVuZEVsZW1lbnQuZWxlbWVudDtcbiAgICAgICAgZW5kT2Zmc2V0ID0gZml4RW5kRWxlbWVudC5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKGNvbW1vblJhbmdlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IGNvbW1vblJhbmdlO1xuICAgICAgICB0aGlzLmNvbnZlcnRTZWxlY3RSYW5nZVRvU2V0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZSA9IGNvbW1vblJhbmdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFNlbGVjdFJhbmdlVG9TZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzLmNsZWFyKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICBTZWxlY3Rpb25PdmVybGF5cy5hZGRUb1NldHModGhpcy5zZWxlY3Rpb25SYW5nZSwgdGhpcy5zZWxlY3RlZFNldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFkZFRvU2V0cyhyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBzZXQ6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+KTogdm9pZCB7XG4gICAgICAgIHNldC5zZXQocmFuZ2UudGFyZ2V0LCByYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy/ljZXlhYPmoLzlhajpg6jpgInkuK3mlYjmnpzvvIzljZXlhYPmoLzmlbTkuKrmi5bok53ljbPlj69cbiAgICAgICAgICAgIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCAmJiByYW5nZS50YXJnZXQudHlwZSA9PT0gJ3RiYycpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkVG9TZXRzKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0sIHNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmt7vliqDliLDmibnms6jpm4blkIhcbiAgICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgICogQHBhcmFtIHNldCBcbiAgICAgKi9cbiAgICBzdGF0aWMgYWRkVG9Db21tZW50U2V0cyhyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBzZXQ6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+KTogdm9pZCB7XG4gICAgICAgIHNldC5zZXQocmFuZ2UudGFyZ2V0LCByYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRUb0NvbW1lbnRTZXRzKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5baV0sIHNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mraPlvIDlp4vpgInljLrlhoXlrrlcbiAgICAgKiAxLuWmguaenOW9k+WJjemAieWMuuW8gOWni+S6juihqOagvOWGheWuue+8jOe7k+adn+mAieWMuuS9jeS6juihqOagvOWklu+8jOWImemcgOimgeW8gOWni+mAieWMuuWGheWuuemHjeWumuS9jeWIsOWNleWFg+agvOesrOS4gOS4quWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgZml4U3RhcnRTZWxlY3Rpb25FbGVtZW50KGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50KTogeyBlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmICghKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobG9va3VwUGFyZW50Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghbG9va3VwUGFyZW50Q2VsbC5wYXJlbnQgfHwgIWxvb2t1cFBhcmVudENlbGwucGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRUYkluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGxvb2t1cFBhcmVudENlbGwucGFyZW50LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPCBsb29rdXBQYXJlbnRUYkluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0ZpcnN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KGxvb2t1cFBhcmVudENlbGwucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dGaXJzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWFg+e0oOWkhOS6juihqOagvOWGheWFg+e0oO+8jOacquiDveWumuS9jeWIsOW9k+WJjeWNleWFg+agvOmmluS4quWFg+e0oCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiByb3dGaXJzdExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQsIG9mZnNldCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruato+W8gOWni+mAieWMuuWGheWuuVxuICAgICAqIDEu5aaC5p6c5b2T5YmN6YCJ5Yy65byA5aeL5LqO6KGo5qC85YaF5a6577yM57uT5p2f6YCJ5Yy65L2N5LqO6KGo5qC85aSW77yM5YiZ6ZyA6KaB5byA5aeL6YCJ5Yy65YaF5a656YeN5a6a5L2N5Yiw5Y2V5YWD5qC856ys5LiA5Liq5YWD57SgXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaXhFbmRTZWxlY3Rpb25FbGVtZW50KGVsZW1lbnQ6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgYW5jZXN0b3JDb21tb25Db250cm9sOiBCcmFuY2hFbGVtZW50KTogeyBlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmICghKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobG9va3VwUGFyZW50Q2VsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb2t1cFBhcmVudFRiSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQucGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2xJbmRleCA8IGxvb2t1cFBhcmVudFRiSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KGxvb2t1cFBhcmVudENlbGwucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dMYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0xhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChsb29rdXBQYXJlbnRDZWxsLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWFg+e0oOWkhOS6juihqOagvOWGheWFg+e0oO+8jOacquiDveWumuS9jeWIsOW9k+WJjeWNleWFg+agvOmmluS4quWFg+e0oCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiByb3dMYXN0TGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZWxlbWVudCwgb2Zmc2V0IH07XG4gICAgfVxuXG59IiwiaW1wb3J0IHsgRWxlbWVudE1lYXN1cmUgfSBmcm9tIFwiLi9lbGVtZW50LW1lYXN1cmVcIjtcbmltcG9ydCB7IEVsZW1lbnRQYWludCB9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IEVsZW1lbnRSZW5kZXJDdXQgfSBmcm9tIFwiLi9lbGVtZW50LXJlbmRlci1jdXRcIjtcbmltcG9ydCB7IERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvbk92ZXJsYXlzIH0gZnJvbSBcIi4vc2VsZWN0aW9uLW92ZXJsYXlzXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRFbGVtZW50LCBDb21tZW50UmFuZ2VTdGF0dXMgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFBhaW50IHtcbiAgICBlbGVtZW50TWVhc3VyZTogRWxlbWVudE1lYXN1cmU7XG4gICAgZWxlbWVudFJlbmRlckN1dDogRWxlbWVudFJlbmRlckN1dDtcbiAgICBlbGVtZW50UGFpbnQ6IEVsZW1lbnRQYWludDtcbiAgICBkb2NQYWdlcyE6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PjtcbiAgICBkb2NDb250YWluZXIhOiBEb2N1bWVudENvbnRhaW5lclJlbmRlcjtcbiAgICBjb21tc0NvbnRhaW5lciE6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwcml2YXRlIHJlbmRlckNvbnRleHQ6IFJlbmRlckNvbnRlbnh0VHlwZSwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgc2VsZWN0ZWRTZXRzOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPikge1xuICAgICAgICB0aGlzLmVsZW1lbnRNZWFzdXJlID0gbmV3IEVsZW1lbnRNZWFzdXJlKHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlbmRlckN1dCA9IG5ldyBFbGVtZW50UmVuZGVyQ3V0KHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFBhaW50ID0gbmV3IEVsZW1lbnRQYWludCh0aGlzLnZpZXdPcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpO1xuICAgIH1cblxuICAgIHJlUGFnZXMoKTogdm9pZCB7XG4gICAgICAgIC8vIGNvbnN0IGRlc3Ryb3lJdGVtcyA9IFt0aGlzLmRvY0NvbnRhaW5lciwgdGhpcy5jb21tc0NvbnRhaW5lcl07XG4gICAgICAgIC8vIGRlc3Ryb3lJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbT8uZGVzdHJveSgpKVxuICAgICAgICAvL1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4geyBkZXN0cm95SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0/LmRlc3Ryb3koKSkgfSk7XG4gICAgICAgIGlmICghdGhpcy5kb2NDdHguZG9jdW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIgPSBuZXcgRG9jdW1lbnRDb250YWluZXJSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUucmVuZGVyQ29udGFpbmVyID0gdGhpcy5kb2NDb250YWluZXI7XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3Qud2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICAgICAgLy8gY29uc29sZS50aW1lKCfmjpLniYjorqHml7YnKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRSZW5kZXIgPSB0aGlzLmVsZW1lbnRNZWFzdXJlLm1lYXN1cmVEb2N1bWVudCh0aGlzLmRvY0N0eC5kb2N1bWVudCk7XG4gICAgICAgIHRoaXMuY29tbXNDb250YWluZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgzKSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgaWYgKHRoaXMuY29tbXNDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbXNDb250YWluZXIgPSB0aGlzLmNvbW1zQ29udGFpbmVyLmNsb25lKCkgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoJ+aOkueJiOiuoeaXticpO1xuICAgICAgICAvL2NvbnNvbGUudGltZSgn5pat6aG16K6h5pe2Jyk7XG4gICAgICAgIGNvbnN0IGRvY1BhZ2VzID0gdGhpcy5lbGVtZW50UmVuZGVyQ3V0LmN1dFBhZ2UoZG9jdW1lbnRSZW5kZXIsIHRoaXMuZG9jQ3R4LmRvY3VtZW50KTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWVFbmQoJ+aWremhteiuoeaXticpO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5hZGRQYWdlcyhkb2NQYWdlcyk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0aGlzLmRvY0NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuc2V0Q29tbVJhbmdlTWFyaygpO1xuICAgICAgICB0aGlzLmRvY1BhZ2VzID0gZG9jUGFnZXM7XG5cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluiuvue9ruaWh+aho+WuueWZqOeahOaAu+mrmOW6plxuICAgICAqL1xuICAgIGdldERvY3VtZW50Q29udGFpbmVySGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRvY1BhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5kb2NQYWdlc1t0aGlzLmRvY1BhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFBhZ2VZID0gbGFzdFBhZ2UucmVjdC55ICsgbGFzdFBhZ2UucmVjdC5oZWlnaHQgKyB0aGlzLnZpZXdPcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RQYWdlWSArICh0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgKiAodGhpcy52aWV3T3B0aW9ucy5zY2FsZSAtIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmcmVzaFZpZXcocmVQYWludCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCforqHml7YnKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UGFpbnQuZHJhd1BhZ2VzKHRoaXMuZG9jQ29udGFpbmVyLCB0aGlzLnNlbGVjdGVkU2V0cywgdGhpcy5jb21tc0NvbnRhaW5lciwgcmVQYWludCk7XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCforqHml7YnKTtcblxuICAgIH1cblxuICAgIGdldERvY1BhZ2VzKCk6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY1BhZ2VzO1xuICAgIH1cblxuICAgIGdldERvY0NvbnRhaW5lcigpOiBEb2N1bWVudENvbnRhaW5lclJlbmRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKioqXG4gICAgICog6K6+572u5a6h6ZiF5Yy66Ze05qC35byP55eV6L+5XG4gICAgICovXG4gICAgc2V0Q29tbVJhbmdlTWFyaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjY2UgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPigpO1xuICAgICAgICBjb25zdCBjb21tZW50UmFuZ2VTdGF0dXM6IEFycmF5PENvbW1lbnRSYW5nZVN0YXR1cz4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50ID0gY2NlLmdldENoaWxkKGkpIGFzIENvbW1Db250ZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRNYXJrLCBlbmRNYXJrLCBwcm9wczogeyBpZCB9LCBmb2N1cyB9ID0gY29tbUNvbnRlbnQ7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBEb2N1bWVudFNlbGVjdGlvbi5nZXRBbmNlc3RvckNvbW1vbkNvbnRyb2woc3RhcnRNYXJrLCBlbmRNYXJrKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRNYXJrLCAwLCBlbmRNYXJrLCAxLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgU2VsZWN0aW9uT3ZlcmxheXMuYWRkVG9Db21tZW50U2V0cyhjb21tb25SYW5nZSwgc2V0KTtcbiAgICAgICAgICAgIGNvbW1lbnRSYW5nZVN0YXR1cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21tQ29udGVudCxcbiAgICAgICAgICAgICAgICByYW5nZTogY29tbW9uUmFuZ2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lci5zZWxlY3RlZFNldCA9IHNldDtcbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXMgPSBjb21tZW50UmFuZ2VTdGF0dXM7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRWxlbWVudEZhY3RvcnksIExlYWZFbGVtZW50LCByZWFkRWxlbWVudFByb3BzLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENoZWNrQm94UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcblxuZXhwb3J0IGNsYXNzIENoZWNrQm94RWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PENoZWNrQm94UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBDaGVja0JveFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY2tiJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ2hlY2tCb3hQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRDbGljaycsIChldnQpID0+IHsgdGhpcy5jaGFuZ2VTdGF0ZShldnQpIH0pO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogQ2hlY2tCb3hSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQ2hlY2tCb3hSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKGU6IEVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLmlzQ2hlY2tlZCA9ICF0aGlzLnByb3BzLmlzQ2hlY2tlZDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2NrYicsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvbmUoKTogQ2hlY2tCb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ2hlY2tCb3hFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuICAgIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICdja2InO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoZWNrQm94RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENoZWNrQm94UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdja2InO1xuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8Q2hlY2tCb3hQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogQ2hlY2tCb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICBjb25zdCBja2JFbGVtZW50ID0gbmV3IENoZWNrQm94RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBja2JQcm9wcyA9IGNrYkVsZW1lbnQucHJvcHM7XG4gICAgICAgIGNrYlByb3BzLnNpemUgPSBwcm9wcz8uc2l6ZSA/PyAxNDtcbiAgICAgICAgY2tiUHJvcHMuaXNDaGVja2VkID0gcHJvcHM/LmlzQ2hlY2tlZCA/PyBmYWxzZTtcbiAgICAgICAgY2tiUHJvcHMuZ3JvdXBOYW1lID0gcHJvcHM/Lmdyb3VwTmFtZSA/PyBudWxsO1xuICAgICAgICByZXR1cm4gY2tiRWxlbWVudDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGVja0JveFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8Q2hlY2tCb3hFbGVtZW50PiB7XG4gICAgcmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd0NoZWNrQm94KHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55LCB0aGlzLmVsZW1lbnQucHJvcHMuc2l6ZSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5pc0NoZWNrZWQpO1xuICAgIH1cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ2hlY2tCb3hSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBQb3NpdGlvbiwgcmVhZEVsZW1lbnRQcm9wcywgUmVjdCwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENvbW1Db250ZW50UHJvcHMsIFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCJcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBDb21tZW50RWxlbWVudCB9IGZyb20gXCIuL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IHsgaWQ6IHN0cmluZyB9PiBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxQPntcbiAgICBzdGFydE1hcmshOiBDb21tZW50RWxlbWVudDtcbiAgICBlbmRNYXJrITogQ29tbWVudEVsZW1lbnQ7XG4gICAgZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnTG9zdEN1cnNvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxFIGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudD4gZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDxFPiB7XG4gICAgY29tbU1hcmtSZW5kZXIhOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwb3M6IFBvc2l0aW9uIH07XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tQ29udGVudEVsZW1lbnQgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VFbGVtZW50PENvbW1Db250ZW50UHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJjb21tLWNvbnRlbnRcIik7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ29tbUNvbnRlbnRQcm9wcygpO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1Db250ZW50UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucGFkZGluZy5sZWZ0ID0gMTQ7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLnRvcCA9IDI0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHsgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucykgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuI3mlK/mjIEnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tQ29udGVudFJlbmRlck9iamVjdCBleHRlbmRzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxDb21tQ29udGVudEVsZW1lbnQ+IHtcbiAgICBiZWdpblJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGxldCBib3JkZXJDb2xvciA9IHRoaXMuZWxlbWVudC5mb2N1cyA/ICcjZmE4YzE2JyA6ICcjZmZkNTkxJztcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBib3JkZXJDb2xvcik7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCA4LCB0aGlzLnJlY3QuaGVpZ2h0LCAnIzg3MTQwMCcpXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+iOt+WPluWuoemYheagh+iusOeahOe7mOWItuWdkOagh1xuICAgICAgICBsZXQgY29tbU1hcmtQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCB7IHg6IDAsIHk6IC1jdHgudmlld09wdGlvbnMudHJhbnNsYXRlWSB9KTtcbiAgICAgICAgY29uc3QgY29tbU1hcmtMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIGNvbW1NYXJrUG9zKTtcbiAgICAgICAgY29tbU1hcmtQb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlciwgeyB4OiAwLCB5OiAtY3R4LnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfSk7XG4gICAgICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBjb21tTWFya1Bvcy54IC0gZG9jUmVuZGVyUG9zLnggLSBkb2NSZW5kZXIucGFkZGluZy5sZWZ0O1xuICAgICAgICBjb25zdCBtYXJnaW5SaWdodCA9IGN0eC52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggLSBtYXJnaW5MZWZ0IC0gZG9jUmVuZGVyLnBhZGRpbmcucmlnaHQgKiAyO1xuICAgICAgICBjdHgub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbY29tbU1hcmtQb3MsIHsgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LCB5OiBjb21tTWFya1Bvcy55IH1dLCBbMSwgMV0sICdyZWQnKTtcbiAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5kcmF3RGFzaExpbmUoW3sgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LCB5OiBjb21tTWFya1Bvcy55IH0sIHBvc2l0aW9uXSwgWzEsIDFdLCAncmVkJyk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJUaXRsZShjdHgsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvcFBhZGRpbmcgPSAyNDtcbiAgICAgICAgY29uc3QgeyBwcm9wcyB9ID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDEyO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIGNvbnN0IGNyZWF0ZURhdGUgPSBtb21lbnQocHJvcHMuY3JlYXRlRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcbiAgICAgICAgY29uc3QgY29tbVRpdGxlID0gYCR7cHJvcHMuY3JlYXRlTmFtZX06JHtjcmVhdGVEYXRlfWA7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbW1UaXRsZSwgdGV4dFByb3BzKTtcbiAgICAgICAgY29uc3QgcmVjdDogUmVjdCA9IHsgeDogcG9zaXRpb24ueCArIHRoaXMucGFkZGluZy5sZWZ0LCB5OiBwb3NpdGlvbi55LCB3aWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQ6IDAsIG1heFdpZHRoOiAwIH1cbiAgICAgICAgcmVjdC55ICs9ICh0b3BQYWRkaW5nIC0gcmVjdC5oZWlnaHQpIC8gMjtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGNvbW1UaXRsZSwgdGV4dFByb3BzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICAgIH1cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tQ29udGVudFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmcuY2xvbmUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWVudFJhbmdlU3RhdHVzIHtcbiAgICByYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBjb21tQ29udGVudDogQ29tbUNvbnRlbnRCYXNlRWxlbWVudFxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWVudENvbnRlbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8Q29tbUNvbnRlbnRQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJjb21tLWNvbnRlbnRcIjtcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPENvbW1Db250ZW50UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgQ29tbUNvbnRlbnRQcm9wcztcbiAgICAgICAgY29uc3QgY29tbWVudEVsZSA9IG5ldyBDb21tQ29udGVudEVsZW1lbnQoKTtcbiAgICAgICAgY29tbWVudEVsZS5wcm9wcy5pZCA9IHByb3BzLmlkO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmNyZWF0ZURhdGUgPSBwcm9wcy5jcmVhdGVEYXRlO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmNyZWF0ZUlkID0gcHJvcHMuY3JlYXRlSWQ7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuY3JlYXRlTmFtZSA9IHByb3BzLmNyZWF0ZU5hbWU7XG4gICAgICAgIHJldHVybiBjb21tZW50RWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBDb21tUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50RWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PENvbW1Qcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY29tbScpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ29tbVByb3BzKCk7XG4gICAgfVxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQ29tbWVudFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSAwO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSAxNDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzfG51bGwge1xuICAgICAgICBpZih0aGlzLmlzRGVjb3JhdGUpe1xuICAgICAgICAgICAgcmV0dXJuICBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvbmUoKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWVudFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8Q29tbWVudEVsZW1lbnQ+IHtcbiAgICByZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGlmICghY3R4LnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHRoaXMsIHsgeDogcG9zaXRpb24ueCwgeTogcG9zaXRpb24ueSB9KTtcbiAgICAgICAgY29uc3QgY29sb3IgPSAnI2ZmNGQ0Zic7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54IC0gMSwgcGFyYUxpbmVQb3MueSwgMiwgcGFyYUxpbmVQb3MuaGVpZ2h0LCBjb2xvcilcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbWVudFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENvbW1Qcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJjb21tXCI7XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxDb21tUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIENvbW1Qcm9wcztcbiAgICAgICAgZWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGVsZS5wcm9wcy5tYXJrVHlwZSA9IHByb3BzLm1hcmtUeXBlO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IERvY01vZGUsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlQ2hlY2tQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TGVhZiB9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50Q2hlY2sgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZUNoZWNrUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWNoZWNrJyk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdkZWZhdWx0J1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVDaGVja1Byb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+KCdFbGVtZW50Q29udGV4dE1lbnUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWNvbjogJ1NldHRpbmdzJywgY2FwdGlvbjogJ+WGheWuueaOp+WItuiuvue9ricsIGV2ZW50T2JqOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50Q2xpY2snLCAoZXZ0KSA9PiB7IHRoaXMub25DbGlja0hhbmRsZXIoZXZ0KSB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFFbGVtZW50Q2hlY2tSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIG9uQ2xpY2tIYW5kbGVyKGV2dDogRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5lZGl0YWJsZSAmJiBldnQuY3R4LnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOW9k+WJjeaYr+WNlemAieahhuW5tuS4lOW9k+WJjeW3sue7j+iiq+mAieS4re+8jOWImeS4jeS9nOWkhOeQhlxuICAgICAgICBpZiAodGhpcy5wcm9wcy5ncm91cE5hbWUgJiYgIXRoaXMucHJvcHMubXVsdGlTZWxlY3QgJiYgdGhpcy5wcm9wcy5jaGVja2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcbiAgICAgICAgY29uc3QgZG9jQ3R4ID0gZXZ0LmN0eDtcbiAgICAgICAgLy/lpI3pgInmoYblrZjlnKjnu4Tml7bvvIzlubbkuJTkuLrljZXpgInmqKHlvI/ml7ZcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZ3JvdXBOYW1lICYmICF0aGlzLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBja2JzID0gZG9jQ3R4LmdldEN1cnJlbnRDdHgodGhpcykuZ2V0Q2hlY2tCb3hMaXN0KHRoaXMucHJvcHMuZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIGNrYnMuZm9yRWFjaChpdGVtID0+IHsgaWYgKGl0ZW0gIT09IHRoaXMpIHsgaXRlbS5zZXRWYWx1ZSghdGhpcy5wcm9wcy5jaGVja2VkKSB9IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudENoZWNrIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRDaGVjaygpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRydWVWYWx1ZSA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gdHJ1ZVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hlY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIHJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBEYXRhRWxlbWVudENoZWNrO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd0NoZWNrQm94KHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55LCBlbGVtZW50LnByb3BzLnNpemUsIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3UmFkaW9Cb3gocG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnksIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLmNoZWNrZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgLy90aGlzLnJlbmRlckNrYkRlY29yZWF0ZShjdHgsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuWkjemAieahhuijhemlsOespuWPt1xuICAgICAqL1xuICAgIHJlbmRlckNrYkRlY29yZWF0ZShjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9zaXRpb247XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5yZWN0O1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSA1O1xuICAgICAgICBjb25zdCBwYWludENvbG9yID0gJyMwMDUwYjMnO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogeCArIGxpbmVXaWR0aCwgeSB9LCB7IHgsIHkgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0IH0sIHsgeDogeCArIGxpbmVXaWR0aCwgeTogeSArIGhlaWdodCB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgIHggKz0gd2lkdGg7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiB4IC0gbGluZVdpZHRoLCB5IH0sIHsgeCwgeSB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4OiB4IC0gbGluZVdpZHRoLCB5OiB5ICsgaGVpZ2h0IH1dLCAxLCBwYWludENvbG9yKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZUNoZWNrUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtY2hlY2tcIlxuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUNoZWNrUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZUNoZWNrUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudENoZWNrKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlQ2hlY2tQcm9wcywgcHJvcHM6IERhdGFFbGVDaGVja1Byb3BzKTogRGF0YUVsZUNoZWNrUHJvcHMge1xuICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHM6IERhdGFFbGVDaGVja1Byb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5jaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcbiAgICAgICAgZGF0YUVsZVByb3BzLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICBkYXRhRWxlUHJvcHMuZ3JvdXBOYW1lID0gcHJvcHMuZ3JvdXBOYW1lO1xuICAgICAgICBkYXRhRWxlUHJvcHMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdCA/PyBmYWxzZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmNoZWNrZWRWYWx1ZSA9IHByb3BzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVQcm9wcztcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVEYXRlUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudElubGluZUdyb3VwLCBEYXRhRWxlbWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnREYXRlIGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxEYXRhRWxlRGF0ZVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1kYXRlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZURhdGVQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50RGF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50RGF0ZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50RGF0ZSgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IHRoaXMuc3RhcnREZWNvcmF0ZSAmJiBjaGlsZCAhPT0gdGhpcy5lbmREZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZChjaGlsZC5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cblxuICAgIHNldFZhbHVlKHZhbDogRGF0ZSB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnByb3BzLmZvcm1hdCA/PyAnWVlZWS1NTS1ERCc7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodmFsLCBmb3JtYXQpO1xuICAgICAgICBpZiAoIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0U3RyID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gZm9ybWF0U3RyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLmNsZWFySW5uZXJJdGVtcygpO1xuICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gZm9ybWF0U3RyO1xuICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcylcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnByb3BzLmZvcm1hdCA/PyAnWVlZWS1NTS1ERCc7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodGhpcy5nZXRWYWx1ZSgpLCBmb3JtYXQpO1xuICAgICAgICBpZiAoIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+aXpeacn+agvOW8j+S4jeato+ehric7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudERhdGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudERhdGU+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudERhdGUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERhdGFFbGVtZW50RGF0ZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudERhdGVGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZURhdGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWVsZS1kYXRlXCJcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlRGF0ZVByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnREYXRlKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlRGF0ZVByb3BzLCBwcm9wczogRGF0YUVsZURhdGVQcm9wcyk6IERhdGFFbGVEYXRlUHJvcHMge1xuICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHM6IERhdGFFbGVEYXRlUHJvcHMgPSBkZXN0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGRhdGFFbGVQcm9wcywgcHJvcHMpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5taW5WYWx1ZSA9IHByb3BzLm1pblZhbHVlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubWF4VmFsdWUgPSBwcm9wcy5tYXhWYWx1ZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLm51bGxUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy52YWx1ZVRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMudmFsdWVUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBkYXRhRWxlUHJvcHM7XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBJbWdMb2FkU3RhdHVzLCBMZWFmRWxlbWVudCwgUG9zaXRpb24sIHJlYWRFbGVtZW50UHJvcHMsIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZUltYWdlUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudExlYWYgfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEltYWdlIGV4dGVuZHMgRGF0YUVsZW1lbnRMZWFmPERhdGFFbGVJbWFnZVByb3BzPiB7XG4gICAgLy9wcm9wczogRGF0YUVsZUltYWdlUHJvcHM7XG4gICAgc3RhdHVzOiBJbWdMb2FkU3RhdHVzID0gJ25vJztcbiAgICByZXNpemVhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWltZycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVJbWFnZVByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnbW92ZSdcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy53aWR0aCArIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuaGVpZ2h0ICsgMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RhdGEtZWxlLWltZycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50SW1hZ2UoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICdsb2FkaW5nJztcbiAgICAgICAgICAgIGNvbnN0IG9uQ2FsbGJhY2sgPSAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5kb2NDdHguaW1hZ2VMb2FkZXIubG9hZEltYWdlKHRoaXMucHJvcHMuc3JjLCBvbkNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5zcmMgPSB2YWwgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNyYztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFJbWdFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50SW1hZ2U7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gZGF0YUltZ0VsZW1lbnQucHJvcHM7XG4gICAgICAgIGlmIChkYXRhSW1nRWxlbWVudC5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIGRhdGFJbWdFbGVtZW50LmxvYWRJbWFnZShjdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhSW1nRWxlbWVudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVNvdXJjZSA9IGN0eC5kb2NDdHguaW1hZ2VMb2FkZXIuZ2V0SW1hZ2UocGljUHJvcHMuc3JjKTtcbiAgICAgICAgICAgIGlmICghaW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGljUHJvcHMuYm9yZGVyID09PSAnYWxsJykge1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ2JsYWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd0ltYWdlKGltYWdlU291cmNlLCAwLCAwLCBpbWFnZVNvdXJjZS5uYXR1cmFsV2lkdGgsIGltYWdlU291cmNlLm5hdHVyYWxIZWlnaHQsIHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55ICsgMiwgcGljUHJvcHMud2lkdGgsIHBpY1Byb3BzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICBsZXQgeyB4LCB5IH0gPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgY29uc3QgbGluZVdpZHRoID0gNTtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50Q29sb3IgPSAnIzAwNTBiMyc7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogeCArIGxpbmVXaWR0aCwgeSB9LCB7IHgsIHkgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0IH0sIHsgeDogeCArIGxpbmVXaWR0aCwgeTogeSArIGhlaWdodCB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgICAgICB4ID0geCArIHdpZHRoO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHggLSBsaW5lV2lkdGgsIHkgfSwgeyB4LCB5IH0sIHsgeCwgeTogeSArIGhlaWdodCB9LCB7IHg6IHggLSBsaW5lV2lkdGgsIHk6IHkgKyBoZWlnaHQgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFJbWFnZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvczogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zLngsIHBvcy55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICcjMTg5MGZmJywgMC41KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShjdHgsIHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCArIHdpZHRoLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLngsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShjdHgsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1Jlc2l6ZUNpcmNsZShjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3R4TmF0aXZlID0gY3R4LmNvbnRlbnRDb250ZXh0LmN0eDtcbiAgICAgICAgY3R4TmF0aXZlLnNhdmUoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGxTdHlsZSA9ICcjNjljMGZmJztcbiAgICAgICAgY3R4TmF0aXZlLmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuYXJjKHgsIHksIE1hdGguZmxvb3IoNCAvIDUgKiA0KSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjdHhOYXRpdmUuY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5yZXN0b3JlKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEltZ0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlSW1hZ2VQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RhdGEtZWxlLWltZyc7XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEYXRhRWxlSW1hZ2VQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlSW1hZ2VQcm9wcztcbiAgICAgICAgY29uc3QgcGljID0gbmV3IERhdGFFbGVtZW50SW1hZ2UoKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhwaWMucHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9waWMucHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vcGljLnByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL3BpYy5wcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9waWMucHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIHBpYy5wcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBwaWMucHJvcHMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICBwaWMucHJvcHMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICBwaWMucHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICByZXR1cm4gcGljO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCByZWFkRWxlbWVudFByb3BzLCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVMaXN0UHJvcHMsIERhdGFFbGVCYXNlVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFNlcmlhbGl6ZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudExpc3QgZXh0ZW5kcyBEYXRhRWxlbWVudElubGluZUdyb3VwPERhdGFFbGVMaXN0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlTGlzdFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtbGlzdCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVMaXN0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRWxlbWVudExpc3RSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzICYgYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudExpc3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudExpc3QoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSB0aGlzLnN0YXJ0RGVjb3JhdGUgJiYgY2hpbGQgIT09IHRoaXMuZW5kRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQoY2hpbGQuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gdmFscy5qb2luKCc7JykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRoaXMuY2xlYXJJbm5lckl0ZW1zKCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB2YWxzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS5jb2RlID09PSB2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy52YWx1ZVRleHRQcm9wcy5jbG9uZSh2YWx1ZVRleHQucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFN5bWJvbCA9IGkgPCB2YWxzLmxlbmd0aCAtIDEgPyAnOycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRleHQudGV4dCA9IG9wdGlvbi52YWx1ZSArIHNwbGl0U3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCflvZPliY3kuIvmi4nmoYbmmK/ljZXpgInmqKHlvI8s5LiN6IO95Lyg5YWl5aSa5Liq5YC8JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHZhbHNbMF07XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0uY29kZSA9PT0gdmFsKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVRleHQudGV4dCA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJlZ2luTWVhc3VyZSgpO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRoaXMpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc3BsaXQoJzsnKTtcbiAgICAgICAgY29uc3QgdmFsdWVDb2RlOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWVJdGVtIG9mIHZhbHVlSXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWVJdGVtKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNvZGUucHVzaChvcHRpb24uY29kZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDb2RlLnB1c2gob3B0aW9uICsgJycpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlQ29kZS5qb2luKCc7JylcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TGlzdFJlbmRlck9iamVjdCBleHRlbmRzIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0PERhdGFFbGVtZW50TGlzdD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IERhdGFFbGVtZW50TGlzdCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRMaXN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TGlzdEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlTGlzdFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLWxpc3RcIlxuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUxpc3RQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlTGlzdFByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRMaXN0KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlTGlzdFByb3BzLCBwcm9wczogRGF0YUVsZUxpc3RQcm9wcyk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlTGlzdFByb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMubnVsbFRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLnZhbHVlVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy52YWx1ZVRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgfHwgW107XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0O1xuICAgICAgICBkYXRhRWxlUHJvcHMub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmRyb3BEb3duU3R5bGUgPSBwcm9wcy5kcm9wRG93blN0eWxlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZUJhc2VUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudElubGluZUdyb3VwLCBEYXRhRWxlbWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dCBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8RGF0YUVsZUJhc2VUZXh0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLXRleHQnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlQmFzZVRleHRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50VGV4dFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50VGV4dCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50VGV4dCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IHRoaXMuc3RhcnREZWNvcmF0ZSAmJiBjaGlsZCAhPT0gdGhpcy5lbmREZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZChjaGlsZC5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5jbGVhcklubmVySXRlbXMoKTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcywgeyBhbGw6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBlcnJvciA9IHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcblxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dFJlbmRlck9iamVjdCBleHRlbmRzIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0PERhdGFFbGVtZW50VGV4dD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IERhdGFFbGVtZW50VGV4dCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRUZXh0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlQmFzZVRleHRQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWVsZS10ZXh0XCJcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50VGV4dCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGFFbGVQcm9wcyhlbGUucHJvcHMsIHByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRWxlUHJvcHMoZGVzdDogRGF0YUVsZUJhc2VUZXh0UHJvcHMsIHByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLm51bGxUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy52YWx1ZVRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMudmFsdWVUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5kYXRhVHlwZSA9IHByb3BzLmRhdGFUeXBlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgVmlld09wdGlvbnMsIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBFbGVtZW50RmFjdG9yeSwgcmVhZEVsZW1lbnRQcm9wcywgUmVjdCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZU1IUHJvcHMsIFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TGVhZiB9IGZyb20gXCIuLi9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG4vKipcbiAqIOaciOe7j+WPslxuICovXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRNSCBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlTUhQcm9wcz4ge1xuICAgIC8vcHJvcHMhOiBEYXRhRWxlTUhQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLW1oJylcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlTUhQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICB9XG4gICAgc2V0VmFsdWUodmFsOiBEYXRhRWxlTUhQcm9wcyB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB2YWwuc3BsaXQoJzsnKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPj0gNCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1oTGF5b3V0SXRlbSA9IGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbbWhMYXlvdXRJdGVtLmxlZnQucHJvcF0gPSBpdGVtc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS50b3AucHJvcF0gPSBpdGVtc1sxXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5ib3R0b20ucHJvcF0gPSBpdGVtc1syXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5yaWdodC5wcm9wXSA9IGl0ZW1zWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmFnZSA9IHZhbD8uYWdlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXlzID0gdmFsPy5kYXlzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jeWNsZXMgPSB2YWw/LmN5Y2xlcyA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMubGFzdERhdGUgPSB2YWw/Lmxhc3REYXRlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jbG9zZUFnZSA9IHZhbD8uY2xvc2VBZ2UgPz8gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0SXRlbSA9IGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLmxlZnQucHJvcF19OyR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLnRvcC5wcm9wXX07JHt0aGlzLnByb3BzW2xheW91dEl0ZW0uYm90dG9tLnByb3BdfTske3RoaXMucHJvcHNbbGF5b3V0SXRlbS5yaWdodC5wcm9wXX1gO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBSZW5kZXJPYmplY3Q8RWxlbWVudD4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFSZW5kZXJNSCh0aGlzKTtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHJlbmRlck1IKHRoaXMsIHJlbmRlckN0eCwgeyB4OiAwLCB5OiAwIH0sIGZhbHNlKTtcbiAgICAgICAgaWYgKG1lYXN1cmUpIHtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gbWVhc3VyZS53aWR0aDtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IG1lYXN1cmUuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERhdGFFbGVtZW50TUgoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShlbGVtZW50LnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudExheW91dEl0ZW0oKTogTUhMYXlvdXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgIH1cblxufVxuXG50eXBlIE1ITGF5b3V0VHlwZSA9IHtcbiAgICBba2V5IGluICdsZWZ0JyB8ICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nXToge1xuICAgICAgICB0aXA6ICfliJ3mva7lubTpvoQnIHwgJ+ihjOe7j+acn+WkqeaVsCcgfCAn5pyr5qyh5pyI57uP5pe26Ze0JyB8ICfmnIjnu4/lkajmnJ/lpKnmlbAnIHwgJ+mXree7j+W5tOm+hCcsXG4gICAgICAgIHByb3A6ICdhZ2UnIHwgJ2RheXMnIHwgJ2N5Y2xlcycgfCAnbGFzdERhdGUnIHwgJ2Nsb3NlQWdlJ1xuICAgIH1cbn1cblxuY29uc3QgbWhMYXlvdXRJdGVtczogQXJyYXk8TUhMYXlvdXRUeXBlPiA9IFtcbiAgICB7IGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSwgdG9wOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9LCByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9IH0sXG4gICAgeyBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sIHRvcDogeyB0aXA6ICfpl63nu4/lubTpvoQnLCBwcm9wOiAnY2xvc2VBZ2UnIH0sIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSwgYm90dG9tOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9IH0sXG4gICAgeyBsZWZ0OiB7IHRpcDogJ+mXree7j+W5tOm+hCcsIHByb3A6ICdjbG9zZUFnZScgfSwgdG9wOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9LCByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9IH0sXG4gICAgeyBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sIHRvcDogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9LCByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sIGJvdHRvbTogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfSB9LFxuICAgIHsgbGVmdDogeyB0aXA6ICfliJ3mva7lubTpvoQnLCBwcm9wOiAnYWdlJyB9LCB0b3A6IHsgdGlwOiAn6Zet57uP5bm06b6EJywgcHJvcDogJ2Nsb3NlQWdlJyB9LCByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9IH1cbl1cblxuXG5mdW5jdGlvbiBnZXRNSEl0ZW0oa2luZDogc3RyaW5nKTogTUhMYXlvdXRUeXBlIHtcbiAgICBraW5kID0ga2luZCA/PyAnQSc7XG4gICAga2luZCA9IGtpbmQudG9VcHBlckNhc2UoKTtcbiAgICBsZXQga2luZEluZGV4ID0gWydBJywgJ0InLCAnQycsICdEJywgJ0UnXS5pbmRleE9mKGtpbmQpO1xuICAgIGtpbmRJbmRleCA9IGtpbmRJbmRleCA8IDAgPyAwIDoga2luZEluZGV4O1xuICAgIHJldHVybiBtaExheW91dEl0ZW1zW2tpbmRJbmRleF07XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhUmVuZGVyTUggZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PERhdGFFbGVtZW50TUg+IHtcbiAgICByZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIHJlbmRlck1IKHRoaXMuZWxlbWVudCwgY3R4LCBwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YVJlbmRlck1IKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TUhGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZU1IUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkYXRhLWVsZS1taCdcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVNSFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50TUgoKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhlbGUucHJvcHMsIGRhdGEucHJvcHMgYXMgRGF0YUVsZU1IUHJvcHMpO1xuICAgICAgICBlbGUucHJvcHMuYWdlID0gZGF0YS5wcm9wcz8uYWdlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuY3ljbGVzID0gZGF0YS5wcm9wcz8uY3ljbGVzID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuZGF5cyA9IGRhdGEucHJvcHM/LmRheXMgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5sYXN0RGF0ZSA9IGRhdGEucHJvcHM/Lmxhc3REYXRlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuY2xvc2VBZ2UgPSBkYXRhLnByb3BzPy5jbG9zZUFnZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmtpbmQgPSBkYXRhLnByb3BzPy5raW5kID8/ICdBJztcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVyTUgoZWxlbWVudDogRGF0YUVsZW1lbnRNSCwgY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9LCBpc1BhaW50OiBib29sZWFuKTogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IHwgdm9pZCB7XG4gICAgbGV0IHsgeCwgeSB9ID0gcG9zaXRpb247XG4gICAgY29uc3QgZGVmYXVsdFRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKVxuICAgIGNvbnN0IHBhZGRpbmdWZXIgPSAyO1xuICAgIGNvbnN0IHBhZGRpbmdIb3IgPSA1O1xuICAgIGRlZmF1bHRUZXh0UHJvcHMuZm9udFNpemUgPSAxMjtcbiAgICBkZWZhdWx0VGV4dFByb3BzLmZvbnROYW1lID0gJ+S7v+Wuiyc7XG4gICAgZGVmYXVsdFRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIGNvbnN0IGN1cnJlbnRMYXlvdXQgPSBnZXRNSEl0ZW0oZWxlbWVudC5wcm9wcy5raW5kKTtcbiAgICBjb25zdCBsZWZ0ID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC5sZWZ0LnByb3BdLCBjdXJyZW50TGF5b3V0LmxlZnQudGlwKTtcbiAgICBjb25zdCB0b3AgPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LnRvcC5wcm9wXSwgY3VycmVudExheW91dC50b3AudGlwKTtcbiAgICBjb25zdCBib3R0b20gPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LmJvdHRvbS5wcm9wXSwgY3VycmVudExheW91dC5ib3R0b20udGlwKTtcbiAgICBjb25zdCByaWdodCA9IENvbW1vblV0aWwuZ2V0RW1wdHlWYWx1ZShlbGVtZW50LnByb3BzW2N1cnJlbnRMYXlvdXQucmlnaHQucHJvcF0sIGN1cnJlbnRMYXlvdXQucmlnaHQudGlwKTtcbiAgICBjb25zdCBsZWZ0UmVjdCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChsZWZ0LCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGNvbnN0IHRvcFJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQodG9wLCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGNvbnN0IGJvdHRvbVJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQoYm90dG9tLCBkZWZhdWx0VGV4dFByb3BzKVxuICAgIGNvbnN0IHJpZ2h0UmVjdCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChyaWdodCwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBsZXQgaGVpZ2h0ID0gdG9wUmVjdC5oZWlnaHQgKyBib3R0b21SZWN0LmhlaWdodDtcbiAgICBjb25zdCBtaWRkbGVXaWR0aCA9IE1hdGgubWF4KHRvcFJlY3Qud2lkdGgsIGJvdHRvbVJlY3Qud2lkdGgpXG4gICAgbGV0IHdpZHRoID0gbGVmdFJlY3Qud2lkdGggKyBtaWRkbGVXaWR0aCArIHJpZ2h0UmVjdC53aWR0aDtcbiAgICBpZiAoIWlzUGFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoICsgcGFkZGluZ0hvciAqIDIsIGhlaWdodDogaGVpZ2h0ICsgcGFkZGluZ1ZlciAqIDIgfVxuICAgIH1cbiAgICB4ICs9IHBhZGRpbmdIb3I7XG4gICAgeSArPSBwYWRkaW5nVmVyO1xuICAgIC8v5bm06b6EXG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGxlZnQsIGRlZmF1bHRUZXh0UHJvcHMsIHgsIHkgKyAoaGVpZ2h0IC0gbGVmdFJlY3QuaGVpZ2h0KSAvIDIsIGxlZnRSZWN0LndpZHRoLCBsZWZ0UmVjdC5oZWlnaHQpXG4gICAgeCArPSBsZWZ0UmVjdC53aWR0aDtcbiAgICAvL+WkqeaVsFxuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dCh0b3AsIGRlZmF1bHRUZXh0UHJvcHMsIHggKyAobWlkZGxlV2lkdGggLSB0b3BSZWN0LndpZHRoKSAvIDIsIHkgLSAyLCB0b3BSZWN0LndpZHRoLCB0b3BSZWN0LmhlaWdodCk7XG4gICAgLy/liIblibLnur9cbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd0xpbmUoeCwgeSArIHRvcFJlY3QuaGVpZ2h0LCBtaWRkbGVXaWR0aClcbiAgICAvL+WRqOacn1xuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChib3R0b20sIGRlZmF1bHRUZXh0UHJvcHMsIHggKyAobWlkZGxlV2lkdGggLSBib3R0b21SZWN0LndpZHRoKSAvIDIsIHkgKyB0b3BSZWN0LmhlaWdodCArIDIsIGJvdHRvbVJlY3Qud2lkdGgsIGJvdHRvbVJlY3QuaGVpZ2h0KTtcbiAgICAvL+acq+asoeaXtumXtFxuICAgIHggKz0gbWlkZGxlV2lkdGg7XG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHJpZ2h0LCBkZWZhdWx0VGV4dFByb3BzLCB4LCB5ICsgKGhlaWdodCAtIGxlZnRSZWN0LmhlaWdodCkgLyAyLCByaWdodFJlY3Qud2lkdGgsIHJpZ2h0UmVjdC5oZWlnaHQpXG5cbiAgICBpZiAoY3R4LmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9zaXRpb247XG4gICAgICAgIHdpZHRoID0gd2lkdGggKyBwYWRkaW5nSG9yICogMjtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgcGFkZGluZ1ZlciAqIDI7XG4gICAgICAgIC8vY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDM7XG4gICAgICAgIGNvbnN0IHBhaW50Q29sb3IgPSAnIzAwNTBiMyc7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiB4ICsgbGluZVdpZHRoLCB5IH0sIHsgeCwgeSB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4OiB4ICsgbGluZVdpZHRoLCB5OiB5ICsgaGVpZ2h0IH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgeCA9IHggKyB3aWR0aDtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHggLSBsaW5lV2lkdGgsIHkgfSwgeyB4LCB5IH0sIHsgeCwgeTogeSArIGhlaWdodCB9LCB7IHg6IHggLSBsaW5lV2lkdGgsIHk6IHkgKyBoZWlnaHQgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgIH1cbn1cblxuXG4iLCJpbXBvcnQgeyBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgSW1nTG9hZFN0YXR1cywgTGVhZkVsZW1lbnQsIFBvc2l0aW9uLCBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFBpY3R1cmVQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcblxuXG5pbnRlcmZhY2UgSVJlc2l6ZUVsZW1lbnQge1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW47XG59XG5leHBvcnQgY2xhc3MgUGljdHVyZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxQaWN0dXJlUHJvcHM+IGltcGxlbWVudHMgSVJlc2l6ZUVsZW1lbnQge1xuICAgIC8vcHJvcHM6IFBpY3R1cmVQcm9wcztcbiAgICBzdGF0dXM6IEltZ0xvYWRTdGF0dXMgPSAnbm8nO1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignaW1nJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUGljdHVyZVByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnbW92ZSdcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQaWN0dXJlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMud2lkdGggKyAyO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodCArIDI7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdpbWcnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQaWN0dXJlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGxvYWRJbWFnZShjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICAgICAgLy90aGlzLmltYWdlU291cmNlID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAvL3RoaXMuaW1hZ2VTb3VyY2Uuc3JjID0gdGhpcy5wcm9wcy5zcmM7XG4gICAgICAgICAgICAvLyBjb25zdCBvbmxvYWQgPSAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pc0xvYWQgPSAnY29tcGxldGVkJztcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJlZnJlc2hWaWV3KCdhcHBlYXJhbmNlJyk7XG4gICAgICAgICAgICAvLyB9O1xuICAgICAgICAgICAgLy8gY29uc3Qgb25lcnJvciA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlzTG9hZCA9ICdlcnJvcic7XG4gICAgICAgICAgICAvLyAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICBjb25zdCBvbkNhbGxiYWNrID0gKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguZG9jQ3R4LmltYWdlTG9hZGVyLmxvYWRJbWFnZSh0aGlzLnByb3BzLnNyYywgb25DYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBpY0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgUGljdHVyZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gcGljRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKHBpY0VsZW1lbnQuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICBwaWNFbGVtZW50LmxvYWRJbWFnZShjdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwaWNFbGVtZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlU291cmNlID0gY3R4LmRvY0N0eC5pbWFnZUxvYWRlci5nZXRJbWFnZShwaWNQcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwaWNQcm9wcy5ib3JkZXIgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnYmxhY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2VTb3VyY2UsIDAsIDAsIGltYWdlU291cmNlLm5hdHVyYWxXaWR0aCwgaW1hZ2VTb3VyY2UubmF0dXJhbEhlaWdodCwgcG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnkgKyAyLCBwaWNQcm9wcy53aWR0aCwgcGljUHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQaWN0dXJlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHBhZ2VQYWludENvbXBsZXRlZChjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHdpZHRoLCBoZWlnaHQsICcjMTg5MGZmJywgMC41KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShjdHgsIHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCArIHdpZHRoLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLngsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShjdHgsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1Jlc2l6ZUNpcmNsZShjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3R4TmF0aXZlID0gY3R4LmNvbnRlbnRDb250ZXh0LmN0eDtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGxTdHlsZSA9ICcjNjljMGZmJztcbiAgICAgICAgY3R4TmF0aXZlLmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuYXJjKHgsIHksIE1hdGguZmxvb3IoNCAvIDUgKiA0KSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjdHhOYXRpdmUuY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFBpY3R1cmVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2ltZyc7XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgUGljdHVyZVByb3BzO1xuICAgICAgICBjb25zdCBwaWMgPSBuZXcgUGljdHVyZUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcGljUHJvcHMgPSBwaWMucHJvcHM7XG4gICAgICAgIHBpY1Byb3BzLndpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgICAgIHBpY1Byb3BzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICAgICAgcGljUHJvcHMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICBwaWNQcm9wcy5ib3JkZXIgPSBwcm9wcy5ib3JkZXIgfHwgJ2FsbCc7XG4gICAgICAgIHBpY1Byb3BzLnRpdGxlID0gcHJvcHMudGl0bGU7XG4gICAgICAgIHBpYy5wcm9wcyA9IHBpY1Byb3BzO1xuICAgICAgICByZXR1cm4gcGljO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFJhZGlvQm94UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxSYWRpb0JveFByb3BzPiB7XG4gICAgLy9wcm9wczogUmFkaW9Cb3hQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3JkJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUmFkaW9Cb3hQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRDbGljaycsIChldnQpID0+IHsgdGhpcy5jaGFuZ2VTdGF0ZSgpIH0pO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmFkaW9Cb3hSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgUmFkaW9Cb3hSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFJhZGlvQm94RWxlbWVudCAmJiBjaGlsZCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgIGNoaWxkLnByb3BzLmlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuaXNDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdyZCcsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpOiBSYWRpb0JveEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBSYWRpb0JveEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxSYWRpb0JveFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAncmQnO1xuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBSYWRpb0JveEVsZW1lbnQge1xuICAgICAgICBjb25zdCByZEVsZW1lbnQgPSBuZXcgUmFkaW9Cb3hFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBSYWRpb0JveFByb3BzO1xuICAgICAgICBjb25zdCBja2JQcm9wcyA9IHJkRWxlbWVudC5wcm9wcztcbiAgICAgICAgY2tiUHJvcHMuc2l6ZSA9IHByb3BzLnNpemUgPz8gMTQ7XG4gICAgICAgIGNrYlByb3BzLmlzQ2hlY2tlZCA9IHByb3BzLmlzQ2hlY2tlZDtcbiAgICAgICAgcmRFbGVtZW50LnByb3BzID0gY2tiUHJvcHM7XG4gICAgICAgIHJldHVybiByZEVsZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcblxuICAgIHJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBSYWRpb0JveEVsZW1lbnQ7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3UmFkaW9Cb3gocG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnksIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLmlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFJhZGlvQm94UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIExlYWZFbGVtZW50LCBTZXJpYWxpemVQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG5leHBvcnQgY2xhc3MgQnJlYWtFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQge1xuICAgIHRleHRQcm9wczogVGV4dFByb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYnInKTtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnROYW1lID0gJ+Wui+S9kyc7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmNvbG9yID0gJyM1OTU5NTknO1xuICAgIH1cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IG5ldyBCcmVha1JlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgc3ltYm9sLnJlY3QuaGVpZ2h0ID0gMTQ7XG4gICAgICAgIHN5bWJvbC5yZWN0LndpZHRoID0gNztcbiAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9XG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdicicsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQnJlYWtFbGVtZW50KCk7XG4gICAgICAgIC8vY2xvbmUucmVuZGVyQ3R4ID0gdGhpcy5yZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEJyZWFrUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxCcmVha0VsZW1lbnQ+IHtcbiAgICByZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGlmIChjdHguZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoJ+KGkycsIHRoaXMuZWxlbWVudC50ZXh0UHJvcHMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDIwLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IEJyZWFrUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnJlYWtGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2JyJztcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBCcmVha0VsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbn1cblxuIiwiaW1wb3J0IHsgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQgfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgeyBJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zLCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgUG9zaXRpb24gfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50R3JvdXBQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IENvbnRleHRNZW51RWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQgZXh0ZW5kcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDxEYXRhRWxlbWVudEdyb3VwUHJvcHM+e1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1ncm91cCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVtZW50R3JvdXBQcm9wcygpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50PENvbnRleHRNZW51RWxlbWVudEV2ZW50PignRWxlbWVudENvbnRleHRNZW51JywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2dC5jdHgudmlld09wdGlvbnMuZGV2TW9kZSkge1xuICAgICAgICAgICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ+iOt+WPluaVsOaNrue7hOWAvCcsIGNhcHRpb246ICfojrflj5bmlbDmja7nu4TlgLwnLCBldmVudE9iajoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ciA9IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRoaXMsIHsgYWxsOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSB0aGlzLnN0YXJ0RGVjb3JhdGUgJiYgY2hpbGQgIT09IHRoaXMuZW5kRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQoY2hpbGQuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QgZXh0ZW5kcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxEYXRhRWxlbWVudEdyb3VwRWxlbWVudD4ge1xuICAgIHBhaW50UG9zITogUG9zaXRpb247XG4gICAgYmVnaW5SZW5kZXIoY3R4OiBSZW5kZXJDb250ZW54dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICd5ZWxsb3cnKTtcbiAgICAgICAgdGhpcy5wYWludFBvcyA9IHBvc2l0aW9uO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFyYUdyb3VwUmVuZGVycygpOiBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0W10ge1xuICAgICAgICBjb25zdCByZW5kZXJzOiBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0W10gPSBbXTtcbiAgICAgICAgY29uc3QgY3VyclBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcywgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LnBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzW2ldLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChwYXJhUmVuZGVyID09PSBjdXJyUGFyYVJlbmRlcikge1xuICAgICAgICAgICAgICAgIHJlbmRlcnMucHVzaCh0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzW2ldIGFzIERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJzO1xuICAgIH1cblxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FuUGFpbnQgPSB0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyIHx8IHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQ7XG4gICAgICAgIGlmIChjYW5QYWludCAmJiB0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzLmluZGV4T2YodGhpcykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJQYXJhUmVuZGVycyA9IHRoaXMuZ2V0Q3VycmVudFBhcmFHcm91cFJlbmRlcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHZlck9mZnNldCA9IDM7XG4gICAgICAgICAgICBpZiAoY3VyclBhcmFSZW5kZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRHcm91cFJlbmRlclBvcyA9IGN1cnJQYXJhUmVuZGVyc1sxXS5wYWludFBvcztcbiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kR3JvdXBSZW5kZXJQb3MueCArIGN1cnJQYXJhUmVuZGVyc1sxXS5yZWN0LndpZHRoID4gdGhpcy5wYWludFBvcy54KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodFBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhcmFSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlbmRlciA9IGN1cnJQYXJhUmVuZGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVuZGVyUG9zID0gZ3JvdXBSZW5kZXIucGFpbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb2ludHMucHVzaCh7IHg6IGdyb3VwUmVuZGVyUG9zLngsIHk6IGdyb3VwUmVuZGVyUG9zLnkgLSB2ZXJPZmZzZXQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodFBvaW50cy5wdXNoKHsgeDogZ3JvdXBSZW5kZXJQb3MueCArIGdyb3VwUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGdyb3VwUmVuZGVyUG9zLnkgLSB2ZXJPZmZzZXQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0UG9pbnRzLnB1c2goeyB4OiBncm91cFJlbmRlclBvcy54LCB5OiBncm91cFJlbmRlclBvcy55ICsgZ3JvdXBSZW5kZXIucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRQb2ludHMucHVzaCh7IHg6IGdyb3VwUmVuZGVyUG9zLnggKyBncm91cFJlbmRlci5yZWN0LndpZHRoLCB5OiBncm91cFJlbmRlclBvcy55ICsgZ3JvdXBSZW5kZXIucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwUG9pbnRzMSA9IENvbW1vblV0aWwucmVzaGFycFBvaW50cyhyaWdodFBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwUG9pbnRzID0gQ29tbW9uVXRpbC5yZXNoYXJwUG9pbnRzKFsuLi5sZWZ0UG9pbnRzLnJldmVyc2UoKV0pO1xuICAgICAgICAgICAgICAgICAgICBjdHgub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFsuLi5zaGFycFBvaW50cywgLi4uc2hhcnBQb2ludHMxLCBzaGFycFBvaW50c1swXV0sIDEsIGN0eC52aWV3T3B0aW9ucy5kYXRhR3JvdXBDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJQYXJhUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGN1cnJQYXJhUmVuZGVyc1tpXTtcbiAgICAgICAgICAgICAgICBjdHgub3ZlcmxheXNDb250ZXh0LnN0cm9rZVJlY3QocmVuZGVyLnBhaW50UG9zLngsIHJlbmRlci5wYWludFBvcy55IC0gdmVyT2Zmc2V0LCByZW5kZXIucmVjdC53aWR0aCwgcmVuZGVyLnJlY3QuaGVpZ2h0ICsgdmVyT2Zmc2V0ICogMiwgY3R4LnZpZXdPcHRpb25zLmRhdGFHcm91cENvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG5cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVtZW50R3JvdXBQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWdyb3VwXCJcbiAgICB9XG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlbWVudEdyb3VwUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCgpO1xuICAgICAgICBlbGUucHJvcHMuaWQgPSBwcm9wcy5pZDtcbiAgICAgICAgZWxlLnByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQmxvY2tDb250YWluZXJFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEJvZHlQYXJ0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG4vKipcbiAqIOeUqOS6juWQiOW5tueXheeoi+W9lSzmr4/kuKpwYXJ05YyF5ZCr5q+P5Lu955eF56iL5b2VYm9keVxuICog5aSa5LiqcGFydOWkhOS6juS4gOS4qmJvZHnkuIvpnaJcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVBhcnRFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PEJvZHlQYXJ0UHJvcHM+IHtcbiAgICAvL+aYr+WQpuiiq+S/ruaUuVxuICAgIGlzTW9kaWZ5ITogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2JvZHktcGFydCcpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnR290Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnTG9zdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IEJvZHlQYXJ0UHJvcHMoKTtcbiAgICB9XG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50Qm9keVBhcnRSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRG9jdW1lbnRCb2R5UGFydFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLm1hcmdpbi50b3AgPSAxMDtcbiAgICAgICAgcmVuZGVyLm1hcmdpbi5ib3R0b20gPSAxMDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICBwYXJ0SWQ6IHRoaXMucHJvcHMucGFydElkLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERvY3VtZW50Qm9keVBhcnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQoKTtcbiAgICAgICAgY2xvbmUucHJvcHMucGFydElkID0gdGhpcy5wcm9wcy5wYXJ0SWQ7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIGJlZ2luUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICAvL2lmIChjdHguZHJhd01vZGUgPT09ICd2aWV3JyAmJiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCB8fCB0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyKSkge1xuICAgICAgICBjb25zdCBib3JkZXJDb2xvciA9ICcjMDAyNzY2JztcbiAgICAgICAgY3R4Lm92ZXJsYXlzQ29udGV4dC5jdHguc2F2ZSgpO1xuICAgICAgICBjb25zdCBiZ0NvbG9yID0gKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQgfHwgdGhpcy5lbGVtZW50LmlzTW91c2VlbnRlcikgPyAnI2Q5ZDlkOScgOiAnI2ZmZmZmZic7XG4gICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCAtIDIsIHBvc2l0aW9uLnkgLSAyLCB0aGlzLnJlY3Qud2lkdGggKyA0LCB0aGlzLnJlY3QuaGVpZ2h0ICsgNCwgYmdDb2xvciwgNSwgJ2JsYWNrJyk7XG4gICAgICAgIC8vY3R4Lm92ZXJsYXlzQ29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgYm9yZGVyQ29sb3IpXG4gICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgLy99XG4gICAgfVxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcblxuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luLnRvcCA9IHRoaXMubWFyZ2luLnRvcDtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luLmJvdHRvbSA9IHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgICAgaWYgKGNsb25lRGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlQYXJ0RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PEJvZHlQYXJ0UHJvcHM+e1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2JvZHktcGFydCc7XG4gICAgfVxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxCb2R5UGFydFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dFR5cGUpOiBFbGVtZW50PGFueT4ge1xuICAgICAgICBjb25zdCBib2R5UGFydCA9IGRhdGEucHJvcHM/LnBhcnRJZCB8fCAnJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCgpO1xuICAgICAgICBlbGVtZW50LnByb3BzLnBhcnRJZCA9IGJvZHlQYXJ0O1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbn0iLCJpbXBvcnQgeyBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgUG9zaXRpb24sIHJlYWRFbGVtZW50UHJvcHMsIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudExlYWYgfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgYndpcGpzIGZyb20gXCJid2lwLWpzXCI7XG5pbXBvcnQgeyB3YXRjaENoYW5nZWQgfSBmcm9tIFwiLi4vLi4vbm90aWZ5XCI7XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50QmFyY29kZSBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlbWVudEJhcmNvZGVQcm9wcz4ge1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgYmFyQ29kZUNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbDtcbiAgICBwcml2YXRlIGNhY2hlID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1iYXJjb2RlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCA9IDEwMDtcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQgPSAzMDtcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgICB3YXRjaENoYW5nZWQodGhpcy5wcm9wcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYWNoZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMud2lkdGggKyAyO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodCArIDI7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGUoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLnRleHQgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dDtcbiAgICB9XG5cbiAgICBkcmF3QmFyY29kZShyZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZUJhcmNvZGVDYWNoZSgpO1xuICAgICAgICByZW5kZXJDdHguY29udGVudENvbnRleHQuY3R4LmRyYXdJbWFnZSh0aGlzLmJhckNvZGVDYW52YXMgYXMgSFRNTENhbnZhc0VsZW1lbnQsIHBvcy54LCBwb3MueSwgdGhpcy5wcm9wcy53aWR0aCwgdGhpcy5wcm9wcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJhcmNvZGVDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmJhckNvZGVDYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuYmFyQ29kZUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFyQ29kZUNhbnZhcyA9IGJ3aXBqcy50b0NhbnZhcyh0aGlzLmJhckNvZGVDYW52YXMsIHtcbiAgICAgICAgICAgIGJjaWQ6IHRoaXMucHJvcHMudHlwZSwgLy8gQmFyY29kZSB0eXBlXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnByb3BzLnRleHQgfHwgXCIwMTIzNDU2Nzg5XCIsIC8vIFRleHQgdG8gZW5jb2RlXG4gICAgICAgICAgICBoZWlnaHQ6IDEwLCAvLyBCYXIgaGVpZ2h0LCBpbiBtaWxsaW1ldGVyc1xuICAgICAgICAgICAgaW5jbHVkZXRleHQ6IHRydWUsIC8vIFNob3cgaHVtYW4tcmVhZGFibGUgdGV4dFxuICAgICAgICAgICAgdGV4dHhhbGlnbjogXCJjZW50ZXJcIiwgLy8gQWx3YXlzIGdvb2QgdG8gc2V0IHRoaXNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlUmVuZGVyT2JqZWN0IGV4dGVuZHMgUmVzaXplTGVhZlJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBiYXJjb2RlRWxlID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50QmFyY29kZTtcbiAgICAgICAgYmFyY29kZUVsZS5kcmF3QmFyY29kZShjdHgsIHBvc2l0aW9uKTtcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHBhZ2VQYWludENvbXBsZXRlZChjdHg6IFJlbmRlckNvbnRlbnh0VHlwZSwgcG9zOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJyMxODkwZmYnLCAwLjUpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShjdHgsIHBvcy54ICsgd2lkdGgsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShjdHgsIHBvcy54LCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCArIHdpZHRoLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUoY3R4LCBwb3MueCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKGN0eCwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3UmVzaXplQ2lyY2xlKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdHhOYXRpdmUgPSBjdHguY29udGVudENvbnRleHQuY3R4O1xuICAgICAgICBjdHhOYXRpdmUuc2F2ZSgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbFN0eWxlID0gJyM2OWMwZmYnO1xuICAgICAgICBjdHhOYXRpdmUuYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5hcmMoeCwgeSwgTWF0aC5mbG9vcig0IC8gNSAqIDQpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eE5hdGl2ZS5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGwoKTtcbiAgICAgICAgY3R4TmF0aXZlLnJlc3RvcmUoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50QmFyY29kZUZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlbWVudEJhcmNvZGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RhdGEtZWxlLWJhcmNvZGUnO1xuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRlbnh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlKCk7XG4gICAgICAgIGVsZS5wcm9wcy53aWR0aCA9IGRhdGEucHJvcHM/LndpZHRoIHx8IDEwMDtcbiAgICAgICAgZWxlLnByb3BzLmhlaWdodCA9IGRhdGEucHJvcHM/LmhlaWdodCB8fCAzMDtcbiAgICAgICAgZWxlLnByb3BzLnR5cGUgPSBkYXRhLnByb3BzPy50eXBlIHx8ICdjb2RlMTI4JztcbiAgICAgICAgZWxlLnByb3BzLnRleHQgPSBkYXRhLnByb3BzPy50ZXh0IHx8ICcnO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgRWxlbWVudCwgVmlld09wdGlvbnMsIFBhZ2VPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENoZWNrQm94RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY2hlY2tib3gvY2hlY2tib3gtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudENvbnRlbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lckVsZW1lbnQsIENvbW1lbnRzRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWNoZWNrLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50RGF0ZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZGF0ZS1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudEltZ0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtaW1hZ2UtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRMaXN0RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1saXN0LWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50VGV4dEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50LCBEb2N1bWVudEJvZHlGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlckVsZW1lbnQsIERvY3VtZW50Rm9vdGVyRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlckVsZW1lbnQsIERvY3VtZW50SGVhZGVyRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TUhGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9tZWRpYS1mb3JtdWxhL21lbnN0cnVhbC1oaXN0b3J5XCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBQaWN0dXJlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvcGljdHVyZS9pbWFnZS1pbXBsXCI7XG5pbXBvcnQgeyBSYWRpb0JveEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3JhZGlvL3JhZGlvLWltcGxcIjtcbmltcG9ydCB7IEJyZWFrRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvc3ltYm9sL2JyLXN5bWJvbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgUnVuRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCwgVHJhY2tSdW5Qcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50R3JvdXBGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWdyb3VwLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keVBhcnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50QmFyY29kZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFyY29kZVwiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFJlYWRlciB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwcml2YXRlIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKSB7XG4gICAgICAgIHRoaXMuaW5pdEZhY3RvcnkoKTtcbiAgICB9XG5cbiAgICBmYWN0b3JpZXM6IEFycmF5PEVsZW1lbnRGYWN0b3J5PiA9IFtdO1xuXG4gICAgYWRkRmFjdG9yeTxVIGV4dGVuZHMgbnVsbCB8IG9iamVjdCwgVCBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFU+PihjOiBuZXcgKCkgPT4gVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBjKCk7XG4gICAgICAgIGluc3RhbmNlLm9wdGlvbnMgPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmZhY3Rvcmllcy5wdXNoKGluc3RhbmNlIGFzIEVsZW1lbnRGYWN0b3J5KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgaW5pdEZhY3RvcnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRIZWFkZXJGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50Qm9keUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUGFyYWdyYXBoRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUZXh0R3JvdXBGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENoZWNrQm94RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUYWJsZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoVGFibGVSb3dGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRhYmxlQ2VsbEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRGb290ZXJGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFBpY3R1cmVGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFJhZGlvQm94RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudFRleHRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50RGF0ZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRMaXN0RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudENoZWNrRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudEJhcmNvZGVGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KEJyZWFrRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDb21tZW50c0ZhY3RvcnkpXG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDb21tZW50Q29udGVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQ29tbWVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRJbWdGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50TUhGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFJ1bkVsZW1lbnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50R3JvdXBGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50Qm9keVBhcnRGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclJlYWRGdW5jPFRyYWNrUnVuUHJvcHM+KCdpbnMtcnVuJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gbmV3IFRyYWNrUnVuUHJvcHMoZGF0YS50eXBlKTtcbiAgICAgICAgICAgIHByb3BzLnVzZXJJZCA9IGRhdGEudXNlcklkO1xuICAgICAgICAgICAgcHJvcHMudXNlck5hbWUgPSBkYXRhLnVzZXJOYW1lO1xuICAgICAgICAgICAgcHJvcHMuZGF0ZSA9IGRhdGEuZGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5yZWdpc3RlclJlYWRGdW5jPFRyYWNrUnVuUHJvcHM+KCdkZWwtcnVuJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gbmV3IFRyYWNrUnVuUHJvcHMoZGF0YS50eXBlKTtcbiAgICAgICAgICAgIHByb3BzLnVzZXJJZCA9IGRhdGEudXNlcklkO1xuICAgICAgICAgICAgcHJvcHMudXNlck5hbWUgPSBkYXRhLnVzZXJOYW1lO1xuICAgICAgICAgICAgcHJvcHMuZGF0ZSA9IGRhdGEuZGF0ZTtcbiAgICAgICAgICAgIHJldHVybiBwcm9wcztcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZWFkKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEgaW5zdGFuY2VvZiBEb2N1bWVudEVsZW1lbnQgPyBkYXRhLmNsb25lKCkgOiB0aGlzLnJlYWRFbGVtZW50KGRhdGEpIGFzIERvY3VtZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5zZXREb2N1bWVudChkb2N1bWVudCk7XG4gICAgfVxuXG5cbiAgICBzZXREb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh0aGlzLmRvY0N0eC5kb2N1bWVudCkge1xuICAgICAgICAvLyAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMuZG9jdW1lbnQ/LmNsZWFySXRlbXMoKTtcbiAgICAgICAgLy8gZG9jdW1lbnQuZG9jUHJvcHMuY2xvbmUodGhpcy5kb2N1bWVudC5kb2NQcm9wcyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHlFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmhlYWRlckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRIZWFkZXJFbGVtZW50KSBhcyBEb2N1bWVudEhlYWRlckVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmZvb3RlckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJFbGVtZW50KSBhcyBEb2N1bWVudEZvb3RlckVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBDb21tc0NvbnRhaW5lckVsZW1lbnQpIGFzIENvbW1zQ29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCA9IG5ldyBDb21tc0NvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5jbGVhckl0ZW1zKCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmhlYWRlckVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5ib2R5RWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmZvb3RlckVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICBkb2N1bWVudC52aWV3T3B0aW9ucyA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcihkb2N1bWVudC5wcm9wcy53aWR0aCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vcihkb2N1bWVudC5wcm9wcy5oZWlnaHQgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQsIGRvY3VtZW50LnByb3BzLm9yaWVudCk7XG4gICAgICAgIC8vdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3Mud2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCArIDEwO1xuICAgIH1cblxuXG4gICAgcmVhZEVsZW1lbnQoZGF0YTogYW55KTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBkYXRhLnR5cGUgYXMgc3RyaW5nO1xuICAgICAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2YgdGhpcy5mYWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGlmIChmYWN0b3J5Lm1hdGNoKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlRWxlbWVudChkYXRhLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgLy90aGlzLnJlYWRFeHRlbmRzUHJvcHMoZGF0YSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZHJlbiB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDaGlsZCh0aGlzLnJlYWRFbGVtZW50KGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrnn6XnmoTlhYPntKDnsbvlnos6JyArIHR5cGUpO1xuICAgIH1cblxuICAgIHByb3BzUmVhZEZ1bmNzOiBNYXA8c3RyaW5nLCAoZGF0YTogYW55KSA9PiBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gICAgcmVnaXN0ZXJSZWFkRnVuYzxUPihwcm9wTmFtZTogc3RyaW5nLCBmdW5jOiAoZGF0YTogVCkgPT4gVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzUmVhZEZ1bmNzLnNldChwcm9wTmFtZSwgZnVuYyk7XG4gICAgfVxuXG4gICAgcmVhZEV4dGVuZHNQcm9wcyhkYXRhOiBhbnksIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGEuZXh0ZW5kc1Byb3BzICYmIGRhdGEuZXh0ZW5kc1Byb3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRhdGEuZXh0ZW5kc1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuYyA9IHRoaXMucHJvcHNSZWFkRnVuY3MuZ2V0KHByb3AubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZW5kUHJvcHMgPSBmdW5jKHByb3AudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5kUHJvcHMgJiYgZWxlbWVudC5wcm9wcyBpbnN0YW5jZW9mIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucHJvcHMucmVnaXN0ZXJQcm9wZXJ0eShwcm9wLm5hbWUsIGV4dGVuZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRG9jdW1lbnRQYWludCB9IGZyb20gXCIuL2RvY3VtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IExlYWZFbGVtZW50LCBSZWN0LCBFbGVtZW50LCBQb3NpdGlvbiwgVmlld09wdGlvbnMsIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsIERvY01vZGUgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRHJvcEVsZW1lbnRFdmVudCwgRWxlbWVudEV2ZW50LCBFdmVudFN0YWdlLCBFdmVudFR5cGVzLCBHZXRUcmFja1RpcHNFdmVudCwgR290Q3Vyc29yRXZlbnQsIEhpdEV2ZW50SW5mbywgSGl0UmVnaW9uLCBJVHJhY2tUaXBzLCBMb3N0Q3Vyc29yRXZlbnQsIE1vdXNlZG93bkVsZW1lbnRFdmVudCwgTW91c2VFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUGljdHVyZUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3BpY3R1cmUvaW1hZ2UtaW1wbFwiO1xuaW1wb3J0IHsgQnJlYWtFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGxcIjtcbmltcG9ydCB7IFBTeW1ib2xFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvcC1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtcm93LWltcGxcIjtcbmltcG9ydCB7IEJvcmRlclR5cGUsIEJyYW5jaFJlbmRlck9iamVjdCwgQ3Vyc29yVHlwZSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbnRlcmZhY2UgRWRnZVJlbmRlckluZm8geyByZW5kZXJFbGVtZW50OiBFbGVtZW50LCByZWxhdGl2ZVBvczogUG9zaXRpb24sIG1vdXNlZG93bjogYm9vbGVhbiwgbW91c2Vkb3duUG9zPzogUG9zaXRpb24sIGJvcmRlcjogQm9yZGVyVHlwZSB9XG4vKipcbiAqIOS6i+S7tuezu+e7n1xuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRFdmVudCB7XG4gICAgcHJpdmF0ZSBpc21vdXNlZG93biE6IGJvb2xlYW47XG4gICAgLy/lvIDlp4vngrnlh7vml7bnmoTlhYPntKDkv6Hmga9cbiAgICBzdGFydEhpdEluZm8hOiBIaXRFdmVudEluZm8gfCBudWxsO1xuICAgIC8v5b2T5YmN5L2N572u54K55Ye755qE5YWD57Sg5L+h5oGvXG4gICAgZW5kSGl0SW5mbyE6IEhpdEV2ZW50SW5mbyB8IG51bGw7XG4gICAgLy/lvZPliY3lrprkvY3nmoTnhKbngrnlhYPntKAs5L6L5aaC5Zu+54mH562JXG4gICAgZm9jdXNlZEVsZW1lbnQhOiBMZWFmRWxlbWVudCB8IG51bGw7XG4gICAgZm9jdXNlZFJlY3QhOiBSZWN0IHwgbnVsbDtcbiAgICAvL+W9k+WJjeWFieagh+aJgOWcqOeahOWFg+e0oFxuICAgIGN1cnJlbnRNb3VzZW92ZXJSZW5kZXIhOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGw7XG4gICAgaGl0SW5mb0NoYW5nZWQ6IFN1YmplY3Q8eyBzdGFydEhpdEluZm86IEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogSGl0RXZlbnRJbmZvIH0+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjbGlja0V2ZW50OiBTdWJqZWN0PE1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBkYmxDbGlja0V2ZW50OiBTdWJqZWN0PE1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjaGFuZ2VDdXJzb3I6IFN1YmplY3Q8Q3Vyc29yVHlwZT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnRleHRNZW51OiBTdWJqZWN0PE1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICB0cmFja1RpcHNDaGFuZ2VkOiBTdWJqZWN0PHsgcG9zOiBQb3NpdGlvbiwgdGlwczogSVRyYWNrVGlwcyB9PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lhYnmoIflpITkuo7ovrnmoYbnmoTnu5jliLblhYPntKBcbiAgICBlZGdlUmVuZGVySW5mbyE6IEVkZ2VSZW5kZXJJbmZvIHwgbnVsbDtcbiAgICAvL+W9k+WJjem8oOagh+aJgOWcqOeahHBhZ2UtcG9zaXRpb25cbiAgICBjdXJyZW50UG9zITogUG9zaXRpb247XG4gICAgLy/pvKDmoIfmjInkuIvnmoTkvY3nva5cbiAgICBtb3VzZWRvd25Qb3MhOiBQb3NpdGlvbjtcbiAgICBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHByaXZhdGUgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludCwgcHJpdmF0ZSB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHByaXZhdGUgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlLCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCkge1xuICAgICAgICB0aGlzLmJpbmRFdmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZEV2ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93bihldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2V1cCcpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNldXAoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ2NsaWNrJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VDbGlja0hhbmRsZShldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5uZXh0KGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNlbW92ZScpLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFRpcHMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ2RibGNsaWNrJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VEYmxDbGlja0hhbmRsZShldnQpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgYWRkU3ViRXZlbnQoc3ViOiBTdWJzY3JpcHRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbiAgICB9XG5cbiAgICBjbGVhclN1YkV2ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMuZm9yRWFjaChpdGVtID0+IGl0ZW0udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vicy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNlZG93bihldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gZXZ0Lm9mZnNldFg7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSBldnQub2Zmc2V0WTtcbiAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IGV2dC5idXR0b25zO1xuICAgICAgICBkb2NFdmVudC5zaGlmdCA9IGV2dC5zaGlmdEtleTtcbiAgICAgICAgZG9jRXZlbnQuY3RybCA9IGV2dC5jdHJsS2V5O1xuICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHsgeDogZXZ0Lm9mZnNldFgsIHk6IGV2dC5vZmZzZXRZIH07XG4gICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNldXAoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IGV2dC5vZmZzZXRYO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gZXZ0Lm9mZnNldFk7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VzZW1vdmUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IGV2dC5vZmZzZXRYO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gZXZ0Lm9mZnNldFk7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlZG93blBvcyAmJiBkb2NFdmVudC5nbG9iYWxYID09PSB0aGlzLm1vdXNlZG93blBvcy54ICYmIGRvY0V2ZW50Lmdsb2JhbFkgPT09IHRoaXMubW91c2Vkb3duUG9zLnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdXNlbW92ZUhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmV2VHJhY2tJbmZvOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICog5pi+56S65o+Q56S65L+h5oGvXG4gICAgICog5pi+56S655WZ55eV5o+Q56S65L+h5oGv562JXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRUaXBzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIucmVuZGVyLmVsZW1lbnQ7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEdldFRyYWNrVGlwc0V2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gZWxlbWVudDtcbiAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnR2V0VHJhY2tUaXBzJywgZWxlbWVudCwgZXZlbnQsICdCdWJibGluZycsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgaWYgKGV2ZW50LnRyYWNrVGlwcykge1xuICAgICAgICAgICAgdGhpcy50cmFja1RpcHNDaGFuZ2VkLm5leHQoeyBwb3M6IHsgLi4udGhpcy5jdXJyZW50UG9zIH0sIHRpcHM6IGV2ZW50LnRyYWNrVGlwcyB9KTtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYWNrSW5mbyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJldlRyYWNrSW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJhY2tUaXBzQ2hhbmdlZC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFja0luZm8gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgKiDmu5rliqjop4blm77nmoTml7blgJnvvIzpnIDopoHmiYvliqjop6blj5Ftb3VzZW1vdmVcbiAgICAqL1xuICAgIG9uU2Nyb2xsVmlldygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSB0aGlzLmN1cnJlbnRQb3MueDtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHRoaXMuY3VycmVudFBvcy55O1xuICAgICAgICB0aGlzLm1vdXNlbW92ZUhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG6byg5qCH5oyJ5LiL5LqL5Lu2XG4gICAgICogQHBhcmFtIGV2dCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlZG93bkhhbmRsZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8v54K55Ye75Y+z6ZSu5pe2LOWtmOWcqOmAieWMuu+8jOebtOaOpei/lOWbnlxuICAgICAgICBpZiAoZXZ0LmJ1dHRvbnMgPT09IDIgJiYgdGhpcy5zdGFydEhpdEluZm8gJiYgIXRoaXMuc2VsZWN0aW9uU3RhdGUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGV2dCk7XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwudmVyaWZ5SGl0YWJsZSh0aGlzLnN0YXJ0SGl0SW5mbz8uZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVsZW1lbnRGb2N1cygpO1xuICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3pgInkuK3nmoTmmK/mrrXokL3nrKblj7fvvIzliJnpnIDopoHmiYvliqjlsIblhbblgY/np7vph4/lrprkvY3liLDlt6bovrlcbiAgICAgICAgICAgIGlmIChzdGFydEVsZW1lbnQgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCB8fCBzdGFydEVsZW1lbnQgaW5zdGFuY2VvZiBCcmVha0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mby5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy90aGlzLnN0YXJ0SGl0SW5mby5zdGFydFJlZ2lvbiA9IHRoaXMuZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlcik7XG4gICAgICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSB0aGlzLnN0YXJ0SGl0SW5mbztcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlZG93bkV2ZW50ID0gbmV3IE1vdXNlZG93bkVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBtb3VzZWRvd25FdmVudC5zb3VyY2UgPSBzdGFydEVsZW1lbnQ7XG4gICAgICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50TW91c2Vkb3duJywgc3RhcnRFbGVtZW50LCBtb3VzZWRvd25FdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRnZVJlbmRlckluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICAgICAgdGhpcy5jbGVhckhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkLm5leHQoeyBzdGFydEhpdEluZm86IHRoaXMuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogdGhpcy5lbmRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbyB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydEhpdEluZm8gPSB0aGlzLnN0YXJ0SGl0SW5mbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYPntKDnhKbngrnnirbmgIFcbiAgICAgKi9cbiAgICBwcml2YXRlIHN3aXRjaEVsZW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRFbGVtZW50ICYmIHN0YXJ0RWxlbWVudC5mb2N1c2FibGUpIHtcbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IHN0YXJ0RWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdCh0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJIaXRJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6byg5qCH5omA5Zyo5L2N572u55qE5YWD57Sg5L+h5oGvXG4gICAgICogQHBhcmFtIGV2dCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdEluZm8oZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IEhpdEV2ZW50SW5mbyB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGV2dCk7XG4gICAgICAgIGlmICghaGl0RG9jSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkb2NJbmRleCwgZG9jUmVuZGVyLCBoaXRQYWdlUG9zIH0gPSBoaXREb2NJbmZvO1xuICAgICAgICAvL+iuvue9ruaWh+aho+mhteS4reeahOebuOWvueS9jee9rlxuICAgICAgICBldnQucGFnZVggPSBoaXRQYWdlUG9zLng7XG4gICAgICAgIGV2dC5wYWdlWSA9IGhpdFBhZ2VQb3MueTtcblxuICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGRvY1JlbmRlciwgeyB4OiAtZG9jUmVuZGVyLnJlY3QueCwgeTogLWRvY1JlbmRlci5yZWN0LnkgfSwgeyB4OiBldnQucGFnZVgsIHk6IGV2dC5wYWdlWSB9KTtcbiAgICAgICAgaWYgKCFoaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gaGl0SW5mby5yZW5kZXIuZWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhpdERvY0luZGV4OiBkb2NJbmRleCxcbiAgICAgICAgICAgIG9mZnNldDogaGl0SW5mby5vZmZzZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgcmVuZGVyOiBoaXRJbmZvLnJlbmRlcixcbiAgICAgICAgICAgIHJlbGF0aXZlUmVjdDogaGl0SW5mby5yZW5kZXIucmVjdCxcbiAgICAgICAgICAgIGFic29sdXRlUmVjdDogaGl0SW5mby5hYnNvbHV0ZVJlbmRlclJlY3QsXG4gICAgICAgICAgICBzaGFkb3dSZW5kZXJJbmRleDogdGhpcy5kb2N1bWVudFBhaW50LmVsZW1lbnRQYWludC5nZXRTaGFkb3dSZW5kZXJJbmRleChlbGVtZW50LCBoaXRJbmZvLnJlbmRlciksXG4gICAgICAgICAgICBzdGFydFJlZ2lvbjogRWxlbWVudFV0aWwuZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKGhpdEluZm8ucmVuZGVyKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW91c2VvdmVyUmVuZGVySW5mbyhldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0RG9jSW5mbyA9IHRoaXMuZ2V0SGl0RG9jUGFnZShldnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZG9jSW5kZXgsIGRvY1JlbmRlciwgcGFpbnRBYnNvbHV0ZVJlY3QsIGhpdFBhZ2VQb3MgfSA9IGhpdERvY0luZm87XG4gICAgICAgIC8v6K6+572u5paH5qGj6aG15Lit55qE55u45a+55L2N572uXG4gICAgICAgIGV2dC5wYWdlWCA9IGhpdFBhZ2VQb3MueDtcbiAgICAgICAgZXZ0LnBhZ2VZID0gaGl0UGFnZVBvcy55O1xuICAgICAgICAvL2NvbnN0IGRvY1JlbmRlclBhcmVudEFic29sdXRlUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIucGFyZW50KTtcbiAgICAgICAgLy9jb25zdCBtb3VzZW92ZXJJbmZvID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXIoZG9jUmVuZGVyLCBkb2NSZW5kZXJQYXJlbnRBYnNvbHV0ZVBvcywgeyB4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFkgKyB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfSk7XG4gICAgICAgIGNvbnN0IG1vdXNlb3ZlckluZm8gPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoZG9jUmVuZGVyLCB7IHg6IC1kb2NSZW5kZXIucmVjdC54LCB5OiAtZG9jUmVuZGVyLnJlY3QueSB9LCB7IHg6IGV2dC5wYWdlWCwgeTogZXZ0LnBhZ2VZIH0pO1xuICAgICAgICByZXR1cm4gbW91c2VvdmVySW5mbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpvKDmoIfnp7vliqjkuovku7ZcbiAgICAgKiDkuLvopoHlpITnkIbpgInljLrmlLnlj5hcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlbW92ZUhhbmRsZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCdtb3VzZW1vdmXorqHml7YnKVxuICAgICAgICBsZXQgZWRnZVJlbmRlckluZm86IG51bGwgfCB0eXBlb2YgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgIGNvbnN0IG1vdXNlUG9zOiBQb3NpdGlvbiA9IHsgeDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZIH07XG4gICAgICAgIGxldCBjdXJzb3JUeXBlOiBDdXJzb3JUeXBlID0gJ3RleHQnO1xuICAgICAgICB0aGlzLmN1cnJlbnRQb3MgPSBtb3VzZVBvcztcbiAgICAgICAgaWYgKHRoaXMuaXNtb3VzZWRvd24gJiYgdGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhldnQpO1xuICAgICAgICAgICAgLy/lj6rmnInpvKDmoIfmjInkuIvnmoTml7blgJnpnIDopoHlj5HluIPkuovku7ZcbiAgICAgICAgICAgIHRoaXMucHViSGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXJJbmZvKGV2dCk7XG4gICAgICAgIC8v5paw5pen5L+h5oGv5LiN5LiA6Ie0LOmcgOimgeagoemqjOe7mOWItuWMuuWfn++8jOinpuWPkW1vdXNlZW50ZXLjgIFtb3VzZWxlYXZl562J5LqL5Lu2XG4gICAgICAgIHRoaXMuaW52b2tlTW91c2Vtb3ZlRXZlbnQodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIsIGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvPy5yZW5kZXIsIG1vdXNlUG9zKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyID0gY3Vyck1vdXNlb3ZlclJlbmRlckluZm87XG4gICAgICAgIC8v5b2T5YmN5pyJ5YWD57Sg5pyJ54Sm54K55pe277yM6ZyA6KaB6aaW5YWI5Yik5pat5b2T5YmN5L2N572u5piv5ZCm5Zyo54Sm54K55YWD57Sg5LiKXG4gICAgICAgIC8v5aaC5p6c5Y2V5YWD5qC85Lit5YyF5ZCr5Zu+54mH562J5Y+v57yp5pS+55qE5YWD57Sg77yM5bm25LiU5YWD57Sg55qE5aSn5bCP6LaF6L+H5Y2V5YWD5qC877yM5YiZ5b2T5YmN5Zu+54mH55qE5p+Q5LiA6YOo5YiG5bCx5peg5rOV57yp5pS+XG4gICAgICAgIGlmICghdGhpcy5pc21vdXNlZG93biAmJiB0aGlzLmZvY3VzZWRFbGVtZW50ICYmIHRoaXMuZm9jdXNlZFJlY3QgJiYgKDxhbnk+dGhpcy5mb2N1c2VkRWxlbWVudClbJ3Jlc2l6ZWFibGUnXSkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVQb3M6IFBvc2l0aW9uID0geyB4OiBtb3VzZVBvcy54IC0gdGhpcy5mb2N1c2VkUmVjdC54LCB5OiBtb3VzZVBvcy55IC0gdGhpcy5mb2N1c2VkUmVjdC55IH07XG4gICAgICAgICAgICBjb25zdCBpc0luQ2VsbEJvcmRlciA9IENvbW1vblV0aWwuaXNJblBpY3R1cmVSZXNpemVQb2ludCh0aGlzLmZvY3VzZWRSZWN0LCByZWxhdGl2ZVBvcywgNCk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3JUeXBlID0gRWxlbWVudFV0aWwuZ2V0Qm9yZGVyQ3Vyc29yKGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcj8uYm9yZGVyVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IHsgcmVuZGVyRWxlbWVudDogdGhpcy5mb2N1c2VkRWxlbWVudCwgcmVsYXRpdmVQb3MsIG1vdXNlZG93bjogZmFsc2UsIGJvcmRlcjogaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfS8v5b2T5YmN6byg5qCH5LiN5aSE5LqObW91c2Vkb3du5bm25LiU6byg5qCH5L2N5LqO5Y2V5YWD5qC86L6555WM5pe2LOiOt+WPlui+ueeVjOS/oeaBr1xuICAgICAgICBlbHNlIGlmICghdGhpcy5pc21vdXNlZG93biAmJiB0aGlzLmlzSW5DZWxsUmVuZGVyT2JqZWN0KHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyKSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlciBhcyBSZW5kZXJPYmplY3QsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgLy9jb25zdCBjZWxsUmVuZGVyID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgLy9jb25zdCB7IHJlbmRlcjogeyByZW5kZXJQb3NpdGlvbjogeyB4OiByeCwgeTogcnkgfSB9IH0gPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI7XG4gICAgICAgICAgICAvL2NvbnN0IHJwID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5hYnNvbHV0ZVJlbmRlclJlY3QgYXMgUmVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICBycC55IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zOiBQb3NpdGlvbiA9IHsgeDogbW91c2VQb3MueCAtIHJwLngsIHk6IG1vdXNlUG9zLnkgLSBycC55IH07XG4gICAgICAgICAgICBjb25zdCBpc0luQ2VsbEJvcmRlciA9IENvbW1vblV0aWwuaXNJblJlY3RCb3JkZXIoY2VsbFJlbmRlci5yZWN0LCAyLCByZWxhdGl2ZVBvcyk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfmmK/lkKblnKjovrnmoYbkuIonICsgaXNJbkNlbGxCb3JkZXI/LmJvcmRlclR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3Vyc29yVHlwZSA9IEVsZW1lbnRVdGlsLmdldEJvcmRlckN1cnNvcihpc0luQ2VsbEJvcmRlci5ib3JkZXJUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yLm5leHQoY3Vyc29yVHlwZSk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXI/LmJvcmRlclR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWRnZVJlbmRlckluZm8gPSB7IHJlbmRlckVsZW1lbnQ6IGNlbGxSZW5kZXIuZWxlbWVudCwgcmVsYXRpdmVQb3MsIG1vdXNlZG93bjogZmFsc2UsIGJvcmRlcjogaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc21vdXNlZG93bikge1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IGVkZ2VSZW5kZXJJbmZvO1xuICAgICAgICB9XG4gICAgICAgIC8v5a2Y5Zyo6L6555WM5YWD57Sg77yM5bm25LiU5b2T5YmN6L6555WM5aSE5LqO6byg5qCH5oyJ5LiL54q25oCBXG4gICAgICAgIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvICYmIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVJlbmRlcihldnQpO1xuICAgICAgICAgICAgY3Vyc29yVHlwZSA9IEVsZW1lbnRVdGlsLmdldEJvcmRlckN1cnNvcih0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyPy5lbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgIXRoaXMuaXNtb3VzZWRvd24gJiYgY3Vyc29yVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBjdXJzb3JUeXBlID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXI/LmVsZW1lbnQuY3Vyc29yVHlwZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvci5uZXh0KGN1cnNvclR5cGUpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBpc0NlbGxSZW5kZXJPYmplY3QocmVuZGVyOiBSZW5kZXJPYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3nu5jliLblhYPntKDmmK/lkKblnKjljZXlhYPmoLzkuIrpnaJcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNJbkNlbGxSZW5kZXJPYmplY3QocmVuZGVyOiBSZW5kZXJPYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHJlbmRlciwgVGFibGVDZWxsUmVuZGVyT2JqZWN0KSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUmVzaXplUmVuZGVyT2JqZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiByZW5kZXIgaW5zdGFuY2VvZiBSZXNpemVMZWFmUmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkem8oOagh+enu+WKqOS6i+S7tlxuICAgICAqL1xuICAgIHByaXZhdGUgaW52b2tlTW91c2Vtb3ZlRXZlbnQob2xkUmVuZGVyOiBSZW5kZXJPYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkLCBuZXdSZW5kZXI6IFJlbmRlck9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQsIG1vdXNlUG9zOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkUGFyZW50UmVuZGVycyA9IG9sZFJlbmRlciA/IEVsZW1lbnRVdGlsLmdldFJlbmRlck1hcEVsZW1lbnRzKG9sZFJlbmRlcikgOiBbXTtcbiAgICAgICAgY29uc3QgbmV3UGFyZW50UmVuZGVycyA9IG5ld1JlbmRlciA/IEVsZW1lbnRVdGlsLmdldFJlbmRlck1hcEVsZW1lbnRzKG5ld1JlbmRlcikgOiBbXTtcbiAgICAgICAgY29uc3QgbW91c2VsZWF2ZVJlbmRlcnMgPSBvbGRQYXJlbnRSZW5kZXJzLmZpbHRlcihpdGVtID0+IG5ld1BhcmVudFJlbmRlcnMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IG1vdXNlZW50ZXJSZW5kZXJzID0gbmV3UGFyZW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBvbGRQYXJlbnRSZW5kZXJzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBtb3VzZW1vdmVSZW5kZXJzID0gb2xkUGFyZW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBtb3VzZWxlYXZlUmVuZGVycy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbG9vcEludm9rZUV2ZW50ID0gKGV2ZW50TmFtZTogRXZlbnRUeXBlcywgYXJyYXk6IEFycmF5PEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNvdXJjZSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pbnZva2VFdmVudChldmVudE5hbWUsIG1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgbW91c2VsZWF2ZVJlbmRlcnMpO1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZUVudGVyJywgbW91c2VlbnRlclJlbmRlcnMpO1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCBtb3VzZW1vdmVSZW5kZXJzKTtcbiAgICB9XG5cblxuICAgIHByZXZDdXJzb3JJdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAvKipcbiAgICAgKiDop6blj5Hojrflj5bnhKbngrnkuovku7ZcbiAgICAgKiDpnIDopoHmoLnmja7kuIrmrKHojrflj5bnhKbngrnnmoTlhYPntKDvvIzmr5TovoPop6blj5HlpLHljrvnhKbngrnkuovku7ZcbiAgICAgKiBAcGFyYW0gZm9jdXNFbGVtZW50IFxuICAgICAqL1xuICAgIGludm9rZUN1cnNvcihmb2N1c0VsZW1lbnQ6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1c0VsZW1lbnQgPT09IHRoaXMucHJldkN1cnNvckl0ZW1zWzBdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2V0Q3Vyc29yRXZlbnQgPSBuZXcgR290Q3Vyc29yRXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBnZXRDdXJzb3JFdmVudC5zb3VyY2UgPSBmb2N1c0VsZW1lbnQ7XG5cbiAgICAgICAgY29uc3Qgb2xkUGFyZW50cyA9IHRoaXMucHJldkN1cnNvckl0ZW1zO1xuICAgICAgICBjb25zdCBuZXdQYXJlbnRzID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50RWxlbWVudHMoZm9jdXNFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbGVhdmVQYXJlbnRzID0gb2xkUGFyZW50cy5maWx0ZXIoaXRlbSA9PiBuZXdQYXJlbnRzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBlbnRlclBhcmVudHMgPSBuZXdQYXJlbnRzLmZpbHRlcihpdGVtID0+IG9sZFBhcmVudHMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IGxvb3BJbnZva2VFdmVudCA9IChldmVudE5hbWU6IEV2ZW50VHlwZXMsIGFycmF5OiBBcnJheTxFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBMb3N0Q3Vyc29yRXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuc291cmNlID0gZm9jdXNFbGVtZW50O1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuY3R4ID0gdGhpcy5kb2NDdHg7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pbnZva2VFdmVudChldmVudE5hbWUsIG1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0xvc3RDdXJzb3InLCBsZWF2ZVBhcmVudHMpO1xuICAgICAgICBsb29wSW52b2tlRXZlbnQoJ0dvdEN1cnNvcicsIGVudGVyUGFyZW50cyk7XG5cbiAgICAgICAgdGhpcy5wcmV2Q3Vyc29ySXRlbXMgPSBuZXdQYXJlbnRzO1xuICAgICAgICAvL2REb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdHb3RDdXJzb3InLCBmb2N1c0VsZW1lbnQsIGdldEN1cnNvckV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1vdXNlZG93bi1tb3VzZXVwLWNsaWNrXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3VzZUNsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLlZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGFydEhpdEluZm8gJiYgdGhpcy5lbmRIaXRJbmZvICYmIHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQgPT09IHRoaXMuZW5kSGl0SW5mby5lbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEVsZW1lbnQgPSB0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIuZWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlZG93bkV2ZW50ID0gbmV3IE1vdXNlZG93bkVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBtb3VzZWRvd25FdmVudC5zb3VyY2UgPSBzdGFydEVsZW1lbnQ7XG4gICAgICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50Q2xpY2snLCBzdGFydEVsZW1lbnQsIG1vdXNlZG93bkV2ZW50LCBcIkFsbFwiLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAvL3RoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChjb2xsYXBzZWQgJiYgdGhpcy5zdGFydEhpdEluZm8gJiYgc3RhcnRDb250cm9sICYmIHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQgPT09IHRoaXMuZm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vY29uc3QgeyByZW5kZXI6IHsgZWxlbWVudDogZW5kRWxlbWVudCB9LCBvZmZzZXQ6IGVuZEVsZW1lbnRPZmZzZXQgfSA9IHRoaXMuZW5kSGl0SW5mbztcbiAgICAgICAgICAgIC8v5b2T5YmN54Sm54K55YWD57Sg6KKr5ouW5pS+XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkRWxlbWVudCBpbnN0YW5jZW9mIFBpY3R1cmVFbGVtZW50ICYmIHRoaXMuZm9jdXNlZEVsZW1lbnQgIT09IHN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3BFdmVudCA9IG5ldyBEcm9wRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICAgICAgICAgIGRyb3BFdmVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcm9wRXZlbnQuZHJhZ0VsZW1lbnQgPSB0aGlzLmZvY3VzZWRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50RHJvcCcsIHN0YXJ0Q29udHJvbCwgZHJvcEV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jQ2hhbmdlLm1vdmVFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIHRoaXMuZm9jdXNlZEVsZW1lbnQsIHRoaXMuc3RhcnRIaXRJbmZvLm9mZnNldCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpvKDmoIflj4zlh7vkuovku7ZcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlRGJsQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IGV2dC5vZmZzZXRYO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gZXZ0Lm9mZnNldFk7XG4gICAgICAgIC8v6ZyA6KaB5YWI5aSE55CG5piv5ZCm5byA5ZCv6aG155yJ6aG16ISa57yW6L6R5Yqf6IO9XG4gICAgICAgIGNvbnN0IGhpdFJlZ2lvbiA9IHRoaXMuZ2V0SGl0UmVnaW9uKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKChoaXRSZWdpb24gPT09ICdmb290ZXInIHx8IGhpdFJlZ2lvbiA9PT0gJ2hlYWRlcicpICYmICF0aGlzLmRvY0N0eC5kb2N1bWVudC5oZWFkZXJFZGl0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IodGhpcy5zZWxlY3Rpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0UmVnaW9uID09PSAnYm9keScgJiYgdGhpcy5kb2NDdHguZG9jdW1lbnQuaGVhZGVyRWRpdFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKHRoaXMuc2VsZWN0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZG9jRXZlbnQpO1xuICAgICAgICBpZiAoaGl0SW5mbykge1xuICAgICAgICAgICAgZG9jRXZlbnQuc291cmNlID0gaGl0SW5mby5lbGVtZW50O1xuICAgICAgICAgICAgZG9jRXZlbnQuc291cmNlUmVuZGVyID0gaGl0SW5mby5yZW5kZXI7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCBoaXRJbmZvLmVsZW1lbnQsIGRvY0V2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgaWYgKHJlcykgeyByZXR1cm4gfVxuICAgICAgICAgICAgdGhpcy5kYmxDbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueCueWHu+eahOa4suafk+WFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSByZW5kZXJPYmplY3QgXG4gICAgICogQHBhcmFtIHBhclBvcyBcbiAgICAgKiBAcGFyYW0gaGl0UG9zIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbiwgaGl0UG9zOiBQb3NpdGlvbik6IHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCBvZmZzZXQ6IG51bWJlciwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgLy/lpITnkIbljZXlhYPmoLzlkIjlubbvvIzooqvlkIjlubbnmoTljZXlhYPmoLzlvZPliY3lsZ7kuo7ooqvpmpDol4/nirbmgIEs5LiN6IO96KKr6YCJ5oupXG4gICAgICAgIC8vaWYgKHJlbmRlck9iamVjdC5lbGVtZW50ICYmIHJlbmRlck9iamVjdC5lbGVtZW50LnZpc2lhYmxlID09PSBmYWxzZSB8fCByZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgIGlmICghRWxlbWVudFV0aWwuY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXJPYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlbmRlck9iamVjdC5yZWN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlck9iamVjdC5yZWN0IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7IHg6IHBhclBvcy54ICsgcmVuZGVyT2JqZWN0LnJlY3QueCwgeTogcGFyUG9zLnkgKyByZW5kZXJPYmplY3QucmVjdC55LCB3aWR0aDogcmVuZGVyT2JqZWN0LnJlY3Qud2lkdGgsIGhlaWdodDogcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VFJvd0hpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0LCBwYXJQb3MsIGhpdFBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBoaXRQb3MueCAtIHJlbmRlck9iamVjdFJlY3QueDtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBFbGVtZW50VXRpbC5nZXRIaXRSZW5kZXJPZmZzZXQocmVuZGVyT2JqZWN0LCB4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBoaXRQb3MpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihjaGlsZFJlbmRlciwgeyB4OiByZW5kZXJPYmplY3RSZWN0LngsIHk6IHJlbmRlck9iamVjdFJlY3QueSB9LCBoaXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN6IyD5Zu05pyq5Ye75Lit5Lu75L2V5YWD57Sg77yM5YiZ6ZyA6KaB5Yy56YWN5pyA6L+R55qE5YWD57SgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjZW50SGl0UmVuZGVyKHJlbmRlck9iamVjdCwgcGFyUG9zLCBoaXRQb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuXG4gICAgcHJpdmF0ZSBnZXRUUm93SGl0TGVhZlJlbmRlcihyZW5kZXJPYmplY3Q6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJlbmRlck9iamVjdC5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgLy/ot6jpobXph43lpI3mmL7npLrnmoTlpLTooYzvvIzlsZ7kuo7kuI3lj6/ngrnlh7vljLrln59cbiAgICAgICAgLy/lj6rmnInooajnrKzkuIDpobXpg6jliIblj6/ku6Xngrnlh7tcbiAgICAgICAgaWYgKHJvd0VsZS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3dFbGUucGFpbnRSZW5kZXJzLmluZGV4T2YocmVuZGVyT2JqZWN0KSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0geyB4OiBwYXJlbnQueCArIHJlbmRlck9iamVjdC5yZWN0LngsIHk6IHBhcmVudC55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSwgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLCBoZWlnaHQ6IHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoY2hpbGRSZW5kZXIsIHsgeDogcmVuZGVyT2JqZWN0UmVjdC54LCB5OiByZW5kZXJPYmplY3RSZWN0LnkgfSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlpoLmnpzlvZPliY3ojIPlm7TmnKrlh7vkuK3ku7vkvZXlhYPntKDvvIzliJnpnIDopoHljLnphY3mnIDov5HnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0IFxuICAgICAqIEBwYXJhbSBwYXJlbnQgXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmVjZW50SGl0UmVuZGVyKHJlbmRlck9iamVjdDogQnJhbmNoUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJQb3M6IFBvc2l0aW9uID0geyB4OiByZW5kZXJPYmplY3QucmVjdC54ICsgcGFyZW50LngsIHk6IHJlbmRlck9iamVjdC5yZWN0LnkgKyBwYXJlbnQueSB9XG4gICAgICAgIGxldCBjaGlsZFJlbmRlcnMgPSBFbGVtZW50VXRpbC5nZXRBdmFpbEhpdFJlbmRlck9iamVjdHMocmVuZGVyT2JqZWN0LCBwYXJlbnQpO1xuICAgICAgICBjaGlsZFJlbmRlcnMgPSBjaGlsZFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ucmVuZGVyLmRpc2FibGVDbGljayk7XG4gICAgICAgIGxldCBjaGlsZHJlblJlbmRlck1hcCA9IGNoaWxkUmVuZGVycy5tYXAoaXRlbSA9PiAoeyByZWN0OiBpdGVtLnJlY3QsIGRpc3RhbmNlOiBFbGVtZW50VXRpbC5nZXREaXN0YW5jZVRvUmVjdChpdGVtLnJlY3QsIHBvc2l0aW9uKSwgcmVuZGVyOiBpdGVtLnJlbmRlciB9KSlcbiAgICAgICAgLy9yZWN0cyA9IHJlY3RzLmNvbmNhdChjaGlsZFJlbmRlcnMubWFwKGl0ZW0gPT4gKHsgcmVjdDogaXRlbS5yZWN0LCBkaXN0YW5jZTogRWxlbWVudFV0aWwuZ2V0RGlzdGFuY2UoeyB4OiBpdGVtLnJlY3QueCArIGl0ZW0ucmVjdC53aWR0aCwgeTogaXRlbS5yZWN0LnkgfSwgcG9zaXRpb24pLCByZW5kZXI6IGl0ZW0ucmVuZGVyIH0pKSk7XG4gICAgICAgIGNoaWxkcmVuUmVuZGVyTWFwLnNvcnQoKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEuZGlzdGFuY2UgLSBpdGVtMi5kaXN0YW5jZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5SZW5kZXJNYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFkamFjZW50UmVuZGVyID0gY2hpbGRyZW5SZW5kZXJNYXBbMF07XG4gICAgICAgICAgICBpZiAoIWFkamFjZW50UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWRqYWNlbnRSZW5kZXIucmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRSZWNlbnRIaXRSZW5kZXIoYWRqYWNlbnRSZW5kZXIucmVuZGVyLCBjdXJyZW50UmVuZGVyUG9zLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRqYWNlbnRSZW5kZXIucmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoYWRqYWNlbnRSZW5kZXIucmVjdC54ID4gcG9zaXRpb24ueCkge1xuICAgICAgICAgICAgICAgICAgICB4ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFkamFjZW50UmVuZGVyLnJlY3QueCArIGFkamFjZW50UmVuZGVyLnJlY3Qud2lkdGggPCBwb3NpdGlvbi54KSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBhZGphY2VudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbi54IC0gYWRqYWNlbnRSZW5kZXIucmVjdC54O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBFbGVtZW50VXRpbC5nZXRIaXRSZW5kZXJPZmZzZXQoYWRqYWNlbnRSZW5kZXIucmVuZGVyLCB4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IGFkamFjZW50UmVuZGVyLnJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiBhZGphY2VudFJlbmRlci5yZWN0LFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoRkb2MtcGFnZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SGl0RG9jUGFnZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogeyBkb2NSZW5kZXI6IERvY3VtZW50UmVuZGVyT2JqZWN0LCBwYWludEFic29sdXRlUmVjdDogUG9zaXRpb24sIGhpdFBhZ2VQb3M6IFBvc2l0aW9uLCBkb2NJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0UG9zOiBQb3NpdGlvbiA9IHsgeDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZIH07XG4gICAgICAgIGNvbnN0IGRvY0NvbnRhaW5lciA9IHRoaXMuZG9jdW1lbnRQYWludC5nZXREb2NDb250YWluZXIoKTtcbiAgICAgICAgbGV0IHsgeCwgeSB9ID0gZG9jQ29udGFpbmVyLnJlY3Q7XG4gICAgICAgIHkgLT0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgZG9jQ29udGFpbmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3M6IFBvc2l0aW9uID0geyB4OiBkb2NSZW5kZXIucmVjdC54ICsgeCwgeTogZG9jUmVuZGVyLnJlY3QueSArIHkgfTtcbiAgICAgICAgICAgIGlmIChkb2NSZW5kZXJQb3MueSArIGRvY1JlbmRlci5yZWN0LmhlaWdodCA+IGhpdFBvcy55KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZG9jUmVuZGVyUG9zLnkgPiBoaXRQb3MueSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGkgPSBpID09PSBkb2NDb250YWluZXIubGVuZ3RoID8gaSAtIDEgOiBpO1xuICAgICAgICBjb25zdCBoaXREb2MgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGRvY1BvcyA9IHsgeDogaGl0RG9jLnJlY3QueCArIHgsIHk6IGhpdERvYy5yZWN0LnkgKyB5IH07XG4gICAgICAgIGNvbnN0IGhpdFBhZ2VQb3M6IFBvc2l0aW9uID0geyB4OiBoaXRQb3MueCAtIGRvY1Bvcy54LCB5OiBoaXRQb3MueSAtIGRvY1Bvcy55IH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvY1JlbmRlcjogaGl0RG9jLFxuICAgICAgICAgICAgcGFpbnRBYnNvbHV0ZVJlY3Q6IGRvY1BvcyxcbiAgICAgICAgICAgIGRvY0luZGV4OiBpLFxuICAgICAgICAgICAgaGl0UGFnZVBvc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R5LqL5Lu2XG4gICAgICogQHBhcmFtIHR5cGUgXG4gICAgICogQHBhcmFtIHNvdXJjZUVsZW1lbnQgXG4gICAgICovXG4gICAgc3RhdGljIGludm9rZUV2ZW50KHR5cGU6IEV2ZW50VHlwZXMsIHNvdXJjZUVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50OiBFbGVtZW50RXZlbnQsIGV2ZW50U3RhZ2U6IEV2ZW50U3RhZ2UsIGRvY0N0eDogRWRpdG9yQ29udGV4dCk6IEVsZW1lbnRFdmVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50RWxlbWVudHMoc291cmNlRWxlbWVudCk7XG4gICAgICAgIC8v5YWI5omn6KGM5o2V6I636Zi25q61LOWcqOaJp+ihjOWGkuazoVxuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID4gLXBhcmVudHMubGVuZ3RoOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChpID4gMSAmJiAoZXZlbnRTdGFnZSAhPT0gJ0NhcHR1cmUnICYmIGV2ZW50U3RhZ2UgIT09ICdBbGwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgPD0gMCAmJiAoZXZlbnRTdGFnZSAhPT0gJ0J1YmJsaW5nJyAmJiBldmVudFN0YWdlICE9PSAnQWxsJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50c1tNYXRoLmFicyhpKV07XG4gICAgICAgICAgICBldmVudC5jdXJyZW50RWxlbWVudCA9IGNoaWxkO1xuICAgICAgICAgICAgZXZlbnQuc291cmNlID0gc291cmNlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJDYXB0dXJlID0gaSA+IDA7XG4gICAgICAgICAgICBjaGlsZC5pbnZva2VFdmVudCh0eXBlLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jQ3R4Lmludm9rZVR5cGVIYW5kbGVyKGNoaWxkLCB0eXBlLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Y+R5biD5b2T5YmN55qE54K55Ye75L+h5oGvXG4gICAgICovXG4gICAgcHJpdmF0ZSBwdWJIaXRJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkLm5leHQoeyBzdGFydEhpdEluZm86IHRoaXMuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogdGhpcy5lbmRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAqIOiOt+WPlum8oOagh+aJgOWcqOeahOa4suafk+WFg+e0oOWvueixoVxuICAgICAgICogQHBhcmFtIHJlbmRlck9iamVjdCBcbiAgICAgICAqIEBwYXJhbSBwYXJlbnQgXG4gICAgICAgKiBAcGFyYW0gcG9zaXRpb24gXG4gICAgICAgKiBAcmV0dXJucyBcbiAgICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TW91c2VvdmVyUmVuZGVyKHJlbmRlck9iamVjdDogUmVuZGVyT2JqZWN0LCBwYXJlbnQ6IFBvc2l0aW9uLCBwb3NpdGlvbjogUG9zaXRpb24pOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0geyB4OiBwYXJlbnQueCArIHJlbmRlck9iamVjdC5yZWN0LngsIHk6IHBhcmVudC55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSwgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLCBoZWlnaHQ6IHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3kuLrooajljZXlhYPmoLzvvIzkvYbmmK/ooajmoLzkuI3lrZjlnKjkuIrkuItwYWRkaW5n77yMXG4gICAgICAgICAgICAgICAgLy/liJnooajmoLzkuIrovrnmoYblkozkuIvovrnmoYblj6/og73kvJrlkozlhoXlrrkocGFyYWdyYXBoKemHjeWPoO+8jFxuICAgICAgICAgICAgICAgIC8v5b2T5YmN5YWJ5qCH5ZyodGFibGUtcmVuZGVy5LiK5pe277yM5aeL57uI5peg5rOV6I635Y+W5YiwdGFibGUtY2VsbC1yZW5kZXJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgVGFibGVDZWxsUmVuZGVyT2JqZWN0ICYmIChDb21tb25VdGlsLkFwcHJveG1hdGVWYWx1ZUluUmFuZ2UocmVuZGVyT2JqZWN0UmVjdC55LCAxLCBwb3NpdGlvbi55KSB8fCBDb21tb25VdGlsLkFwcHJveG1hdGVWYWx1ZUluUmFuZ2UocmVuZGVyT2JqZWN0UmVjdC55ICsgcmVuZGVyT2JqZWN0UmVjdC5oZWlnaHQsIDEsIHBvc2l0aW9uLnkpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXIoY2hpbGRSZW5kZXIsIHsgeDogcmVuZGVyT2JqZWN0UmVjdC54LCB5OiByZW5kZXJPYmplY3RSZWN0LnkgfSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplUmVuZGVyKGU6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICgoPGFueT50aGlzLmVkZ2VSZW5kZXJJbmZvPy5yZW5kZXJFbGVtZW50KVsncmVzaXplYWJsZSddKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUVsZW1lbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lZGdlUmVuZGVySW5mbz8ucmVuZGVyRWxlbWVudCBpbnN0YW5jZW9mIFRhYmxlQ2VsbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDZWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7ooajmoLxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZVRhYmxlQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvIHx8ICF0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gdGhpcy5nZXRSZXNpemVUYWJsZUNlbGwoKTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGNvbnN0IG1vdXNlZG93blBvcyA9IHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zO1xuICAgICAgICBjb25zdCBtb3ZlRGlzdGFuY2VYID0gdGhpcy5jdXJyZW50UG9zLnggLSBtb3VzZWRvd25Qb3MueDtcbiAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlWSA9IHRoaXMuY3VycmVudFBvcy55IC0gbW91c2Vkb3duUG9zLnk7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGxFbGVtZW50LnBhcmVudDtcbiAgICAgICAgY29uc3QgdGFibGUgPSByb3c/LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGlmICghcm93IHx8ICF0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgfCB0YWJsZSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleChjZWxsRWxlbWVudCk7XG4gICAgICAgIGxldCBjZWxsV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgoY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY29sc0NvdW50ID0gdGFibGUuZ2V0Q29sc0NvdW50KCk7XG4gICAgICAgIGlmIChbJ2xlZnQnLCAncmlnaHQnXS5pbmNsdWRlcyhib3JkZXIpKSB7XG4gICAgICAgICAgICBpZiAoY2VsbEluZGV4ID09PSAwICYmIGJvcmRlciA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc2l6ZUNvbFdpZHRoID0gMDtcbiAgICAgICAgICAgIGxldCByZXNpemVDb2xJbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoYm9yZGVyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xJbmRleCA9IGNlbGxJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoICs9IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICAgICAgY2VsbFdpZHRoIC09IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJvcmRlciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbEluZGV4ID0gY2VsbEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAvL+enu+WKqOacgOWQjuS4gOWIl+aXtu+8jOWPs+S+p+ayoeacieWIl+S6hu+8jHJlc2l6ZUNvbFdpZHRo55qE5YC85Li6LTFcbiAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZUNvbFdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCAtPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjZWxsV2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocmVzaXplQ29sV2lkdGggIT0gLTEgJiYgcmVzaXplQ29sV2lkdGggPCAyMCkgfHwgY2VsbFdpZHRoIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgsIHJlc2l6ZUNvbFdpZHRoKTtcbiAgICAgICAgICAgIHRhYmxlLnNldENlbGxXaWR0aChjZWxsSW5kZXgsIGNlbGxXaWR0aCk7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRhYmxlLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoWydib3R0b20nLCAndG9wJ10uaW5jbHVkZXMoYm9yZGVyKSkge1xuICAgICAgICAgICAgbGV0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgICAgICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgYm9yZGVyID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5oyJ54Wn56e75Yqo5bqV6L656K6h566XXG4gICAgICAgICAgICByb3dJbmRleCA9IGJvcmRlciA9PT0gJ3RvcCcgPyByb3dJbmRleCAtIDEgOiByb3dJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVJvd0VsZSA9IHRhYmxlLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgcmVzaXplUm93UmVuZGVyID0gcmVzaXplUm93RWxlLm1lYXN1cmVSZW5kZXIgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocmVzaXplUm93UmVuZGVyLmVsZW1lbnQgIT09IHJlc2l6ZVJvd0VsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+e8qeaUvuihqOagvOihjOmrmOW6puWHuueOsOmUmeivryznu5jliLblhYPntKDlkozooajmoLzlr7nosaHkuI3lr7nlupQnKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHJlc2l6ZVJvd0VsZS5wcm9wcy5taW5IZWlnaHQgPz8gMDtcbiAgICAgICAgICAgIC8v5b2T5YmN6KGM5LiN5a2Y5Zyo5pyA5bCP6auY5bqm6K6+572u77yM5bm25LiU57yp5pS+6auY5bqm5Li66LSf5pWwXG4gICAgICAgICAgICBpZiAobWluSGVpZ2h0IDw9IDAgJiYgbW92ZURpc3RhbmNlWSA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+W9k+WJjeWGheWuuemrmOW6plxuICAgICAgICAgICAgbGV0IHJlc2l6ZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQgPSBFbGVtZW50VXRpbC5nZXRUYWJsZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQocmVzaXplUm93UmVuZGVyKTtcbiAgICAgICAgICAgIGxldCByZXNpemVSb3dNaW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgaWYgKG1pbkhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gcmVzaXplUm93UmVuZGVyQ29udGVudEhlaWdodCArIG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IG1pbkhlaWdodCArIG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+e8qeaUvueahOmrmOW6puWwj+S6juWGheWuuemrmOW6pu+8jOWImemHjee9ruihjOacgOWwj+mrmOW6plxuICAgICAgICAgICAgaWYgKHJlc2l6ZVJvd01pbkhlaWdodCA8PSByZXNpemVSb3dSZW5kZXJDb250ZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy9yZXNpemVSb3dFbGUudHJQcm9wcy5taW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNpemVSb3dFbGUucHJvcHMubWluSGVpZ2h0ID0gcmVzaXplUm93TWluSGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICB0YWJsZS5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNpemVUYWJsZUNlbGwoKTogVGFibGVDZWxsRWxlbWVudCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlUmVuZGVySW5mbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlZGdlUmVuZGVySW5mbyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IHRoaXMuZWRnZVJlbmRlckluZm8ucmVuZGVyRWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBjb25zdCByb3cgPSBjZWxsRWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZSA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleChjZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBpZiAoY2VsbEVsZW1lbnQucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcgfHwgYm9yZGVyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2VsbEluZGV4ICsgMTsgaSA8IHRhYmxlLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cuZ2V0Q2hpbGQoaSAtIDEpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDosIPmlbTlhYPntKDlpKflsI9cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZUVsZW1lbnQoZTogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvIHx8ICF0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltZ0VsZW1lbnQgPSA8dW5rbm93bj50aGlzLmVkZ2VSZW5kZXJJbmZvLnJlbmRlckVsZW1lbnQgYXMgeyBwcm9wczogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IH07XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBjb25zdCBtb3VzZWRvd25Qb3MgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcztcbiAgICAgICAgbGV0IG1vdmVEaXN0YW5jZVggPSB0aGlzLmN1cnJlbnRQb3MueCAtIG1vdXNlZG93blBvcy54O1xuICAgICAgICBsZXQgbW92ZURpc3RhbmNlWSA9IHRoaXMuY3VycmVudFBvcy55IC0gbW91c2Vkb3duUG9zLnk7XG4gICAgICAgIGlmIChbJ2xlZnQtdG9wJywgJ2xlZnQtbWlkZGxlJywgJ2xlZnQtYm90dG9tJywgJ3JpZ2h0LXRvcCcsICdyaWdodC1taWRkbGUnLCAncmlnaHQtYm90dG9tJywgJ3RvcC1taWRkbGUnLCAnYm90dG9tLW1pZGRsZSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoWydsZWZ0LW1pZGRsZScsICdyaWdodC1taWRkbGUnXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFsndG9wLW1pZGRsZScsICdib3R0b20tbWlkZGxlJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VYID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vc2hpZnTplK7mjInmr5TkvovnvKnmlL5cbiAgICAgICAgICAgIGlmIChlLnNoaWZ0ICYmIFsnbGVmdC10b3AnLCAncmlnaHQtdG9wJywgJ2xlZnQtYm90dG9tJywgJ3JpZ2h0LWJvdHRvbSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobW92ZURpc3RhbmNlWCkgPiBNYXRoLmFicyhtb3ZlRGlzdGFuY2VZKSkge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IG1vdmVEaXN0YW5jZVggLyBpbWdFbGVtZW50LnByb3BzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VZID0gTWF0aC5mbG9vcihzY2FsZSAqIGltZ0VsZW1lbnQucHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IG1vdmVEaXN0YW5jZVkgLyBpbWdFbGVtZW50LnByb3BzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWCA9IE1hdGguZmxvb3Ioc2NhbGUgKiBpbWdFbGVtZW50LnByb3BzLndpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgKz0gbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIGlmIChpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggPCAxMCkge1xuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgPCAxMCkge1xuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3lhajpg6ggY3RybCtBXG4gICAgICovXG4gICAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcmVnaW9uVGFyZ2V0ID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvblRhcmdldChzdGFydENvbnRyb2wpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhcmVnaW9uVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RMZWFmID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChyZWdpb25UYXJnZXQudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgbGFzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocmVnaW9uVGFyZ2V0LnRhcmdldCk7XG4gICAgICAgIGlmICghZmlyc3RMZWFmIHx8ICFsYXN0TGVhZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdExlYWYgb3IgbGFzdExlYWYgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChmaXJzdExlYWYsIDApO1xuICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobGFzdExlYWYsIC0xKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShuZXdTZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgIC8vY29uc3QgZG9jPVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog56e75Yqo5YWJ5qCH5Yiw6KGM6aaWXG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvTGluZVN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0hvbWVPckVuZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+WKqOWFieagh+WIsOihjOWwvlxuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb0xpbmVFbmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvSG9tZU9yRW5kKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbnp7vliqjlhYnmoIfliLDooYzlsL7miJbooYzpppZcbiAgICAgKiBAcGFyYW0gaG9tZSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdmVDdXJzb3JUb0hvbWVPckVuZChob21lOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIXRoaXMuZG9jQ3R4LmN1cnNvclJlY3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kb2NDdHguY3Vyc29yUmVjdDtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gcmVjdC54O1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBkb2NFdmVudC5idXR0b25zID0gMTtcbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhkb2NFdmVudCk7XG4gICAgICAgIGlmICghaGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoaGl0SW5mby5yZW5kZXIsIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdFxuICAgICAgICBjb25zdCBsaW5lUG9zUmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHBhcmFSZW5kZXIpXG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFggPSBsaW5lUG9zUmVjdC54ICsgKGhvbWUgPyAwIDogbGluZVBvc1JlY3Qud2lkdGgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gbGluZVBvc1JlY3QueSArIGxpbmVQb3NSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0geyB4OiBkb2NFdmVudC5nbG9iYWxYLCB5OiBkb2NFdmVudC5nbG9iYWxZIH07XG4gICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICog5ZCR5bem56e75Yqo5YWJ5qCHXG4gICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9MZWZ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkUmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihwcmV2RWxlKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3UmVnaW9uICE9PSBvbGRSZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgLSAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHlj7Pnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9SaWdodCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAodGhpcy5pc0xlYWZFbGVFbmRPZmZzZXQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24obmV4dEVsZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9sZFJlZ2lvbiAhPT0gbmV3UmVnaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHkuIrnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9VcE9yRG93bih1cDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB7IHgsIHkgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zO1xuICAgICAgICB5IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0geDtcbiAgICAgICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSB5IC0gKHVwID8gaSAqIDIgOiBpICogLTIpO1xuICAgICAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IDE7XG4gICAgICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGRvY0V2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGhpdEluZm8/LmVsZW1lbnQgPT09IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sICYmIGhpdEluZm8ub2Zmc2V0ID09PSB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFoaXRJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHsgeDogeCwgeTogeSB9O1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzbW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lgY/np7vph4/mmK/lkKblpITkuo7lvZPliY3lhYPntKDnmoTmnKvlsL5cbiAgICAgKiBAcGFyYW0gZWxlIFxuICAgICAqIEBwYXJhbSBvZmZzZXQgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0xlYWZFbGVFbmRPZmZzZXQoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgPT09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoTmlofmoaPljLrln59cbiAgICAgKiBAcGFyYW0gZG9jUmVuZGVyIFxuICAgICAqIEBwYXJhbSBwb3MgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgZ2V0SGl0UmVnaW9uKGRvY0V2ZW50OiBNb3VzZUVsZW1lbnRFdmVudCk6IEhpdFJlZ2lvbiB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKCFoaXREb2NJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRvY1JlbmRlciwgaGl0UGFnZVBvcyB9ID0gaGl0RG9jSW5mbztcbiAgICAgICAgY29uc3QgaGVhZGVyUmVuZGVyID0gRWxlbWVudFV0aWwuZmluZENoaWxkUmVuZGVyKGRvY1JlbmRlciwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGZvb3RlclJlbmRlciA9IEVsZW1lbnRVdGlsLmZpbmRDaGlsZFJlbmRlcihkb2NSZW5kZXIsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAoIWhlYWRlclJlbmRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9vdGVyUmVuZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zvb3RlciBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyTGluZSA9IGhlYWRlclJlbmRlci5yZWN0LnkgKyBoZWFkZXJSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGZvb3RlckxpbmUgPSBmb290ZXJSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAoaGl0UGFnZVBvcy55IDw9IGhlYWRlckxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGVhZGVyJztcbiAgICAgICAgfSBlbHNlIGlmIChoaXRQYWdlUG9zLnkgPD0gZm9vdGVyTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICdib2R5JztcbiAgICAgICAgfSBlbHNlIGlmIChoaXRQYWdlUG9zLnkgPiBmb290ZXJMaW5lICYmIGhpdFBhZ2VQb3MueSA8IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuICdmb290ZXInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG4iLCJpbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTGVhZkVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgS2V5Ym9yYWRFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFdmVudCB9IGZyb20gXCIuL2RvY3VtZW50LWV2ZW50XCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb3NpdGlvblN0YXJ0SW5mbyB7XG4gICAgZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIElucHV0RGF0YSB7XG4gICAgY29tcG9zaXRpb24/OiBib29sZWFuO1xuICAgIC8v5byA5ZCv6L6T5YWl5rOV5ZCO55qE5YWJ5qCH55qE6LW354K55L2N572uXG4gICAgY29tcG9zaXRpb25TdGFydEluZm8/OiBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgLy/ovpPlhaXms5XkuYvliY3ovpPlhaXnmoTlhoXlrrlcbiAgICBwcmV2SW5wdXREYXRhPzogc3RyaW5nO1xuICAgIGRhdGE6IHN0cmluZ1xufVxuXG4vKipcbiAqIOi+k+WFpeWkhOeQhlxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRJbnB1dCB7XG4gICAgLyoqXG4gICAgICog5YWJ5qCH5piv5ZCm5Y+v6KeBXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3Vyc29yVmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIOWFieagh+mXqueDgeeKtuaAgVxuICAgICAqL1xuICAgIHByaXZhdGUgX2N1cnNvckJsaW5rc1N0YXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJzb3JCbGlua3NJbnRlcnZhbElEOiBhbnk7XG4gICAgLy/mmK/lkKbmmK/lvIDlkK/ovpPlhaXms5XkuoZcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uU3RhcnQgPSBmYWxzZTtcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjui+k+WFpeeahOaWh+Wtl1xuICAgIHByaXZhdGUgY29tcG9zaXRpb25QcmV2RGF0YSE6IHN0cmluZztcbiAgICAvL+W8gOWQr+i+k+WFpeazleWQjueahOeahOWFg+e0oFxuICAgIHByaXZhdGUgY29tcG9zaXRpb25TdGFydEluZm8hOiBJQ29tcG9zaXRpb25TdGFydEluZm8gfCBudWxsO1xuICAgIC8v6L6T5YWl5YaF5a655LqL5Lu2XG4gICAgb25JbnB1dEV2ZW50OiBTdWJqZWN0PElucHV0RGF0YT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vYmFja3NwYWNlIOmUruebmOS6i+S7tlxuICAgIG9uQmFja3NwYWNlRXZlbnQ6IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZGVsZXRlIOmUruebmOS6i+S7tlxuICAgIG9uRGVsZXRlRXZlbnQ6IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZW50ZXIg6ZSu55uY5LqL5Lu2XG4gICAgb25FbnRlckV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+W3pumUrlxuICAgIG9uTGVmdEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WPs+mUrlxuICAgIG9uUmlnaHRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lpI3liLZcbiAgICBvbkNvcHlFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5Ymq5YiHXG4gICAgb25DdXRFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v57KY6LS0XG4gICAgb25QYXN0ZUV2ZW50OiBTdWJqZWN0PENsaXBib2FyZEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/mj5LlhaXmjaLooYznrKZcbiAgICBvbkluc2VydEJyOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2N0cmwrQSDlhajpgInkuovku7ZcbiAgICBvblNlbGVjdEFsbEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2hvbWUg5LqL5Lu2XG4gICAgb25Ib21lRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8vZW5kIOS6i+S7tlxuICAgIG9uRW5kRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uVXBFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25Eb3duRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdElucHV0OiBIVE1MSW5wdXRFbGVtZW50LCBwcml2YXRlIGVkaXRDdXJzb3I6IEhUTUxTcGFuRWxlbWVudCwgcHJpdmF0ZSBjdXJzb3JXcmFwcGVyOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5zdGFydEN1cnNvckJsaW5rcygpO1xuICAgICAgICBmcm9tRXZlbnQodGhpcy5lZGl0SW5wdXQsICdibHVyJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnNvclZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeahhiBibHVyJyk7XG4gICAgICAgIH0pXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVkaXRJbnB1dCwgJ2ZvY3VzJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeahhiBmb2N1cycpO1xuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQodGhpcy5lZGl0SW5wdXQsICdpbnB1dCcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRJbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeaWh+Wtl+S6hicpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmVkaXRJbnB1dC52YWx1ZSwgcHJldklucHV0RGF0YTogJycsIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBzdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbnN0YXJ0Jykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXms5XlvIDlp4snKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gPSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbnVwZGF0ZScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT09IHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeS6hu+8micgKyBldnQuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm8sXG4gICAgICAgICAgICAgICAgY29tcG9zaXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgcHJldklucHV0RGF0YTogdGhpcy5jb21wb3NpdGlvblByZXZEYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9IGV2dC5kYXRhO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENvbXBvc2l0aW9uRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAnY29tcG9zaXRpb25lbmQnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY29tcG9zaXRpb25lbmQnKVxuICAgICAgICAgICAgdGhpcy5jb21wb3NpdGlvblN0YXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEgPSAnJztcbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRPZmZzZXQ6IHRoaXMuY29tcG9zaXRpb25TdGFydE9mZnNldCxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblJlY29yZENvbnRlbnQ6IHRoaXMuY29tcG9zaXRpb25SZWNvcmRDb250ZW50XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIC8vIHRoaXMub25JbnB1dEV2ZW50Lm5leHQoe1xuICAgICAgICAgICAgLy8gICAgIGRhdGE6IGV2dC5kYXRhLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvLFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvc2l0aW9uOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgIHByZXZJbnB1dERhdGE6ICcnXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gPSBudWxsO1xuICAgICAgICAgICAgLy90aGlzLmNvbXBvc2l0aW9uUmVjb3JkQ29udGVudCA9ICcnO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlFdmVudCA9IG5ldyBLZXlib3JhZEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBrZXlFdmVudC5zb3VyY2VFdmVudCA9IGV2dDtcbiAgICAgICAgICAgIGlmIChEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50S2V5RG93bicsIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwga2V5RXZlbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2dC5rZXlDb2RlID09PSA4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDEzICYmICFldnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXJFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzNykge1xuICAgICAgICAgICAgICAgIHRoaXMub25MZWZ0RXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmlnaHRFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25VcEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRvd25FdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMTMgJiYgZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkluc2VydEJyLm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDQ2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmN0cmxLZXkgJiYgZXZ0LmtleUNvZGUgPT09IDY1KSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW5kRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJjb3B5XCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHlFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KHRoaXMuZWRpdElucHV0LCBcInBhc3RlXCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblBhc3RlRXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJjdXRcIikuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ3V0RXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCH6Zeq54OBXG4gICAgKi9cbiAgICBzdGFydEN1cnNvckJsaW5rcygpIHtcbiAgICAgICAgLy8gdGhpcy5jdXJzb3JCbGlua3NJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAvLyAgICAgLy90aGlzLnNldEN1cnNvckJsaW5rcygpO1xuICAgICAgICAvLyB9LCA1MDApO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jdXJzb3JCbGlua3NJbnRlcnZhbElEKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYnmoIfpl6rng4FcbiAgICAgKi9cbiAgICBzZXRDdXJzb3JCbGlua3MoKSB7XG4gICAgICAgIHRoaXMuZWRpdEN1cnNvci5zdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5fY3Vyc29yQmxpbmtzU3RhdGUgPyAndHJhbnNwYXJlbnQnIDogJ2JsYWNrJztcbiAgICAgICAgdGhpcy5fY3Vyc29yQmxpbmtzU3RhdGUgPSAhdGhpcy5fY3Vyc29yQmxpbmtzU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCH5L2N572uXG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgc2V0Q3Vyc29yUG9zaXRpb24ocG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyB9KSB7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS5sZWZ0ID0gcG9zaXRpb24ueCArICdweCc7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS50b3AgPSBwb3NpdGlvbi55ICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLmhlaWdodCA9IHBvc2l0aW9uLmhlaWdodCArICdweCc7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgICAgLy90aGlzLnNldEN1cnNvcklucHV0U3RhdHVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6Jma5ouf5YWJ5qCH55qE5Y+v6KeB5oCnXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBzZXRDdXJzb3JWaXNpYmlsaXR5KHZpc2liaWxpdHk6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmlsaXR5ID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICAgICAgaWYgKHZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRGb2N1cyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rui+k+WFpeeKtuaAgVxuICAgICAqIEBwYXJhbSBmb2N1cyBcbiAgICAgKi9cbiAgICBzZXRJbnB1dEZvY3VzKGZvY3VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1cykge1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQucmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LmZvY3VzKCk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vdGhpcy5lZGl0SW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgeyBWaWV3T3B0aW9ucywgRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFBvc2l0aW9uLCBSZWN0IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMsIFZhbGlkYXRlUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZW54dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBDb21tQ29udGVudEJhc2VFbGVtZW50LCBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi9kb2N1bWVudC9kb2MtaW1wbFwiO1xuXG4vKipcbiAqIOaVsOaNruWFg+mqjOivgeaPkOekulxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVFbGVtZW50IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDxWYWxpZGF0ZVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd2YWxpZGF0ZScpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFZhbGlkYXRlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGVueHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBWYWxpZGF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnBhZGRpbmcubGVmdCA9IDE0O1xuICAgICAgICByZW5kZXIucGFkZGluZy50b3AgPSAyNDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySXRlbXMoKTtcbiAgICAgICAgY29uc3QgcGFyYSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0ZXh0LnByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRleHQucHJvcHMuZm9udE5hbWUgPSAn562J57q/JztcbiAgICAgICAgdGV4dC5wcm9wcy5jb2xvciA9ICcjMDAwMDAwJ1xuICAgICAgICB0ZXh0LnRleHQgPSBjb250ZW50O1xuICAgICAgICBwYXJhLmFkZENoaWxkKHRleHQpO1xuICAgICAgICB0aGlzLmFkZENoaWxkKHBhcmEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlUmVuZGVyT2JqZWN0IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PFZhbGlkYXRlRWxlbWVudD4ge1xuICAgIGJlZ2luUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgbGV0IGJvcmRlckNvbG9yID0gdGhpcy5lbGVtZW50LmZvY3VzID8gJyNmYThjMTYnIDogJyNmZmQ1OTEnO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIGJvcmRlckNvbG9yKTtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDgsIHRoaXMucmVjdC5oZWlnaHQsICcjODcxNDAwJylcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v6I635Y+W5a6h6ZiF5qCH6K6w55qE57uY5Yi25Z2Q5qCHXG4gICAgICAgIGxldCBjb21tTWFya1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIHsgeDogMCwgeTogLWN0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZIH0pO1xuICAgICAgICBjb25zdCBjb21tTWFya0xpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgY29tbU1hcmtQb3MpO1xuICAgICAgICBjb21tTWFya1Bvcy55ID0gY29tbU1hcmtMaW5lUG9zLnkgKyAyO1xuXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyLCB7IHg6IDAsIHk6IC1jdHgudmlld09wdGlvbnMudHJhbnNsYXRlWSB9KTtcbiAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IGNvbW1NYXJrUG9zLnggLSBkb2NSZW5kZXJQb3MueCAtIGRvY1JlbmRlci5wYWRkaW5nLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gY3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCAtIG1hcmdpbkxlZnQgLSBkb2NSZW5kZXIucGFkZGluZy5yaWdodCAqIDI7XG4gICAgICAgIGN0eC5vdmVybGF5c0NvbnRleHQuZHJhd0Rhc2hMaW5lKFtjb21tTWFya1BvcywgeyB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsIHk6IGNvbW1NYXJrUG9zLnkgfV0sIFsxLCAxXSwgJ3JlZCcpO1xuICAgICAgICBjdHgub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbeyB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsIHk6IGNvbW1NYXJrUG9zLnkgfSwgcG9zaXRpb25dLCBbMSwgMV0sICdyZWQnKTtcblxuICAgICAgICB0aGlzLnJlbmRlclRpdGxlKGN0eCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJlbmRlclRpdGxlKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9wUGFkZGluZyA9IDI0O1xuICAgICAgICBjb25zdCB7IHByb3BzIH0gPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gMTI7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9ICfmpbfkvZMnO1xuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmVsZW1lbnQucHJvcHMudGl0bGU7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHRpdGxlLCB0ZXh0UHJvcHMpO1xuICAgICAgICBjb25zdCByZWN0OiBSZWN0ID0geyB4OiBwb3NpdGlvbi54ICsgdGhpcy5wYWRkaW5nLmxlZnQsIHk6IHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQsIG1heEhlaWdodDogMCwgbWF4V2lkdGg6IDAgfVxuICAgICAgICByZWN0LnkgKz0gKHRvcFBhZGRpbmcgLSByZWN0LmhlaWdodCkgLyAyO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQodGl0bGUsIHRleHRQcm9wcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTtcbiAgICB9XG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGVueHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVmFsaWRhdGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZS5wYWRkaW5nID0gdGhpcy5wYWRkaW5nLmNsb25lKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSUNvbXBvc2l0aW9uU3RhcnRJbmZvLCBJbnB1dERhdGEgfSBmcm9tIFwiLi9kb2N1bWVudC1pbnB1dC1jdXJzb3JcIjtcbmltcG9ydCB7IFNlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEJsb2NrQ29udGVudEVsZW1lbnQsXG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgSW5saW5lR3JvdXBFbGVtZW50LFxuICAgIExlYWZFbGVtZW50LFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IFBTeW1ib2xFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvcC1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEV2ZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZXZlbnRcIjtcbmltcG9ydCB7IEtleWJvcmFkRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVCYXNlUHJvcHMsIFBhcmFncmFwaFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSBcIi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7IEVsZW1lbnRSZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LXJlYWRlclwiO1xuaW1wb3J0IHsgQnJlYWtFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGxcIjtcbmltcG9ydCB7IERhdGFEZWNvcmF0ZUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWRlY29yYXRlLWltcGxcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIERhdGFFbGVtZW50SW5saW5lR3JvdXAsXG4gICAgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQsXG4gICAgSXNJblNpZGVEYXRhRWxlbWVudCxcbiAgICBJc0luU2lkZUlubGluZUdyb3VwSW5wdXRFbGVtZW50XG59IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Q29tbWVudCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbW1lbnRcIjtcbmltcG9ydCB7IENvbW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSBcIm5hbm9pZFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgVmFsaWRhdGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy92YWxpZGF0ZS1tc2ctaW1wbFwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW0gfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcblxuLyoqXG4gKiDmlofmoaPlhoXlrrnmlLnlj5hcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q2hhbmdlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZSwgcHJpdmF0ZSB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHByaXZhdGUgZWxlUmVhZGVyOiBFbGVtZW50UmVhZGVyLCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpdmF0ZSBkb2NDb21tZW50OiBEb2N1bWVudENvbW1lbnQpIHtcbiAgICB9XG5cbiAgICBuZXdJbnB1dChkYXRhOiBJbnB1dERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWQsIGVuYWJsZVRyYWNrQ2hhbmdlcyB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEJ5U2VsZWN0aW9uKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5Yik5pat5piv5ZCm6ZyA6KaB5Yib5bu65paw55qE55WZ55eV5Yy65Z+fXG4gICAgICAgIGlmIChlbmFibGVUcmFja0NoYW5nZXMgJiYgIXRoaXMuaXNJbkNvcnJlY3RUcmFja1JlZ2lvbihzdGFydENvbnRyb2wgYXMgRWxlbWVudCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXRUcmFja0NoYW5nZXMoZGF0YSwgc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3ovpPlhaXoioLngrnmmK/lnKjnlZnnl5XljLrln5/kuK3vvIzkvYbmmK/lvZPliY3lhbPpl63kuoblrqHpmIXmqKHlvI/vvIzpnIDopoHmi4bliIbnlZnnl5XljLrln5/vvIzliJvlu7rmlrDovpPlhaXoioLngrlcbiAgICAgICAgaWYgKCFlbmFibGVUcmFja0NoYW5nZXMgJiYgdGhpcy5pc0luVHJhY2tCbG9jayhzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IHRoaXMuc3BsaXRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICBjb25zdCBjb21wID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgICAgICBjb21wLmVsZW1lbnQgPSBuZXdJbnB1dDtcbiAgICAgICAgICAgIGNvbXAub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3SW5wdXQsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpKSB7XG4gICAgICAgICAgICBpZiAoIWRhdGEuY29tcG9zaXRpb25TdGFydEluZm8pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXBvc2l0aW9uU3RhcnRJbmZvIGlzIG51bGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdUZXh0RWxlID0gc3RhcnRPZmZzZXQgPT09IDEgPyBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sKSA6IEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKHNpYmxpbmdUZXh0RWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8ub2Zmc2V0ID0gc3RhcnRPZmZzZXQgPT09IDAgPyBzaWJsaW5nVGV4dEVsZS50ZXh0Lmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChzaWJsaW5nVGV4dEVsZSwgZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RleHRHcm91cCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cChpbnB1dFRleHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgc3RhcnRDb250cm9sLnBhcmVudC5hZGRDaGlsZChuZXdUZXh0R3JvdXAsIHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3VGV4dEdyb3VwLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKHN0YXJ0Q29udHJvbCwgZGF0YSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3ljLrln5/lkI7ov5vooYzovpPlhaVcbiAgICAgKiDpnIDopoHlpITnkIblsIbpgInkuK3nmoTljLrln5/liKDpmaTlkI7vvIzov5vooYzovpPlhaXnmoTmg4XlhrVcbiAgICAgKi9cbiAgICBvbklucHV0QnlTZWxlY3Rpb24oZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFmdGVyU2VsZWN0aW9uQ2hhbmdlZCA9IChuZXdWYWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZWRpdGFibGUgfSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIGlmICghZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgICAgICBjb21wLmVsZW1lbnQgPSBzdGFydENvbnRyb2w7XG4gICAgICAgICAgICBjb21wLm9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5uZXdJbnB1dChkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo5q2j56Gu55qE55WZ55eV5Yy65Z+fKGlucy1ydW7jgIFkZWwtcnVuKe+8jOaDheWGteWIhuS4uuS7peS4i+aDheWGtVxuICAgICAqIDEu55WZ55eV5Z2X57G75Z6L5Li65paw5aKe77yM5L2G5piv55WZ55eV5Z2X55qE5Yib5bu66ICF5Li65YW25LuW55So5oi377yM5q2k5pe26ZyA6KaB5ouG5YiG55WZ55eV5Yy65Z+fXG4gICAgICogMi7nlZnnl5XlnZfkuLrlvZPliY3nlKjmiLfliJvlu7rvvIzkvYbmmK/liJvlu7rml7bpl7TlpKfkuo7mnInmlYjnmoTml7bpl7TvvIzmraTml7bpnIDopoHmi4bliIbnlZnnl5XljLrln59cbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaXNJbkNvcnJlY3RUcmFja1JlZ2lvbihzdGFydENvbnRyb2w6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFydENvbnRyb2wucGFyZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50XG4gICAgICAgICAgICAmJiBwYXJlbnQucHJvcHMudXNlcklkID09PSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkXG4gICAgICAgICAgICAmJiBwYXJlbnQudHlwZSA9PT0gdHJhY2tUeXBlXG4gICAgICAgICAgICAmJiBDb21tb25VdGlsLmdldE5vd0RpZmZTZWNvbmRzKHBhcmVudC5wcm9wcy5kYXRlKSA8PSB0aGlzLnZpZXdPcHRpb25zLnRyYWNrQ2hhbmdlUGVyaW9kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFg+e0oOaYr+WQpuWcqOeVmeeXleWMuuWfnyhpbnMtcnVu44CBZGVsLXJ1binkuK1cbiAgICAgKiBAcGFyYW0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaXNJblRyYWNrQmxvY2sodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0gfCBudWxsID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiAodHJhY2tUeXBlID09PSBudWxsIHx8IHRhcmdldC5wYXJlbnQudHlwZSA9PT0gdHJhY2tUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlZnnl5XovpPlhaVcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG5ld0lucHV0VHJhY2tDaGFuZ2VzKGRhdGE6IElucHV0RGF0YSwgc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB1c2VySWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICBjb25zdCBjb21wSW5mbyA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgICAgICBpZiAodGhpcy5pc0luQ29ycmVjdFRyYWNrUmVnaW9uKHN0YXJ0Q29udHJvbCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0luVHJhY2tCbG9jayhzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IHRoaXMuY3JlYXRlTmV3VHJhY2tJbnB1dChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKTtcbiAgICAgICAgICAgIGNvbXBJbmZvLm9mZnNldCA9IDA7XG4gICAgICAgICAgICBjb21wSW5mby5lbGVtZW50ID0gbmV3SW5wdXQ7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld0lucHV0LCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgbmV3VGV4dEdyb3VwXG4gICAgICAgICAgICB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgbnVsbCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCk7XG4gICAgICAgICAgICB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgW3RyYWNrRWxlbWVudF0pXG4gICAgICAgICAgICBjb21wSW5mby5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgY29tcEluZm8uZWxlbWVudCA9IG5ld1RleHRHcm91cDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3VGV4dEdyb3VwLCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yib5bu65paw55qE55WZ55eV5Z2XLOW5tui/lOWbnueVmeeXleWdl+i+k+WFpeWumuS9jeaWh+acrFxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXRcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjcmVhdGVOZXdUcmFja0lucHV0KHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHMoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJUcmFja0VsZSA9IHN0YXJ0Q29udHJvbC5wYXJlbnQgYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBzdGFydE9mZnNldCA+IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUZXh0ID0gc3RhcnRDb250cm9sLnNwbGljZVRleHQoc3RhcnRPZmZzZXQsIHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoLCB0cnVlKSBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICAgICAgc3RhcnRDb250cm9sLnBhcmVudC5hZGRDaGlsZChzcGxpdFRleHQsIHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgPiAwID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldDtcbiAgICAgICAgLy/liIflibLnlZnnl5XlnZdcbiAgICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGN1cnJUcmFja0VsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VHJhY2sgPSBjdXJyVHJhY2tFbGUuc3BsaXQoc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldCkgYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChzcGxpdFRyYWNrLCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgY29uc3QgeyB0cmFja0VsZW1lbnQsIG5ld1RleHRHcm91cCB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgdGV4dFByb3BzLCB0cmFja1R5cGUpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3VGV4dEdyb3VwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyB0cmFja0VsZW1lbnQsIG5ld1RleHRHcm91cCB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgdGV4dFByb3BzLCB0cmFja1R5cGUpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgKGluZGV4ID09PSAwID8gMCA6IDEpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUZXh0R3JvdXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3ovpPlhaXoioLngrnnmoTmlofmnKzlsZ7mgKdcbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREZWZhdWx0VGV4dFByb3BzKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGxldCB0ZXh0UHJvcHMgPSBwYXJhLnByb3BzLnRleHRQcm9wcztcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcyA9IHN0YXJ0Q29udHJvbC5wcm9wcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhRWxlID0gRWxlbWVudFV0aWwuZ2V0RGF0YUVsZW1lbnQoc3RhcnRDb250cm9sKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgICAgICBpZiAoZGF0YUVsZSAmJiBJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgb2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFFbGUucHJvcHMudmFsdWVUZXh0UHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHRQcm9wcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDkvY3kuo7nlZnnl5XljLrln5/lhoXvvIzkvYbmmK/lvZPliY3nvJbovpHmqKHlvI/kuLrpnZ7nlZnnl5XmqKHlvI/vvIzpnIDopoHlsIblvZPliY3nlZnnl5XlhYPntKDliIblibLlvIDmnaXvvIzmj5LlhaXmlrDmma7pgJrmlofmnKzlhYPntKDlr7nosaEs5bm26L+U5ZueXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3BsaXRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBpZiAoIShzdGFydENvbnRyb2wucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSAmJiBzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRDb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY3VyclRyYWNrRWxlID0gc3RhcnRDb250cm9sLnBhcmVudCBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRleHQgPSBzdGFydENvbnRyb2wuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgsIHRydWUpIGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgICAgICBzdGFydENvbnRyb2wucGFyZW50LmFkZENoaWxkKHNwbGl0VGV4dCwgc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldCA+IDAgPyAxIDogMDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgY3VyclRyYWNrRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUcmFjayA9IGN1cnJUcmFja0VsZS5zcGxpdChzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHNwbGl0VHJhY2ssIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cCh0ZXh0UHJvcHMpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChuZXdJbnB1dCwgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0VHJhY2tFbGVtZW50KG5ld0lucHV0LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKHRleHRQcm9wcyk7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKG5ld0lucHV0LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIChpbmRleCA9PT0gMCA/IDAgOiAxKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGxpdFRyYWNrRWxlbWVudChuZXdJbnB1dCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliJvlu7rmj5LlhaUoaW5zLXJ1bikg55WZ55eVLOW5tuS4lOi/lOWbnueVmeeXleeahOaWh+acrOWFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2w6IEVsZW1lbnQsIHRleHRQcm9wczogVGV4dFByb3BzIHwgbnVsbCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogeyB0cmFja0VsZW1lbnQ6IFRyYWNrUnVuRWxlbWVudCwgbmV3VGV4dEdyb3VwOiBUZXh0R3JvdXBFbGVtZW50IH0ge1xuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgdGV4dFByb3BzID0gdGV4dFByb3BzIHx8IHBhcmEucHJvcHMudGV4dFByb3BzO1xuICAgICAgICBjb25zdCBuZXdUZXh0R3JvdXAgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAodGV4dFByb3BzKTtcbiAgICAgICAgbmV3VGV4dEdyb3VwLnByb3BzLmNvbG9yID0gJyNmZjRkNGYnO1xuICAgICAgICB0cmFja0VsZW1lbnQuYWRkQ2hpbGQobmV3VGV4dEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRyYWNrRWxlbWVudCh0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUcmFja1J1bkVsZW1lbnQge1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnQgPSBuZXcgVHJhY2tSdW5FbGVtZW50KHRyYWNrVHlwZSk7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy51c2VySWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICB0cmFja0VsZW1lbnQucHJvcHMudXNlck5hbWUgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLm5hbWU7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy5kYXRlID0gQ29tbW9uVXRpbC5mb3JtYXROb3coJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICAgICAgdHJhY2tFbGVtZW50LnByb3BzLmlkID0gbmFub2lkKDUpO1xuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5wdXRUZXh0R3JvdXAodGV4dDogVGV4dEdyb3VwRWxlbWVudCwgZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZJbnB1dERhdGEgPSBkYXRhLnByZXZJbnB1dERhdGEgfHwgJyc7XG4gICAgICAgIGNvbnN0IHByZXZJbnB1dERhdGFMZW5ndGggPSBwcmV2SW5wdXREYXRhLmxlbmd0aDtcbiAgICAgICAgaWYgKCFkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXBvc2l0aW9uU3RhcnRJbmZvIGlzIG51bGwnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBlbGVtZW50LCBvZmZzZXQgfSA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgIGxldCBzdGFydElucHV0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAvL3N0YXJ0SW5wdXRPZmZzZXQgLT0gcHJldklucHV0RGF0YUxlbmd0aDtcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAvL+W9k+WJjemAieS4reWFg+e0oOS9jeS6jui+k+WFpeWFg+e0oOaYr+i1t+Wni+i/mOaYr+e7k+adn+S9jee9ru+8jOWmguaenOS9jeS6jui1t+Wni+S9jee9ru+8jOWImei+k+WFpeWBj+enu+mHj+S4ujAs5ZCm5YiZ5Li65pyq5Y+Y5pu05LmL5YmN55qE5YaF5a65bGVuZ3RoXG4gICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGVsZW1lbnQpID09PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbnB1dE9mZnNldCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5wdXRPZmZzZXQgPSB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggLSBwcmV2SW5wdXREYXRhTGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRleHQuc3BsaWNlKHN0YXJ0SW5wdXRPZmZzZXQsIHByZXZJbnB1dERhdGFMZW5ndGgsIGRhdGEuZGF0YSk7XG4gICAgICAgIC8v6L6T5YWl5ZCO5pKk6ZSA77yM5a+86Ie05paH5pys57uE5YaF5Li656m6XG4gICAgICAgIGlmICghdGV4dC50ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVRleHQodGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UodGV4dCwgc3RhcnRJbnB1dE9mZnNldCArIGRhdGEuZGF0YS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBiYWNrc3BhY2Us5ZCR5YmN5Yig6ZmkXG4gICAgICovXG4gICAgb25CYWNrc3BhY2UoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydENvbnRyb2wgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRFbGVtZW50ID0gbmV3IEtleWJvcmFkRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnRFbGVtZW50LmtleSA9ICdiYWNrc3BhY2UnO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnQmFja3NwYWNlS2V5Jywgc3RhcnRDb250cm9sLCBldmVudEVsZW1lbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5pc0NhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC51cGRhdGVDb21tZW50cygpO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVsZXRlLOWQkeWQjuWIoOmZpFxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkRlbGV0ZUtleUhhbmRsZXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBldmVudEVsZW1lbnQgPSBuZXcgS2V5Ym9yYWRFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBldmVudEVsZW1lbnQua2V5ID0gJ2RlbGV0ZSc7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VFdmVudCA9IGV2dDtcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZU9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICBjb25zdCByZXMgPSBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdEZWxldGVLZXknLCBzdGFydENvbnRyb2wsIGV2ZW50RWxlbWVudCwgJ0NhcHR1cmUnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vbktleURlbGV0ZUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUmFuZ2VEZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNrumAieaLqeiMg+WbtOWIoOmZpFxuICAgICAqL1xuICAgIHByaXZhdGUgb25SYW5nZURlbGV0ZSgpOiB7IGN1cnNvckVsZTogRWxlbWVudCwgY3Vyc29yT2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWRSYW5nZSB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlbGVjdGlvblJhbmdlIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIC8v55So5LqO5Yi35paw5ZCO5a6a5L2N5YWJ5qCHXG4gICAgICAgIGxldCBzdGFydFBvaW50RWxlbWVudDogRWxlbWVudDtcbiAgICAgICAgbGV0IHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgLy/mn5DkuKrlrrnlmajnmoTlhoXlrrnooqvlhajpg6jpgInkuK1cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIEJsb2NrQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gc2VsZWN0ZWRSYW5nZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+WGheWuueWdl+iiq+mAieS4rSzpnIDopoHlkJHkuIrlr7vmib7lhoXlrrnlnZflrrnlmahcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgQmxvY2tDb250ZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChzZWxlY3RlZFJhbmdlLnRhcmdldCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpIGFzIEJsb2NrQ29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gcGFyZW50Q29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiDveWQkeS4iuWvu+aJvuWIsOWumuS9jeeahOWGheWuueWdl+WuueWZqCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquefpeadoeS7tuWMuumXtCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gUmFuZ2VVdGlsLmdldFN0YXJ0UmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChzdGFydFJhbmdlLnRhcmdldCwgZmFsc2UsIHRydWUpIGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAtMTtcbiAgICAgICAgICAgICAgICAvL+WIpOaWree7k+adn+mAieWMuuWSjOW8gOWni+mAieWMuuaYr+WQpuWcqOS4gOS4quauteiQveS4re+8jOWwvemHj+iQveWcqOWQjOS4gOauteiQveS4rVxuICAgICAgICAgICAgICAgIGlmICghc3RhcnRQb2ludEVsZW1lbnQgfHwgRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoc3RhcnRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBlbmRSYW5nZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBzdGFydFJhbmdlLnRhcmdldCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gc3RhcnRSYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlSW5Gb3JtRWRpdChzZWxlY3RlZFJhbmdlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShzZWxlY3RlZFJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRQb2ludEVsZW1lbnQsIHN0YXJ0UG9pbnRPZmZzZXQpO1xuICAgICAgICByZXR1cm4geyBjdXJzb3JFbGU6IHN0YXJ0UG9pbnRFbGVtZW50LCBjdXJzb3JPZmZzZXQ6IHN0YXJ0UG9pbnRPZmZzZXQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBiYWNrc3BhY2XliKDpmaRcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25CYWNrc3BhY2VFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgaWYgKCFwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChjb250cm9sLCBwcmV2RWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCkgPT09IHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUVsZW1lbnQocHJldkVsZSwgRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChwcmV2RWxlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v6ZyA6KaB5Yik5pat5piv5ZCm5piv5YWE5byf5q616JC977yM5YWE5byf5q616JC977yM6ZyA6KaB5ZCI5bm2XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUocHJldkVsZSwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShjb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6KGo5piO5piv57Sn5oyo552A55qE5Lik5Liq5q616JC977yM6KaB6L+b6KGM5q616JC95ZCI5bm2XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChjdXJyUGFyYSkgPT09IHByZXZQYXJhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVQYXJhZ3JhcGgocHJldlBhcmEsIGN1cnJQYXJhLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+S4jeaYr+e0p+aMqOedgOeahOauteiQve+8jOWImeWJjeS4gOS4quauteiQveaYr+S9jeS6juWPpuS4gOS4quWuueWZqOmHjO+8jOS+i+Wmgu+8muWkhOS6juWNleWFg+agvOWGheeahOauteiQvVxuICAgICAgICAgICAgICAgICAgICAvL+WImeS4jeWQkeWJjeWumuS9jVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNvbnRyb2wsIG9mZnNldCAtIDEsIDEpO1xuICAgICAgICAgICAgICAgIGlmICghY29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlUZXh0KGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCBvZmZzZXQgLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLnBhcmVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50ICYmIGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRhRGVjb3JhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgLy/nqbrmlbDmja7lhYPvvIzlubbkuJTlvZPliY3lhYnmoIflpITkuo7mlbDmja7lhYPlvIDlp4vkvY3nva5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKGRhdGFFbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc1ByZWZpeCAmJiB0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmp1bXBUb1ByZXZEYXRhRWxlbWVudChkYXRhRWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFbGVtZW50KGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi3s+WIsOS4iuS4gOS4quaVsOaNruWFg+S4rVxuICAgICAqIEBwYXJhbSBjdXJyRWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBqdW1wVG9QcmV2RGF0YUVsZW1lbnQoY3VyckVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSAhPT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRQcmV2RGF0YUVsZW1lbnQodGhpcy5kb2NDdHgsIGN1cnJFbGUgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCk7XG4gICAgICAgIGlmICghcHJldkVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZS5lbmREZWNvcmF0ZSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVsZXRl5Yig6ZmkXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uS2V5RGVsZXRlRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KGNvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICghbmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKGNvbnRyb2wsIG5leHRFbGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChjb250cm9sKSA9PT0gbmV4dEVsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RGVsZXRlRWxlbWVudChuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL+mcgOimgeWIpOaWreaYr+WQpuaYr+WFhOW8n+auteiQve+8jOWFhOW8n+auteiQve+8jOmcgOimgeWQiOW5tlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKG5leHRFbGUsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoY29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvL+ihqOaYjuaYr+e0p+aMqOedgOeahOS4pOS4quauteiQve+8jOimgei/m+ihjOauteiQveWQiOW5tlxuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoY3VyclBhcmEpID09PSBuZXh0UGFyYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVQYXJhZ3JhcGgobmV4dFBhcmEsIGN1cnJQYXJhLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+S4jeaYr+e0p+aMqOedgOeahOauteiQve+8jOWImeWJjeS4gOS4quauteiQveaYr+S9jeS6juWPpuS4gOS4quWuueWZqOmHjO+8jOS+i+Wmgu+8muWkhOS6juWNleWFg+agvOWGheeahOauteiQvVxuICAgICAgICAgICAgICAgICAgICAvL+WImeS4jeWQkeWJjeWumuS9jVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNvbnRyb2wsIG9mZnNldCwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVRleHQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5wYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmIGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRhRGVjb3JhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjb250cm9sLnBhcmVudCBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAvL+epuuaVsOaNruWFg++8jOW5tuS4lOW9k+WJjeWFieagh+WkhOS6juaVsOaNruWFg+W8gOWni+S9jee9rlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc1ByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cm9zckZvckRlbGV0ZUFjdGlvbihkYXRhRWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhRWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjb250cm9sLmlzUHJlZml4ICYmIGRhdGFFbGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoZGF0YUVsZS5lbmREZWNvcmF0ZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLm9uS2V5RGVsZXRlRWxlbWVudChjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KGNvbnRyb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5piv5ZCm5Y+v5Lul5Yig6Zmk5pWw5o2u57uEXG4gICAgICogQHBhcmFtIGRhdGFFbGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhRWxlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlVGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbGV0ZWRUcmFja1RleHQodGV4dCwgb2Zmc2V0LCBsZW4pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0LnNwbGljZShvZmZzZXQsIGxlbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25EZWxldGVJdGVtKGl0ZW06IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgLy/liKDpmaTnrKblj7fkuI3ov5vooYznlZnnl5VcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblRyYWNrRGVsZXRlRWxlbWVudChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICBpdGVtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo55WZ55eV5YWD57Sg5YaFXG4gICAgICogQHBhcmFtIHRhcmdldFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUgJiYgdGFyZ2V0LnBhcmVudC5wcm9wcy51c2VySWQgPT09IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSW5UcmFja0VsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOeVmeeXlemZpOaWh+acrOS7peWklueahOWFtuS7luWFg+e0oFxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblRyYWNrRGVsZXRlRWxlbWVudCh0YXJnZXQ6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLmlzSW5UcmFja0VsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3nlKjmiLflop7liqDnmoTlhoXlrrnvvIzlhoXlrrnnm7TmjqXliKDpmaTkuI3pnIDopoHnlZnnl5VcbiAgICAgICAgaWYgKHRoaXMuaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy90YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlID0gdGhpcy5nZXROZXh0VHJhY2tFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgdHJhY2tFbGUuYWRkQ2hpbGQodGFyZ2V0LmNsb25lKHRydWUpLCAwKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDmlofmnKzliKDpmaTnlZnnl5VcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZURlbGV0ZWRUcmFja1RleHQodGFyZ2V0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblRyYWNrRWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeeUqOaIt+WinuWKoOeahOWGheWuue+8jOW9k+WJjeeUqOaIt+WIoOmZpOaXtuS4jemcgOimgeeVmeeXlVxuICAgICAgICBpZiAodGhpcy5pc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0YXJnZXQuc3BsaWNlKG9mZnNldCwgbGVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WFqOmDqOiiq+WIoOmZpFxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwICYmIGxlbiA9PT0gdGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrSW5wdXRUZXh0ID0gdGhpcy5nZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICAgICAgdHJhY2tJbnB1dFRleHQudGV4dCA9IHRhcmdldC50ZXh0ICsgdHJhY2tJbnB1dFRleHQudGV4dDtcbiAgICAgICAgICAgIHRhcmdldC5zcGxpY2UoMCwgdGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy90YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBsZWZ0RWxlbWVudCB9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0LCBvZmZzZXQgKyBsZW4pO1xuICAgICAgICB0YXJnZXQgPSBsZWZ0RWxlbWVudCBhcyBuZXZlcjtcbiAgICAgICAgbGV0IHRyYWNrVGV4dDogVGV4dEdyb3VwRWxlbWVudCA9IHRoaXMuZ2V0TmV4dFRyYWNrSW5wdXRFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgY29uc3Qgc3BUZXh0ID0gdGFyZ2V0LnNwbGljZVRleHQodGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGggLSBsZW4sIHRhcmdldC50ZXh0TWVhc3VyZXMubGVuZ3RoLCB0cnVlKTtcbiAgICAgICAgdHJhY2tUZXh0LnNwbGljZSgwLCAwLCBzcFRleHQ/LnRleHQpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQodGFyZ2V0LCB0cmFja1R5cGUsIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQpXG4gICAgICAgIGlmICh0cmFja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RWxlID0gdHJhY2tFbGVtZW50LmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKGZpcnN0RWxlICYmIGZpcnN0RWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEVsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudC5hZGRDaGlsZChuZXdJbnB1dCwgMCk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnByb3BzLmNsb25lKG5ld0lucHV0LnByb3BzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgdHJhY2tFbGVtZW50LFxuICAgICAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICAgICAgfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudCh0YXJnZXQsIHRhcmdldC5wcm9wcywgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCB0YXJnZXQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RleHRHcm91cDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXROZXh0VHJhY2tFbGVtZW50KHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVHJhY2tSdW5FbGVtZW50IHtcbiAgICAgICAgbGV0IHRyYWNrRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nVHJhY2tFbGVtZW50KHRhcmdldCwgdHJhY2tUeXBlLCB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkKVxuICAgICAgICBpZiAoIXRyYWNrRWxlbWVudCkge1xuICAgICAgICAgICAgdHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgICAgIHRhcmdldC5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCB0YXJnZXQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFja0VsZW1lbnQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTlhYPntKDlubblrprkvY3lhYnmoIdcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUpO1xuICAgICAgICBpZiAoIXByZXZFbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoY29udHJvbCwgcHJldkVsZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjb250cm9sLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChuZXh0RWxlICYmIEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChuZXh0RWxlKSA9PT0gY29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Zue6L2m5LqL5Lu2XG4gICAgICovXG4gICAgb25FbnRlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IHRoaXMuc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk7XG4gICAgICAgIC8v6YCJ5Lit55qE5piv5LiA5Liq5YWD57SgXG4gICAgICAgIGlmIChicmVha1BhcmEgPT09IHBhcmFncmFwaCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVQYXJhID0gcGFyYWdyYXBoLmNsb25lKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrUGFyYS5wYXJlbnQuYWRkQ2hpbGQoY2xvbmVQYXJhLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGJyZWFrUGFyYSwgMCk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXooajmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGluc2VydFRhYmxlKHRiOiBUYWJsZUVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnJlYWtQYXJhID0gdGhpcy5zcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTtcbiAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZCh0YiwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UodGIsIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIhuWJsuW9k+WJjeauteiQveeUqOS6juaPkuWFpeihqOagvOaIluiAheeymOi0tOeahOWGheWuuVxuICAgICAqIEBwYXJhbSBpbnNlcnRJdGVtcyDliIblibLlkI7mj5LlhaXnmoTlhoXlrrnvvIzlhoXlrrnpnIDopoHmmK9ibG9ja+aIluiAheihqOagvOWvueixoVxuICAgICAqL1xuICAgIHByaXZhdGUgc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk6IFBhcmFncmFwaEVsZW1lbnQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBhcmFDb250YWluZXIgPSBwYXJhZ3JhcGgucGFyZW50O1xuICAgICAgICAvL+WmguaenOmAieS4reeahOaYr+auteiQveesrOS4gOS4quWFg+e0oFxuICAgICAgICBjb25zdCBmaXJzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KHBhcmFncmFwaCk7XG4gICAgICAgIGlmICgoc3RhcnRDb250cm9sID09PSBmaXJzdExlYWYgJiYgc3RhcnRPZmZzZXQgPT09IDApIHx8IChzdGFydENvbnRyb2wgPT09IGZpcnN0TGVhZiAmJiBzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkpIHtcbiAgICAgICAgICAgIC8vdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHBhcmFncmFwaCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3QgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocGFyYWdyYXBoKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJhUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBsYXN0LCAxLCBwYXJhZ3JhcGgpO1xuICAgICAgICBzZWxlY3RlZFBhcmFSYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSBFbGVtZW50VXRpbC5jbG9uZVJhbmdlKHNlbGVjdGVkUGFyYVJhbmdlLCB0cnVlKSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBFbGVtZW50VXRpbC5maXhQYXJhZ3JhcGhDb250ZW50KHBhcmFncmFwaCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQoYnJlYWtQYXJhKTtcbiAgICAgICAgcGFyYUNvbnRhaW5lci5hZGRDaGlsZChicmVha1BhcmEsIHBhcmFncmFwaC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIC8vcGFyYUNvbnRhaW5lci5hZGRDaGlsZCh0YiwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICAvL3RoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShicmVha1BhcmEsIDApO1xuICAgICAgICByZXR1cm4gYnJlYWtQYXJhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuauteiQvVxuICAgICAqL1xuICAgIGNvbWJpbmVQYXJhZ3JhcGgocHJldlBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIGN1cnJQYXJhOiBQYXJhZ3JhcGhFbGVtZW50LCBjdXJyRWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2UGFyYUxlbmd0aCA9IHByZXZQYXJhLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGFyYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdXJyUGFyYS5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKTtcbiAgICAgICAgICAgIHByZXZQYXJhLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICAvL2N1cnJQYXJhLnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBjdXJyUGFyYUNvbnRhaW5lciA9IGN1cnJQYXJhLnBhcmVudDtcbiAgICAgICAgY3VyclBhcmEuZGVzdHJveSgpO1xuICAgICAgICBjdXJyUGFyYUNvbnRhaW5lci5yZW1vdmVDaGlsZChjdXJyUGFyYSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2UGFyYS5nZXRDaGlsZChwcmV2UGFyYUxlbmd0aCksIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOmAieS4reeahOWMuuWfn+WGheWuuVxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqL1xuICAgIGRlbGV0ZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3RlZENoaWxkcmVuIH0gPSByYW5nZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmFuZ2UgPSBzZWxlY3RlZENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgY29uc3QgeyB0YXJnZXQ6IGNoaWxkVGFyZ2V0LCBpc0Z1bGxTZWxlY3RlZDogY2hpbGRGdWxsU2VsZWN0ZWQgfSA9IGNoaWxkUmFuZ2U7XG4gICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCAmJiAhY2hpbGRUYXJnZXQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZEZ1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlSXRlbShjaGlsZFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGV4dChjaGlsZFRhcmdldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8v55WZ55eV5qih5byPXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ooajmoLzlhajpgInnirbmgIHml7bvvIzmiafooYzliKDpmaTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgVGFibGVFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL+auteiQveWFqOmAieeKtuaAgeaXtu+8jOaJp+ihjOWIoOmZpOaTjeS9nFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIEJsb2NrQ29udGVudEVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOihqOWNleWMuuWfn+WIoOmZpOWkhOeQhlxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWxldGVSYW5nZUluRm9ybUVkaXQocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHJhbmdlLnRhcmdldCk7XG4gICAgICAgIC8v5Zyo5pWw5o2u5YWD5YaF5Yig6Zmk77yM6LCD55So5pmu6YCa55qE5Yig6Zmk5aSE55CGXG4gICAgICAgIGlmIChkYXRhRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lnKjmlbDmja7lhYPlpJbliKDpmaRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvb3BGb3JEZWxEYXRhRWxlUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5Y2V5qih5byPOuWIoOmZpOmAieS4reeahOWMuuWfn+WGheWuuVxuICAgICAqL1xuICAgIHByaXZhdGUgbG9vcEZvckRlbERhdGFFbGVSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWRDaGlsZHJlbiB9ID0gcmFuZ2U7XG4gICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJhbmdlID0gc2VsZWN0ZWRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0OiBjaGlsZFRhcmdldCB9ID0gY2hpbGRSYW5nZTtcbiAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wcyA9IGNoaWxkVGFyZ2V0LnByb3BzIGFzIERhdGFFbGVCYXNlUHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIC8v5pWw5o2u5YWD5Y+v57yW6L6RXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhRWxlUHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvb3BGb3JEZWxEYXRhRWxlUmFuZ2UoY2hpbGRSYW5nZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWQkeebruagh+enu+WKqOWFg+e0oFxuICAgICAqIEBwYXJhbSBzb3VyY2VFbGVtZW50XG4gICAgICogQHBhcmFtIG1vdmVFbGVtZW50XG4gICAgICovXG4gICAgbW92ZUVsZW1lbnQodGFyZ2V0RWxlbWVudDogRWxlbWVudCwgdGFyZ2V0T2Zmc2V0OiBudW1iZXIsIG1vdmVFbGVtZW50OiBFbGVtZW50LCBtb3ZlT2Zmc2V0OiBudW1iZXIsIHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBtb3ZlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IGxlZnRFbGVtZW50LCByaWdodEVsZW1lbnQgfSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCk7XG4gICAgICAgICAgICBpZiAobGVmdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIGxlZnRFbGVtZW50LmdldEluZGV4KCkgKyAxKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCByaWdodEVsZW1lbnQuZ2V0SW5kZXgoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCB0YXJnZXRFbGVtZW50LmdldEluZGV4KCkgKyB0YXJnZXRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHNzLnJlc2V0UmFuZ2UobW92ZUVsZW1lbnQsIG1vdmVPZmZzZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeaMh+WumueahOebruagh+aPkuWFpeWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50XG4gICAgICogQHBhcmFtIHRhcmdldE9mZnNldFxuICAgICAqIEBwYXJhbSBkZXN0RWxlQXJyYXlcbiAgICAgKi9cbiAgICBpbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIHRhcmdldE9mZnNldDogbnVtYmVyLCBkZXN0RWxlQXJyYXk6IEFycmF5PEVsZW1lbnQ+KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBsZXQgbGFzdEVsZSE6IEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbGVmdEVsZW1lbnQsIHJpZ2h0RWxlbWVudCB9ID0gdGhpcy5zcGxpdFRleHQodGFyZ2V0RWxlbWVudCwgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgICAgIGlmIChsZWZ0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdEVsZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbGUgPSBkZXN0RWxlQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChsYXN0RWxlLCBsZWZ0RWxlbWVudC5nZXRJbmRleCgpICsgMSArIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0RWxlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZSA9IGRlc3RFbGVBcnJheVtpXVxuICAgICAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQucGFyZW50LmFkZENoaWxkKGxhc3RFbGUsIHJpZ2h0RWxlbWVudC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RFbGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxhc3RFbGUgPSBkZXN0RWxlQXJyYXlbaV1cbiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChsYXN0RWxlLCB0YXJnZXRFbGVtZW50LmdldEluZGV4KCkgKyB0YXJnZXRPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0RWxlO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5byA5aeL5L2N572u5ZKM57uT5p2f5L2N572u77yM5bCG5a2X56ym5YiH5Ymy5oiQ5oyH5a6a55qE5Yy66Ze0XG4gICAgICogQHBhcmFtIHNwbGl0VGV4dFVuaXRcbiAgICAgKiBAcGFyYW0gc3RhcnRcbiAgICAgKiBAcGFyYW0gZW5kXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgc3BsaXRUZXh0R3JvdXBCeVJhbmdlKHRleHQ6IFRleHRHcm91cEVsZW1lbnQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwge1xuICAgICAgICBlbmQgPSBlbmQgPT09IC0xID8gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoIDogZW5kO1xuICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgPT09IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhc3RUZXh0R3JvdXAgPSB0ZXh0LnNwbGljZVRleHQoZW5kLCAtMSwgdHJ1ZSk7XG4gICAgICAgIGxldCBtaWRkbGVUZXh0R3JvdXAgPSB0ZXh0LnNwbGljZVRleHQoc3RhcnQsIC0xLCB0cnVlKTtcbiAgICAgICAgaWYgKGxhc3RUZXh0R3JvdXApIHtcbiAgICAgICAgICAgIHRleHQucGFyZW50LmFkZENoaWxkKGxhc3RUZXh0R3JvdXAsIHRleHQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWlkZGxlVGV4dEdyb3VwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pZGRsZVRleHQgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIHRleHQucGFyZW50LmFkZENoaWxkKG1pZGRsZVRleHRHcm91cCwgdGV4dC5nZXRJbmRleCgpICsgMSk7XG5cbiAgICAgICAgaWYgKHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGV4dC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRleHQuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaWRkbGVUZXh0R3JvdXA7XG4gICAgfVxuXG4gICAgc3BsaXRUZXh0KHRleHQ6IFRleHRHcm91cEVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogeyBsZWZ0RWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwsIHJpZ2h0RWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwgfSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCA9PSAtMSA/IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA6IG9mZnNldDtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50OiB0ZXh0LFxuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbGVmdEVsZW1lbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50OiB0ZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmlnaHRUZXh0ID0gdGV4dC5zcGxpY2VUZXh0KG9mZnNldCwgLTEsIHRydWUpO1xuICAgICAgICBpZiAocmlnaHRUZXh0KSB7XG4gICAgICAgICAgICB0ZXh0LnBhcmVudC5hZGRDaGlsZChyaWdodFRleHQsIHRleHQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsZWZ0VGV4dDogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwgPSB0ZXh0O1xuICAgICAgICBpZiAodGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0ZXh0LnJlbW92ZSgpO1xuICAgICAgICAgICAgbGVmdFRleHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWZ0RWxlbWVudDogbGVmdFRleHQsXG4gICAgICAgICAgICByaWdodEVsZW1lbnQ6IHJpZ2h0VGV4dFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6YCJ5Lit55qE5paH5pys5qC35byPXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHNldHRlckZ1bmNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRUZXh0U3R5bGUoc3M6IFNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jOiAodHA6IFRleHRQcm9wcykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHNzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UgfHwgc3MuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIGNvbnN0IGVuZFJhbmdlID0gRWxlbWVudFV0aWwuZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB0aGlzLnJlY3Vyc2lvblNldFJhbmdlVGV4dFN0eWxlKHJhbmdlLCBzZXR0ZXJGdW5jKTtcbiAgICAgICAgaWYgKHN0YXJ0UmFuZ2UgPT09IGVuZFJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCAwKTtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQoc3RhcnRSYW5nZS50YXJnZXQsIC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFNlbGVjdGVkT2Zmc2V0ID0gc3Muc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kU2VsZWN0ZWRPZmZzZXQgPSBzcy5lbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlRWxlbWVudCA9IHRoaXMuc3BsaXRUZXh0R3JvdXBCeVJhbmdlKHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFNlbGVjdGVkT2Zmc2V0LCBlbmRTZWxlY3RlZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgaWYgKG1pZGRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhtaWRkbGVFbGVtZW50LnByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQobWlkZGxlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChtaWRkbGVFbGVtZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlRWxlbWVudCA9IHRoaXMuc3BsaXRUZXh0R3JvdXBCeVJhbmdlKHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0LCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKG1pZGRsZUVsZW1lbnQucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQobWlkZGxlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRSYW5nZS5zdGFydE9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgLTEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZW5kUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGVFbGVtZW50ID0gdGhpcy5zcGxpdFRleHRHcm91cEJ5UmFuZ2UoZW5kUmFuZ2UudGFyZ2V0LCAwLCBlbmRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhtaWRkbGVFbGVtZW50LnByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChtaWRkbGVFbGVtZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChlbmRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQoZW5kUmFuZ2UudGFyZ2V0LCBlbmRSYW5nZS5lbmRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzcy5hZGRSYW5nZShuZXdTZWxlY3Rpb25SYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVjdXJzaW9uU2V0UmFuZ2VUZXh0U3R5bGUocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2V0dGVyRnVuYzogKHRwOiBUZXh0UHJvcHMpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgUmFuZ2VVdGlsLnJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZSwgKGl0ZW1SYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW1SYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIGl0ZW1SYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHNldHRlckZ1bmMoaXRlbVJhbmdlLnRhcmdldC5wcm9wcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzZXRQYXJhQWxpZ24oc3M6IFNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jOiAodHA6IFBhcmFncmFwaFByb3BzKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQgJiYgc3Muc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAocGFyYSkge1xuICAgICAgICAgICAgICAgIHNldHRlckZ1bmMocGFyYS5wcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHNzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUmFuZ2VVdGlsLnJlY3Vyc2lvblRyYXZlcnNhbFJhbmdlSGFuZGxlcihyYW5nZSwgKGl0ZW1SYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKGl0ZW1SYW5nZS50YXJnZXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5aSN5Yi2XG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgb25Db3B5KGV2dDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvcHlTZXJpYWxpemVTdHIgPSBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkSlNPTih0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFjb3B5U2VyaWFsaXplU3RyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZ0LmNsaXBib2FyZERhdGE/LnNldERhdGEoJ2RvYy9wbGFpbicsIGNvcHlTZXJpYWxpemVTdHIpO1xuICAgICAgICBjb25zdCBjb3B5U3RyID0gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZFRleHQodGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIGV2dC5jbGlwYm9hcmREYXRhPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgY29weVN0cik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Ymq5YiHXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqL1xuICAgIG9uQ3V0KGV2dDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNvcHkoZXZ0KTtcbiAgICAgICAgdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57KY6LS0XG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgb25QYXN0ZShldnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgcGFzdGVUZXh0ID0gZXZ0LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgY29uc3QgcGFzdGVEYXRhID0gZXZ0LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ2RvYy9wbGFpbicpO1xuICAgICAgICBpZiAoIXBhc3RlRGF0YSkge1xuICAgICAgICAgICAgaWYgKHBhc3RlVGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFzdGVQbGFpblRleHQocGFzdGVUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXN0ZUVsZW1lbnQgPSB0aGlzLmVsZVJlYWRlci5yZWFkRWxlbWVudChKU09OLnBhcnNlKHBhc3RlRGF0YSkpO1xuICAgICAgICBpZiAoIXBhc3RlRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+eymOi0tOWPjeW6j+WIl+WMluaVsOaNruWksei0pScsIHBhc3RlRGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAvL1RPRE865aaC5p6c5LiA5Liq5a655Zmo5YaF55qE5YWD57Sg6KKr5YWo6YOo5Yig6Zmk77yM5YiZ6L+U5ZueIG51bGxcbiAgICAgICAgICAgIC8vIGNvbnN0IHsgY3Vyc29yRWxlLCBjdXJzb3JPZmZzZXQgfSA9IHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICAgICAgLy8gc3RhcnRDb250cm9sID0gY3Vyc29yRWxlO1xuICAgICAgICAgICAgLy8gc3RhcnRPZmZzZXQgPSBjdXJzb3JPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8jzrlpoLmnpzlpI3liLbnmoTmmK/ljZXmoLzlvI/nmoTmlofmnKzvvIzpnIDopoHluo/liJfljJbkuLrnuq/mlofmnKzlpITnkIZcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgY29uc3QgcGFzdGVTdHJpbmcgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyhwYXN0ZUVsZW1lbnQsIHsgYWxsOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmIChwYXN0ZVN0cmluZykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFzdGVQbGFpblRleHQocGFzdGVTdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50IHx8IHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW46IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgICAgICBpZiAocGFzdGVFbGVtZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4uRWxlbWVudFV0aWwuZ2V0Q2hpbGRyZW5FbGVtZW50cyhwYXN0ZUVsZW1lbnQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzdGVFbGVtZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXN0ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+auteiQveWtkOWFg+e0oOS4uuepuicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdEVsZSA9IHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjaGlsZHJlbikgYXMgRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShsYXN0RWxlLCAtMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ+eymOi0tDonICsgcGFzdGVEYXRhKTtcbiAgICB9XG5cbiAgICBpbnNlcnRTb2Z0QnIoKTogdm9pZCB7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGxhc3RFbGUgPSB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgW25ldyBCcmVha0VsZW1lbnQoKV0pIGFzIEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzRWxlID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGxhc3RFbGUpO1xuICAgICAgICBpZiAoZm9jdXNFbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShmb2N1c0VsZSwgMCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhum7j+i0tOeahOe6r+aWh+acrFxuICAgICAqIEBwYXJhbSB0ZXh0XG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXN0ZVBsYWluVGV4dCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dEl0ZW1zID0gdGV4dC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQgfHwgdGV4dEl0ZW1zLmxlbmd0aCA9PT0gMSB8fCBJc0luU2lkZUlubGluZUdyb3VwSW5wdXRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnJyk7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0ZXh0LFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHN0YXJ0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0SXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXJhID0gYnJlYWtQYXJhLmNsb25lKGZhbHNlKSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dFByb3BzID0gbmV3UGFyYS5wcm9wcy50ZXh0UHJvcHM7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cChpbnB1dFRleHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgbmV3VGV4dEVsZS50ZXh0ID0gdGV4dEl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQobmV3VGV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZChuZXdQYXJhLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoYnJlYWtQYXJhLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeauteiQvemhueebruespuWPt+exu+Wei1xuICAgICAqL1xuICAgIHNldFBhcmFncmFwaE51bWJlclR5cGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBpZiAocGFyYS5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgIHBhcmEucHJvcHMubnVtYmVyVHlwZSA9IC0xO1xuICAgICAgICAgICAgcGFyYS5wcm9wcy5pbmRlbnQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYS5wcm9wcy5udW1iZXJUeXBlID0gMDtcbiAgICAgICAgICAgIHBhcmEucHJvcHMuaW5kZW50ID0gMTU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXmibnms6hcbiAgICAgKi9cbiAgICBpbnNlcnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgY29sbGFwc2VkIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoY29sbGFwc2VkIHx8ICFzdGFydENvbnRyb2wgfHwgIWVuZENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IG5hbm9pZCg1KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnc3RhcnQnO1xuXG4gICAgICAgIGNvbnN0IGVuZENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGVuZENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgIGVuZENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ2VuZCc7XG5cbiAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KGVuZENvbnRyb2wsIGVuZE9mZnNldCwgW2VuZENvbW1NYXJrXSlcbiAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFtzdGFydENvbW1NYXJrXSlcblxuICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IG5ldyBDb21tQ29udGVudEVsZW1lbnQoKTtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuY3JlYXRlSWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVOYW1lID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5uYW1lO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5kb2NDb21tZW50LmdldENvbW1NYXJrSW5kZXgoc3RhcnRDb21tTWFyayk7XG4gICAgICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+iOt+WPluaPkuWFpeeahOaJueazqOS9jee9ruS4jeato+ehricpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5hZGRDaGlsZChjb21tQ29udGVudCwgcG9zKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGVycm9yRWxlTGlzdCA9IGRhdGFFbGVMaXN0Lm1hcChpdGVtID0+ICh7IGVycm9yOiBpdGVtLnZhbGlkYXRlKCksIGVsZTogaXRlbSB9KSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5lcnJvcik7XG4gICAgICAgIGlmICghZXJyb3JFbGVMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JFbGVMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IG5hbm9pZCg1KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbU1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnc3RhcnQnO1xuXG4gICAgICAgICAgICBjb25zdCBlbmRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICAgICAgZW5kQ29tbU1hcmsucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgICAgIGVuZENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ2VuZCc7XG5cbiAgICAgICAgICAgIGl0ZW0uZWxlLmFkZENoaWxkKHN0YXJ0Q29tbU1hcmssIDApO1xuICAgICAgICAgICAgaXRlbS5lbGUuYWRkQ2hpbGQoZW5kQ29tbU1hcmssIGl0ZW0uZWxlLmxlbmd0aClcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSBDb21tb25VdGlsLm51bGxUb1N0cmluZyhpdGVtLmVsZS5wcm9wcy5jYXB0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlRWxlbWVudCA9IG5ldyBWYWxpZGF0ZUVsZW1lbnQoKTtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudC5wcm9wcy50aXRsZSA9IGNhcHRpb24gKyAn6aqM6K+BJztcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudC5wcm9wcy5pZCA9IGlkO1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50LnNldENvbnRlbnQoaXRlbS5lcnJvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZG9jQ29tbWVudC5nZXRDb21tTWFya0luZGV4KHN0YXJ0Q29tbU1hcmspO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50LmFkZENoaWxkKHZhbGlkYXRlRWxlbWVudCwgcG9zKTtcblxuXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTnqbrlrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gdGV4dFxuICAgICAqL1xuICAgIHJlbW92ZUVtcHR5VGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc3QgbmV4dExlYWZFbGVtZW50SW5QYXJhID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHRleHQsIHRydWUsIHRydWUpOyBnZXRDb21wdXRlZFN0eWxlXG4gICAgICAgIHRoaXMuc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKHRleHQpO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0LnBhcmVudDtcbiAgICAgICAgdGV4dC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgfVxuXG4gICAgc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKGNvbnRyb2w6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3Vyc29ySW5mbyA9IHRoaXMuZ2V0Q3Vyc29yRWxlbWVudEJ5RGVsZXRlQWN0aW9uKGNvbnRyb2wpO1xuICAgICAgICBpZiAoY3Vyc29ySW5mbykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGN1cnNvckluZm8uZWxlLCBjdXJzb3JJbmZvLm9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDdXJzb3JFbGVtZW50QnlEZWxldGVBY3Rpb24oY29udHJvbDogRWxlbWVudCk6IHsgZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBwcmV2TGVhZkVsZW1lbnRJblBhcmEgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAvL+WIpOaWreaYr+WQpuS4uuWQjOS4gOauteiQvVxuICAgICAgICBpZiAocHJldkxlYWZFbGVtZW50SW5QYXJhICYmIEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKHByZXZMZWFmRWxlbWVudEluUGFyYSwgY29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlOiBwcmV2TGVhZkVsZW1lbnRJblBhcmEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KHByZXZMZWFmRWxlbWVudEluUGFyYSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WQjOS4gOauteiQveWFtuS7luWFg+e0oFxuICAgICAgICBjb25zdCBuZXh0TGVhZkVsZW1lbnRJblBhcmEgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChuZXh0TGVhZkVsZW1lbnRJblBhcmEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlOiBuZXh0TGVhZkVsZW1lbnRJblBhcmEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/kuIrkuIDmrrXokL1cbiAgICAgICAgaWYgKHByZXZMZWFmRWxlbWVudEluUGFyYSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGU6IHByZXZMZWFmRWxlbWVudEluUGFyYSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHByZXZMZWFmRWxlbWVudEluUGFyYSBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50ID8gMCA6IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRFbmRPZmZzZXQocHJldkxlYWZFbGVtZW50SW5QYXJhKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOepuuihjOWGheagh+etvlxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKi9cbiAgICByZW1vdmVFbXRweUlubGluZUJsb2NrKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50ICYmIGVsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZS5wYXJlbnQ7XG4gICAgICAgICAgICBlbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeW8uuWItuaNoumhteespuWPt1xuICAgICAqL1xuICAgIGluc2VydFBhZ2VCcmVha1BhcmEoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBjdXJyUGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpXG4gICAgICAgIGlmICghY3VyclBhcmEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VyclBhcmEucGFyZW50IGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFnZUJyZWFrID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHBhZ2VCcmVhay5wcm9wcy5wYWdlQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgcGFnZUJyZWFrLnByb3BzLnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICAgICAgcGFnZUJyZWFrLnBhcmVudC5hZGRDaGlsZChwYWdlQnJlYWspO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCB7IFBhZGRpbmdQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudFByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFRlbXBsYXRlIHtcbiAgICBzdGF0aWMgY3JlYXRlQTREb2MoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IERvY3VtZW50RWxlbWVudCgpO1xuICAgICAgICBkb2MucHJvcHMgPSBuZXcgRG9jdW1lbnRQcm9wcygpO1xuICAgICAgICBkb2MucHJvcHMud2lkdGggPSAyMTA7XG4gICAgICAgIGRvYy5wcm9wcy5oZWlnaHQgPSAyOTc7XG4gICAgICAgIGRvYy5wcm9wcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygyNS40LCAyNS40LCAxOS4xLCAxOS4xKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEhlYWRlckVsZW1lbnQoKSk7XG4gICAgICAgIGRvYy5hZGRDaGlsZChuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKSk7XG4gICAgICAgIHJldHVybiBkb2M7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEV2YWxGdW5jIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG5cbiAgICB9XG4gICAgc2NyaXB0c0Z1bmMhOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICog5a6e5L6L5YyW5Yqo5oCB6ISa5pysXG4gICAgICovXG4gICAgaW5pdFNjcmlwdHMoc2NyaXB0czogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveVNjcmlwdHMoKTtcbiAgICAgICAgaWYgKHNjcmlwdHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcImRvY0N0eFwiLCBzY3JpcHRzKVxuICAgICAgICAgICAgICAgIHRoaXMuc2NyaXB0c0Z1bmMgPSBmdW5jKHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwi6Ieq5a6a5LmJ5qCH5pys6Kej5p6Q6ZSZ6K+vXCIsIGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgZnVuYyA9IChkb2NDdHg6IERvY3VtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3Qgc2V4RUxlID0gZG9jQ3R4LmdldENvbnRyb2xCeUlkKCdOcW9ZSScpXG4gICAgICAgIC8vICAgICBjb25zdCBkeUVsZSA9IGRvY0N0eC5nZXRDb250cm9sQnlJZCgnZ1R1QkknKTtcbiAgICAgICAgLy8gICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKHNleEVMZSAmJiBkeUVsZSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBzZXhWYWx1ZSA9IHNleEVMZS5nZXRWYWx1ZSgpO1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBkeVZhbHVlID0gc2V4VmFsdWUgPT09ICcxJyA/ICfnlLfnmoTlkJcnIDogc2V4VmFsdWUgPT09ICcyJyA/ICflpbPnmoTlkJcnIDogJ+mavumBk+aYr+S6uuWmluWQlyc7XG4gICAgICAgIC8vICAgICAgICAgICAgIGR5RWxlLnNldFZhbHVlKGR5VmFsdWUpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH07XG4gICAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6ZSA5q+B5Yqo5oCB6ISa5pys5a6e5L6LXG4gICAgICovXG4gICAgZGVzdHJveVNjcmlwdHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcmlwdHNGdW5jKSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdHNGdW5jID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeWKqOaAgeiEmuacrFxuICAgICAqL1xuICAgIGludm9rZWRTY3JpcHRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcmlwdHNGdW5jPy4oKTtcbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHsgSUltYWdlTG9hZGVyLCBJbWFnZVNvdXJjZUl0ZW0gfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBJbWdMb2FkU3RhdHVzIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SW1hZ2VzTG9hZGVyIGltcGxlbWVudHMgSUltYWdlTG9hZGVyIHtcbiAgICBpbWFnZXM6IEFycmF5PEltYWdlU291cmNlSXRlbT4gPSBbXTtcblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmltYWdlcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGxvYWRJbWFnZShzcmM6IHN0cmluZywgb25DYWxsYmFjazogKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXNyYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5bey57uP5a2Y5Zyo55qE6LWE5rqQ5LiN6ZyA6KaB6YeN5paw5Yqg6L29XG4gICAgICAgIGxldCBtYXRjaEl0ZW0gPSB0aGlzLmltYWdlcy5maW5kKGl0ZW0gPT4gaXRlbS5zcmMgPT09IHNyYyk7XG4gICAgICAgIGlmIChtYXRjaEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChtYXRjaEl0ZW0ubG9hZFN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgICAgIG1hdGNoSXRlbS5jYnMucHVzaChvbkNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb25DYWxsYmFjayhtYXRjaEl0ZW0ubG9hZFN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGVsZS5zcmMgPSBzcmM7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgUHJvbWlzZTx2b2lkPigociwgaSkgPT4ge1xuICAgICAgICAgICAgZWxlLm9ubG9hZCA9IChlKSA9PiB7IHRoaXMuaW52b2tlSW1nTG9hZChzcmMsICdjb21wbGV0ZWQnKTsgcigpOyB9O1xuICAgICAgICAgICAgZWxlLm9uZXJyb3IgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQoc3JjLCAnZXJyb3InKTsgcigpOyB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW1nSXRlbTogSW1hZ2VTb3VyY2VJdGVtID0ge1xuICAgICAgICAgICAgZWxlLFxuICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgY2JzOiBbb25DYWxsYmFja10sXG4gICAgICAgICAgICBsb2FkU3RhdHVzOiAnbm8nLFxuICAgICAgICAgICAgdGFza1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmltYWdlcy5wdXNoKGltZ0l0ZW0pXG4gICAgICAgIC8vIGlmICh0aGlzLnZpZXdPcHRpb25zLnJlc291cmNlTW9kZSA9PT0gJ2ltbWVkaWF0ZScpIHtcbiAgICAgICAgLy8gICAgIGVsZS5vbmxvYWQgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQoc3JjLCAnY29tcGxldGVkJyk7IH07XG4gICAgICAgIC8vICAgICBlbGUub25lcnJvciA9IChlKSA9PiB7IHRoaXMuaW52b2tlSW1nTG9hZChzcmMsICdlcnJvcicpOyB9O1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgaW52b2tlSW1nTG9hZChzcmM6IHN0cmluZywgc3RhdHVzOiBJbWdMb2FkU3RhdHVzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGltZyA9IHRoaXMuaW1hZ2VzLmZpbmQoaXRlbSA9PiBpdGVtLnNyYyA9PT0gc3JjKTtcbiAgICAgICAgaWYgKGltZykge1xuICAgICAgICAgICAgaW1nLmxvYWRTdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICBpbWcuY2JzLmZvckVhY2goY2IgPT4gY2Ioc3RhdHVzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMb2FkVGFza3MoKTogQXJyYXk8UHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMubWFwKGl0ZW0gPT4gaXRlbS50YXNrKTtcbiAgICB9XG5cblxuICAgIGdldEltYWdlKHNyYzogc3RyaW5nKTogSFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGltZyA9IHRoaXMuaW1hZ2VzLmZpbmQoaXRlbSA9PiBpdGVtLnNyYyA9PT0gc3JjKTtcbiAgICAgICAgcmV0dXJuIGltZz8uZWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWbvueJh+aYr+WQpumDveW3sue7j+WKoOi9veWujOavlVxuICAgICAqIOeUqOS6juaJk+WNsOaXtuWIpOaWre+8jOWmguaenOW9k+WJjeWbvueJh+ayoeacieWKoOi9veWujOavleWwseaJk+WNsO+8jOWbvueJh+aYr+aJk+WNsOS4jeWHuuadpVxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGltYWdlc0xvYWRDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5ldmVyeShpdGVtID0+IFsnY29tcGxldGVkJywgJ2Vycm9yJ10uaW5jbHVkZXMoaXRlbS5sb2FkU3RhdHVzKSlcbiAgICB9XG59IiwiaW1wb3J0IHsgRG9jdW1lbnRFdmFsRnVuYyB9IGZyb20gXCIuL2RvY3VtZW50LWV2YWwtZnVuY1wiO1xuaW1wb3J0IHsgRG9jdW1lbnRJbWFnZXNMb2FkZXIgfSBmcm9tIFwiLi9kb2N1bWVudC1pbWFnZXMtbG9hZGVyXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgSW1nTG9hZFN0YXR1cywgTW9kaWZ5RmxhZywgUmVjdCwgUmVmcmVzaFR5cGUsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRFdmVudCwgRXZlbnRUeXBlcyB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudFZhbHVlU3RydWN0LCBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSBcIi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50SW5saW5lR3JvdXAsIERhdGFFbGVtZW50TGVhZiwgdmFsaWRhdGVEYXRhRWxlIH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRDaGVjayB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1jaGVjay1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW0gfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktcGFydC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudENoYW5nZSB9IGZyb20gXCIuL2RvY3VtZW50LWNoYW5nZVwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5cbmludGVyZmFjZSBSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8VCBleHRlbmRzIEVsZW1lbnQ+IHtcbiAgICBlbGVtZW50VHlwZTogeyBuZXcoLi4uYXJnczogYW55KTogVCB9LFxuICAgIGV2ZW50TmFtZTogRXZlbnRUeXBlcyxcbiAgICBoYW5kbGVyOiA8RSBleHRlbmRzIEVsZW1lbnRFdmVudD4oZTogRSkgPT4gdm9pZCxcbiAgICB1c2VDYXB0dXJlOiBib29sZWFuXG59XG4vKipcbiAqIOW9k+WJjeaJk+W8gOeahOaWh+aho+eahOS4iuS4i+aWh+S/oeaBr++8jOW9k+WJjeaWh+aho+aJgOacieeahOWxnuaAp+iuvue9rumDveaatOmcsuWcqOS4iuS4i+aWh+S4rVxuICovXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29udGV4dCB7XG4gICAgaXNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGN1cnNvclJlY3QhOiBSZWN0IHwgbnVsbDtcbiAgICBwcml2YXRlIF9kb2N1bWVudCE6IERvY3VtZW50RWxlbWVudDtcbiAgICAvL+aWh+aho+WIt+aWsOeahOiuoumYheS6i+S7tlxuICAgIC8vcmVmU3ViITogU3Vic2NyaXB0aW9uO1xuICAgIHN5bmNSZWZyZXNoITogKCkgPT4gdm9pZDtcbiAgICBpbWFnZUxvYWRlcjogSUltYWdlTG9hZGVyO1xuICAgIGR5bmFtaWNGdW5jOiBEb2N1bWVudEV2YWxGdW5jO1xuICAgIGRvY0NoYW5nZSE6IERvY3VtZW50Q2hhbmdlO1xuICAgIGNsZWFyUHJldkRvY0NiITogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlLCBwdWJsaWMgcmVhZG9ubHkgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Z1bmMgPSBuZXcgRG9jdW1lbnRFdmFsRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlciA9IG5ldyBEb2N1bWVudEltYWdlc0xvYWRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLm9uQ2hhbmdlZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkb2N1bWVudCh2YWx1ZTogRG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2I/LigpO1xuICAgICAgICB0aGlzLl9kb2N1bWVudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmluaXRTY3JpcHRzKCk7XG4gICAgICAgIC8vIHRoaXMucmVmU3ViID0gdGhpcy5fZG9jdW1lbnQucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBkYXRhID0gZGF0YSA/PyAnY29udGVudCc7XG4gICAgICAgIC8vICAgICB0aGlzLmlzRGlydHkgPSB0aGlzLmlzRGlydHkgfHwgZGF0YSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICAvLyAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKGRhdGEpO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgY29uc3QgZG9jUmVmcmVzaFN1YiA9IHRoaXMuX2RvY3VtZW50LnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRvY0NoYW5nZWRTdWIgPSB0aGlzLl9kb2N1bWVudC5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY1JlZnJlc2g/LigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zeW5jUmVmcmVzaCgpO1xuICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiID0gKCkgPT4ge1xuICAgICAgICAgICAgZG9jUmVmcmVzaFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZG9jQ2hhbmdlZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZT8ucmVuZGVyQ29udGFpbmVyPy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2IgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlci5jbGVhcigpOztcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYy5kZXN0cm95U2NyaXB0cygpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdEN0eCgpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dCh0aGlzLl9kb2N1bWVudCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEN0eChlbGU6IEVsZW1lbnQpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICBjb25zdCBwYXJlbnRDdHggPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoZWxlLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50RWxlbWVudCB8fCBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRDb250ZXh0KHBhcmVudEN0eCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5b2T5YmN6YCJ5Yy677yM6L+U5Zue5omA5Zyo55qE5LiK5LiL5paH5YWD57Sg77yM6L+U5Zue57G75Z6L5Li6RG9jdW1lbnRFbGVtZW50fERvY3VtZW50Qm9keVBhcnRFbGVtZW50XG4gICAgICovXG4gICAgZ2V0Q3VycmVudEVsZUN0eCgpOiBCcmFuY2hFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50Q3R4ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHN0YXJ0Q29udHJvbCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEVsZW1lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keVBhcnRFbGVtZW50KSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50Q3R4O1xuICAgIH1cblxuICAgIGdldEN0eChlbGU6IEJyYW5jaEVsZW1lbnQpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dChlbGUsIHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBlbGVfdHlwZXNfaGFuZGxlcnM6IEFycmF5PFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxFbGVtZW50Pj4gPSBbXTtcbiAgICByZWdpc3RlclR5cGVIYW5kbGVyczxUIGV4dGVuZHMgRWxlbWVudD4oZWxlbWVudFR5cGU6IHsgbmV3KC4uLmFyZ3M6IGFueSk6IFQgfSwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBoYW5kbGVyOiAoZTogRWxlbWVudEV2ZW50KSA9PiB2b2lkLCB1c2VDYXB0dXJlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVfdHlwZXNfaGFuZGxlcnMucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICB1c2VDYXB0dXJlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgaW52b2tlVHlwZUhhbmRsZXIoZWxlOiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMsIGU6IEVsZW1lbnRFdmVudCwgdXNlQ2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgdGggb2YgdGhpcy5lbGVfdHlwZXNfaGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiB0aC5lbGVtZW50VHlwZSAmJiB0aC5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSAmJiB0aC51c2VDYXB0dXJlID09PSB1c2VDYXB0dXJlKSB7XG4gICAgICAgICAgICAgICAgdGguaGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2I/LigpO1xuICAgICAgICB0aGlzLmVsZV90eXBlc19oYW5kbGVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmltYWdlTG9hZGVyLmNsZWFyKCk7O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouWIsOihjOaJk+WNsOaooeW8j1xuICAgICAqL1xuICAgIHN3aXRjaFRleHRsaW5lTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC52aWV3T3B0aW9ucy50ZXh0Um93TGluZU1vZGUgPSAhdGhpcy5kb2N1bWVudC52aWV3T3B0aW9ucy50ZXh0Um93TGluZU1vZGU7XG4gICAgICAgIHRoaXMuc3luY1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlrp7kvovljJbliqjmgIHohJrmnKxcbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRTY3JpcHRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmR5bmFtaWNGdW5jLmluaXRTY3JpcHRzKHRoaXMuZG9jdW1lbnQucHJvcHMuc2NyaXB0cyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmm7/mjaLmlbDmja7lhYNcbiAgICAgKi9cbiAgICByZXBsYWNlRGF0YUVsZW1lbnQob2xkRGF0YUVsZW1lbnQ6IERhdGFFbGVtZW50TGVhZiB8IERhdGFFbGVtZW50SW5saW5lR3JvdXAsIG5ld0VsZW1lbnQ6IERhdGFFbGVtZW50TGVhZiB8IERhdGFFbGVtZW50SW5saW5lR3JvdXAsIHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICAvL+a4hemZpOWFieagh1xuICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICAvL+aJp+ihjOWIt+aWsFxuICAgICAgICAvL+aPkuWFpeaWsOWvueixoeWIsOaXp+WvueixoeS5i+WJjVxuICAgICAgICBvbGREYXRhRWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobmV3RWxlbWVudCwgb2xkRGF0YUVsZW1lbnQuZ2V0SW5kZXgoKSk7XG4gICAgICAgIC8v5Yig6Zmk5pen6IqC54K5XG4gICAgICAgIG9sZERhdGFFbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGdldCByZWZyZXNoVHlwZSgpOiBSZWZyZXNoVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudD8ubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lID8gJ2FwcGVhcmFuY2UnIDogJ2NvbnRlbnQnXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU291cmNlSXRlbSB7XG4gICAgc3JjOiBzdHJpbmcsXG4gICAgdGFzazogUHJvbWlzZTx2b2lkPjtcbiAgICBjYnM6IEFycmF5PChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHZvaWQ+O1xuICAgIGVsZTogSFRNTEltYWdlRWxlbWVudCxcbiAgICBsb2FkU3RhdHVzOiBJbWdMb2FkU3RhdHVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTG9hZGVyIHtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGxvYWRJbWFnZShzcmM6IHN0cmluZywgb25DYWxsYmFjazogKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZ2V0SW1hZ2Uoc3JjOiBzdHJpbmcpOiBIVE1MSW1hZ2VFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIGltYWdlc0xvYWRDb21wbGV0ZWQoKTogYm9vbGVhbjtcbiAgICBnZXRMb2FkVGFza3MoKTogQXJyYXk8UHJvbWlzZTx2b2lkPj47XG59XG5cbi8qKlxuICog5paH5qGj5LiK5LiL5paHXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY3R4OiBCcmFuY2hFbGVtZW50LCBwcml2YXRlIHNzOiBTZWxlY3Rpb25TdGF0ZSkgeyB9XG5cbiAgICBnZXRDb250cm9sSURMaXN0KCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IDx1bmtub3duPnRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkpIGFzIEFycmF5PHsgcHJvcHM6IHsgaWQ6IHN0cmluZyB9IH0+O1xuICAgICAgICByZXR1cm4gZGF0YUVsZUxpc3QubWFwKGl0ZW0gPT4gaXRlbS5wcm9wcy5pZCk7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEluc3RhbmNlTGlzdCgpOiBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmlsdGVyKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmPjtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sQnlJZChpZDogc3RyaW5nKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmluZChpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSAmJiAoPGFueT5pdGVtKVsncHJvcHMnXVsnaWQnXSA9PT0gaWQpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaW5kKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pICYmICg8YW55Pml0ZW0pWydwcm9wcyddWyduYW1lJ10gPT09IG5hbWUpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiDojrflj5bmlbDmja7lhYPlgLzpm4blkIhcbiAgICAqL1xuICAgIGdldERhdGFFbGVtZW50VmFsdWVzKCk6IEFycmF5PERhdGFFbGVtZW50VmFsdWVTdHJ1Y3Q+IHtcbiAgICAgICAgY29uc3Qgc3RydWN0TGlzdCA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRNb2RlbExpc3QoKTtcbiAgICAgICAgcmV0dXJuIHN0cnVjdExpc3QubWFwPERhdGFFbGVtZW50VmFsdWVTdHJ1Y3Q+KGl0ZW0gPT4gKHtcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0uZ2V0VmFsdWUoKVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pWw5o2u5YWD57uT5p6E5Lul5Y+KZ2V0XFxzZXTpl63ljIXosIPnlKjlh73mlbBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBnZXREYXRhRWxlbWVudE1vZGVsTGlzdCgpOiBBcnJheTxEYXRhQ2hlY2tFbGVNb2RlbCB8IERhdGFJbnB1dEVsZU1vZGVsIHwgRGF0YUxlYWZFbGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IHRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkpIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY+O1xuXG4gICAgICAgIGNvbnN0IGRhdGFJbmxpbmVHcm91cHMgPSBkYXRhRWxlTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGRhdGFMZWFmcyA9IGRhdGFFbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudExlYWYpIGFzIEFycmF5PERhdGFFbGVtZW50TGVhZj47XG5cbiAgICAgICAgLy/lpI3pgInmoYbmlbDmja7lhYNcbiAgICAgICAgY29uc3QgZGF0YUNoZWNrTGlzdCA9IGRhdGFMZWFmcy5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRDaGVjaykgYXMgQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz47XG4gICAgICAgIC8v6Zmk5aSN6YCJ5qGG5LmL5aSW55qETGVhZkRhdGFFbGVtZW50XG4gICAgICAgIGNvbnN0IGRhdGFPdGhlckxlYWZWYWx1ZXMgPSBDb21tb25VdGlsLnJlbW92ZVVuaW9uU2V0KGRhdGFMZWFmcywgZGF0YUNoZWNrTGlzdCkubWFwPERhdGFMZWFmRWxlTW9kZWw+KGl0ZW0gPT4gKFxuICAgICAgICAgICAgeyBpZDogaXRlbS5wcm9wcy5pZCBhcyBzdHJpbmcsIG5hbWU6IGl0ZW0ucHJvcHMubmFtZSBhcyBzdHJpbmcsIGZpZWxkTmFtZTogaXRlbS5wcm9wcy5maWVsZCBhcyBzdHJpbmcsIGl0ZW0sIGdldFZhbHVlOiAoKSA9PiB7IHJldHVybiBpdGVtLmdldFZhbHVlKCkgfSwgc2V0VmFsdWU6ICh2YWwpID0+IHsgaXRlbS5zZXRWYWx1ZSh2YWwpIH0gfSkpO1xuICAgICAgICBjb25zdCBkYXRhSW5saW5lU3RydWN0TGlzdCA9IGRhdGFJbmxpbmVHcm91cHMubWFwPERhdGFJbnB1dEVsZU1vZGVsPihpdGVtID0+IChcbiAgICAgICAgICAgIHsgaWQ6IGl0ZW0ucHJvcHMuaWQsIG5hbWU6IGl0ZW0ucHJvcHMubmFtZSwgZmllbGROYW1lOiBpdGVtLnByb3BzLmZpZWxkTmFtZSwgaXRlbSwgZ2V0VmFsdWU6ICgpID0+IHsgcmV0dXJuIGl0ZW0uZ2V0VmFsdWUoKSB9LCBzZXRWYWx1ZTogKHZhbCkgPT4geyBpdGVtLnNldFZhbHVlKHZhbCkgfSB9KSk7XG4gICAgICAgIC8v5aSN6YCJ5qGG5YiX6KGoXG4gICAgICAgIGNvbnN0IGRhdGFDaGVja1N0cnVjdExpc3QgPSB0aGlzLmdldERhdGFDaGVja01vZGVsTGlzdChkYXRhQ2hlY2tMaXN0KTtcbiAgICAgICAgcmV0dXJuIFsuLi5kYXRhSW5saW5lU3RydWN0TGlzdCwgLi4uZGF0YUNoZWNrU3RydWN0TGlzdCwgLi4uZGF0YU90aGVyTGVhZlZhbHVlc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5aSN6YCJ5qGG5pWw5o2u5YWD57uT5p6E5YiX6KGoXG4gICAgICogQHBhcmFtIGRhdGFDaGVja0xpc3QgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREYXRhQ2hlY2tNb2RlbExpc3QoZGF0YUNoZWNrTGlzdDogQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz4pOiBBcnJheTxEYXRhQ2hlY2tFbGVNb2RlbCB8IERhdGFMZWFmRWxlTW9kZWw+IHtcbiAgICAgICAgLy/kuI3lrZjlnKhncm91cE5hbWXnmoTlpI3pgInmoYZcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2hlY2tMaXN0ID0gZGF0YUNoZWNrTGlzdC5maWx0ZXIoaXRlbSA9PiAhaXRlbS5wcm9wcy5ncm91cE5hbWUpO1xuICAgICAgICAvL+WtmOWcqGdyb3VwTmFtZeeahOWkjemAieahhlxuICAgICAgICBjb25zdCBncm91cE5hbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGFDaGVja0xpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5ncm91cE5hbWUpLm1hcChpdGVtID0+IGl0ZW0ucHJvcHMuZ3JvdXBOYW1lKSkpO1xuICAgICAgICBjb25zdCBncm91cENoZWNrTGlzdFZhbHVlcyA9IGdyb3VwTmFtZXMubWFwPERhdGFDaGVja0VsZU1vZGVsPigoZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cENoZWNrSXRlbXMgPSBkYXRhQ2hlY2tMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuZ3JvdXBOYW1lID09PSBncm91cE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogZ3JvdXBOYW1lLFxuICAgICAgICAgICAgICAgIG5hbWU6IGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5uYW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLmZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdDogZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm11bHRpU2VsZWN0LFxuICAgICAgICAgICAgICAgIGl0ZW06IGdyb3VwQ2hlY2tJdGVtcyxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRWYWx1ZSA9IGdyb3VwQ2hlY2tJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQpLm1hcChpdGVtID0+IGl0ZW0uZ2V0VmFsdWUoKSArICcnKS5qb2luKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkU2luZ2xlSXRlbSA9IGdyb3VwQ2hlY2tJdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrZWRTaW5nbGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFZhbHVlID0gY2hlY2tlZFNpbmdsZUl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0VmFsdWU6ICh2YWw6IHN0cmluZyB8IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy/kuLpudWxs5pe2XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ2hlY2tJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbEl0ZW1zID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwuc3BsaXQoJzsnKSA6IHZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDaGVja0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9wcy5jaGVja2VkID0gdmFsSXRlbXMuaW5kZXhPZihpdGVtLnByb3BzLmNoZWNrZWRWYWx1ZSArICcnKSA+PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENoZWNrSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnByb3BzLmNoZWNrZWQgPSBpdGVtLnByb3BzLmNoZWNrZWRWYWx1ZSA9PT0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzaW5nbGVDaGVja0xpc3RWYWx1ZXMgPSBzaW5nbGVDaGVja0xpc3QubWFwPERhdGFMZWFmRWxlTW9kZWw+KGl0ZW0gPT4gKHsgaWQ6IGl0ZW0ucHJvcHMuaWQsIG5hbWU6IGl0ZW0ucHJvcHMubmFtZSwgZmllbGROYW1lOiBpdGVtLnByb3BzLmZpZWxkTmFtZSwgaXRlbSwgZ2V0VmFsdWU6ICgpID0+IHsgcmV0dXJuIGl0ZW0uZ2V0VmFsdWUoKSB9LCBzZXRWYWx1ZTogKHZhbCkgPT4geyBpdGVtLnNldFZhbHVlKHZhbCkgfSB9KSk7XG4gICAgICAgIHJldHVybiBbLi4uc2luZ2xlQ2hlY2tMaXN0VmFsdWVzLCAuLi5ncm91cENoZWNrTGlzdFZhbHVlc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W55WZ55eV5Z2X5YWD57Sg5YiX6KGoXG4gICAgICovXG4gICAgZ2V0VHJhY2tFbGVtZW50cygpOiBBcnJheTxUcmFja1J1bkVsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSBhcyBBcnJheTxUcmFja1J1bkVsZW1lbnQ+O1xuICAgIH1cblxuICAgIGdldFRyYWNrRWxtZWVudEJ5SWQoaWQ6IHN0cmluZyk6IFRyYWNrUnVuRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbmQoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmIGl0ZW0ucHJvcHMuaWQgPT09IGlkKSBhcyBUcmFja1J1bkVsZW1lbnQgfCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueVmeeXleWdl+WGheaVsOaNrlxuICAgICAqL1xuICAgIGdldFRyYWNrc0RhdGEoKTogQXJyYXk8VHJhY2tCbG9ja0RhdGE+IHtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50cyA9IHRoaXMuZ2V0VHJhY2tFbGVtZW50cygpO1xuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50cy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmFja1J1biA9IGl0ZW0gYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRyYWNrUnVuLCB7IGFsbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLy/nlKjmiLdpZFxuICAgICAgICAgICAgICAgIHVzZXJJZDogdHJhY2tSdW4ucHJvcHMudXNlcklkLFxuICAgICAgICAgICAgICAgIC8v55So5oi35ZCN56ewXG4gICAgICAgICAgICAgICAgdXNlck5hbWU6IHRyYWNrUnVuLnByb3BzLnVzZXJOYW1lLFxuICAgICAgICAgICAgICAgIC8v5pel5pyfXG4gICAgICAgICAgICAgICAgZGF0ZTogdHJhY2tSdW4ucHJvcHMuZGF0ZSxcbiAgICAgICAgICAgICAgICAvL+exu+Wei++8jGlucy1ydW7vvJrmj5LlhaXvvIxkZWwtcnVu77ya5Yig6ZmkXG4gICAgICAgICAgICAgICAgdHlwZTogdHJhY2tSdW4udHlwZSBhcyBUcmFja1J1blR5cGVFbnVtLFxuICAgICAgICAgICAgICAgIC8v55WZ55eV5Z2XaWRcbiAgICAgICAgICAgICAgICBpZDogdHJhY2tSdW4ucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgLy/lhoXlrrlcbiAgICAgICAgICAgICAgICBjb250ZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldENvbnRyb2xWYWx1ZShpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSB0aGlzLmdldENvbnRyb2xCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRhdGFFbGUpIHtcbiAgICAgICAgICAgIGRhdGFFbGUuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3MuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBzZXRDb250cm9sVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nLCB2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gdGhpcy5nZXRDb250cm9sQnlOYW1lKG5hbWUpXG4gICAgICAgIGRhdGFFbGUuc2V0VmFsdWUodmFsKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWkjemAieahhumAieS4reeahOWAvFxuICAgICAqL1xuICAgIGdldENoZWNrQm94VmFsdWVzKGdyb3VwTmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGNrYnMgPSB0aGlzLmdldENoZWNrQm94TGlzdChncm91cE5hbWUpO1xuICAgICAgICByZXR1cm4gY2ticy5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQpLm1hcChpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja0JveExpc3QoZ3JvdXBOYW1lOiBzdHJpbmcpOiBBcnJheTxEYXRhRWxlbWVudENoZWNrPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2xJbnN0YW5jZUxpc3QoKS5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRDaGVjayAmJiBpdGVtLnByb3BzLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lKSBhcyBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3kuIrkuIvmlofmiafooYzpu5jorqTnu5HlrppcbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKi9cbiAgICBiaW5kRGF0YVZhbHVlcyhkYXRhOiBzdHJpbmcgfCBPYmplY3QgfCBBcnJheTx7IGtleTogc3RyaW5nLCB2YWx1ZTogYW55IH0+LCBwcmVkaWNhdGVLZXk6ICdpZCcgfCAnbmFtZScgfCAnZmllbGROYW1lJyA9ICdmaWVsZE5hbWUnKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3MuY2xlYXIoKTtcbiAgICAgICAgbGV0IGJpbmREYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSBhcyBPYmplY3QgOiBkYXRhO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiaW5kRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgYmluZERhdGEuZm9yRWFjaChpdGVtID0+IHsgb2JqW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWUgfSk7XG4gICAgICAgICAgICBiaW5kRGF0YSA9IG9iajtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhTGlzdCA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRNb2RlbExpc3QoKTtcbiAgICAgICAgZGF0YUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaktleSA9IGl0ZW1bcHJlZGljYXRlS2V5XTtcbiAgICAgICAgICAgIGlmIChiaW5kRGF0YS5oYXNPd25Qcm9wZXJ0eShvYmpLZXkpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZShiaW5kRGF0YVtvYmpLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5cbmludGVyZmFjZSBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWVsZE5hbWU6IHN0cmluZztcbiAgICBnZXRWYWx1ZTogKCkgPT4gYW55O1xuICAgIHNldFZhbHVlOiAodmFsOiBhbnkpID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgRGF0YUNoZWNrRWxlTW9kZWwgZXh0ZW5kcyBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpdGVtOiBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICBtdWx0aVNlbGVjdDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERhdGFJbnB1dEVsZU1vZGVsIGV4dGVuZHMgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaXRlbTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cFxufVxuXG5pbnRlcmZhY2UgRGF0YUxlYWZFbGVNb2RlbCBleHRlbmRzIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGl0ZW06IERhdGFFbGVtZW50TGVhZjtcbn1cblxuLyoqXG4gKiDnlZnnl5XlnZfnu5PmnoTljJbmlbDmja5cbiAqL1xuaW50ZXJmYWNlIFRyYWNrQmxvY2tEYXRhIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICB1c2VyTmFtZTogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICB0eXBlOiBUcmFja1J1blR5cGVFbnVtLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nO1xufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCwgQ29tbUNvbnRlbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuXG4vKipcbiAqIOWkhOeQhuaWh+aho+aJueazqFxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb21tZW50IHtcbiAgICBjb21tTWFya0xpc3Q6IEFycmF5PENvbW1lbnRFbGVtZW50PiA9IFtdO1xuICAgIGNvbW1Db250ZW50TGlzdDogQXJyYXk8Q29tbUNvbnRlbnRCYXNlRWxlbWVudD4gPSBbXTtcbiAgICBpc0RpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7IH1cblxuICAgIC8qKlxuICAgICog6K+75Y+W5a6h6ZiF5qCH6K6w56ym5Y+3XG4gICAgKi9cbiAgICByZWFkQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tbUxpc3QgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY29tbScpIGFzIEFycmF5PENvbW1lbnRFbGVtZW50PjtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTGlzdCA9IGNvbW1MaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMubWFya1R5cGUgPT09IFwic3RhcnRcIik7XG4gICAgICAgIGNvbnN0IGVuZENvbW1MaXN0ID0gY29tbUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5tYXJrVHlwZSA9PT0gXCJlbmRcIik7XG4gICAgICAgIGNvbnN0IGNvbW1NYXBzID0gc3RhcnRDb21tTGlzdC5tYXAoc3RhcnRJdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IGVuZENvbW1MaXN0LmZpbmQoZW5kSXRlbSA9PiBlbmRJdGVtLnByb3BzLmlkID09PSBzdGFydEl0ZW0ucHJvcHMuaWQpO1xuICAgICAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWMuemFjeeahOe7k+adn+WuoemYheespuWPtycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogc3RhcnRJdGVtLCBlbmQgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21tQ29udGVudExpc3Q6IEFycmF5PENvbW1Db250ZW50QmFzZUVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5nZXRDaGlsZChpKSBhcyBDb21tQ29udGVudEJhc2VFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY29tbU1hcCA9IGNvbW1NYXBzLmZpbmQoaXRlbSA9PiBpdGVtLnN0YXJ0LnByb3BzLmlkID09PSBjb21tQ29udGVudC5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAoIWNvbW1NYXApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWuoemYheWGheWuueWvueW6lOeahOWuoemYheespuWPtycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbUNvbnRlbnQuc3RhcnRNYXJrID0gY29tbU1hcC5zdGFydDtcbiAgICAgICAgICAgIGNvbW1Db250ZW50LmVuZE1hcmsgPSBjb21tTWFwLmVuZDtcbiAgICAgICAgICAgIGNvbW1Db250ZW50TGlzdC5wdXNoKGNvbW1Db250ZW50KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbU1hcmtMaXN0ID0gY29tbUxpc3Q7XG4gICAgICAgIHRoaXMuY29tbUNvbnRlbnRMaXN0ID0gY29tbUNvbnRlbnRMaXN0O1xuICAgICAgICB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ID0gdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGM5Yig6Zmk5YmN77yM6ZyA6KaB5pu05paw5om55rOo6IqC54K55L2N572uXG4gICAgICovXG4gICAgdXBkYXRlQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IHRoaXMuZG9jQ3R4O1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZCwgc2VsZWN0ZWRSYW5nZSB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICAvL+e0p+aMqOedgOeahOWFg+e0oFxuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlIGluc3RhbmNlb2YgQ29tbWVudEVsZW1lbnQgJiYgbmV4dFNpYmxpbmdFbGUucHJvcHMubWFya1R5cGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KG5leHRTaWJsaW5nRWxlLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChuZXh0U2libGluZ0VsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy/lpoLmnpzlvIDlp4vmibnms6jooqvpgInkuK3vvIzliJnpnIDopoHnp7vliqjlvIDlp4vmibnms6jlhYPntKDliLDpgInljLrmnKvlsL5cbiAgICAgICAgICAgIC8v5aaC5p6c57uT5p2f5om55rOo6KKr6YCJ5Lit77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN5om55rOoXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gUmFuZ2VVdGlsLmdldEVuZFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICAgICAgaWYgKCFlbmRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tbVBhaXJzOiBBcnJheTxDb21tTWFya1NlbGVjdGVkU3RhdHVzPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRNYXJrLCBlbmRNYXJrIH0gPSB0aGlzLmNvbW1Db250ZW50TGlzdFtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tUGFpcjogQ29tbU1hcmtTZWxlY3RlZFN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNYXJrLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrLFxuICAgICAgICAgICAgICAgICAgICBzdGFydE1hcmtTdGF0dXM6IFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShzZWxlY3RlZFJhbmdlLCBzdGFydE1hcmspLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrU3RhdHVzOiBSYW5nZVV0aWwuY2hlY2tFbGVtZW50RnVsbEluUmFuZ2Uoc2VsZWN0ZWRSYW5nZSwgZW5kTWFyayksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb21tUGFpcnMucHVzaChjb21tUGFpcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tUGFpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tUGFpciA9IGNvbW1QYWlyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbVBhaXIuZW5kTWFya1N0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQoY29tbVBhaXIuZW5kTWFyay5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tUGFpci5zdGFydE1hcmtTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgbmV3U3RhcnRNYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5ld1N0YXJ0TWFyay5wcm9wcy5pZCA9IGNvbW1QYWlyLnN0YXJ0TWFyay5wcm9wcy5pZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tbVBhaXIuc3RhcnRNYXJrLmlzRGVjb3JhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG9jdW1lbnRDaGFuZ2UuaW5zZXJ0RWxlbWVudChlbmRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLmVuZE9mZnNldCwgW25ld1N0YXJ0TWFya10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5om55rOoXG4gICAgICogQHBhcmFtIGlkIFxuICAgICAqL1xuICAgIHJlbW92ZUNvbW1lbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tZW50TWFya3MgPSB0aGlzLmNvbW1NYXJrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmlkID09PSBpZCk7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRDb250ZW50ID0gdGhpcy5jb21tQ29udGVudExpc3QuZmluZChpdGVtID0+IGl0ZW0ucHJvcHMuaWQgPT09IGlkKTtcbiAgICAgICAgY29tbWVudE1hcmtzLmZvckVhY2goaXRlbSA9PiBpdGVtLnJlbW92ZSgpKVxuICAgICAgICBjb21tZW50Q29udGVudD8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBnZXRDb21tTWFya0luZGV4KGNvbW1NYXJrOiBDb21tZW50RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1hcmtUeXBlID0gY29tbU1hcmsucHJvcHMubWFya1R5cGU7XG4gICAgICAgIGNvbnN0IGNvbW1MaXN0ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvbW0nKSBhcyBBcnJheTxDb21tZW50RWxlbWVudD47XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29tbUxpc3QgPSBjb21tTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLm1hcmtUeXBlID09PSBtYXJrVHlwZSk7XG4gICAgICAgIHJldHVybiBzdGFydENvbW1MaXN0LmluZGV4T2YoY29tbU1hcmspO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaJgOacieaJueazqFxuICAgICAqL1xuICAgIGNsZWFyQWxsQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVhZENvbW1lbnRzKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudCh0aGlzLmNvbW1Db250ZW50TGlzdFtpXS5wcm9wcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInnmoTpqozor4Hmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbFZhbGlkYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3ZhbGlkYXRlJykuZm9yRWFjaChpdGVtID0+IHsgdGhpcy5yZW1vdmVDb21tZW50KGl0ZW0ucHJvcHMuaWQpIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5om55rOo5L+u5pS55ZCO5LqL5Lu2XG4gICAgICog55So5LqO5qCH5rOo5b2T5YmN5paH5qGj55qE5om55rOo5Y+R55Sf5pu05pS55LqG77yM5LiN5YaN6YeN5aSN6K+75Y+W5om55rOo77yM5o+Q6auY5oCn6IO9XG4gICAgICovXG4gICAgYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG5cbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1NYXJrU2VsZWN0ZWRTdGF0dXMge1xuICAgIHN0YXJ0TWFyazogQ29tbWVudEVsZW1lbnQsXG4gICAgZW5kTWFyazogQ29tbWVudEVsZW1lbnQsXG4gICAgc3RhcnRNYXJrU3RhdHVzOiBib29sZWFuLFxuICAgIGVuZE1hcmtTdGF0dXM6IGJvb2xlYW5cbn1cbiIsImltcG9ydCB7IHJlYWQgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50UmVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1yZWFkZXJcIjtcbmltcG9ydCB7IEVsZW1lbnRTZXJpYWxpemUgfSBmcm9tIFwiLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50SGlzdG9yeUl0ZW0ge1xuICAgIGNvbnRlbnQ6IGFueSxcbiAgICB0aW1lOiBEYXRlXG59XG4vKipcbiAqIOaUr+aMgeaWh+aho+mHjeWBmuWSjOaSpOmUgOeahOexuyAgIFxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRIaXN0b3J5IHtcbiAgICB0YXNrOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3RydWN0b3IocHVibGljIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHVibGljIHJlYWRlcjogRWxlbWVudFJlYWRlciwgb25Eb2NDaGFuZ2VkRXZlbnQ6IFN1YmplY3Q8dm9pZD4pIHtcbiAgICAgICAgb25Eb2NDaGFuZ2VkRXZlbnQucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5kb2NDdHgudmlld09wdGlvbnMuZW5hYmxlVW5kbyksIGRlYm91bmNlVGltZSgxNTAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFzay50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLmVuYWJsZVVuZG8gfHwgIXRoaXMuZG9jQ3R4LmlzRGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlSGlzdG9yeUl0ZW0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdW5kb1N0YWNrOiBEb2N1bWVudEhpc3RvcnlJdGVtW10gPSBbXTtcbiAgICBwcml2YXRlIF9pbmRleDogbnVtYmVyID0gLTE7XG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgPSA1MDtcbiAgICBnZW5lcmF0ZUhpc3RvcnlJdGVtKCk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZygn55Sf5oiQ5Y6G5Y+y6K6w5b2VJyk7XG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCA9PT0gdGhpcy5fdW5kb1N0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fdW5kb1N0YWNrLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdW5kb1N0YWNrLnNwbGljZSh0aGlzLl9pbmRleCArIDEsIHRoaXMuX3VuZG9TdGFjay5sZW5ndGggLSB0aGlzLl9pbmRleCAtIDEpO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemUodGhpcy5kb2NDdHguZG9jdW1lbnQsIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zKTtcbiAgICAgICAgdGhpcy5fdW5kb1N0YWNrLnB1c2goe1xuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2luZGV4Kys7XG4gICAgfVxuXG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0IGNhblVuZG8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0IGNhblJlZG8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleCA8IHRoaXMuX3VuZG9TdGFjay5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHVuZG8oKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblVuZG8pIHtcbiAgICAgICAgICAgIHRoaXMuX2luZGV4LS07XG4gICAgICAgICAgICB0aGlzLnJlYWRlci5yZWFkKHRoaXMuX3VuZG9TdGFja1t0aGlzLl9pbmRleF0uY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWRvKCkge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWRvKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmRleCsrO1xuICAgICAgICAgICAgdGhpcy5yZWFkZXIucmVhZCh0aGlzLl91bmRvU3RhY2tbdGhpcy5faW5kZXhdLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3VuZG9TdGFjayA9IFtdO1xuICAgICAgICB0aGlzLl9pbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmdlbmVyYXRlSGlzdG9yeUl0ZW0oKTtcbiAgICB9XG5cbn0iLCJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvblJhbmdlLCBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSBJbnRsIHtcblxuICAgIHR5cGUgQkNQNDdMYW5ndWFnZVRhZyA9IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aXRoIHNvbWUgb3IgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGBJbnRsLlNlZ21lbnRlcmAgY29uc3RydWN0b3IgYG9wdGlvbnNgIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL1NlZ21lbnRlciNwYXJhbWV0ZXJzKVxuICAgICAqL1xuICAgIGludGVyZmFjZSBTZWdtZW50ZXJPcHRpb25zIHtcbiAgICAgICAgLyoqIFRoZSBsb2NhbGUgbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIHVzZS4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgb3B0aW9uLCBzZWUgW0ludGwgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNMb2NhbGVfbmVnb3RpYXRpb24pLiAqL1xuICAgICAgICBsb2NhbGVNYXRjaGVyPzogXCJiZXN0IGZpdFwiIHwgXCJsb29rdXBcIiB8IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqIFRoZSB0eXBlIG9mIGlucHV0IHRvIGJlIHNwbGl0ICovXG4gICAgICAgIGdyYW51bGFyaXR5PzogXCJncmFwaGVtZVwiIHwgXCJ3b3JkXCIgfCBcInNlbnRlbmNlXCIgfCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaW50ZXJmYWNlIFNlZ21lbnRlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGBTZWdtZW50c2Agb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlZ21lbnRzIG9mIHRoZSBpbnB1dCBzdHJpbmcsIHVzaW5nIHRoZSBzZWdtZW50ZXIncyBsb2NhbGUgYW5kIGdyYW51bGFyaXR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgdGV4dCB0byBiZSBzZWdtZW50ZWQgYXMgYSBgc3RyaW5nYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgQSBuZXcgaXRlcmFibGUgU2VnbWVudHMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlZ21lbnRzIG9mIHRoZSBpbnB1dCBzdHJpbmcsIHVzaW5nIHRoZSBzZWdtZW50ZXIncyBsb2NhbGUgYW5kIGdyYW51bGFyaXR5LlxuICAgICAgICAgKi9cbiAgICAgICAgc2VnbWVudChpbnB1dDogc3RyaW5nKTogU2VnbWVudHM7XG5cbiAgICAgICAgcmVzb2x2ZWRPcHRpb25zKCk6IFJlc29sdmVkU2VnbWVudGVyT3B0aW9ucztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgUmVzb2x2ZWRTZWdtZW50ZXJPcHRpb25zIHtcbiAgICAgICAgbG9jYWxlOiBzdHJpbmc7XG4gICAgICAgIGdyYW51bGFyaXR5OiBcImdyYXBoZW1lXCIgfCBcIndvcmRcIiB8IFwic2VudGVuY2VcIjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2VnbWVudHMge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgc2VnbWVudCBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIHRoYXQgaW5jbHVkZXMgdGhlIGNvZGUgdW5pdCBhdCBhIHNwZWNpZmllZCBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGNvZGVVbml0SW5kZXggLSBBIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBpbmRleCBvZiB0aGUgY29kZSB1bml0IGluIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmcuIElmIHRoZSB2YWx1ZSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgMGAuXG4gICAgICAgICAqL1xuICAgICAgICBjb250YWluaW5nKGNvZGVVbml0SW5kZXg/OiBudW1iZXIpOiBTZWdtZW50RGF0YTtcblxuICAgICAgICAvKiogUmV0dXJucyBhbiBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgdGhlIHNlZ21lbnRzLiAqL1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFNlZ21lbnREYXRhPjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2VnbWVudERhdGEge1xuICAgICAgICAvKiogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2VnbWVudCBleHRyYWN0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nLiAqL1xuICAgICAgICBzZWdtZW50OiBzdHJpbmc7XG4gICAgICAgIC8qKiBUaGUgY29kZSB1bml0IGluZGV4IGluIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmcgYXQgd2hpY2ggdGhlIHNlZ21lbnQgYmVnaW5zLiAqL1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICAvKiogVGhlIGNvbXBsZXRlIGlucHV0IHN0cmluZyB0aGF0IHdhcyBzZWdtZW50ZWQuICovXG4gICAgICAgIGlucHV0OiBzdHJpbmc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGJvb2xlYW4gdmFsdWUgb25seSBpZiBncmFudWxhcml0eSBpcyBcIndvcmRcIjsgb3RoZXJ3aXNlLCB1bmRlZmluZWQuXG4gICAgICAgICAqIElmIGdyYW51bGFyaXR5IGlzIFwid29yZFwiLCB0aGVuIGlzV29yZExpa2UgaXMgdHJ1ZSB3aGVuIHRoZSBzZWdtZW50IGlzIHdvcmQtbGlrZSAoaS5lLiwgY29uc2lzdHMgb2YgbGV0dGVycy9udW1iZXJzL2lkZW9ncmFwaHMvZXRjLik7IG90aGVyd2lzZSwgZmFsc2UuXG4gICAgICAgICAqL1xuICAgICAgICBpc1dvcmRMaWtlPzogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBjb25zdCBTZWdtZW50ZXI6IHtcbiAgICAgICAgcHJvdG90eXBlOiBTZWdtZW50ZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgYEludGwuU2VnbWVudGVyYCBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBsb2NhbGVzIC0gQSBzdHJpbmcgd2l0aCBhIFtCQ1AgNDcgbGFuZ3VhZ2UgdGFnXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjQ2KSwgb3IgYW4gYXJyYXkgb2Ygc3VjaCBzdHJpbmdzLlxuICAgICAgICAgKiAgRm9yIHRoZSBnZW5lcmFsIGZvcm0gYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSBgbG9jYWxlc2AgYXJndW1lbnQsXG4gICAgICAgICAqICBzZWUgdGhlIFtgSW50bGAgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNMb2NhbGVfaWRlbnRpZmljYXRpb25fYW5kX25lZ290aWF0aW9uKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBbb2JqZWN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9TZWdtZW50ZXIjcGFyYW1ldGVycylcbiAgICAgICAgICogIHdpdGggc29tZSBvciBhbGwgb3B0aW9ucyBvZiBgU2VnbWVudGVyT3B0aW9uc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZXR1cm5zIFtJbnRsLlNlZ21lbnRlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50cykgb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlcikuXG4gICAgICAgICAqL1xuICAgICAgICBuZXcobG9jYWxlcz86IEJDUDQ3TGFuZ3VhZ2VUYWcgfCBCQ1A0N0xhbmd1YWdlVGFnW10sIG9wdGlvbnM/OiBTZWdtZW50ZXJPcHRpb25zKTogU2VnbWVudGVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhvc2Ugb2YgdGhlIHByb3ZpZGVkIGxvY2FsZXMgdGhhdCBhcmUgc3VwcG9ydGVkIHdpdGhvdXQgaGF2aW5nIHRvIGZhbGwgYmFjayB0byB0aGUgcnVudGltZSdzIGRlZmF1bHQgbG9jYWxlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gbG9jYWxlcyAtIEEgc3RyaW5nIHdpdGggYSBbQkNQIDQ3IGxhbmd1YWdlIHRhZ10oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTY0NiksIG9yIGFuIGFycmF5IG9mIHN1Y2ggc3RyaW5ncy5cbiAgICAgICAgICogIEZvciB0aGUgZ2VuZXJhbCBmb3JtIGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGxvY2FsZXNgIGFyZ3VtZW50LFxuICAgICAgICAgKiAgc2VlIHRoZSBbYEludGxgIHBhZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwjTG9jYWxlX2lkZW50aWZpY2F0aW9uX2FuZF9uZWdvdGlhdGlvbikuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIEFuIFtvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL3N1cHBvcnRlZExvY2FsZXNPZiNwYXJhbWV0ZXJzKS5cbiAgICAgICAgICogIHdpdGggc29tZSBvciBhbGwgcG9zc2libGUgb3B0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvc3VwcG9ydGVkTG9jYWxlc09mKVxuICAgICAgICAgKi9cbiAgICAgICAgc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXM6IEJDUDQ3TGFuZ3VhZ2VUYWcgfCBCQ1A0N0xhbmd1YWdlVGFnW10sIG9wdGlvbnM/OiBQaWNrPFNlZ21lbnRlck9wdGlvbnMsIFwibG9jYWxlTWF0Y2hlclwiPik6IEJDUDQ3TGFuZ3VhZ2VUYWdbXTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNUZXh0U2VnbWVudChzZWxlY3Rpb246IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgbGV0IHsgc3RhcnRDb250cm9sOiBlbGVtZW50LCBzdGFydE9mZnNldDogb2Zmc2V0IH0gPSBzZWxlY3Rpb247XG4gICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFzdXBwb3J0U2VnbWVudCgpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZm9jdXNFbGUgPSBlbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgMTtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPiBmb2N1c0VsZS50ZXh0TWVhc3VyZXMubGVuZ3RoID8gZm9jdXNFbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA6IG9mZnNldDtcbiAgICAvL+iOt+WPlui/nue7reeahOWtl+esplxuICAgIGNvbnN0IGl0ZW1zID0gWy4uLmdldENvbnNlY3V0aXZlVGV4dHNCeURpcmVjdGlvbihlbGVtZW50KSwgZWxlbWVudCwgLi4uZ2V0Q29uc2VjdXRpdmVUZXh0c0J5RGlyZWN0aW9uKGVsZW1lbnQsIGZhbHNlKV07XG4gICAgY29uc3Qgc29ydEl0ZW1zID0gZ2V0VGV4dFNvcnREYXRhKGl0ZW1zKTtcbiAgICBjb25zdCB7IGluZGV4LCB0ZXh0IH0gPSBzb3J0SXRlbXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgIHByZXYudGV4dCArPSBjdXJyLnRleHQ7XG4gICAgICAgIGlmIChwcmV2LmNvbXBsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnIuaXRlbSA9PT0gZm9jdXNFbGUpIHtcbiAgICAgICAgICAgIHByZXYuaW5kZXggKz0gb2Zmc2V0O1xuICAgICAgICAgICAgcHJldi5jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldi5pbmRleCArPSBjdXJyLml0ZW0udGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldlxuICAgIH0sIHsgY29tcGxldGVkOiBmYWxzZSwgaW5kZXg6IDAsIHRleHQ6ICcnIH0pO1xuICAgIGNvbnN0IHsgaW5kZXg6IGhpdEluZGV4LCBsZW46IGhpdExlbiB9ID0gZ2V0SGl0U2VnbWVudCh0ZXh0LCBpbmRleCk7XG4gICAgY29uc3QgbWF0Y2hTZWdtZW50ID0gc29ydEl0ZW1zLmZpbHRlcihpdGVtID0+IChpdGVtLmluZGV4IDw9IGhpdEluZGV4ICYmIGl0ZW0uZW5kSW5kZXggPiBoaXRJbmRleCkgfHwgKGl0ZW0uaW5kZXggPD0gaGl0SW5kZXggKyBoaXRMZW4gJiYgaXRlbS5lbmRJbmRleCA+IGhpdEluZGV4ICsgaGl0TGVuKSk7XG4gICAgY29uc3Qgc3RhcnRTZWdtZW50ID0gbWF0Y2hTZWdtZW50WzBdO1xuICAgIGNvbnN0IGVuZFNlZ21lbnQgPSBtYXRjaFNlZ21lbnRbbWF0Y2hTZWdtZW50Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gaGl0SW5kZXggLSBzdGFydFNlZ21lbnQuaW5kZXg7XG4gICAgY29uc3QgZW5kT2Zmc2V0ID0gaGl0SW5kZXggKyBoaXRMZW4gLSBlbmRTZWdtZW50LmluZGV4O1xuICAgIGNvbnN0IG5ld1JhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgbmV3UmFuZ2Uuc2V0U3RhcnQoc3RhcnRTZWdtZW50Lml0ZW0sIHN0YXJ0T2Zmc2V0KTtcbiAgICBuZXdSYW5nZS5zZXRFbmQoZW5kU2VnbWVudC5pdGVtLCBlbmRPZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmludGVyZmFjZSBUZXh0U2VnbWVudERhdGEge1xuICAgIGl0ZW06IFRleHRHcm91cEVsZW1lbnQsXG4gICAgbGVuOiBudW1iZXIsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBlbmRJbmRleDogbnVtYmVyLFxuICAgIHRleHQ6IHN0cmluZ1xufVxuXG4vKipcbiAqIOi/m+ihjOWIhuivjVxuICogQHBhcmFtIHRleHRcbiAqIEBwYXJhbSBmb2N1c09mZnNldFxuICovXG5mdW5jdGlvbiBnZXRIaXRTZWdtZW50KHRleHQ6IHN0cmluZywgZm9jdXNPZmZzZXQpOiB7IGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHNlZ21lbnRlciA9IG5ldyBJbnRsLlNlZ21lbnRlcihcInpoLUNOXCIsIHsgZ3JhbnVsYXJpdHk6IFwid29yZFwiIH0pO1xuICAgIGNvbnN0IGl0ZXJhdG9yMSA9IHNlZ21lbnRlci5zZWdtZW50KHRleHQpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBjb25zdCBzZWdJdGVtcyA9IEFycmF5LmZyb20oaXRlcmF0b3IxKTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VnSXRlbSA9IHNlZ0l0ZW1zW2ldO1xuICAgICAgICBjb25zdCBjdXJySW5kZXggPSBzZWdJdGVtLmluZGV4O1xuICAgICAgICBjb25zdCBjdXJyTGVuID0gc2VnSXRlbS5zZWdtZW50Lmxlbmd0aDtcbiAgICAgICAgaWYgKGZvY3VzT2Zmc2V0ID4gY3VyckluZGV4ICYmIGZvY3VzT2Zmc2V0IDw9IGN1cnJMZW4gKyBjdXJySW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuOiBjdXJyTGVuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggKz0gY3VyckxlbjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCfmnKrojrflj5bliLDlr7nlupTnmoTliIbor43or43nu4QnKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydFNlZ21lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsLlNlZ21lbnRlciA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiDmoLnmja7liY3lkI7pobrluo/moIfor4bntKLlvJXkvY1cbiAqIEBwYXJhbSB0ZXh0c1xuICovXG5mdW5jdGlvbiBnZXRUZXh0U29ydERhdGEodGV4dHM6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+KTogQXJyYXk8VGV4dFNlZ21lbnREYXRhPiB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzb3J0SXRlbXM6IEFycmF5PFRleHRTZWdtZW50RGF0YT4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0ZXh0c1tpXTtcbiAgICAgICAgY29uc3Qgc29ydERhdGEgPSB7XG4gICAgICAgICAgICBsZW46IGl0ZW0udGV4dE1lYXN1cmVzLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGluZGV4ICsgaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dFxuICAgICAgICB9O1xuICAgICAgICBzb3J0SXRlbXMucHVzaChzb3J0RGF0YSk7XG4gICAgICAgIGluZGV4ICs9IHNvcnREYXRhLmxlbjtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRJdGVtcztcbn1cblxuLyoqXG4gKiDojrflj5bmjIflrprmlrnlkJHkuIrov57nu63nmoTlrZfnrKZcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gcHJldlxuICovXG5mdW5jdGlvbiBnZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCwgcHJldiA9IHRydWUpOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50PiB7XG4gICAgbGV0IHByZXZUZXh0OiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgY29uc3QgcHJldlRleHRzOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50PiA9IFtdO1xuICAgIGNvbnN0IGZ1bmMgPSBwcmV2ID8gRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50IDogRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50O1xuICAgIGNvbnN0IGFkZEl0ZW0gPSBwcmV2ID8gcHJldlRleHRzLnVuc2hpZnQgOiBwcmV2VGV4dHMucHVzaDtcbiAgICB3aGlsZSAoKHByZXZUZXh0ID0gZnVuYyhwcmV2VGV4dCkpICYmIHByZXZUZXh0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAvL2FkZEl0ZW0ocHJldlRleHQpO1xuICAgICAgICBhZGRJdGVtLmFwcGx5KHByZXZUZXh0cywgW3ByZXZUZXh0XSk7XG4gICAgfVxuICAgIHJldHVybiBwcmV2VGV4dHM7XG59XG4iLCJpbXBvcnQgeyBSZW5kZXJDb250ZW54dCB9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci1jb250ZXh0JztcbmltcG9ydCB7IENvbnRlbnRNZW51SXRlbSwgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEV2ZW50TWFwLCBIaXRFdmVudEluZm8gfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LWV2ZW50LWRlZmluZSc7XG5pbXBvcnQgeyBEb2N1bWVudFBhaW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtcGFpbnQnO1xuaW1wb3J0IHsgRWxlbWVudFJlYWRlciB9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtcmVhZGVyJztcbmltcG9ydCB7IERvY3VtZW50RXZlbnQgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1ldmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb2N1bWVudElucHV0IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtaW5wdXQtY3Vyc29yJztcbmltcG9ydCB7IERvY3VtZW50Q3Vyc29yLCBEb2N1bWVudFNlbGVjdGlvbiwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXV0aWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRDaGFuZ2UgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jaGFuZ2UnO1xuaW1wb3J0IHsgQ3Vyc29yVHlwZSB9IGZyb20gJy4vZnJhbWV3b3JrL3JlbmRlci1kZWZpbmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uT3ZlcmxheXMgfSBmcm9tICcuL2ZyYW1ld29yay9zZWxlY3Rpb24tb3ZlcmxheXMnO1xuaW1wb3J0IHtcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBJQ2FuY2VsVG9rZW5GbixcbiAgICBMZWFmRWxlbWVudCxcbiAgICBNYXJnaW5Qcm9wcyxcbiAgICBPcmllbnRUeXBlLFxuICAgIFBhZ2VPcHRpb25zLFxuICAgIFBvc2l0aW9uLFxuICAgIFRleHRBbGlnbixcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZSc7XG5pbXBvcnQgeyBFbGVtZW50U2VyaWFsaXplIH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1zZXJpYWxpemUnO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvaW1wbCc7XG5pbXBvcnQgeyBkb2N1bWVudFByaW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnRUZW1wbGF0ZSB9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXRlbXBsYXRlJztcbmltcG9ydCB7XG4gICAgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCxcbiAgICBEYXRhRWxlbWVudExlYWYsIElzSW5TaWRlRGF0YUVsZW1lbnQsXG4gICAgdmFsaWRhdGVEYXRhRWxlXG59IGZyb20gJy4vZnJhbWV3b3JrL2ltcGwnO1xuaW1wb3J0IHsgRG9jUnVsZSB9IGZyb20gJy4vZG9jLXJ1bGVyJztcbmltcG9ydCB7IFBhcmFncmFwaFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXByb3BzJztcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tICcuL2ZyYW1ld29yay9pbXBsJztcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQgfSBmcm9tICcuL2ZyYW1ld29yay9pbXBsJztcbmltcG9ydCB7IFRhYmxlVXRpbCB9IGZyb20gJy4vZnJhbWV3b3JrL2ltcGwnO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWNvbnRleHQnO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50LCBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gJy4vZnJhbWV3b3JrL2ltcGwnO1xuaW1wb3J0IHsgRG9jdW1lbnRDb21tZW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtY29tbWVudCc7XG5pbXBvcnQgeyBDb21tQ29udGVudEJhc2VFbGVtZW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvaW1wbCc7XG5pbXBvcnQgeyBEb2N1bWVudEhpc3RvcnkgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1oaXN0b3J5JztcbmltcG9ydCB7IFRhYmxlUm93RWxlbWVudCB9IGZyb20gJy4vZnJhbWV3b3JrL2ltcGwnO1xuaW1wb3J0IHsgZ2V0Rm9jdXNUZXh0U2VnbWVudCB9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1zZWdtZW50ZXJcIjtcblxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGxcIjtcblxuXG5leHBvcnQgY2xhc3MgQ2FudmFzVGV4dEVkaXRvciB7XG4gICAgcHJpdmF0ZSBjb250ZW50Q3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGRvY0N0eDogRWRpdG9yQ29udGV4dDtcbiAgICBwcml2YXRlIGRvY0NvbW1lbnQ6IERvY3VtZW50Q29tbWVudDtcbiAgICBwcml2YXRlIHJlbmRlckNvbnRleHQ6IFJlbmRlckNvbnRlbnh0O1xuICAgIHByaXZhdGUgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludDtcbiAgICBlbGVtZW50UmVhZGVyOiBFbGVtZW50UmVhZGVyO1xuICAgIHByaXZhdGUgZG9jdW1lbnRFdmVudDogRG9jdW1lbnRFdmVudDtcbiAgICBwcml2YXRlIGRvY3VtZW50U2VsZWN0aW9uOiBEb2N1bWVudFNlbGVjdGlvbjtcbiAgICBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQ7XG4gICAgcHJpdmF0ZSBkb2N1bWVudENoYW5nZTogRG9jdW1lbnRDaGFuZ2U7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25PdmVybGF5czogU2VsZWN0aW9uT3ZlcmxheXM7XG4gICAgcHJpdmF0ZSBkb2NSdWxlOiBEb2NSdWxlO1xuICAgIHByaXZhdGUgZG9jSGlzdG9yeTogRG9jdW1lbnRIaXN0b3J5O1xuICAgIHByaXZhdGUgZXZlbnRNYXA6IEV2ZW50TWFwID0gbmV3IEV2ZW50TWFwKCk7XG4gICAgc2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDxTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGJlZm9yZVJlbmRlclN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGFmdGVyUmVuZGVyU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIC8v5pi+56S65Y+z6ZSu6I+c5Y2VXG4gICAgb25Db250ZXh0TWVudUl0ZW1DaGFuZ2VkOiBTdWJqZWN0PEVkaXRvckNvbnRlbnh0UHJvcHM+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+aYvuekuuaVsOaNruWFg+e8lui+keahhlxuICAgIG9uU2hvd0RhdGFFbGVtZW50RWRpdFBhbmVsRXZlbnQ6IFN1YmplY3Q8RWRpdG9yUGFuZWxQcm9wcz4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uRGJsQ2xpY2tFdmVudDogU3ViamVjdDxFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uQ2xpY2tFdmVudDogU3ViamVjdDxFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uU2Nyb2xsVmlld0V2ZW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5paH5qGj5pS55Y+Y5LqL5Lu2OuWGheWuueWPiuagt+W8j++8jOS4muWKoeaooeWdl+mcgOimgeagueaNruatpOS6i+S7tu+8jOadpei/vei4quW9k+WJjeaWh+aho+aYr+WQpuaUueWPmOeahOeKtuaAgVxuICAgIG9uRG9jQ2hhbmdlZEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9jU2Nyb2xsOiBIVE1MRGl2RWxlbWVudCwgcHJpdmF0ZSBob2xkU3BhY2U6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIHJ1bGVDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwcml2YXRlIGVkaXRDYW52YXNDb250YWluZXI6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIGVkaXRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwcml2YXRlIGVkaXRJbnB1dDogSFRNTElucHV0RWxlbWVudCwgcHJpdmF0ZSBlZGl0Q3Vyc29yOiBIVE1MU3BhbkVsZW1lbnQsIHByaXZhdGUgY3Vyc29yV3JhcHBlcjogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgc2NhbGVDb250YWluZXI6IEhUTUxEaXZFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSBuZXcgVmlld09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbiA9IG5ldyBEb2N1bWVudFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmRvY0N0eCA9IG5ldyBFZGl0b3JDb250ZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8gPSAn5LiH6L6+5L+h5oGv55S15a2Q55eF5Y6G57yW6L6R5ZmoLHd3dy53b25kZXJzZ3JvdXAuY29tJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kcmF3Q2hhclJlY3RDb2xvciA9ICdncmVlbic7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0xpbmVSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZSA9IDIwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnJldmlld1dpbmRvd1dpZHRoID0gMjAwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZSA9ICflrovkvZMnXG4gICAgICAgIC8v5pW05Liq55S75biD55qE5bC65a+4XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzID0ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCkuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIgPSB7XG4gICAgICAgICAgICBpZDogJzY2NjYnLFxuICAgICAgICAgICAgbmFtZTogJ+euoeeQhuWRmCdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5lbmFibGVVbmRvID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jcmVhdGVEb2NWaWV3ZXIoKTtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50ID0gbmV3IERvY3VtZW50Q29tbWVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuY29udGVudEN0eCA9IGVkaXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dCA9IG5ldyBSZW5kZXJDb250ZW54dCh0aGlzLmNvbnRlbnRDdHgsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRDYW52YXNQcm9wcygpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25PdmVybGF5cyA9IG5ldyBTZWxlY3Rpb25PdmVybGF5cyh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50ID0gbmV3IERvY3VtZW50UGFpbnQodGhpcy52aWV3T3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0LCB0aGlzLmRvY0N0eCwgdGhpcy5zZWxlY3Rpb25PdmVybGF5cy5zZWxlY3RlZFNldHMpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIgPSBuZXcgRWxlbWVudFJlYWRlcih0aGlzLmRvY0N0eCwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50ID0gbmV3IERvY3VtZW50RXZlbnQoZWRpdENhbnZhcywgdGhpcy5kb2N1bWVudFBhaW50LCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jUnVsZSA9IG5ldyBEb2NSdWxlKHRoaXMucnVsZUNhbnZhcywgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UgPSBuZXcgRG9jdW1lbnRDaGFuZ2UodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5lbGVtZW50UmVhZGVyLCB0aGlzLmRvY0N0eCwgdGhpcy5kb2NDb21tZW50KTtcbiAgICAgICAgdGhpcy5kb2NIaXN0b3J5ID0gbmV3IERvY3VtZW50SGlzdG9yeSh0aGlzLmRvY0N0eCwgdGhpcy5lbGVtZW50UmVhZGVyLCB0aGlzLm9uRG9jQ2hhbmdlZEV2ZW50KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0ID0gbmV3IERvY3VtZW50SW5wdXQoZWRpdElucHV0LCBlZGl0Q3Vyc29yLCBjdXJzb3JXcmFwcGVyLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5oaXRJbmZvQ2hhbmdlZC5zdWJzY3JpYmUoKGhpdEluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGl0SW5mb0NoYW5nZWQoaGl0SW5mbylcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGlja0V2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY0NsaWNrSGFuZGxlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5kYmxDbGlja0V2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY0RibENsaWNrSGFuZGxlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jaGFuZ2VDdXJzb3Iuc3Vic2NyaWJlKChjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ3Vyc29yKGN1cnNvcilcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jb250ZXh0TWVudS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db250ZXh0TWVudShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQudHJhY2tUaXBzQ2hhbmdlZC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25JbnB1dEV2ZW50LnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UubmV3SW5wdXQoZGF0YSlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkJhY2tzcGFjZUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLm9uQmFja3NwYWNlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkVudGVyRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2Uub25FbnRlcigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25Db3B5RXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2Uub25Db3B5KGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkN1dEV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLm9uQ3V0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25QYXN0ZUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLm9uUGFzdGUoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uSW5zZXJ0QnIuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2UuaW5zZXJ0U29mdEJyKClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uTGVmdEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQubW92ZUN1cnNvclRvTGVmdCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25SaWdodEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQubW92ZUN1cnNvclRvUmlnaHQoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRGVsZXRlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHRoaXMuZG9jdW1lbnRDaGFuZ2Uub25EZWxldGVLZXlIYW5kbGVyKGV2dCkpO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25TZWxlY3RBbGxFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LnNlbGVjdEFsbCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25Ib21lRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5tb3ZlQ3Vyc29yVG9MaW5lU3RhcnQoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25FbmRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50Lm1vdmVDdXJzb3JUb0xpbmVFbmQoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25VcEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQubW92ZUN1cnNvclRvVXBPckRvd24odHJ1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRG93bkV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQubW92ZUN1cnNvclRvVXBPckRvd24oZmFsc2UpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY0NoYW5nZSA9IHRoaXMuZG9jdW1lbnRDaGFuZ2U7XG4gICAgICAgIHRoaXMubGlzdGVuQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgdGhpcy5kb2NDdHguc3luY1JlZnJlc2ggPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVG9TY2hlZHVsZSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMub25DaGFuZ2Uuc3Vic2NyaWJlKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKHR5cGUpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5qCH5bC6XG4gICAgICovXG4gICAgcmVmcmVzaERvY1J1bGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBkb2NMZWZ0ID0gMC8vQ29tbW9uVXRpbC5nZXRPZmZzZXRYKHRoaXMuZWRpdENhbnZhcy5wYXJlbnRFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgbGV0IHBhZ2VQTCA9IDAsIHBhZ2VQUiA9IDA7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBkb2NMZWZ0ICs9IHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIucmVjdC54O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5kb2N1bWVudD8ucHJvcHM/LnBhZGRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzLnBhZGRpbmc7XG4gICAgICAgICAgICBwYWdlUEwgPSBsZWZ0O1xuICAgICAgICAgICAgcGFnZVBSID0gcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NSdWxlLnNldFJ1bGVPcHRpb25zKHsgd2lkdGg6IHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoLCBwYWdlUEwsIHBhZ2VQUiwgZG9jTGVmdCB9KTtcbiAgICAgICAgdGhpcy5kb2NSdWxlLnJlZnJlc2hSdWxlKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlRG9jVmlld2VyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyA9IHRoaXMubWVhc3VyZU1NVG9QaXhzKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcigyMTAgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguZmxvb3IoMjk3ICogdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyA9IG5ldyBQYWdlT3B0aW9ucyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5kb2NTY3JvbGwub25zY3JvbGwgPSAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXcoZXZ0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtZWFzdXJlTU1Ub1BpeHMoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5zdHlsZS53aWR0aCA9ICcxMDBtbSc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgcmV0dXJuIHdpZHRoIC8gMTAwO1xuICAgIH1cblxuICAgIGZsdXNoVGFzayE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gICAgZmx1c2hUYXNrVGhlbjogQXJyYXk8KCgpID0+IHZvaWQpPiA9IFtdO1xuICAgIC8v5piv5ZCm55So5LqO6Lef6Liq5L+u5pS554q25oCB77yM5Zyo5Yid5aeL5YyW44CB5pWw5o2u5YWD6LWL5YC8562J5oOF5Ya15LiN6ZyA6KaB6Lef6Liq5L+u5pS55qCH5b+XXG4gICAgcHJpdmF0ZSB0cmFja0NoYW5nZVN0YXRlID0gdHJ1ZTtcbiAgICBmbHVzaFRvU2NoZWR1bGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgICAvL+inpuWPkeWKqOaAgeiEmuacrFxuICAgICAgICAgICAgdGhpcy5kb2NDdHguZHluYW1pY0Z1bmMuaW52b2tlZFNjcmlwdHMoKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckRvY0NoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZsdXNoVGFzaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmx1c2hUYXNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUYXNrVGhlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbSgpKTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUYXNrVGhlbi5sZW5ndGggPSAwO1xuICAgICAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSBudWxsO1xuICAgICAgICB9O1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZsdXNoVGFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmx1c2hUYXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeaWh+aho+aUueWPmOS6i+S7tlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdHJpZ2dlckRvY0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyYWNrQ2hhbmdlU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRG9jQ2hhbmdlZEV2ZW50Lm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmbuWHveaVsOaJp+ihjOaXtu+8jOS4jeinpuWPkW9uRG9jQ2hhbmdlXG4gICAgICogQHBhcmFtIGZuXG4gICAgICovXG4gICAgbm9FZmZlY3RDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMudHJhY2tDaGFuZ2VTdGF0ZTtcbiAgICAgICAgdGhpcy50cmFja0NoYW5nZVN0YXRlID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhY2tDaGFuZ2VTdGF0ZSA9IHByZXY7XG4gICAgfVxuXG5cblxuICAgIGxvYWREb2MoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlYWRlci5yZWFkKGRhdGEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgIHRoaXMuZG9jSGlzdG9yeS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOabtOaWsOaWh+aho+WuueWZqOmrmOW6puWwuuWvuFxuICAgICAqL1xuICAgIHVwZGF0ZURvY3VtZW50Q29udGFpbmVyU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob2xkU3BhY2Uuc3R5bGUuaGVpZ2h0ID0gdGhpcy5kb2N1bWVudFBhaW50LmdldERvY3VtZW50Q29udGFpbmVySGVpZ2h0KCkgKyAncHgnO1xuICAgIH1cblxuICAgIHNjcm9sbFZpZXcoZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLmZsb29yKHRhcmdldC5zY3JvbGxUb3ApO1xuICAgICAgICB0aGlzLmVkaXRDYW52YXNDb250YWluZXIuc3R5bGUudG9wID0gdG9wICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKDAsLVwiICsgdG9wICsgXCJweClcIjtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZID0gdG9wO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50Lm9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLm9uU2Nyb2xsVmlld0V2ZW50Lm5leHQodG9wKTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaERvY3VtZW50KCk6IHZvaWQge1xuICAgICAgICBsZXQgcmVQYWludCA9IHRoaXMuZG9jQ3R4LnJlZnJlc2hUeXBlID09PSAnY29udGVudCc7XG4gICAgICAgIGlmIChyZVBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLmNsZWFyU25hcHNob3QoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ29tbWVudC5yZWFkQ29tbWVudHMoKTtcblxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlUGFnZXMoKTtcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyU3ViamVjdC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3NDaGFuZ2VkID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi51cGRhdGVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLmdldFNlbGVjdGlvblRyZWVEYXRhKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZWZyZXNoVmlldyhyZVBhaW50KTtcbiAgICAgICAgdGhpcy51cGRhdGVEb2N1bWVudENvbnRhaW5lclNpemUoKTtcbiAgICAgICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgICAgICAgc3NDaGFuZ2VkICYmIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLmRvY1J1bGUucmVmcmVzaFJ1bGUoKTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgaGl0SW5mb0NoYW5nZWQoaGl0SW5mbzogeyBzdGFydEhpdEluZm86IEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogSGl0RXZlbnRJbmZvIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZXRTZWxlY3Rpb25TdGF0ZShoaXRJbmZvKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWJ5qCHXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRDdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblNldEN1cnNvcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQuc2V0Q3Vyc29yVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuYWZ0ZXJTZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICAgICAgICAvL+mcgOimgemHjeaWsOWIt+aWsO+8jOS4jeinpuWPkUdvdEN1c29y5LqL5Lu2XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5hZnRlclNlbGVjdGlvbkNoYW5nZWQodGhpcy5zZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFmdGVyU2VsZWN0aW9uQ2hhbmdlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnRSZWdpb24sIGhpdERvY0luZGV4IH0gPSB0aGlzLmRvY3VtZW50RXZlbnQuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbztcbiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydFJlZ2lvbiwgaGl0RG9jSW5kZXgpO1xuICAgICAgICB0aGlzLmRvY0N0eC5jdXJzb3JSZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGN1cnNvclBvcy5yZWN0KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LnNldEN1cnNvclBvc2l0aW9uKGN1cnNvclBvcy5yZWN0KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3MgPSBjdXJzb3JQb3MucmVjdDtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50Lmludm9rZUN1cnNvcihzdGFydENvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreaYr+WQpuWFieagh+WPr+S7peiuvue9ruaOpeWPl+e8lui+kVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5TZXRDdXJzb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZWRpdGFibGUgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFlZGl0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRGVzaWduKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL+a1j+iniOaooeW8j1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLlZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8j+S4i++8jOWmguaenOS4jeWcqOaVsOaNruWFg+e0oOS4re+8jOWImeS4jeaYvuekuuWFieagh1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICBpZiAoIUlzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFFbGVtZW50VXRpbC52ZXJpZnlIaXRhYmxlKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8j+S4i++8jOaVsOaNruWFg+S4jeWPr+e8lui+kVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0ICYmIElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBFbGVtZW50VXRpbC5nZXREYXRhRWxlbWVudChzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKCFkYXRhRWxlLnByb3BzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruaUueWFieagh1xuICAgICAqIEBwYXJhbSBuZXdDdXJzb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIGNoYW5nZUN1cnNvcihuZXdDdXJzb3I6IEN1cnNvclR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0Q2FudmFzLnN0eWxlLmN1cnNvciA9IG5ld0N1cnNvcjtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5jdXJzb3IgPSBuZXdDdXJzb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paH5qGj54K55Ye75LqL5Lu2XG4gICAgICovXG4gICAgcHJpdmF0ZSBkb2NDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25PdmVybGF5cy5nZXRTZWxlY3Rpb25UcmVlRGF0YSgpO1xuICAgICAgICB0aGlzLm9uQ2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paH5qGj5Y+M5Ye75LqL5Lu2XG4gICAgICog5aSE55CG5YWo6YCJ5b2T5YmN5q616JC9XG4gICAgICovXG4gICAgcHJpdmF0ZSBkb2NEYmxDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzID0gZ2V0Rm9jdXNUZXh0U2VnbWVudCh0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRGJsQ2xpY2tFdmVudC5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN5YWJ5qCH5omA5Zyo55qE5pWw5o2u5YWDXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRDdXJyZW50RGF0YUVsZW1lbnQoKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZiB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgaWYgKCFFbGVtZW50VXRpbC52ZXJpZnlIaXRhYmxlKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRQYXJlbnQoc3RhcnRDb250cm9sLCB2YWxpZGF0ZURhdGFFbGUpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN5YWJ5qCH5omA5Zyo55qE5pWw5o2u5YWD55qE5YC8XG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuICAgIHNldEN1cnJlbnREYXRhRWxlbWVudFZhbHVlKHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSB0aGlzLmdldEN1cnJlbnREYXRhRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YUVsZSkge1xuICAgICAgICAgICAgZGF0YUVsZT8uc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaVsOaNruWFg+S9jee9rlxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREYXRhRWxlbWVudFBvc2l0aW9uKGVsZW1lbnQ6IExlYWZFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGVjb3JhdGVSZW5kZXIgPSB0aGlzLmRvY3VtZW50UGFpbnQuZWxlbWVudFBhaW50LmdldExlYWZFbGVtZW50UGFpbnRNYXAoZWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnREZWNvcmF0ZVJlbmRlcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5pyq5om+5Yiw5pWw5o2u5YWD5byA5aeL5riy5p+T5YWD57SgJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB4LCBoZWlnaHQsIHksIHdpZHRoIH0gPSBzdGFydERlY29yYXRlUmVuZGVyLnJlY3Q7XG4gICAgICAgIGNvbnN0IHBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3Moc3RhcnREZWNvcmF0ZVJlbmRlcilcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7IHg6IHBvcy54ICsgd2lkdGgsIHk6IHBvcy55ICsgaGVpZ2h0ICsgNSwgdHJhbnNsYXRlWTogdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIH07XG4gICAgICAgIHJldHVybiBwb3NpdGlvblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaWh+aho+aooeWei1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RG9jU2NoZW1hKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZSh0aGlzLmRvY0N0eC5kb2N1bWVudCwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2V0RG9jU2NoZW1hSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldERvY1NjaGVtYSgpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlj7PplK7oj5zljZVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICovXG4gICAgb25Db250ZXh0TWVudShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb247XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50RXZlbnQgPSBuZXcgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBlbGVtZW50RXZlbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50Q29udGV4dE1lbnUnLCBzdGFydENvbnRyb2wsIGVsZW1lbnRFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7IHg6IGV2dC5vZmZzZXRYICsgMTAsIHk6IGV2dC5vZmZzZXRZLCB0cmFuc2xhdGVZOiB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfTtcbiAgICAgICAgdGhpcy5vbkNvbnRleHRNZW51SXRlbUNoYW5nZWQubmV4dCh7IHBvczogcG9zaXRpb24sIG1lbnVzOiBlbGVtZW50RXZlbnQubWVudXMgfSlcbiAgICB9XG5cbiAgICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGxpc3RlbkNvbnRhaW5lckhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRG9jSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZG9jU2Nyb2xsKTtcbiAgICAgICAgdGhpcy51cGRhdGVEb2NIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURvY0hlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmdldENvbnRhaW5lckhlaWdodCgpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGlmICh3aWR0aCA8IHRoaXMudmlld09wdGlvbnMuQ29udGVudFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHRoaXMudmlld09wdGlvbnMuQ29udGVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoKTtcbiAgICB9XG5cbiAgICByZXNldFZpZXdlcih0eXBlOiAnZGVtYW5kJyB8ICdmb3JjZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFR5cGUgPSB0eXBlID09PSAnZm9yY2UnID8gJ2NvbnRlbnQnIDogJ2FwcGVhcmFuY2UnO1xuICAgICAgICBpZiAocmVmcmVzaFR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldENhbnZhc1Byb3BzKCk7XG4gICAgICAgIHRoaXMuZmx1c2hUb1NjaGVkdWxlKCk7XG4gICAgICAgIHRoaXMuZmx1c2hUYXNrVGhlbi5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57yp5pS+6KeG5Zu+XG4gICAgICogQHBhcmFtIHNjYWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzY2FsZVZpZXcoc2NhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHNjYWxlID0gc2NhbGUgPCAwLjUgPyAwLjUgOiBzY2FsZTtcbiAgICAgICAgc2NhbGUgPSBzY2FsZSA+IDIgPyAyIDogc2NhbGU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgdGhpcy5zY2FsZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHtzY2FsZX0pYDtcbiAgICAgICAgdGhpcy5zY2FsZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBcImNlbnRlciB0b3BcIjtcbiAgICAgICAgaWYgKHNjYWxlID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNjYWxlQ29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zY2FsZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldENhbnZhc1Byb3BzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKTtcbiAgICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIGdldENvbnRhaW5lckhlaWdodCgpOiB7IGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLmRvY1Njcm9sbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gY29uc3QgZGl2PXRoaXMuZG9jU2Nyb2xsLmNoaWxkcmVuWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAvLyBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBNYXRoLmZsb29yKGhlaWdodCksIHdpZHRoOiBNYXRoLmZsb29yKHdpZHRoKSB9O1xuICAgIH1cblxuICAgIHNldENhbnZhc1Byb3BzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlckNvbnRleHQ/LmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dC5zZXRDYW52YXNQcm9wcygpO1xuICAgICAgICB0aGlzLnJlbmRlckNvbnRleHQ/LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5b2T5YmN5L2N572u5o+S5YWl6KGo5qC8XG4gICAgICogQHBhcmFtIHJvd1xuICAgICAqIEBwYXJhbSBjb2xcbiAgICAgKi9cbiAgICBpbnNlcnRUYWJsZShyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YiA9IFRhYmxlRWxlbWVudC5jcmVhdGVUYWJsZShyb3dzLCBjb2xzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRUYWJsZSh0Yik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omT5Y2w5omA5pyJ5paH5qGjXG4gICAgICovXG4gICAgcHJpbnRBbGxQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgZG9jdW1lbnRQcmludC5wcmludCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlr7zlh7rmiYDmnInpobXliLBiYXNlNjRcbiAgICAgKi9cbiAgICBleHBvcnRBbGxQYWdlc1RvQmFzZTY0KGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW1ncyA9IGRvY3VtZW50UHJpbnQuZXhwb3J0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpXG4gICAgICAgIGltZ3MuZm9yRWFjaCgoaXRlbSwgaSkgPT4gaXRlbS50b0Jsb2IoYmxvZyA9PiB7XG4gICAgICAgICAgICBpZiAoYmxvZykge1xuICAgICAgICAgICAgICAgIHNhdmVBcyhibG9nLCBmaWxlTmFtZSArIGkgKyAnLnBuZycpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgIH1cblxuICAgIGV4cG9ydFBERigpOiB2b2lkIHtcbiAgICAgICAgZG9jdW1lbnRQcmludC5leHBvcnRQREYoJycsIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaWh+aho1xuICAgICAqL1xuICAgIGNsZWFyRG9jKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGVhckhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWsOW7uuaWh+aho1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICovXG4gICAgY3JlYXRlTmV3RG9jKGRvYzogRG9jdW1lbnRFbGVtZW50IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgLy90aGlzLmRvY0N0eC5jbGVhcigpO1xuICAgICAgICBjb25zdCBuZXdEb2MgPSBkb2MgPz8gRG9jdW1lbnRUZW1wbGF0ZS5jcmVhdGVBNERvYygpO1xuICAgICAgICAvLyB0aGlzLmVsZW1lbnRSZWFkZXIuc2V0RG9jdW1lbnQobmV3RG9jKTtcbiAgICAgICAgLy8gdGhpcy5yZWZyZXNoRG9jdW1lbnQoJ2NvbnRlbnQnKTtcbiAgICAgICAgdGhpcy5sb2FkRG9jKEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplKG5ld0RvYywgdGhpcy52aWV3T3B0aW9ucykpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNsZWFyU3ViRXZlbnQoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5mbHVzaFRhc2sgPSBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Yy65paH5pys5bGe5oCnXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRTZWxlY3Rpb25UZXh0R3JvdXBQcm9wcygpOiBUZXh0UHJvcHMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLnByb3BzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgaWYgKHN0YXJ0UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmFuZ2UudGFyZ2V0LnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvblBhcmFQcm9wcygpOiBQYXJhZ3JhcGhQcm9wcyB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc2VsZWN0aW9uU3RhdGUgfHwgIXNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBwYXJhLnByb3BzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaWh+acrOWtl+S9k+Wkp+Wwj1xuICAgICAqIEBwYXJhbSBmb250U2l6ZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc2V0VGV4dEZvbnRTaXplKGZvbnRTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzTmFOKGZvbnRTaXplKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRlckZ1bmMgPSAodGV4dFByb3BzOiBUZXh0UHJvcHMpID0+IHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICB9O1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5paH5pys6aKc6ImyXG4gICAgICogQHBhcmFtIGNvbG9yIFxcXG4gICAgICovXG4gICAgc2V0VGV4dENvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29sb3IgPSBjb2xvciB8fCBcInJnYigwLDAsMClcIjtcbiAgICAgICAgY29uc3Qgc2V0dGVyRnVuYyA9ICh0ZXh0UHJvcHM6IFRleHRQcm9wcykgPT4ge1xuICAgICAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gY29sb3I7XG4gICAgICAgIH07XG4gICAgICAgIERvY3VtZW50Q2hhbmdlLnNldFRleHRTdHlsZSh0aGlzLnNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mlofmnKzlrZfkvZPlkI3np7BcbiAgICAgKiBAcGFyYW0gZm9udFxuICAgICAqL1xuICAgIHNldFRleHRGb250KGZvbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBmb250ID0gZm9udCB8fCBcIuWui+S9k1wiO1xuICAgICAgICBjb25zdCBzZXR0ZXJGdW5jID0gKHRleHRQcm9wczogVGV4dFByb3BzKSA9PiB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSBmb250O1xuICAgICAgICB9O1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bqU55So6YCJ5Lit5paH5pys5qC85byPLOeUqOS6juaJuemHj+iuvue9ruagvOW8jyzkvovlpoLvvJrmoLzlvI/liLdcbiAgICAgKiBAcGFyYW0gbmV3U3R5bGVcbiAgICAgKi9cbiAgICBhcHBseVN0eWxlKG5ld1N0eWxlOiBUZXh0UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2V0dGVyRnVuYyA9ICh0ZXh0UHJvcHM6IFRleHRQcm9wcykgPT4ge1xuICAgICAgICAgICAgdGV4dFByb3BzLnNldFByb3BzVmFsdWUobmV3U3R5bGUsIHRleHRQcm9wcyk7XG4gICAgICAgIH07XG4gICAgICAgIERvY3VtZW50Q2hhbmdlLnNldFRleHRTdHlsZSh0aGlzLnNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvIDlkK/moLzlvI/liLdcbiAgICAgKi9cbiAgICBlbmFibGVGb3JtYXRCcnVzaCgpOiBJQ2FuY2VsVG9rZW5GbiB8IG51bGwge1xuICAgICAgICBjb25zdCBzdGFydENvbnRyb2wgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbDtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU3R5bGUgPSBzdGFydENvbnRyb2wucHJvcHMuY2xvbmUobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25PdmVybGF5Q29sb3IgPSB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3I7XG4gICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSBcInJnYmEoMCw1OCwxNDAsMC44KVwiO1xuXG4gICAgICAgICAgICBjb25zdCBjYW5jZWxUb2tlbjogSUNhbmNlbFRva2VuRm4gPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRoaXMub25DbGlja0V2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVN0eWxlKHNlbGVjdGVkU3R5bGUpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9IHNlbGVjdGlvbk92ZXJsYXlDb2xvcjtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsVG9rZW4ub25GaW5pc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsVG9rZW4ub25GaW5pc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhbmNlbFRva2VuLmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IgPSBzZWxlY3Rpb25PdmVybGF5Q29sb3I7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGNhbmNlbFRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaWh+acrOiDjOaZr+minOiJslxuICAgICAqIEBwYXJhbSBjb2xvclxuICAgICAqL1xuICAgIHNldFRleHRCYWNrQ29sb3IoY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZXR0ZXJGdW5jID0gKHRleHRQcm9wczogVGV4dFByb3BzKSA9PiB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuYmFja2dyb3VuZCA9IGNvbG9yO1xuICAgICAgICB9O1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i5paH5pys5Yqg57KX44CB5LiL5YiS57q/44CB5Yig6Zmk562J5paH5pys5qC35byPXG4gICAgICogQHBhcmFtIGlzRWZmZWN0aXZlXG4gICAgICogQHBhcmFtIHN0eWxlXG4gICAgICogQHBhcmFtIG1hdGNoVmFsdWVcbiAgICAgKi9cbiAgICBzd2l0Y2hUZXh0U3R5bGU8UCBleHRlbmRzIGtleW9mIFRleHRQcm9wcywgViBleHRlbmRzIFRleHRQcm9wc1tQXT4oaXNFZmZlY3RpdmU6IGJvb2xlYW4sIHN0eWxlOiBQLCBtYXRjaFZhbHVlOiBWLCBkZWZhdWx0VmFsdWU6IGFueSA9IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZXR0ZXJGdW5jID0gKHRleHRQcm9wczogVGV4dFByb3BzKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFZmZlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0ZXh0UHJvcHNbc3R5bGVdID0gZGVmYXVsdFZhbHVlIGFzIG5ldmVyO1xuICAgICAgICAgICAgICAgIC8vZGVsZXRlIHRleHRQcm9wc1tzdHlsZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRleHRQcm9wc1tzdHlsZV0gPSBtYXRjaFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55a2X6Ze06LedXG4gICAgICovXG4gICAgc2V0TGV0dGVyU3BhY2UobGV0dGVyU3BhY2U6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXR0ZXJTcGFjZSA9IGxldHRlclNwYWNlIDw9IDAgPyAwIDogbGV0dGVyU3BhY2U7XG4gICAgICAgIGNvbnN0IHNldHRlckZ1bmMgPSAodGV4dFByb3BzOiBUZXh0UHJvcHMpID0+IHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5sZXR0ZXJTcGFjZSA9IGxldHRlclNwYWNlO1xuICAgICAgICB9O1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mrrXokL3lr7npvZBcbiAgICAgKiBAcGFyYW0gYWxpZ25cbiAgICAgKi9cbiAgICBzd2l0Y2hQYXJhQWxpZ24oYWxpZ246IFRleHRBbGlnbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZXR0ZXJGdW5jID0gKHBhcmFQcm9wczogUGFyYWdyYXBoUHJvcHMpID0+IHtcbiAgICAgICAgICAgIHBhcmFQcm9wcy50ZXh0QWxpZ24gPSBhbGlnbjtcbiAgICAgICAgfTtcbiAgICAgICAgRG9jdW1lbnRDaGFuZ2Uuc2V0UGFyYUFsaWduKHRoaXMuc2VsZWN0aW9uU3RhdGUsIHNldHRlckZ1bmMpO1xuICAgIH1cblxuXG4gICAgY29tYmluZUNlbGwoKTogdm9pZCB7XG4gICAgICAgIFRhYmxlVXRpbC5tZXJnZUNlbGxzKHRoaXMuc2VsZWN0aW9uU3RhdGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i5b2T5YmN5q616JC96aG555uu56ym5Y+354q25oCBXG4gICAgICovXG4gICAgc2V0UGFyYWdyYXBoTnVtYmVyVHlwZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5zZXRQYXJhZ3JhcGhOdW1iZXJUeXBlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5b2T5YmN5om55rOoXG4gICAgICogQHBhcmFtIGlkXG4gICAgICovXG4gICAgcmVtb3ZlQ29tbWVudChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5yZW1vdmVDb21tZW50KGlkKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOeEpueCueaJgOWcqOeahOaJueazqFxuICAgICAqL1xuICAgIHJlbW92ZUN1cnJlbnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tZW50ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCAoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCkpIGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQoY29tbWVudC5wcm9wcy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXmibnms6hcbiAgICAgKi9cbiAgICBpbnNlcnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlLmluc2VydENvbW1lbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbENvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuY2xlYXJBbGxDb21tZW50cygpO1xuICAgIH1cblxuXG4gICAgY3V0VGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgVGFibGVSb3dFbGVtZW50KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gcm93Py5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBUYWJsZVV0aWwuY3V0VGFibGUodGIsIHJvdy5nZXRJbmRleCgpKTtcbiAgICAgICAgY29uc3QgcGFyYSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIHRiLnBhcmVudC5hZGRDaGlsZChwYXJhLCB0Yi5nZXRJbmRleCgpICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yid5aeL5YyW5b2T5YmN5paH5qGj5Yib5bu655So5oi35L+h5oGvXG4gICAgICog5LiA5Lu95paH5qGj5Y+q6ZyA6KaB6K6+572u5LiA5qyhXG4gICAgICovXG4gICAgaW5pdEN1cnJlbnREb2NVc2VyKHVzZXJJZDogc3RyaW5nLCB1c2VyTmFtZTogc3RyaW5nLCBkYXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jID0gdGhpcy5kb2NDdHguZG9jdW1lbnQ7XG4gICAgICAgIGRvYy5wcm9wcy5jcmVhdGVVc2VySWQgPSB1c2VySWQ7XG4gICAgICAgIGRvYy5wcm9wcy5jcmVhdGVVc2VyTmFtZSA9IHVzZXJOYW1lO1xuICAgICAgICBkb2MucHJvcHMuY3JlYXRlRGF0ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6aqM6K+B5paH5qGj5YaF5a65XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmNsZWFyQWxsVmFsaWRhdGVzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50Q2hhbmdlLnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSAXG4gICAgICovXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NIaXN0b3J5LnVuZG8oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmgaLlpI1cbiAgICAgKi9cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0hpc3RvcnkucmVkbygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWPr+S7peaSpOmUgFxuICAgICAqL1xuICAgIGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY0hpc3RvcnkuY2FuVW5kbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6XmgaLlpI1cbiAgICAgKi9cbiAgICBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2NIaXN0b3J5LmNhblJlZG87XG4gICAgfVxuXG4gICAgc3dpdGNoVHJhY2tDaGFuZ2VzKGVsZUN0eDogQnJhbmNoRWxlbWVudCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGVsZUN0eCA9IGVsZUN0eCB8fCB0aGlzLmRvY0N0eC5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZUN0eC50cmVlRmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgYm9keS50cmFja0NoYW5nZXMgPSAhYm9keS50cmFja0NoYW5nZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsGRvYy1ib2R5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdHJhY2tUaXBzQ2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRFdmVudC50cmFja1RpcHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHN3aXRjaEZ1bGxWaWV3UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcgPSAhdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXc7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRKU09OKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkSlNPTih0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29weVNlcmlhbGl6ZVN0ciA9IEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRTdHJ1Y3QodGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyhjb3B5U2VyaWFsaXplU3RyIGFzIEJyYW5jaEVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue6uOW8oOaWueWQkVxuICAgICAqIEBwYXJhbSBvcmllbnRhdGlvblxuICAgICAqL1xuICAgIHNldFBhcGVyT3JpZW50KG9yaWVudGF0aW9uOiBPcmllbnRUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzLm9yaWVudCA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy5vcmllbnQgPSBvcmllbnRhdGlvbjtcbiAgICAgICAgdGhpcy5yZXNldFZpZXdlcignZm9yY2UnKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue6uOW8oOWkp+WwjyzljZXkvY3kuLrmr6vnsbMobW0pXG4gICAgICogQHBhcmFtIHdpZHRoXG4gICAgICogQHBhcmFtIGhlaWdodFxuICAgICAqL1xuICAgIHNldFBhcGVyU2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzO1xuICAgICAgICBkb2NQcm9wcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBkb2NQcm9wcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQsIGRvY1Byb3BzLm9yaWVudCk7XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoJ2ZvcmNlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5by65Yi25o2i6aG156ymXG4gICAgICovXG4gICAgaW5zZXJ0UGFnZUJyZWFrUGFyYSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRQYWdlQnJlYWtQYXJhKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pi+56S65b2T5YmN5YWD57Sg5Yiw6KeG5Zu+5LitXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKi9cbiAgICBicmluZ1RvVmlldyhlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50ID8gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50KSA6IGVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oZWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlck9iaiA9IGVsZS5wYWludFJlbmRlcnNbMF07XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocmVuZGVyT2JqLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGRvY1JlbmRlci5nZXRJbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhlbGUsIDAsIHJlZ2lvbiwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdXJyb3VuZChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZID4gMCAmJiBjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIDwgdGhpcy52aWV3T3B0aW9ucy52aWV3UGFpbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRvY1Njcm9sbC5zY3JvbGxUbyhjdXJzb3JQb3MucmVjdC54LCBjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeaWh+aho+mhtei+uei3nVxuICAgICAqL1xuICAgIHNldERvY3VtZW50TWFyZ2luKHBhZ2VNYXJnaW46IFBhcnRpYWw8TWFyZ2luUHJvcHM+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb2NDdHguZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC51cGRhdGVNYXJnaW4ocGFnZU1hcmdpbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5YWD57SgXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnRcbiAgICAgKiBAcGFyYW0gdGFyZ2V0T2Zmc2V0XG4gICAgICogQHBhcmFtIGRlc3RFbGVBcnJheVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaW5zZXJ0RWxlbWVudCh0YXJnZXRFbGVtZW50OiBFbGVtZW50LCB0YXJnZXRPZmZzZXQ6IG51bWJlciwgZGVzdEVsZUFycmF5OiBBcnJheTxFbGVtZW50Pik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXRlLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCwgZGVzdEVsZUFycmF5KTtcbiAgICB9XG5cblxufVxuXG5cbmV4cG9ydCB0eXBlIEVkaXRvckN1cnJlbnRQb3MgPSB7XG4gICAgcG9zOiBQb3NpdGlvblxufTtcblxuZXhwb3J0IHR5cGUgRWRpdG9yQ29udGVueHRQcm9wcyA9IHtcbiAgICBtZW51czogQXJyYXk8Q29udGVudE1lbnVJdGVtPlxufSAmIEVkaXRvckN1cnJlbnRQb3NcblxuZXhwb3J0IHR5cGUgRWRpdG9yUGFuZWxQcm9wcyA9IHtcbiAgICB0eXBlOiBzdHJpbmc7XG59ICYgRWRpdG9yQ3VycmVudFBvcztcblxuIiwiaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuXG4vKipcbiAqIOaWh+aho+WQiOW5tlxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb21iaW5lIHtcbiAgICAvKipcbiAgICAgKiDlkIjlubbmqKHmnb/mlofmoaNcbiAgICAgKiDnlKjkuo7orr7nva7lkIjlubblkI7vvIzpobXnnInpobXohJrnrYnnu5/kuIDpg6jliIZcbiAgICAgKi9cbiAgICBtYWluVGVtcGxhdGUhOiBEb2N1bWVudEVsZW1lbnRcblxuICAgIGRvY1BhcnRzOiBBcnJheTx7IGRvYzogRG9jdW1lbnRFbGVtZW50LCBkb2NJZDogc3RyaW5nIH0+ID0gW107XG4gICAgLyoqXG4gICAgICog5re75Yqg6ZyA6KaB5ZCI5bm255qE5paH5qGj6YOo5YiGXG4gICAgICovXG4gICAgYWRkKGRvY1BhcnQ6IERvY3VtZW50RWxlbWVudCwgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY1BhcnRzLnB1c2goeyBkb2M6IGRvY1BhcnQsIGRvY0lkOiBpZCB9KVxuICAgIH1cblxuICAgIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jUGFydHMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlKjkuo7lkIjlubbmlofmoaPorqHnrpdcbiAgICAgKi9cbiAgICBsb2FkKCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5tYWluVGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHRlbXBsYXRlLmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBib2R5LmNsZWFySXRlbXMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY1BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gdGhpcy5kb2NQYXJ0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BhcnRDb250YWluZXIgPSBuZXcgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGRvY1BhcnRDb250YWluZXIucHJvcHMucGFydElkID0gcGFydC5kb2NJZDtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BhcnRCb2R5ID0gcGFydC5kb2MuZmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50XG4gICAgICAgICAgICBkb2NQYXJ0Q29udGFpbmVyLmFkZENoaWxkKGRvY1BhcnRCb2R5LmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIGJvZHkuYWRkQ2hpbGQoZG9jUGFydENvbnRhaW5lcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBEb2N1bWVudFBhaW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IGV4cG9ydENhbnZhc1RvUERGLCBwcmludE5vZGVzIH0gZnJvbSBcIi4vZG9jdW1lbnQtcHJpbnRcIjtcbmltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50UGFpbnQgfSBmcm9tIFwiLi9lbGVtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBFbGVtZW50UmVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1yZWFkZXJcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGVueHQsIFJlbmRlckNvbnRlbnh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5cbi8qKlxuICog56a75bGP5omT5Y2wXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFByaW50T2Zmc2NyZWVuIHtcbiAgICBkb2N1bWVudFBhaW50OiBEb2N1bWVudFBhaW50O1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQ7XG4gICAgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZW54dDtcbiAgICBlbGVtZW50UmVhZGVyOiBFbGVtZW50UmVhZGVyO1xuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gbmV3IFZpZXdPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuY29weVJpZ2h0SW5mbyA9ICfkuIfovr7kv6Hmga/nlLXlrZDnl4XljobnvJbovpHlmagsd3d3LndvbmRlcnNncm91cC5jb20nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNob3dDaGFyUmVjdCA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZHJhd0NoYXJSZWN0Q29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNob3dMaW5lUmVjdCA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jU3BhY2UgPSAyMDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5yZXZpZXdXaW5kb3dXaWR0aCA9IDIwMDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8gPSAzLjc3OTUwMDEyMjA3MDMxMjY7XG4gICAgICAgIC8v5pW05Liq55S75biD55qE5bC65a+4XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzID0ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDgwMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyID0ge1xuICAgICAgICAgICAgaWQ6ICc2NjY2JyxcbiAgICAgICAgICAgIG5hbWU6ICfnrqHnkIblkZgnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLmN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgY29uc3Qgc3MgPSBuZXcgU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgICAgdGhpcy5kb2NDdHggPSBuZXcgRWRpdG9yQ29udGV4dChzcywgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHRoaXMucmVuZGVyQ3R4ID0gbmV3IFJlbmRlckNvbnRlbnh0KHRoaXMuY3R4LCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludCA9IG5ldyBEb2N1bWVudFBhaW50KHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ3R4LCB0aGlzLmRvY0N0eCwgbmV3IE1hcCgpKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyID0gbmV3IEVsZW1lbnRSZWFkZXIodGhpcy5kb2NDdHgsIHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgdGhpcy5kb2NDdHguc3luY1JlZnJlc2ggPSAoKSA9PiB7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIHByaW50KGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCwgcmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKGRhdGEpO1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlcyA9IHRoaXMuZ2V0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFBhaW50LmRvY1BhZ2VzLCByYW5nZXMpO1xuICAgICAgICBpZiAoIWNhbnZhc05vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfml6Dlj6/miZPljbDpobUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY1Byb3BzID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHM7XG4gICAgICAgIHByaW50Tm9kZXMoY2FudmFzTm9kZXMsIHsgLi4uZG9jUHJvcHMgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a+85Ye6UERGXG4gICAgICogQHBhcmFtIGZpbGVOYW1lXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zXG4gICAgICogQHBhcmFtIGRvY0N0eFxuICAgICAqIEBwYXJhbSByYW5nZXNcbiAgICAgKi9cbiAgICBhc3luYyBleHBvcnRUb1BERihkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIGZpbGVOYW1lOiBzdHJpbmcsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgaWYgKCFjYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5a+85Ye66aG1JylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRDYW52YXNUb1BERihmaWxlTmFtZSwgY2FudmFzTm9kZXMsIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItueahOWbvueJh++8jOagvOW8j+S4ukJhc2U2NOe8lueggVxuICAgICAqL1xuICAgIGFzeW5jIGdldEltYWdlc0NvbnRlbnQoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50LCByYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGVzID0gdGhpcy5nZXRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50UGFpbnQuZG9jUGFnZXMsIHJhbmdlcyk7XG4gICAgICAgIGlmICghY2FudmFzTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+WvvOWHuumhtScpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbnZhc05vZGVzLm1hcChub2RlID0+IG5vZGUudG9EYXRhVVJMKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOivu+WPluaVsOaNru+8jOaOkueJiFxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyLnJlYWQoZGF0YSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZVBhZ2VzKCk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZG9jQ3R4LmltYWdlTG9hZGVyLmdldExvYWRUYXNrcygpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDdHguc2V0Q2FudmFzUHJvcHModGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2FudmFzTm9kZXMocHJpbnRQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncztcbiAgICAgICAgY29uc3QgY2FudmFzTGlzdDogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbnRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHByaW50UmFuZ2VzICYmIHByaW50UmFuZ2VzLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW52YXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmN1cnNvciA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNhbnZhc05vZGUuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXNOb2RlLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHMoY2FudmFzTm9kZSwgY3R4LCB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDdHggPSBuZXcgUmVuZGVyQ29udGVueHQoY3R4LCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICByZW5kZXJDdHguc2V0Q2FudmFzUHJvcHModGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmRyYXdNb2RlID0gJ3ByaW50JztcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHByaW50UGFnZXNbaV07XG4gICAgICAgICAgICBjb25zdCB0bXAgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoZG9jLnJlY3QpO1xuICAgICAgICAgICAgZG9jLnJlY3QueCA9IDA7XG4gICAgICAgICAgICBkb2MucmVjdC55ID0gMDtcbiAgICAgICAgICAgIEVsZW1lbnRQYWludC5kcmF3UGFnZShyZW5kZXJDdHgsIGRvYywgeyB4OiAwLCB5OiAwIH0pO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5jbGVhcigpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm1haW5DdHguZmlsbFN0eWxlID0gJ3doaXRlJztcbiAgICAgICAgICAgIHJlbmRlckN0eC5tYWluQ3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmNvbW1pdCh0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyk7XG4gICAgICAgICAgICBkb2MucmVjdCA9IHRtcDtcbiAgICAgICAgICAgIGNhbnZhc0xpc3QucHVzaChjYW52YXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTGlzdDtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUF3QkE7O0FBRUc7TUFDVSxZQUFZLENBQUE7QUFDRixJQUFBLEdBQUEsQ0FBQTtBQUFuQixJQUFBLFdBQUEsQ0FBbUIsR0FBa0IsRUFBQTtRQUFsQixJQUFHLENBQUEsR0FBQSxHQUFILEdBQUcsQ0FBZTtLQUFLO0FBQzFDOztBQUVHO0FBQ0gsSUFBQSxNQUFNLENBQVc7QUFDakIsSUFBQSxZQUFZLENBQVU7QUFDdEIsSUFBQSxZQUFZLENBQWdCO0FBQzVCOztBQUVHO0FBQ0gsSUFBQSxjQUFjLENBQVc7QUFDekIsSUFBQSxvQkFBb0IsQ0FBVTtBQUM5QixJQUFBLG9CQUFv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QUFDbkQsWUFBQSxLQUFLLElBQUksSUFBSSxJQUFJLGFBQWEsRUFBRTtBQUM1QixnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3BGLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxJQUFJLEVBQUU7QUFDTixZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkIsU0FBQTtBQUNELFFBQUEsSUFBSSxNQUFNLEVBQUU7QUFDUixZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDckIsU0FBQTtLQUVKO0FBRUQsSUFBQSxJQUFJLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFBO0FBQ3BELFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuQyxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDbkI7QUFFSjs7TUNyYVksYUFBYSxDQUFBO0lBQ3RCLE9BQU8sS0FBSyxDQUFDLEVBQWtCLEVBQUUsV0FBd0IsRUFBRSxNQUFxQixFQUFFLFdBQUEsR0FBb0MsSUFBSSxFQUFBO0FBQ3RILFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUYsUUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO0FBQzNCLFlBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsVUFBVSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDL0Q7QUFFRDs7Ozs7OztBQU9HO0lBQ0ssT0FBTyxvQkFBb0IsQ0FBQyxFQUFrQixFQUFFLFdBQXdCLEVBQUUsTUFBcUIsRUFBRSxXQUFBLEdBQW9DLElBQUksRUFBQTtRQUM3SSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUM7QUFDdEQsUUFBQSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUE2QixFQUFFLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQWdDLEVBQUUsQ0FBQztBQUNuRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLFlBQUEsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hFLFVBQVUsQ0FBQyxJQUFJLENBQXVCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwRCxZQUFBLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNqQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDeEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTZCLENBQUM7WUFDcEUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELFlBQUEsU0FBUyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdEQsWUFBQSxTQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUM3QixZQUFBLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxZQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLFlBQUEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsWUFBQSxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELFlBQUEsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQyxZQUFBLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUN0QyxZQUFBLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFlBQUEsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUMsWUFBQSxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNmLFlBQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQixTQUFBO0FBQ0QsUUFBQSxPQUFPLFVBQVUsQ0FBQTtLQUNwQjtBQUVEOzs7Ozs7O0FBT0c7SUFDSCxPQUFPLGlCQUFpQixDQUFDLEVBQWtCLEVBQUUsV0FBd0IsRUFBRSxNQUFxQixFQUFFLFdBQUEsR0FBb0MsSUFBSSxFQUFBO0FBQ2xJLFFBQUEsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDMUU7QUFFRDs7Ozs7OztBQU9HO0FBQ0gsSUFBQSxPQUFPLFNBQVMsQ0FBQyxRQUFnQixFQUFFLEVBQWtCLEVBQUUsV0FBd0IsRUFBRSxNQUFxQixFQUFFLFdBQUEsR0FBb0MsSUFBSSxFQUFBO0FBQzVJLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlFLFFBQUEsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0tBQ25FO0FBRUQ7Ozs7QUFJRztBQUNILElBQUEsT0FBTyxhQUFhLENBQUMsRUFBa0IsRUFBRSxXQUF3QixFQUFFLE1BQXFCLEVBQUE7QUFDcEYsUUFBQSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM3RDtBQUNKLENBQUE7QUFHSyxTQUFVLG1CQUFtQixDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsRUFBQTtBQUN0RSxJQUFBLE1BQU0sR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQWlCRSxNQUFNLENBQUE7Ozs7bUJBSUwsS0FBSyxDQUFBO3dCQUNBLE1BQU0sQ0FBQTs7Ozs7O3VCQU1QLEtBQUssQ0FBQTt3QkFDSixNQUFNLENBQUE7Ozs7Ozs7Ozs7O0tBV3pCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsSUFBQSxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFTRDs7Ozs7QUFLRztBQUNhLFNBQUEsVUFBVSxDQUFDLFVBQXVCLEVBQUUsT0FBMEIsRUFBQTtJQUMxRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBc0IsQ0FBQztBQUMxRSxJQUFBLFdBQVcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO0FBQ2hDLElBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLElBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQy9CLElBQUEsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ25DLElBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRSxJQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO0FBQ3BCLFFBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixPQUFPO0FBQ1YsS0FBQTtBQUNELElBQUEsTUFBTSxTQUFTLEdBQWdCLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUYsSUFBQSxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEQsSUFBQSxXQUFXLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM1QyxJQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFFBQUEsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsUUFBQSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDNUQsS0FBQTtJQUNELFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqRCxVQUFVLENBQUMsTUFBSztBQUNaLFFBQUEsV0FBVyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNuQyxRQUFBLFdBQVcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3BELEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDO0FBRUQ7Ozs7O0FBS0c7U0FDYSxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLEtBQStCLEVBQUUsT0FBMEIsRUFBQTtJQUMzRyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ1gsUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUM3QixLQUFBO0FBQU0sU0FBQTtRQUNILFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUIsUUFBUSxJQUFJLE1BQU0sQ0FBQztBQUN0QixTQUFBO0FBQ0osS0FBQTtJQUNELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM3RSxJQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELFFBQUEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkUsUUFBQSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDakIsU0FBQTtBQUNKLEtBQUE7QUFDRCxJQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkI7O01DbE5hLFVBQVUsQ0FBQTtBQUVuQjs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxJQUFVLEVBQUUsUUFBa0IsRUFBQTtBQUN4RCxRQUFBLE9BQU8sUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzs7Z0JBRXZCLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSzs7QUFFakMsZ0JBQUEsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzs7Z0JBRXBCLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFDO0FBRUQsSUFBQSxPQUFPLGtCQUFrQixDQUFDLElBQVUsRUFBRSxRQUFjLEVBQUE7QUFDaEQsUUFBQSxPQUFPLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7O2dCQUV2QixRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUs7O0FBRWpDLGdCQUFBLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7O2dCQUVwQixRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07O0FBRWxDLGdCQUFBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNOztBQUVwRCxnQkFBQSxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQzFEO0FBRUQ7Ozs7O0FBS0c7QUFDSCxJQUFBLE9BQU8sY0FBYyxDQUFDLElBQVUsRUFBRSxXQUFtQixFQUFFLFFBQWtCLEVBQUE7QUFDckUsUUFBQSxNQUFNLGNBQWMsR0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hILFFBQUEsTUFBTSxlQUFlLEdBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3hJLFFBQUEsTUFBTSxhQUFhLEdBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5RyxRQUFBLE1BQU0sZ0JBQWdCLEdBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pJLElBQUksVUFBVSxHQUFlLE1BQU0sQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdkQsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixTQUFBO2FBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQy9ELFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDeEIsU0FBQTthQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUM3RCxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFNBQUE7YUFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNoRSxVQUFVLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLFNBQUE7UUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7S0FDekI7QUFFRDs7QUFFRztBQUNILElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxJQUFVLEVBQUUsR0FBYSxFQUFFLENBQVMsRUFBQTtBQUM5RCxRQUFBLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLFFBQUEsTUFBTSxNQUFNLEdBQXNELENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQzNlLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsWUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUMvQixZQUFBLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckUsZ0JBQUEsT0FBTyxFQUFFLFVBQVUsRUFB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LEdBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUUvQyxNQUFNLEVBQUUsR0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWhELE1BQU0sRUFBRSxHQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFFL0MsUUFBQSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBQSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixZQUFBLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQUE7YUFBTSxJQUFJLEtBQUssR0FBRyxD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QyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JMLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNULGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNaO0FBR0Q7O0FBRUc7SUFDSyxRQUFRLEdBQUE7QUFDWixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDOUUsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxF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
|