{"version":3,"sources":["./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/portal.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/native-date-time-adapter.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/date-time-format.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/date-time-adapter.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/timer.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/timer-box.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-container.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-inline.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker.animations.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-multi-year-view.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/index.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog.module.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-year-view.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/utils/index.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-month-view.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-intl.service.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog.service.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/utils/object.utils.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time.module.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog-config.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-trigger.directive.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/native-date-time-format.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/calendar-body.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/numberedFixLen.pipe.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog-container.component.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/index.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/dialog/dialog-ref.class.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/date-time-picker-input.directive.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/overlay.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/date-time/adapter/native-date-time.module.js","./node_modules/ng-pick-datetime/__ivy_ngcc__/picker.js"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuJ;AAC5G;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,wDAAU;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,6BAA6B,+DAAwB,CAAC,yDAAkB,GAAG,+DAAwB,CAAC,8DAAuB,GAAG;AAC9K,iBAAiB,+DAAwB,EAAE,0FAA0F,wEAAiC,GAAG;AACzK;AACA,KAAK,OAAO,yDAAW,EAAE;AACzB,KAAK,OAAO,8DAAgB;AAC5B;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,uDAAS;AACvB;AACA;AACA;AACA,aAAa;AACb,KAAK,gBAAgB,UAAU,OAAO,yDAAkB,EAAE,GAAG,OAAO,8DAAuB,EAAE,EAAE,EAAE,QAAQ,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,2EAA2E;AACvJ,+BAA+B,+DAAwB,EAAE,6HAA6H,gEAAyB;AAC/M;AACA;AACA,aAAa,IAAI,wEAAiC,GAAG;AACrD,2DAA2D,mEAA4B;AACvF,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,uDAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,KAAK,eAAe,EAAE;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0DAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mCAAmC,+DAAwB,CAAC,sEAA+B,GAAG,+DAAwB,CAAC,8DAAuB,GAAG,+DAAwB,CAAC,wDAAQ,GAAG;AACjP,uBAAuB,+DAAwB,EAAE,2EAA2E,wCAAwC,YAAY,uBAAuB,4CAA4C,wEAAiC,GAAG;AACvR;AACA,KAAK,OAAO,sEAAwB,EAAE;AACtC,KAAK,OAAO,8DAAgB,EAAE;AAC9B,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI;AACvE;AACA;AACA,gBAAgB,OAAO,oDAAM,EAAE;AAC/B;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,uDAAS;AACvB;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK,gBAAgB,UAAU,OAAO,sEAA+B,EAAE,GAAG,OAAO,8DAAuB,EAAE,GAAG;AAC7G,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,EAAE,EAAE,GAAG;AACvB,kBAAkB,oDAAM;AACxB,SAAS,GAAG,EAAE,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mEAAmE;AACvI,2BAA2B,+DAAwB,EAAE,qGAAqG,sCAAsC,0CAA0C,gEAAyB;AACnQ;AACA;AACA,aAAa,IAAI,wEAAiC,GAAG;AACrD,uDAAuD,mEAA4B;AACnF,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,uDAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,KAAK,eAAe,EAAE;AACtB;AACA;AACA,oBAAoB,8DAAuB,EAAE,qBAAqB;AAClE,oBAAoB,8DAAuB,EAAE,4CAA4C,kCAAkC,EAAE,EAAE;AAC/H,cAAc,oDAAoD,gEAAyB,gBAAgB,gLAAgL,EAAE,EAAE;AAC/R,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,sDAAQ;AACtB;AACA;AACA;AACA,aAAa;AACb,KAAK,eAAe,EAAE;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEwO;;AAExO,kC;;;;;;;;;;;;AChpBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACQ;AAChD,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AAC6D;AACZ;AACiC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE;AAClG;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mCAAmC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gCAAgC;AAC9F,2CAA2C,wFAAwF,EAAE;AACrI;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kCAAkC;AAChG,0CAA0C,4FAA4F,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kCAAkC;AAChG,2CAA2C,4FAA4F,EAAE;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,iCAAiC,aAAa;AAC9C,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB,kBAAkB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,iCAAiC,aAAa;AAC9C,iCAAiC,aAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,8DAAQ,gBAAgB,4DAAM,CAAC,6EAAoB;AACvG,iDAAiD,8DAAQ;AACzD;AACA,wEAAwE,yCAAyC,sDAAe,CAAC,6EAAoB,MAAM,sDAAe,CAAC,8DAAe,GAAG;AAC7L,8BAA8B,gEAAyB,EAAE,sDAAsD,sCAAsC,EAAE,EAAE;AACzJ,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,KAAK,gBAAgB,UAAU;AAC/B,sBAAsB,sDAAQ;AAC9B,aAAa;AACb,sBAAsB,oDAAM;AAC5B,uBAAuB,6EAAoB;AAC3C,aAAa,GAAG,GAAG,OAAO,8DAAe,EAAE,EAAE,EAAE,QAAQ,EAAE;AACzD;AACA,CAAC,CAAC,wEAAe;AACgB;AACnB;;AAEd,2CAA2C,cAAc,miqB;;;;;;;;;;;;AC1TzD;AAAA;AAAA;AAA+C;AACxC,gCAAgC,4DAAc;;;;;;;;;;;;;ACDrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+B;AACmC;AAC3D,+BAA+B,4DAAc;AACpD;AACA;AACA,CAAC;AACM;AACP,WAAW,4DAAM,CAAC,uDAAS;AAC3B;AACO,qCAAqC,6CAA6C,uDAAS;AAClG;AACA;AACA,kCAAkC,4CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;;;;;;;;;;;;;AC9E3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACkB;AACE;AACZ;AACN;;AAE1C,wEAAwE;AACxE,cAAc,8DAAuB;AACrC,IAAI,4DAAqB;AACzB,IAAI,wDAAiB,sIAAsI,CAAC,2DAAoB,MAAM,cAAc,2DAAoB,GAAG,sCAAsC,EAAE,uIAAuI,CAAC,2DAAoB,MAAM,cAAc,2DAAoB,GAAG,sCAAsC,EAAE;AAClf,IAAI,0DAAmB;AACvB,CAAC;AACD,iBAAiB,2DAAoB;AACrC,IAAI,wDAAiB;AACrB,CAAC;AACD,oDAAoD;AACpD,cAAc,8DAAuB;AACrC,IAAI,4DAAqB;AACzB,IAAI,4DAAqB;AACzB,IAAI,wDAAiB,qFAAqF,CAAC,2DAAoB,MAAM,cAAc,2DAAoB,GAAG,mCAAmC,EAAE;AAC/M,IAAI,4DAAqB;AACzB,IAAI,oDAAa;AACjB,IAAI,0DAAmB;AACvB,IAAI,0DAAmB;AACvB,IAAI,0DAAmB;AACvB,CAAC;AACD,iBAAiB,2DAAoB;AACrC,IAAI,uDAAgB;AACpB,IAAI,+DAAwB;AAC5B,CAAC;AACD,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AAC8J;AAC5F;AACE;AAC9B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0DAAY;AAC9C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sDAAsD,2DAAI;AAC1D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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CA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AACkJ;AAChF;AACN;AACN;AACc;AACrC;AAC6C;AACiB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAO;AACtC,oCAAoC,4CAAO;AAC3C,iCAAiC,4CAAO;AACxC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B,iBAAiB,iEAAW;AAC5B,iBAAiB,8DAAQ;AACzB,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA;AACA;AACA,iBAAiB,2DAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,+DAAS,CAAC,wEAAoB;AACtC,kCAAkC,wEAAoB;AACtD;AACA;AACA,QAAQ,+DAAS,CAAC,kEAAiB;AACnC,kCAAkC,kEAAiB;AACnD;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0DAAY;AAC7C,kCAAkC,0DAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,mFAAqB;AAClD,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAA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pD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AAC+K;AACpI;AACW;AACQ;AACL;AACkB;AACY;AACnB;AACK;AACzB;AACH;AACF;AACG;AACvC,uCAAuC,4DAAc;AACrD;AACP,wBAAwB,yCAAyC;AACjE;AACO;AACP;AACA,WAAW,4DAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0DAAY;AAClD,oCAAoC,0DAAY;AAChD,iCAAiC,0DAAY;AAC7C,kCAAkC,0DAAY;AAC9C,0CAA0C,0DAAY;AACtD,mCAAmC,0DAAY;AAC/C,2BAA2B,kDAAY;AACvC,oCAAoC,kDAAY;AAChD,yCAAyC,kDAAY;AACrD,sCAAsC,kDAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oBAAoB,mFAAqB;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,mGAA6B;AAC9E;AACA,gEAAgE,yEAAW;AAC3E,gDAAgD,yEAAW;AAC3D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,4DAA4D,sBAAsB,EAAE;AACpF;AACA;AACA;AACA;AACA,6CAA6C,mEAAe,CAAC,mGAA6B;AAC1F;AA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;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,iBAAiB,iEAAW;AAC5B;AACA;AACA;AACA,iBAAiB,8DAAQ;AACzB;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,iBAAiB,0DAAI;AACrB;AACA;AACA;AACA,iBAAiB,yDAAG;AACpB;AACA;AACA;AACA,iBAAiB,6DAAO;AACxB;AACA;AACA;AACA,iBAAiB,+DAAS;AAC1B;AACA;AACA;AACA,iBAAiB,2DAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qEAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAA4C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,4DAAM;AACd,kCAAkC,0DAAY;AAC9C;AACA;AACA,QAAQ,4DAAM;AACd,kCAAkC,0DAAY;AAC9C;AACA;AACA,QAAQ,+DAAS,CAAC,iFAAwB;AAC1C,kCAAkC,iFAAwB;AAC1D;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA,wDAAwD,8DAAQ;AAChE,yCAAyC,+DAAiB;AAC1D,YAAY,8EAAe;AAC3B,YAAY,gFAAe;AAC3B;AACA,gFAAgF,6CAA6C,+DAAwB,CAAC,+DAAwB,GAAG,+DAAwB,CAAC,8EAAsB,GAAG,+DAAwB,CAAC,gFAAsB,MAAM;AACxR,iCAAiC,+DAAwB,EAAE,gJAAgJ;AAC3M,QAAQ,yDAAkB,CAAC,iFAAwB;AAC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AU,EAAE,kEAAa,EAAE,gEAAY;AAC/E;AACA;AACA,oBAAoB,uFAA2B;AAC/C;AACA;AACA,oBAAoB,mFAAmC;AACvD,oBAAoB,gEAAgB;AACpC;AACA;AACA,oBAAoB,uFAA2B;AAC/C;AACA,aAAa;AACb,KAAK,gBAAgB,WAAW,EAAE,QAAQ,EAAE;AAC5C;AACA,CAAC;AAC0B;;AAE3B,2CAA2C,cAAc,++E;;;;;;;;;;;;AC5CzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACoB;AACR;AACpD,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AAC6J;AAC1E;AACf;AACK;AACrC;AACwF;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iDAAY;AACrC;AACA;AACA,0BAA0B,0DAAY;AACtC,iCAAiC,0DAAY;AAC7C,sCAAsC,0DAAY;AAClD,iCAAiC,0DAAY;AAC7C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,iBAAiB,iEAAW;AAC5B;AACA;AACA;AACA,iBAAiB,8DAAQ;AACzB;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,iBAAiB,0DAAI;AACrB;AACA;AACA;AACA,iBAAiB,yDAAG;AACpB;AACA;AACA;AACA,iBAAiB,6DAAO;AACxB;AACA;AACA;AACA,iBAAiB,+DAAS;AAC1B;AACA;AACA;AACA,iBAAiB,2DAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sCAAsC;AAC7D;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qEAAY;AAC/B;AACA;AACA;AACA,yCAAyC,+CAA+C;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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C,oCAAoC;AACvE;AAC6J;AAC1E;AACf;AACK;AACrC;AACwF;AAC/D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iDAAY;AACrC;AACA;AACA,kCAAkC,0DAAY;AAC9C,iCAAiC,0DAAY;AAC7C,sCAAsC,0DAAY;AAClD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kBAAkB,kFAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,iBAAiB,iEAAW;AAC5B;AACA;AACA;AACA,iBAAiB,8DAAQ;AACzB;AACA;AACA;AACA,iBAAiB,gEAAU;AAC3B;AACA;AACA;AACA,iBAAiB,0DAAI;AACrB;AACA;AACA;AACA,iBAAiB,yDAAG;AACpB;AACA;AACA;AACA;AACA,iBAAiB,6DAAO;AACxB;AACA;AACA;AACA;AACA;AACA,iBAAiB,+DAAS;AAC1B;AACA;AACA;AACA;AACA;AACA,iBAAiB,2DAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA,2BAA2B,mBAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qEAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;A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IAAI,0DAAmB;AACvB,CAAC;AACD,iBAAiB,2DAAoB;AACrC,IAAI,wDAAiB;AACrB,CAAC;AACD,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AACsK;AACpG;AACE;AACK;AACnC;AACF;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0DAAY;AAClD,kCAAkC,0DAAY;AAC9C,iCAAiC,0DAAY;AAC7C,gCAAgC,0DAAY;AAC5C,iCAAiC,0DAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAY;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,2DAAI;AAC1D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AA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jD,oBAAoB,8FAAyB;AAC7C,oBAAoB,mFAAoB;AACxC,oBAAoB,oFAAqB;AACzC,oBAAoB,mEAAiB;AACrC,oBAAoB,0EAAoB;AACxC,oBAAoB,yEAAoB;AACxC,oBAAoB,kFAAwB;AAC5C,oBAAoB,wEAAkB;AACtC,oBAAoB,uFAA0B;AAC9C;AACA;AACA,oBAAoB,8EAAe;AACnC,oBAAoB,iGAAqC;AACzD;AACA;AACA,oBAAoB,mGAA6B;AACjD;AACA,aAAa;AACb,KAAK,gBAAgB,WAAW,EAAE,QAAQ,EAAE;AAC5C;AACA,CAAC;AAC4B;;AAE7B,2CAA2C,cAAc,u7J;;;;;;;;;;;;AClGzD;AAAA;AAAA;AAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAkB;AACpD;AACA;AACA;AACA,CAAC;AAC0B;;;;;;;;;;;;;ACtB3B;AAAA;AAAA;AAAA;AAAA;AAAwC;AACxC,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AAC+F;AAC3B;AACL;AAC/D;AACA;AACA;AACA,4BAA4B,iDAAY;AACxC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,+CAAY;AAC/D;AACA,2CAA2C,+CAAY;AACvD,4BAA4B,kDAAK;AACjC;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,2DAAK;AACb,kCAAkC,gFAAoB;AACtD;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,kEAAY;AACpB;AACA;AACA;AACA;AACA,gFAAgF,+DAAiB;AACjG;AACA,oFAAoF,+CAA+C,+DAAwB,CAAC,+DAAwB,GAAG;AACvL,mCAAmC,+DAAwB,EAAE,wKAAwK;AACrO,QAAQ,wDAAiB,iFAAiF,sCAAsC,EAAE;AAClJ,KAAK;AACL,QAAQ,yDAAkB;AAC1B,KAAK,EAAE,WAAW,qEAAqE,aAAa,kEAA2B,GAAG;AAClI,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,uDAAS;AACvB;AACA;AACA,aAAa;AACb,KAAK,gBAAgB,UAAU,OAAO,+DAAwB,EAAE,EAAE,EAAE,GAAG;AACvE,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,yDAAW;AAC7B;AACA,SAAS;AACT,kBAAkB,0DAAY;AAC9B;AACA,SAAS;AACT,kBAAkB,mDAAK;AACvB;AACA,SAAS,GAAG,EAAE,EAAE;AAChB;AACA,CAAC;AACsC;;AAEvC,2CAA2C,cAAc,u+M;;;;;;;;;;;;ACnHzD;AAAA;AAAO;AACP;AACA,sBAAsB,wFAAwF;AAC9G,sBAAsB,oDAAoD;AAC1E,sBAAsB,qCAAqC;AAC3D,qBAAqB,kCAAkC;AACvD,oBAAoB,iDAAiD;AACrE,yBAAyB,iCAAiC;AAC1D;;;;;;;;;;;;;ACRA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACE;;AAE1C;AACA,iCAAiC,SAAS,yGAAyG;AACnJ,+DAA+D;AAC/D,cAAc,8DAAuB;AACrC,IAAI,4DAAqB;AACzB,IAAI,wDAAiB,sFAAsF,CAAC,2DAAoB,MAAM,6BAA6B,cAAc,2DAAoB,IAAI,mCAAmC,EAAE;AAC9O,IAAI,4DAAqB;AACzB,IAAI,oDAAa;AACjB,IAAI,0DAAmB;AACvB,IAAI,0DAAmB;AACvB,CAAC;AACD;AACA;AACA,sBAAsB,2DAAoB;AAC1C,iBAAiB,2DAAoB;AACrC,IAAI,oEAA6B;AACjC,IAAI,yDAAkB;AACtB,IAAI,yDAAkB;AACtB,IAAI,wDAAiB;AACrB,IAAI,yDAAkB;AACtB,IAAI,uDAAgB;AACpB,IAAI,wDAAiB,YAAY,6DAAsB;AACvD,IAAI,uDAAgB;AACpB,IAAI,+DAAwB;AAC5B,CAAC;AACD,0DAA0D;AAC1D,IAAI,4DAAqB;AACzB,IAAI,wDAAiB;AACrB,IAAI,0DAAmB;AACvB,CAAC;AACD;AACA,IAAI,uDAAgB;AACpB,IAAI,wDAAiB;AACrB,CAAC;AACD,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACiI;AAC3F;AACtC;AACA;AACA,6BAA6B,aAAa;AAC1C,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0DAAY;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,2DAAI;AAC1D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,4DAAM;AACd;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA,6EAA6E,wDAAU;AACvF,YAAY,oDAAM;AAClB;AACA,8EAA8E,4CAA4C,+DAAwB,CAAC,wDAAiB,GAAG,+DAAwB,CAAC,oDAAa,GAAG;AAChN,gCAAgC,+DAAwB,EAAE,2KAA2K;AACrO,QAAQ,yDAAkB;AAC1B,KAAK,EAAE,WAAW,2KAA2K,YAAY,mBAAmB,8hBAA8hB;AAC1vB,QAAQ,wDAAiB;AACzB,KAAK;AACL,QAAQ,wDAAiB;AACzB,KAAK,EAAE,eAAe,uDAAc,EAAE,uDAAc,qCAAqC;AACzF,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,uDAAS;AACvB;AACA;AACA;AACA,wDAAwD,kEAAkE,uDAAuD,gBAAgB,qrBAAqrB,2NAA2N,KAAK,mBAAmB;AACzmC;AACA;AACA,iCAAiC,qEAAuB;AACxD,aAAa;AACb,KAAK,gBAAgB,UAAU,OAAO,wDAAiB,EAAE,GAAG,OAAO,oDAAa,EAAE,EAAE,EAAE,GAAG;AACzF,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,oDAAM;AACxB,SAAS;AACT,kBAAkB,yDAAW;AAC7B;AACA,SAAS;AACT,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,mDAAK;AACvB,SAAS;AACT,kBAAkB,mDAAK;AACvB,SAAS,GAAG,EAAE,EAAE;AAChB;AACA,CAAC;AACmC;;AAEpC,2CAA2C,cAAc,ulX;;;;;;;;;;;;ACrOzD;AAAA;AAAA;AAAwC;AACxC,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,wCAAwC;AAC1G,2BAA2B,0DAAmB,EAAE,+DAA+D;AAC/G,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,kDAAI;AAClB;AACA;AACA,aAAa;AACb,KAAK,gBAAgB,WAAW,EAAE,QAAQ,EAAE;AAC5C;AACA,CAAC;AAC6B;;AAE9B,2CAA2C,cAAc,+lE;;;;;;;;;;;;ACnCzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACI;AACE;;AAE9C,sEAAsE;AACtE,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AAC+I;AAC5C;AACxD;AACU;AACmB;AACxE,kBAAkB,sCAAsC,KAAK,eAAe,KAAK,UAAU,OAAO;AAClG;AACA;AACA,6BAA6B,KAAK,eAAe,KAAK,UAAU,OAAO;AACvE,wBAAwB,MAAM,GAAG,MAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,0DAAY;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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jD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;;;;;;;;;;;;ACnGxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACoB;AAC5D,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,eAAe,SAAI,IAAI,SAAI;AAC3B,mCAAmC,oCAAoC;AACvE;AACuJ;AACzE;AAC3B;AACiB;AACA;AACK;AACrC;AAC0B;AACvD;AACP,aAAa,gEAAiB;AAC9B,iBAAiB,gEAAU,cAAc,kCAAkC,EAAE;AAC7E;AACA;AACO;AACP,aAAa,4DAAa;AAC1B,iBAAiB,gEAAU,cAAc,kCAAkC,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0DAAY;AAC9C,iCAAiC,0DAAY;AAC7C,2BAA2B,iDAAY;AACvC,yBAAyB,iDAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB,2CAA2C;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB,2CAA2C;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB,iEAAiE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB,2CAA2C;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB,iEAAiE;AACjH;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB,yDAAU;AACnC,+BAA+B,0DAAY;AAC3C,kCAAkC,0DAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,2BAA2B,mFAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qEAAqE;AAC5G,sCAAsC,qEAAqE;AAC3G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gEAAU;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gEAAgE;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sEAAsE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb,kCAAkC,gFAAoB;AACtD,yCAAyC,gFAAoB;AAC7D;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,2DAAK;AACb;AAC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oFAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iFAAmB;AACjD,6BAA6B,iFAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,eAAe;AACf;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gBAAgB;AAC3C;AACA;AACA,0CAA0C,+DAA+D;AACzG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,yCAAyC,sDAAe,CAAC,uEAAuB,GAAG,sDAAe,CAAC,oEAAoB,GAAG,sDAAe,CAAC,oDAAa,GAAG,sDAAe,CAAC,wDAAQ,GAAG;AAC7P,8BAA8B,gEAAqB,EAAE,oDAAoD,kCAAkC,sDAAW,CAAC,uEAAmB,GAAG,sDAAW,CAAC,oEAAgB,GAAG,sDAAW,CAAC,oDAAS,GAAG,sDAAW,CAAC,wDAAa,GAAG,EAAE,oDAAoD;AACtT;AACA,KAAK,OAAO,uEAAgB,EAAE;AAC9B,KAAK,OAAO,oEAAa,EAAE;AAC3B,KAAK,OAAO,oDAAM,EAAE;AACpB,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI;AACvE;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,gBAAgB,qBAAqB;AACrC,KAAK,gBAAgB,UAAU,OAAO,uEAAuB,EAAE,GAAG,OAAO,oEAAoB,EAAE,GAAG,OAAO,oDAAa,EAAE,GAAG;AAC3H,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,EAAE,EAAE,QAAQ,EAAE;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,+BAA+B;AACpC,KAAK,0CAA0C,OAAO,sDAAQ,EAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,SAAS,IAAI,MAAM;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,SAAS,IAAI,MAAM;AACrE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,yCAAyC,sDAAe,CAAC,wDAAQ,GAAG;AAC5I,8BAA8B,gEAAqB,EAAE,oDAAoD,kCAAkC,sDAAW,CAAC,wDAAa,GAAG,EAAE,oDAAoD;AAC7N;AACA,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI;AACvE;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,gBAAgB,qBAAqB;AACrC,KAAK,gBAAgB,UAAU;AAC/B,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,EAAE,EAAE,QAAQ,EAAE;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,6CAA6C,sDAAe,CAAC,wDAAQ,GAAG;AACxJ,kCAAkC,gEAAqB,EAAE,wDAAwD,sCAAsC,sDAAW,CAAC,wDAAa,GAAG,EAAE,wDAAwD;AAC7O;AACA,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI;AACvE;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,gBAAgB,qBAAqB;AACrC,KAAK,gBAAgB,UAAU;AAC/B,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,EAAE,EAAE,QAAQ,EAAE;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6EAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,iDAAiD,sDAAe,CAAC,wDAAQ,GAAG,sDAAe,CAAC,8DAAe,GAAG;AACtM,sCAAsC,gEAAqB,EAAE,4DAA4D,0CAA0C,sDAAW,CAAC,wDAAa,GAAG,sDAAW,CAAC,8DAAW,GAAG,EAAE,4DAA4D;AACvR;AACA,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI,GAAG;AAC1E,KAAK,OAAO,8DAAQ;AACpB;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,gBAAgB,qBAAqB;AACrC,KAAK,gBAAgB,UAAU;AAC/B,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,GAAG,OAAO,8DAAe,EAAE,EAAE,EAAE,QAAQ,EAAE;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,eAAe;AAClG,oBAAoB,eAAe;AACnC;AACA;AACA,2BAA2B,uCAAuC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,oCAAoC,sDAAe,CAAC,wDAAQ,GAAG,sDAAe,CAAC,8DAAe,GAAG;AAC/J,yBAAyB,gEAAqB,EAAE,+CAA+C,6BAA6B,sDAAW,CAAC,wDAAa,GAAG,sDAAW,CAAC,8DAAW,GAAG,EAAE,+CAA+C;AACnO;AACA,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI,GAAG;AAC1E,KAAK,OAAO,8DAAQ;AACpB;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,gBAAgB,qBAAqB;AACrC,KAAK,gBAAgB,UAAU;AAC/B,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,GAAG,OAAO,8DAAe,EAAE,EAAE,EAAE,QAAQ,EAAE;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAAO;AACzC,gCAAgC,4CAAO;AACvC,gCAAgC,4CAAO;AACvC,gCAAgC,iDAAY;AAC5C;AACA;AACA,kCAAkC,4CAAO;AACzC;AACA,yCAAyC,4CAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2DAAI;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,qDAAqD,kBAAkB,iBAAiB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iFAAmB;AACzC,uBAAuB,iFAAmB;AAC1C,yBAAyB,iFAAmB;AAC5C,0BAA0B,iFAAmB;AAC7C,yBAAyB,iFAAmB;AAC5C,0BAA0B,iFAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yEAAW;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAS,CAAC,kDAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAO;AAC3C;AACA,mCAAmC,iDAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C,mDAAmD,QAAQ,GAAG,QAAQ;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iFAAmB;AAC/C,yBAAyB,iFAAmB;AAC5C,4BAA4B,iFAAmB;AAC/C,2BAA2B,iFAAmB;AAC9C,0BAA0B,iFAAmB;AAC7C,2BAA2B,iFAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iFAAmB;AACtD;AACA;AACA,kCAAkC,iFAAmB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iFAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iFAAmB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6DAA6D;AAC5F;AACA;AACA,yBAAyB,iFAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2DAA2D;AACzF;AACA;AACA,0BAA0B,iFAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,YAAY,yEAAW;AACvB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,eAAe;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qCAAqC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,0CAA0C,sDAAe,CAAC,oEAAoB,GAAG,sDAAe,CAAC,wDAAQ,GAAG,sDAAe,CAAC,8DAAe,GAAG,sDAAe,oBAAoB;AAC3P,+BAA+B,gEAAqB,EAAE,qDAAqD,mCAAmC,sDAAW,CAAC,oEAAgB,GAAG,sDAAW,CAAC,wDAAa,GAAG,sDAAW,CAAC,8DAAW,GAAG,sDAAW,oBAAoB,EAAE,qDAAqD;AACzT;AACA,KAAK,OAAO,oEAAa,EAAE;AAC3B,KA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Y;AACtC;AACA,kCAAkC,0DAAY;AAC9C;AACA,uCAAuC,0DAAY;AACnD,mCAAmC,kEAAc;AACjD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD,4BAA4B,qBAAqB,mFAAqB,QAAQ;AAC9E;AACA,wBAAwB,2BAA2B;AACnD,6BAA6B,sBAAsB,mFAAqB,QAAQ;AAChF;AACA,8BAA8B,iCAAiC;AAC/D;AACA,mCAAmC,mFAAqB;AACxD;AACA;AACA,yBAAyB,4BAA4B;AACrD,8BAA8B,uBAAuB,mFAAqB,QAAQ;AAClF;AACA,gBAAgB,mBAAmB;AACnC,qBAAqB,cAAc,mFAAqB,QAAQ;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4DAAM,2BAA2B,4EAAc;AACjF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AA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;AACT,kBAAkB,mDAAK;AACvB;AACA,SAAS,GAAG,EAAE,EAAE;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB,EAAE,sBAAsB;AACpE,qBAAqB,8DAAuB,EAAE,6CAA6C,mCAAmC,EAAE;AAChI;AACA;AACA,kBAAkB,4DAAU,EAAE,gEAAY,EAAE,sEAAe,GAAG,sEAAe,GAAG;AAChF,cAAc,oDAAoD,gEAAyB,iBAAiB,4BAA4B,gDAAgD,EAAE,wBAAwB,SAAS,4DAAU,EAAE,gEAAY,EAAE,sEAAe,EAAE,EAAE,wBAAwB,gDAAgD,sEAAe,EAAE,EAAE,EAAE,EAAE,EAAE;AACzW,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,sDAAQ;AACtB;AACA,0BAA0B,4DAAU,EAAE,gEAAY,EAAE,sEAAe;AACnE,iEAAiE,sEAAe;AAChF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK,eAAe,EAAE;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,8CAA8C,sDAAe,CAAC,wDAAQ,GAAG,sDAAe,CAAC,8DAAe,GAAG;AAC7L,mCAAmC,gEAAqB,EAAE,yDAAyD,uCAAuC,sDAAW,CAAC,wDAAa,GAAG,sDAAW,CAAC,8DAAW,GAAG,EAAE,yDAAyD;AAC3Q;AACA,KAAK,gCAAgC,OAAO,oDAAM,SAAS,wDAAQ,IAAI,GAAG;AAC1E,KAAK,OAAO,8DAAQ;AACpB;AACA,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,wDAAU;AACxB,gBAAgB,qBAAqB;AACrC,KAAK,gBAAgB,UAAU;AAC/B,sBAAsB,oDAAM;AAC5B,uBAAuB,wDAAQ;AAC/B,aAAa,GAAG,GAAG,OAAO,8DAAe,EAAE,EAAE,EAAE,QAAQ,EAAE;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE84B;;AAE94B,mC;;;;;;;;;;;;ACvpGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACxC,kBAAkB,SAAI,IAAI,SAAI;AAC9B;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACyC;AACc;AACK;AACa;AACR;AACc;AAC/E;AACA;AACA;AACA,4BAA4B,8DAAuB,EAAE,6BAA6B;AAClF,4BAA4B,8DAAuB,EAAE,oDAAoD,0CAA0C,EAAE;AACrJ,SAAS,UAAU,wEAAe,YAAY,qFAAqB,EAAE;AACrE,kBAAkB,oEAAc,IAAI;AACpC,cAAc,oDAAoD,gEAAyB,wBAAwB,uBAAuB,SAAS,oEAAc,EAAE,EAAE,EAAE,EAAE,EAAE;AAC3K,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,sDAAQ;AACtB;AACA,0BAA0B,oEAAc;AACxC;AACA,qBAAqB,UAAU,wEAAe,YAAY,qFAAqB,EAAE;AACjF;AACA,aAAa;AACb,KAAK,gBAAgB,WAAW,EAAE,QAAQ,EAAE;AAC5C;AACA,CAAC;AAC+B;AAChC,SAAS,2FAA4B;AACrC;AACA;AACA;AACA,+BAA+B,8DAAuB,EAAE,gCAAgC;AACxF,+BAA+B,8DAAuB,EAAE,uDAAuD,6CAA6C,EAAE,eAAe,UAAU,6EAAqB,gBAAgB,sCAAsC;AAClQ,cAAc,oDAAoD,gEAAyB,2BAA2B,kCAAkC,EAAE,EAAE;AAC5J,4BAA4B,CAAC,+DAAwB;AACrD,cAAc,sDAAQ;AACtB;AACA;AACA,6BAA6B,UAAU,6EAAqB,gBAAgB;AAC5E,aAAa;AACb,KAAK,gBAAgB,WAAW,EAAE,QAAQ,EAAE;AAC5C;AACA,CAAC;AACkC;AACrB;;AAEd,2CAA2C,cAAc,m1F;;;;;;;;;;;;ACpDzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;;AAEwC;AACN;AAC6B;AACJ;AACE;AACX;AACE;AAChF,2CAA2C,cAAc,+L","file":"default~auth-auth-module~dashboard-dashboard-module~profile-profile-module.js","sourcesContent":["import { ElementRef, Directive, TemplateRef, ViewContainerRef, EventEmitter, ComponentFactoryResolver, Inject, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Throws an exception when attempting to attach a null portal to a host.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nfunction throwNullPortalError() {\n throw Error('Must provide a portal to attach');\n}\n/**\n * Throws an exception when attempting to attach a portal to a host that is already attached.\n * @docs-private\n */\nfunction throwPortalAlreadyAttachedError() {\n throw Error('Host already has a portal attached');\n}\n/**\n * Throws an exception when attempting to attach a portal to an already-disposed host.\n * @docs-private\n */\nfunction throwPortalOutletAlreadyDisposedError() {\n throw Error('This PortalOutlet has already been disposed');\n}\n/**\n * Throws an exception when attempting to attach an unknown portal type.\n * @docs-private\n */\nfunction throwUnknownPortalTypeError() {\n throw Error('Attempting to attach an unknown Portal type. BasePortalOutlet accepts either ' +\n 'a ComponentPortal or a TemplatePortal.');\n}\n/**\n * Throws an exception when attempting to attach a portal to a null host.\n * @docs-private\n */\nfunction throwNullPortalOutletError() {\n throw Error('Attempting to attach a portal to a null PortalOutlet');\n}\n/**\n * Throws an exception when attempting to detach a portal that is not attached.\n * @docs-private\n */\nfunction throwNoPortalAttachedError() {\n throw Error('Attempting to detach a portal that is not attached to a host');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A `Portal` is something that you want to render somewhere else.\n * It can be attach to / detached from a `PortalOutlet`.\n */\nclass Portal {\n /** Attach this portal to a host. */\n attach(host) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (host == null) {\n throwNullPortalOutletError();\n }\n if (host.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n }\n this._attachedHost = host;\n return host.attach(this);\n }\n /** Detach this portal from its host */\n detach() {\n let host = this._attachedHost;\n if (host != null) {\n this._attachedHost = null;\n host.detach();\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwNoPortalAttachedError();\n }\n }\n /** Whether this portal is attached to a host. */\n get isAttached() {\n return this._attachedHost != null;\n }\n /**\n * Sets the PortalOutlet reference without performing `attach()`. This is used directly by\n * the PortalOutlet when it is performing an `attach()` or `detach()`.\n */\n setAttachedHost(host) {\n this._attachedHost = host;\n }\n}\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nclass ComponentPortal extends Portal {\n constructor(component, viewContainerRef, injector, componentFactoryResolver) {\n super();\n this.component = component;\n this.viewContainerRef = viewContainerRef;\n this.injector = injector;\n this.componentFactoryResolver = componentFactoryResolver;\n }\n}\n/**\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n */\nclass TemplatePortal extends Portal {\n constructor(template, viewContainerRef, context) {\n super();\n this.templateRef = template;\n this.viewContainerRef = viewContainerRef;\n this.context = context;\n }\n get origin() {\n return this.templateRef.elementRef;\n }\n /**\n * Attach the portal to the provided `PortalOutlet`.\n * When a context is provided it will override the `context` property of the `TemplatePortal`\n * instance.\n */\n attach(host, context = this.context) {\n this.context = context;\n return super.attach(host);\n }\n detach() {\n this.context = undefined;\n return super.detach();\n }\n}\n/**\n * A `DomPortal` is a portal whose DOM element will be taken from its current position\n * in the DOM and moved into a portal outlet, when it is attached. On detach, the content\n * will be restored to its original position.\n */\nclass DomPortal extends Portal {\n constructor(element) {\n super();\n this.element = element instanceof ElementRef ? element.nativeElement : element;\n }\n}\n/**\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n */\nclass BasePortalOutlet {\n constructor() {\n /** Whether this host has already been permanently disposed. */\n this._isDisposed = false;\n // @breaking-change 10.0.0 `attachDomPortal` to become a required abstract method.\n this.attachDomPortal = null;\n }\n /** Whether this host has an attached portal. */\n hasAttached() {\n return !!this._attachedPortal;\n }\n /** Attaches a portal. */\n attach(portal) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!portal) {\n throwNullPortalError();\n }\n if (this.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n if (this._isDisposed) {\n throwPortalOutletAlreadyDisposedError();\n }\n }\n if (portal instanceof ComponentPortal) {\n this._attachedPortal = portal;\n return this.attachComponentPortal(portal);\n }\n else if (portal instanceof TemplatePortal) {\n this._attachedPortal = portal;\n return this.attachTemplatePortal(portal);\n // @breaking-change 10.0.0 remove null check for `this.attachDomPortal`.\n }\n else if (this.attachDomPortal && portal instanceof DomPortal) {\n this._attachedPortal = portal;\n return this.attachDomPortal(portal);\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwUnknownPortalTypeError();\n }\n }\n /** Detaches a previously attached portal. */\n detach() {\n if (this._attachedPortal) {\n this._attachedPortal.setAttachedHost(null);\n this._attachedPortal = null;\n }\n this._invokeDisposeFn();\n }\n /** Permanently dispose of this portal host. */\n dispose() {\n if (this.hasAttached()) {\n this.detach();\n }\n this._invokeDisposeFn();\n this._isDisposed = true;\n }\n /** @docs-private */\n setDisposeFn(fn) {\n this._disposeFn = fn;\n }\n _invokeDisposeFn() {\n if (this._disposeFn) {\n this._disposeFn();\n this._disposeFn = null;\n }\n }\n}\n/**\n * @deprecated Use `BasePortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass BasePortalHost extends BasePortalOutlet {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nclass DomPortalOutlet extends BasePortalOutlet {\n constructor(\n /** Element into which the content is projected. */\n outletElement, _componentFactoryResolver, _appRef, _defaultInjector, \n /**\n * @deprecated `_document` Parameter to be made required.\n * @breaking-change 10.0.0\n */\n _document) {\n super();\n this.outletElement = outletElement;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._appRef = _appRef;\n this._defaultInjector = _defaultInjector;\n /**\n * Attaches a DOM portal by transferring its content into the outlet.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 10.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n element.parentNode.insertBefore(anchorNode, element);\n this.outletElement.appendChild(element);\n this._attachedPortal = portal;\n super.setDisposeFn(() => {\n // We can't use `replaceWith` here because IE doesn't support it.\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /**\n * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n * @param portal Portal to be attached\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n let componentRef;\n // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n // for the component (in terms of Angular's component tree, not rendering).\n // When the ViewContainerRef is missing, we use the factory to create the component directly\n // and then manually attach the view to the application.\n if (portal.viewContainerRef) {\n componentRef = portal.viewContainerRef.createComponent(componentFactory, portal.viewContainerRef.length, portal.injector || portal.viewContainerRef.injector);\n this.setDisposeFn(() => componentRef.destroy());\n }\n else {\n componentRef = componentFactory.create(portal.injector || this._defaultInjector);\n this._appRef.attachView(componentRef.hostView);\n this.setDisposeFn(() => {\n this._appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n }\n // At this point the component has been instantiated, so we move it to the location in the DOM\n // where we want it to be rendered.\n this.outletElement.appendChild(this._getComponentRootNode(componentRef));\n this._attachedPortal = portal;\n return componentRef;\n }\n /**\n * Attaches a template portal to the DOM as an embedded view.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n let viewContainer = portal.viewContainerRef;\n let viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context);\n // The method `createEmbeddedView` will add the view as a child of the viewContainer.\n // But for the DomPortalOutlet the view can be added everywhere in the DOM\n // (e.g Overlay Container) To move the view to the specified host element. We just\n // re-append the existing root nodes.\n viewRef.rootNodes.forEach(rootNode => this.outletElement.appendChild(rootNode));\n // Note that we want to detect changes after the nodes have been moved so that\n // any directives inside the portal that are looking at the DOM inside a lifecycle\n // hook won't be invoked too early.\n viewRef.detectChanges();\n this.setDisposeFn((() => {\n let index = viewContainer.indexOf(viewRef);\n if (index !== -1) {\n viewContainer.remove(index);\n }\n }));\n this._attachedPortal = portal;\n // TODO(jelbourn): Return locals from view.\n return viewRef;\n }\n /**\n * Clears out a portal from the DOM.\n */\n dispose() {\n super.dispose();\n if (this.outletElement.parentNode != null) {\n this.outletElement.parentNode.removeChild(this.outletElement);\n }\n }\n /** Gets the root HTMLElement for an instantiated component. */\n _getComponentRootNode(componentRef) {\n return componentRef.hostView.rootNodes[0];\n }\n}\n/**\n * @deprecated Use `DomPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass DomPortalHost extends DomPortalOutlet {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,\n * the directive instance itself can be attached to a host, enabling declarative use of portals.\n */\nclass CdkPortal extends TemplatePortal {\n constructor(templateRef, viewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\nCdkPortal.ɵfac = function CdkPortal_Factory(t) { return new (t || CdkPortal)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nCdkPortal.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkPortal, selectors: [[\"\", \"cdkPortal\", \"\"]], exportAs: [\"cdkPortal\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkPortal.ctorParameters = () => [\n { type: TemplateRef },\n { type: ViewContainerRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkPortal, [{\n type: Directive,\n args: [{\n selector: '[cdkPortal]',\n exportAs: 'cdkPortal'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }, { type: ɵngcc0.ViewContainerRef }]; }, null); })();\n/**\n * @deprecated Use `CdkPortal` instead.\n * @breaking-change 9.0.0\n */\nclass TemplatePortalDirective extends CdkPortal {\n}\nTemplatePortalDirective.ɵfac = function TemplatePortalDirective_Factory(t) { return ɵTemplatePortalDirective_BaseFactory(t || TemplatePortalDirective); };\nTemplatePortalDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplatePortalDirective, selectors: [[\"\", \"cdk-portal\", \"\"], [\"\", \"portal\", \"\"]], exportAs: [\"cdkPortal\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: CdkPortal,\n useExisting: TemplatePortalDirective\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵTemplatePortalDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(TemplatePortalDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplatePortalDirective, [{\n type: Directive,\n args: [{\n selector: '[cdk-portal], [portal]',\n exportAs: 'cdkPortal',\n providers: [{\n provide: CdkPortal,\n useExisting: TemplatePortalDirective\n }]\n }]\n }], null, null); })();\n/**\n * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be\n * directly attached to it, enabling declarative use.\n *\n * Usage:\n * ``\n */\nclass CdkPortalOutlet extends BasePortalOutlet {\n constructor(_componentFactoryResolver, _viewContainerRef, \n /**\n * @deprecated `_document` parameter to be made required.\n * @breaking-change 9.0.0\n */\n _document) {\n super();\n this._componentFactoryResolver = _componentFactoryResolver;\n this._viewContainerRef = _viewContainerRef;\n /** Whether the portal component is initialized. */\n this._isInitialized = false;\n /** Emits when a portal is attached to the outlet. */\n this.attached = new EventEmitter();\n /**\n * Attaches the given DomPortal to this PortalHost by moving all of the portal content into it.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 9.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n portal.setAttachedHost(this);\n element.parentNode.insertBefore(anchorNode, element);\n this._getRootNode().appendChild(element);\n this._attachedPortal = portal;\n super.setDisposeFn(() => {\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /** Portal associated with the Portal outlet. */\n get portal() {\n return this._attachedPortal;\n }\n set portal(portal) {\n // Ignore the cases where the `portal` is set to a falsy value before the lifecycle hooks have\n // run. This handles the cases where the user might do something like `
`\n // and attach a portal programmatically in the parent component. When Angular does the first CD\n // round, it will fire the setter with empty string, causing the user's content to be cleared.\n if (this.hasAttached() && !portal && !this._isInitialized) {\n return;\n }\n if (this.hasAttached()) {\n super.detach();\n }\n if (portal) {\n super.attach(portal);\n }\n this._attachedPortal = portal;\n }\n /** Component or view reference that is attached to the portal. */\n get attachedRef() {\n return this._attachedRef;\n }\n ngOnInit() {\n this._isInitialized = true;\n }\n ngOnDestroy() {\n super.dispose();\n this._attachedPortal = null;\n this._attachedRef = null;\n }\n /**\n * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\n *\n * @param portal Portal to be attached to the portal outlet.\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n portal.setAttachedHost(this);\n // If the portal specifies an origin, use that as the logical location of the component\n // in the application tree. Otherwise use the location of this PortalOutlet.\n const viewContainerRef = portal.viewContainerRef != null ?\n portal.viewContainerRef :\n this._viewContainerRef;\n const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n const ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector);\n // If we're using a view container that's different from the injected one (e.g. when the portal\n // specifies its own) we need to move the component into the outlet, otherwise it'll be rendered\n // inside of the alternate view container.\n if (viewContainerRef !== this._viewContainerRef) {\n this._getRootNode().appendChild(ref.hostView.rootNodes[0]);\n }\n super.setDisposeFn(() => ref.destroy());\n this._attachedPortal = portal;\n this._attachedRef = ref;\n this.attached.emit(ref);\n return ref;\n }\n /**\n * Attach the given TemplatePortal to this PortalHost as an embedded View.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n portal.setAttachedHost(this);\n const viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context);\n super.setDisposeFn(() => this._viewContainerRef.clear());\n this._attachedPortal = portal;\n this._attachedRef = viewRef;\n this.attached.emit(viewRef);\n return viewRef;\n }\n /** Gets the root node of the portal outlet. */\n _getRootNode() {\n const nativeElement = this._viewContainerRef.element.nativeElement;\n // The directive could be set on a template which will result in a comment\n // node being the root. Use the comment's parent node if that is the case.\n return (nativeElement.nodeType === nativeElement.ELEMENT_NODE ?\n nativeElement : nativeElement.parentNode);\n }\n}\nCdkPortalOutlet.ɵfac = function CdkPortalOutlet_Factory(t) { return new (t || CdkPortalOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT)); };\nCdkPortalOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkPortalOutlet, selectors: [[\"\", \"cdkPortalOutlet\", \"\"]], inputs: { portal: [\"cdkPortalOutlet\", \"portal\"] }, outputs: { attached: \"attached\" }, exportAs: [\"cdkPortalOutlet\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkPortalOutlet.ctorParameters = () => [\n { type: ComponentFactoryResolver },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\nCdkPortalOutlet.propDecorators = {\n attached: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkPortalOutlet, [{\n type: Directive,\n args: [{\n selector: '[cdkPortalOutlet]',\n exportAs: 'cdkPortalOutlet',\n inputs: ['portal: cdkPortalOutlet']\n }]\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { attached: [{\n type: Output\n }] }); })();\n/**\n * @deprecated Use `CdkPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass PortalHostDirective extends CdkPortalOutlet {\n}\nPortalHostDirective.ɵfac = function PortalHostDirective_Factory(t) { return ɵPortalHostDirective_BaseFactory(t || PortalHostDirective); };\nPortalHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PortalHostDirective, selectors: [[\"\", \"cdkPortalHost\", \"\"], [\"\", \"portalHost\", \"\"]], inputs: { portal: [\"cdkPortalHost\", \"portal\"] }, exportAs: [\"cdkPortalHost\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵPortalHostDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(PortalHostDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PortalHostDirective, [{\n type: Directive,\n args: [{\n selector: '[cdkPortalHost], [portalHost]',\n exportAs: 'cdkPortalHost',\n inputs: ['portal: cdkPortalHost'],\n providers: [{\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective\n }]\n }]\n }], null, null); })();\nclass PortalModule {\n}\nPortalModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PortalModule });\nPortalModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PortalModule_Factory(t) { return new (t || PortalModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PortalModule, { declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective], exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PortalModule, [{\n type: NgModule,\n args: [{\n exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],\n declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * @docs-private\n * @deprecated Use `Injector.create` instead.\n * @breaking-change 11.0.0\n */\nclass PortalInjector {\n constructor(_parentInjector, _customTokens) {\n this._parentInjector = _parentInjector;\n this._customTokens = _customTokens;\n }\n get(token, notFoundValue) {\n const value = this._customTokens.get(token);\n if (typeof value !== 'undefined') {\n return value;\n }\n return this._parentInjector.get(token, notFoundValue);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BasePortalHost, BasePortalOutlet, CdkPortal, CdkPortalOutlet, ComponentPortal, DomPortal, DomPortalHost, DomPortalOutlet, Portal, PortalHostDirective, PortalInjector, PortalModule, TemplatePortal, TemplatePortalDirective };\n\n//# sourceMappingURL=portal.js.map","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { Platform } from '@angular/cdk/platform';\nimport { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from './date-time-adapter.class';\nvar DEFAULT_MONTH_NAMES = {\n 'long': [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n 'October', 'November', 'December'\n ],\n 'short': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n 'narrow': ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']\n};\nvar DEFAULT_DAY_OF_WEEK_NAMES = {\n 'long': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n 'short': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n 'narrow': ['S', 'M', 'T', 'W', 'T', 'F', 'S']\n};\nvar ɵ0 = function (i) { return String(i + 1); };\nvar DEFAULT_DATE_NAMES = range(31, ɵ0);\nvar SUPPORTS_INTL_API = typeof Intl !== 'undefined';\nvar ISO_8601_REGEX = /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\nfunction range(length, valueFunction) {\n var valuesArray = Array(length);\n for (var i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n return valuesArray;\n}\nvar NativeDateTimeAdapter = (function (_super) {\n __extends(NativeDateTimeAdapter, _super);\n function NativeDateTimeAdapter(owlDateTimeLocale, platform) {\n var _this = _super.call(this) || this;\n _this.owlDateTimeLocale = owlDateTimeLocale;\n _super.prototype.setLocale.call(_this, owlDateTimeLocale);\n _this.useUtcForDisplay = !platform.TRIDENT;\n _this._clampDate = platform.TRIDENT || platform.EDGE;\n return _this;\n }\n NativeDateTimeAdapter.prototype.getYear = function (date) {\n return date.getFullYear();\n };\n NativeDateTimeAdapter.prototype.getMonth = function (date) {\n return date.getMonth();\n };\n NativeDateTimeAdapter.prototype.getDay = function (date) {\n return date.getDay();\n };\n NativeDateTimeAdapter.prototype.getDate = function (date) {\n return date.getDate();\n };\n NativeDateTimeAdapter.prototype.getHours = function (date) {\n return date.getHours();\n };\n NativeDateTimeAdapter.prototype.getMinutes = function (date) {\n return date.getMinutes();\n };\n NativeDateTimeAdapter.prototype.getSeconds = function (date) {\n return date.getSeconds();\n };\n NativeDateTimeAdapter.prototype.getTime = function (date) {\n return date.getTime();\n };\n NativeDateTimeAdapter.prototype.getNumDaysInMonth = function (date) {\n var lastDateOfMonth = this.createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0);\n return this.getDate(lastDateOfMonth);\n };\n NativeDateTimeAdapter.prototype.differenceInCalendarDays = function (dateLeft, dateRight) {\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\n var dateLeftStartOfDay = this.createDate(this.getYear(dateLeft), this.getMonth(dateLeft), this.getDate(dateLeft));\n var dateRightStartOfDay = this.createDate(this.getYear(dateRight), this.getMonth(dateRight), this.getDate(dateRight));\n var timeStampLeft = this.getTime(dateLeftStartOfDay) - dateLeftStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;\n var timeStampRight = this.getTime(dateRightStartOfDay) - dateRightStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;\n return Math.round((timeStampLeft - timeStampRight) / this.millisecondsInDay);\n }\n else {\n return null;\n }\n };\n NativeDateTimeAdapter.prototype.getYearName = function (date) {\n if (SUPPORTS_INTL_API) {\n var dtf = new Intl.DateTimeFormat(this.locale, { year: 'numeric', timeZone: 'utc' });\n return this.stripDirectionalityCharacters(this._format(dtf, date));\n }\n return String(this.getYear(date));\n };\n NativeDateTimeAdapter.prototype.getMonthNames = function (style) {\n var _this = this;\n if (SUPPORTS_INTL_API) {\n var dtf_1 = new Intl.DateTimeFormat(this.locale, { month: style, timeZone: 'utc' });\n return range(12, function (i) { return _this.stripDirectionalityCharacters(_this._format(dtf_1, new Date(2017, i, 1))); });\n }\n return DEFAULT_MONTH_NAMES[style];\n };\n NativeDateTimeAdapter.prototype.getDayOfWeekNames = function (style) {\n var _this = this;\n if (SUPPORTS_INTL_API) {\n var dtf_2 = new Intl.DateTimeFormat(this.locale, { weekday: style, timeZone: 'utc' });\n return range(7, function (i) { return _this.stripDirectionalityCharacters(_this._format(dtf_2, new Date(2017, 0, i + 1))); });\n }\n return DEFAULT_DAY_OF_WEEK_NAMES[style];\n };\n NativeDateTimeAdapter.prototype.getDateNames = function () {\n var _this = this;\n if (SUPPORTS_INTL_API) {\n var dtf_3 = new Intl.DateTimeFormat(this.locale, { day: 'numeric', timeZone: 'utc' });\n return range(31, function (i) { return _this.stripDirectionalityCharacters(_this._format(dtf_3, new Date(2017, 0, i + 1))); });\n }\n return DEFAULT_DATE_NAMES;\n };\n NativeDateTimeAdapter.prototype.toIso8601 = function (date) {\n return date.toISOString();\n };\n NativeDateTimeAdapter.prototype.isEqual = function (dateLeft, dateRight) {\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\n return dateLeft.getTime() === dateRight.getTime();\n }\n else {\n return false;\n }\n };\n NativeDateTimeAdapter.prototype.isSameDay = function (dateLeft, dateRight) {\n if (this.isValid(dateLeft) && this.isValid(dateRight)) {\n var dateLeftStartOfDay = this.clone(dateLeft);\n var dateRightStartOfDay = this.clone(dateRight);\n dateLeftStartOfDay.setHours(0, 0, 0, 0);\n dateRightStartOfDay.setHours(0, 0, 0, 0);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n }\n else {\n return false;\n }\n };\n NativeDateTimeAdapter.prototype.isValid = function (date) {\n return date && !isNaN(date.getTime());\n };\n NativeDateTimeAdapter.prototype.invalid = function () {\n return new Date(NaN);\n };\n NativeDateTimeAdapter.prototype.isDateInstance = function (obj) {\n return obj instanceof Date;\n };\n NativeDateTimeAdapter.prototype.addCalendarYears = function (date, amount) {\n return this.addCalendarMonths(date, amount * 12);\n };\n NativeDateTimeAdapter.prototype.addCalendarMonths = function (date, amount) {\n var result = this.clone(date);\n amount = Number(amount);\n var desiredMonth = result.getMonth() + amount;\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(result.getFullYear(), desiredMonth, 1);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = this.getNumDaysInMonth(dateWithDesiredMonth);\n result.setMonth(desiredMonth, Math.min(daysInMonth, result.getDate()));\n return result;\n };\n NativeDateTimeAdapter.prototype.addCalendarDays = function (date, amount) {\n var result = this.clone(date);\n amount = Number(amount);\n result.setDate(result.getDate() + amount);\n return result;\n };\n NativeDateTimeAdapter.prototype.setHours = function (date, amount) {\n var result = this.clone(date);\n result.setHours(amount);\n return result;\n };\n NativeDateTimeAdapter.prototype.setMinutes = function (date, amount) {\n var result = this.clone(date);\n result.setMinutes(amount);\n return result;\n };\n NativeDateTimeAdapter.prototype.setSeconds = function (date, amount) {\n var result = this.clone(date);\n result.setSeconds(amount);\n return result;\n };\n NativeDateTimeAdapter.prototype.createDate = function (year, month, date, hours, minutes, seconds) {\n if (hours === void 0) { hours = 0; }\n if (minutes === void 0) { minutes = 0; }\n if (seconds === void 0) { seconds = 0; }\n if (month < 0 || month > 11) {\n throw Error(\"Invalid month index \\\"\" + month + \"\\\". Month index has to be between 0 and 11.\");\n }\n if (date < 1) {\n throw Error(\"Invalid date \\\"\" + date + \"\\\". Date has to be greater than 0.\");\n }\n if (hours < 0 || hours > 23) {\n throw Error(\"Invalid hours \\\"\" + hours + \"\\\". Hours has to be between 0 and 23.\");\n }\n if (minutes < 0 || minutes > 59) {\n throw Error(\"Invalid minutes \\\"\" + minutes + \"\\\". Minutes has to between 0 and 59.\");\n }\n if (seconds < 0 || seconds > 59) {\n throw Error(\"Invalid seconds \\\"\" + seconds + \"\\\". Seconds has to be between 0 and 59.\");\n }\n var result = this.createDateWithOverflow(year, month, date, hours, minutes, seconds);\n if (result.getMonth() !== month) {\n throw Error(\"Invalid date \\\"\" + date + \"\\\" for month with index \\\"\" + month + \"\\\".\");\n }\n return result;\n };\n NativeDateTimeAdapter.prototype.clone = function (date) {\n return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date), this.getHours(date), this.getMinutes(date), this.getSeconds(date));\n };\n NativeDateTimeAdapter.prototype.now = function () {\n return new Date();\n };\n NativeDateTimeAdapter.prototype.format = function (date, displayFormat) {\n if (!this.isValid(date)) {\n throw Error('JSNativeDate: Cannot format invalid date.');\n }\n if (SUPPORTS_INTL_API) {\n if (this._clampDate && (date.getFullYear() < 1 || date.getFullYear() > 9999)) {\n date = this.clone(date);\n date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));\n }\n displayFormat = __assign({}, displayFormat, { timeZone: 'utc' });\n var dtf = new Intl.DateTimeFormat(this.locale, displayFormat);\n return this.stripDirectionalityCharacters(this._format(dtf, date));\n }\n return this.stripDirectionalityCharacters(date.toDateString());\n };\n NativeDateTimeAdapter.prototype.parse = function (value, parseFormat) {\n if (typeof value === 'number') {\n return new Date(value);\n }\n return value ? new Date(Date.parse(value)) : null;\n };\n NativeDateTimeAdapter.prototype.deserialize = function (value) {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n if (ISO_8601_REGEX.test(value)) {\n var date = new Date(value);\n if (this.isValid(date)) {\n return date;\n }\n }\n }\n return _super.prototype.deserialize.call(this, value);\n };\n NativeDateTimeAdapter.prototype.createDateWithOverflow = function (year, month, date, hours, minutes, seconds) {\n if (hours === void 0) { hours = 0; }\n if (minutes === void 0) { minutes = 0; }\n if (seconds === void 0) { seconds = 0; }\n var result = new Date(year, month, date, hours, minutes, seconds);\n if (year >= 0 && year < 100) {\n result.setFullYear(this.getYear(result) - 1900);\n }\n return result;\n };\n NativeDateTimeAdapter.prototype.stripDirectionalityCharacters = function (str) {\n return str.replace(/[\\u200e\\u200f]/g, '');\n };\n NativeDateTimeAdapter.prototype._format = function (dtf, date) {\n var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n return dtf.format(d);\n };\n NativeDateTimeAdapter = __decorate([ __param(0, Optional()), __param(0, Inject(OWL_DATE_TIME_LOCALE)),\n __metadata(\"design:paramtypes\", [String, Platform])\n ], NativeDateTimeAdapter);\nNativeDateTimeAdapter.ɵfac = function NativeDateTimeAdapter_Factory(t) { return new (t || NativeDateTimeAdapter)(ɵngcc0.ɵɵinject(OWL_DATE_TIME_LOCALE, 8), ɵngcc0.ɵɵinject(ɵngcc1.Platform)); };\nNativeDateTimeAdapter.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NativeDateTimeAdapter, factory: function (t) { return NativeDateTimeAdapter.ɵfac(t); } });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NativeDateTimeAdapter, [{\n type: Injectable\n }], function () { return [{ type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_LOCALE]\n }] }, { type: ɵngcc1.Platform }]; }, null); })();\n return NativeDateTimeAdapter;\n}(DateTimeAdapter));\nexport { NativeDateTimeAdapter };\nexport { ɵ0 };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlcyI6WyJuYXRpdmUtZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FFTztBQUNQO0FBQ0E7Ozs7Ozs7Ozs7NkRBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fcGFyYW0gPSAodGhpcyAmJiB0aGlzLl9fcGFyYW0pIHx8IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn07XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIsIE9XTF9EQVRFX1RJTUVfTE9DQUxFIH0gZnJvbSAnLi9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG52YXIgREVGQVVMVF9NT05USF9OQU1FUyA9IHtcbiAgICAnbG9uZyc6IFtcbiAgICAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJyxcbiAgICAgICAgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXG4gICAgXSxcbiAgICAnc2hvcnQnOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gICAgJ25hcnJvdyc6IFsnSicsICdGJywgJ00nLCAnQScsICdNJywgJ0onLCAnSicsICdBJywgJ1MnLCAnTycsICdOJywgJ0QnXVxufTtcbnZhciBERUZBVUxUX0RBWV9PRl9XRUVLX05BTUVTID0ge1xuICAgICdsb25nJzogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLFxuICAgICdzaG9ydCc6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gICAgJ25hcnJvdyc6IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG59O1xudmFyIMm1MCA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiBTdHJpbmcoaSArIDEpOyB9O1xudmFyIERFRkFVTFRfREFURV9OQU1FUyA9IHJhbmdlKDMxLCDJtTApO1xudmFyIFNVUFBPUlRTX0lOVExfQVBJID0gdHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnO1xudmFyIElTT184NjAxX1JFR0VYID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OlRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspPyg/Olp8KD86KD86XFwrfC0pXFxkezJ9OlxcZHsyfSkpPyk/JC87XG5mdW5jdGlvbiByYW5nZShsZW5ndGgsIHZhbHVlRnVuY3Rpb24pIHtcbiAgICB2YXIgdmFsdWVzQXJyYXkgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWVzQXJyYXlbaV0gPSB2YWx1ZUZ1bmN0aW9uKGkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzQXJyYXk7XG59XG52YXIgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE5hdGl2ZURhdGVUaW1lQWRhcHRlcihvd2xEYXRlVGltZUxvY2FsZSwgcGxhdGZvcm0pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub3dsRGF0ZVRpbWVMb2NhbGUgPSBvd2xEYXRlVGltZUxvY2FsZTtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5zZXRMb2NhbGUuY2FsbChfdGhpcywgb3dsRGF0ZVRpbWVMb2NhbGUpO1xuICAgICAgICBfdGhpcy51c2VVdGNGb3JEaXNwbGF5ID0gIXBsYXRmb3JtLlRSSURFTlQ7XG4gICAgICAgIF90aGlzLl9jbGFtcERhdGUgPSBwbGF0Zm9ybS5UUklERU5UIHx8IHBsYXRmb3JtLkVER0U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXRZZWFyID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuZ2V0TW9udGggPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRNb250aCgpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXREYXkgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXkoKTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuZ2V0RGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuZ2V0SG91cnMgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXRNaW51dGVzID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXRTZWNvbmRzID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXRUaW1lID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXROdW1EYXlzSW5Nb250aCA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHZhciBsYXN0RGF0ZU9mTW9udGggPSB0aGlzLmNyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKGRhdGUpLCB0aGlzLmdldE1vbnRoKGRhdGUpICsgMSwgMCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGUobGFzdERhdGVPZk1vbnRoKTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzID0gZnVuY3Rpb24gKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZChkYXRlTGVmdCkgJiYgdGhpcy5pc1ZhbGlkKGRhdGVSaWdodCkpIHtcbiAgICAgICAgICAgIHZhciBkYXRlTGVmdFN0YXJ0T2ZEYXkgPSB0aGlzLmNyZWF0ZURhdGUodGhpcy5nZXRZZWFyKGRhdGVMZWZ0KSwgdGhpcy5nZXRNb250aChkYXRlTGVmdCksIHRoaXMuZ2V0RGF0ZShkYXRlTGVmdCkpO1xuICAgICAgICAgICAgdmFyIGRhdGVSaWdodFN0YXJ0T2ZEYXkgPSB0aGlzLmNyZWF0ZURhdGUodGhpcy5nZXRZZWFyKGRhdGVSaWdodCksIHRoaXMuZ2V0TW9udGgoZGF0ZVJpZ2h0KSwgdGhpcy5nZXREYXRlKGRhdGVSaWdodCkpO1xuICAgICAgICAgICAgdmFyIHRpbWVTdGFtcExlZnQgPSB0aGlzLmdldFRpbWUoZGF0ZUxlZnRTdGFydE9mRGF5KSAtIGRhdGVMZWZ0U3RhcnRPZkRheS5nZXRUaW1lem9uZU9mZnNldCgpICogdGhpcy5taWxsaXNlb25kc0luTWludXRlO1xuICAgICAgICAgICAgdmFyIHRpbWVTdGFtcFJpZ2h0ID0gdGhpcy5nZXRUaW1lKGRhdGVSaWdodFN0YXJ0T2ZEYXkpIC0gZGF0ZVJpZ2h0U3RhcnRPZkRheS5nZXRUaW1lem9uZU9mZnNldCgpICogdGhpcy5taWxsaXNlb25kc0luTWludXRlO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKHRpbWVTdGFtcExlZnQgLSB0aW1lU3RhbXBSaWdodCkgLyB0aGlzLm1pbGxpc2Vjb25kc0luRGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmdldFllYXJOYW1lID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgaWYgKFNVUFBPUlRTX0lOVExfQVBJKSB7XG4gICAgICAgICAgICB2YXIgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgeWVhcjogJ251bWVyaWMnLCB0aW1lWm9uZTogJ3V0YycgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZHRmLCBkYXRlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzLmdldFllYXIoZGF0ZSkpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5nZXRNb250aE5hbWVzID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChTVVBQT1JUU19JTlRMX0FQSSkge1xuICAgICAgICAgICAgdmFyIGR0Zl8xID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgbW9udGg6IHN0eWxlLCB0aW1lWm9uZTogJ3V0YycgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2UoMTIsIGZ1bmN0aW9uIChpKSB7IHJldHVybiBfdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhfdGhpcy5fZm9ybWF0KGR0Zl8xLCBuZXcgRGF0ZSgyMDE3LCBpLCAxKSkpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gREVGQVVMVF9NT05USF9OQU1FU1tzdHlsZV07XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmdldERheU9mV2Vla05hbWVzID0gZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChTVVBQT1JUU19JTlRMX0FQSSkge1xuICAgICAgICAgICAgdmFyIGR0Zl8yID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHsgd2Vla2RheTogc3R5bGUsIHRpbWVab25lOiAndXRjJyB9KTtcbiAgICAgICAgICAgIHJldHVybiByYW5nZSg3LCBmdW5jdGlvbiAoaSkgeyByZXR1cm4gX3RoaXMuc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoX3RoaXMuX2Zvcm1hdChkdGZfMiwgbmV3IERhdGUoMjAxNywgMCwgaSArIDEpKSk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBERUZBVUxUX0RBWV9PRl9XRUVLX05BTUVTW3N0eWxlXTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuZ2V0RGF0ZU5hbWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoU1VQUE9SVFNfSU5UTF9BUEkpIHtcbiAgICAgICAgICAgIHZhciBkdGZfMyA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IGRheTogJ251bWVyaWMnLCB0aW1lWm9uZTogJ3V0YycgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2UoMzEsIGZ1bmN0aW9uIChpKSB7IHJldHVybiBfdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhfdGhpcy5fZm9ybWF0KGR0Zl8zLCBuZXcgRGF0ZSgyMDE3LCAwLCBpICsgMSkpKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERFRkFVTFRfREFURV9OQU1FUztcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUudG9Jc284NjAxID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuaXNFcXVhbCA9IGZ1bmN0aW9uIChkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZUxlZnQpICYmIHRoaXMuaXNWYWxpZChkYXRlUmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUxlZnQuZ2V0VGltZSgpID09PSBkYXRlUmlnaHQuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmlzU2FtZURheSA9IGZ1bmN0aW9uIChkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZUxlZnQpICYmIHRoaXMuaXNWYWxpZChkYXRlUmlnaHQpKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZUxlZnRTdGFydE9mRGF5ID0gdGhpcy5jbG9uZShkYXRlTGVmdCk7XG4gICAgICAgICAgICB2YXIgZGF0ZVJpZ2h0U3RhcnRPZkRheSA9IHRoaXMuY2xvbmUoZGF0ZVJpZ2h0KTtcbiAgICAgICAgICAgIGRhdGVMZWZ0U3RhcnRPZkRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGRhdGVSaWdodFN0YXJ0T2ZEYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUxlZnRTdGFydE9mRGF5LmdldFRpbWUoKSA9PT0gZGF0ZVJpZ2h0U3RhcnRPZkRheS5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmludmFsaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5pc0RhdGVJbnN0YW5jZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGU7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmFkZENhbGVuZGFyWWVhcnMgPSBmdW5jdGlvbiAoZGF0ZSwgYW1vdW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyKTtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuYWRkQ2FsZW5kYXJNb250aHMgPSBmdW5jdGlvbiAoZGF0ZSwgYW1vdW50KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmNsb25lKGRhdGUpO1xuICAgICAgICBhbW91bnQgPSBOdW1iZXIoYW1vdW50KTtcbiAgICAgICAgdmFyIGRlc2lyZWRNb250aCA9IHJlc3VsdC5nZXRNb250aCgpICsgYW1vdW50O1xuICAgICAgICB2YXIgZGF0ZVdpdGhEZXNpcmVkTW9udGggPSBuZXcgRGF0ZSgwKTtcbiAgICAgICAgZGF0ZVdpdGhEZXNpcmVkTW9udGguc2V0RnVsbFllYXIocmVzdWx0LmdldEZ1bGxZZWFyKCksIGRlc2lyZWRNb250aCwgMSk7XG4gICAgICAgIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICB2YXIgZGF5c0luTW9udGggPSB0aGlzLmdldE51bURheXNJbk1vbnRoKGRhdGVXaXRoRGVzaXJlZE1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnNldE1vbnRoKGRlc2lyZWRNb250aCwgTWF0aC5taW4oZGF5c0luTW9udGgsIHJlc3VsdC5nZXREYXRlKCkpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuYWRkQ2FsZW5kYXJEYXlzID0gZnVuY3Rpb24gKGRhdGUsIGFtb3VudCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICAgICAgYW1vdW50ID0gTnVtYmVyKGFtb3VudCk7XG4gICAgICAgIHJlc3VsdC5zZXREYXRlKHJlc3VsdC5nZXREYXRlKCkgKyBhbW91bnQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5zZXRIb3VycyA9IGZ1bmN0aW9uIChkYXRlLCBhbW91bnQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgICAgIHJlc3VsdC5zZXRIb3VycyhhbW91bnQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5zZXRNaW51dGVzID0gZnVuY3Rpb24gKGRhdGUsIGFtb3VudCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICAgICAgcmVzdWx0LnNldE1pbnV0ZXMoYW1vdW50KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuc2V0U2Vjb25kcyA9IGZ1bmN0aW9uIChkYXRlLCBhbW91bnQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgICAgIHJlc3VsdC5zZXRTZWNvbmRzKGFtb3VudCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmNyZWF0ZURhdGUgPSBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgICAgIGlmIChob3VycyA9PT0gdm9pZCAwKSB7IGhvdXJzID0gMDsgfVxuICAgICAgICBpZiAobWludXRlcyA9PT0gdm9pZCAwKSB7IG1pbnV0ZXMgPSAwOyB9XG4gICAgICAgIGlmIChzZWNvbmRzID09PSB2b2lkIDApIHsgc2Vjb25kcyA9IDA7IH1cbiAgICAgICAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgbW9udGggaW5kZXggXFxcIlwiICsgbW9udGggKyBcIlxcXCIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBkYXRlIFxcXCJcIiArIGRhdGUgKyBcIlxcXCIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91cnMgPCAwIHx8IGhvdXJzID4gMjMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBob3VycyBcXFwiXCIgKyBob3VycyArIFwiXFxcIi4gSG91cnMgaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMjMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBtaW51dGVzIFxcXCJcIiArIG1pbnV0ZXMgKyBcIlxcXCIuIE1pbnV0ZXMgaGFzIHRvIGJldHdlZW4gMCBhbmQgNTkuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID4gNTkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBzZWNvbmRzIFxcXCJcIiArIHNlY29uZHMgKyBcIlxcXCIuIFNlY29uZHMgaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgNTkuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmNyZWF0ZURhdGVXaXRoT3ZlcmZsb3coeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgaWYgKHJlc3VsdC5nZXRNb250aCgpICE9PSBtb250aCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGRhdGUgXFxcIlwiICsgZGF0ZSArIFwiXFxcIiBmb3IgbW9udGggd2l0aCBpbmRleCBcXFwiXCIgKyBtb250aCArIFwiXFxcIi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlKHRoaXMuZ2V0WWVhcihkYXRlKSwgdGhpcy5nZXRNb250aChkYXRlKSwgdGhpcy5nZXREYXRlKGRhdGUpLCB0aGlzLmdldEhvdXJzKGRhdGUpLCB0aGlzLmdldE1pbnV0ZXMoZGF0ZSksIHRoaXMuZ2V0U2Vjb25kcyhkYXRlKSk7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChkYXRlLCBkaXNwbGF5Rm9ybWF0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSlNOYXRpdmVEYXRlOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU1VQUE9SVFNfSU5UTF9BUEkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGFtcERhdGUgJiYgKGRhdGUuZ2V0RnVsbFllYXIoKSA8IDEgfHwgZGF0ZS5nZXRGdWxsWWVhcigpID4gOTk5OSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGgubWF4KDEsIE1hdGgubWluKDk5OTksIGRhdGUuZ2V0RnVsbFllYXIoKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQgPSBfX2Fzc2lnbih7fSwgZGlzcGxheUZvcm1hdCwgeyB0aW1lWm9uZTogJ3V0YycgfSk7XG4gICAgICAgICAgICB2YXIgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGR0ZiwgZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGRhdGUudG9EYXRlU3RyaW5nKCkpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uICh2YWx1ZSwgcGFyc2VGb3JtYXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUoRGF0ZS5wYXJzZSh2YWx1ZSkpIDogbnVsbDtcbiAgICB9O1xuICAgIE5hdGl2ZURhdGVUaW1lQWRhcHRlci5wcm90b3R5cGUuZGVzZXJpYWxpemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChJU09fODYwMV9SRUdFWC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmRlc2VyaWFsaXplLmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5jcmVhdGVEYXRlV2l0aE92ZXJmbG93ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICAgICAgICBpZiAoaG91cnMgPT09IHZvaWQgMCkgeyBob3VycyA9IDA7IH1cbiAgICAgICAgaWYgKG1pbnV0ZXMgPT09IHZvaWQgMCkgeyBtaW51dGVzID0gMDsgfVxuICAgICAgICBpZiAoc2Vjb25kcyA9PT0gdm9pZCAwKSB7IHNlY29uZHMgPSAwOyB9XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICBpZiAoeWVhciA+PSAwICYmIHllYXIgPCAxMDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXRGdWxsWWVhcih0aGlzLmdldFllYXIocmVzdWx0KSAtIDE5MDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIucHJvdG90eXBlLnN0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXHUyMDBlXFx1MjAwZl0vZywgJycpO1xuICAgIH07XG4gICAgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyLnByb3RvdHlwZS5fZm9ybWF0ID0gZnVuY3Rpb24gKGR0ZiwgZGF0ZSkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgICAgICAgcmV0dXJuIGR0Zi5mb3JtYXQoZCk7XG4gICAgfTtcbiAgICBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5qZWN0YWJsZSgpLFxuICAgICAgICBfX3BhcmFtKDAsIE9wdGlvbmFsKCkpLCBfX3BhcmFtKDAsIEluamVjdChPV0xfREFURV9USU1FX0xPQ0FMRSkpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZywgUGxhdGZvcm1dKVxuICAgIF0sIE5hdGl2ZURhdGVUaW1lQWRhcHRlcik7XG4gICAgcmV0dXJuIE5hdGl2ZURhdGVUaW1lQWRhcHRlcjtcbn0oRGF0ZVRpbWVBZGFwdGVyKSk7XG5leHBvcnQgeyBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgfTtcbmV4cG9ydCB7IMm1MCB9O1xuIl19","import { InjectionToken } from '@angular/core';\nexport var OWL_DATE_TIME_FORMATS = new InjectionToken('OWL_DATE_TIME_FORMATS');\n","import { Subject } from 'rxjs';\nimport { inject, InjectionToken, LOCALE_ID } from '@angular/core';\nexport var OWL_DATE_TIME_LOCALE = new InjectionToken('OWL_DATE_TIME_LOCALE', {\n providedIn: 'root',\n factory: OWL_DATE_TIME_LOCALE_FACTORY,\n});\nexport function OWL_DATE_TIME_LOCALE_FACTORY() {\n return inject(LOCALE_ID);\n}\nexport var OWL_DATE_TIME_LOCALE_PROVIDER = { provide: OWL_DATE_TIME_LOCALE, useExisting: LOCALE_ID };\nvar DateTimeAdapter = (function () {\n function DateTimeAdapter() {\n this._localeChanges = new Subject();\n this.millisecondsInDay = 86400000;\n this.milliseondsInMinute = 60000;\n }\n Object.defineProperty(DateTimeAdapter.prototype, \"localeChanges\", {\n get: function () {\n return this._localeChanges;\n },\n enumerable: true,\n configurable: true\n });\n DateTimeAdapter.prototype.compare = function (first, second) {\n if (!this.isValid(first) || !this.isValid(second)) {\n throw Error('JSNativeDate: Cannot compare invalid dates.');\n }\n var dateFirst = this.clone(first);\n var dateSecond = this.clone(second);\n var diff = this.getTime(dateFirst) - this.getTime(dateSecond);\n if (diff < 0) {\n return -1;\n }\n else if (diff > 0) {\n return 1;\n }\n else {\n return diff;\n }\n };\n DateTimeAdapter.prototype.compareYear = function (first, second) {\n if (!this.isValid(first) || !this.isValid(second)) {\n throw Error('JSNativeDate: Cannot compare invalid dates.');\n }\n var yearLeft = this.getYear(first);\n var yearRight = this.getYear(second);\n var diff = yearLeft - yearRight;\n if (diff < 0) {\n return -1;\n }\n else if (diff > 0) {\n return 1;\n }\n else {\n return 0;\n }\n };\n DateTimeAdapter.prototype.deserialize = function (value) {\n if (value == null || this.isDateInstance(value) && this.isValid(value)) {\n return value;\n }\n return this.invalid();\n };\n DateTimeAdapter.prototype.setLocale = function (locale) {\n this.locale = locale;\n this._localeChanges.next();\n };\n DateTimeAdapter.prototype.clampDate = function (date, min, max) {\n if (min && this.compare(date, min) < 0) {\n return min;\n }\n if (max && this.compare(date, max) > 0) {\n return max;\n }\n return date;\n };\n return DateTimeAdapter;\n}());\nexport { DateTimeAdapter };\n","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './date-time-picker-intl.service';\nimport * as ɵngcc2 from './adapter/date-time-adapter.class';\nimport * as ɵngcc3 from './timer-box.component';\nimport * as ɵngcc4 from '@angular/common';\n\nfunction OwlTimerComponent_owl_date_time_timer_box_2_Template(rf, ctx) { if (rf & 1) {\n var _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-timer-box\", 1);\n ɵngcc0.ɵɵlistener(\"inputChange\", function OwlTimerComponent_owl_date_time_timer_box_2_Template_owl_date_time_timer_box_inputChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); var ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.setSecondValue($event); })(\"valueChange\", function OwlTimerComponent_owl_date_time_timer_box_2_Template_owl_date_time_timer_box_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); var ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.setSecondValue($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"showDivider\", true)(\"upBtnAriaLabel\", ctx_r0.upSecondButtonLabel)(\"downBtnAriaLabel\", ctx_r0.downSecondButtonLabel)(\"upBtnDisabled\", !ctx_r0.upSecondEnabled())(\"downBtnDisabled\", !ctx_r0.downSecondEnabled())(\"value\", ctx_r0.secondValue)(\"min\", 0)(\"max\", 59)(\"step\", ctx_r0.stepSecond)(\"inputLabel\", \"Second\");\n} }\nfunction OwlTimerComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n var _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 4);\n ɵngcc0.ɵɵelementStart(1, \"button\", 5);\n ɵngcc0.ɵɵlistener(\"click\", function OwlTimerComponent_div_3_Template_button_click_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); var ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.setMeridiem($event); });\n ɵngcc0.ɵɵelementStart(2, \"span\", 6);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r1.hour12ButtonLabel);\n} }\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Optional, Output } from '@angular/core';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { take } from 'rxjs/operators';\nvar OwlTimerComponent = (function () {\n function OwlTimerComponent(ngZone, elmRef, pickerIntl, cdRef, dateTimeAdapter) {\n this.ngZone = ngZone;\n this.elmRef = elmRef;\n this.pickerIntl = pickerIntl;\n this.cdRef = cdRef;\n this.dateTimeAdapter = dateTimeAdapter;\n this.isPM = false;\n this.stepHour = 1;\n this.stepMinute = 1;\n this.stepSecond = 1;\n this.selectedChange = new EventEmitter();\n }\n Object.defineProperty(OwlTimerComponent.prototype, \"pickerMoment\", {\n get: function () {\n return this._pickerMoment;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"minDateTime\", {\n get: function () {\n return this._minDateTime;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDateTime = this.getValidDate(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"maxDateTime\", {\n get: function () {\n return this._maxDateTime;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDateTime = this.getValidDate(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"hourValue\", {\n get: function () {\n return this.dateTimeAdapter.getHours(this.pickerMoment);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"hourBoxValue\", {\n get: function () {\n var hours = this.hourValue;\n if (!this.hour12Timer) {\n return hours;\n }\n else {\n if (hours === 0) {\n hours = 12;\n this.isPM = false;\n }\n else if (hours > 0 && hours < 12) {\n this.isPM = false;\n }\n else if (hours === 12) {\n this.isPM = true;\n }\n else if (hours > 12 && hours < 24) {\n hours = hours - 12;\n this.isPM = true;\n }\n return hours;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"minuteValue\", {\n get: function () {\n return this.dateTimeAdapter.getMinutes(this.pickerMoment);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"secondValue\", {\n get: function () {\n return this.dateTimeAdapter.getSeconds(this.pickerMoment);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"upHourButtonLabel\", {\n get: function () {\n return this.pickerIntl.upHourLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"downHourButtonLabel\", {\n get: function () {\n return this.pickerIntl.downHourLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"upMinuteButtonLabel\", {\n get: function () {\n return this.pickerIntl.upMinuteLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"downMinuteButtonLabel\", {\n get: function () {\n return this.pickerIntl.downMinuteLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"upSecondButtonLabel\", {\n get: function () {\n return this.pickerIntl.upSecondLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"downSecondButtonLabel\", {\n get: function () {\n return this.pickerIntl.downSecondLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"hour12ButtonLabel\", {\n get: function () {\n return this.isPM ? this.pickerIntl.hour12PMLabel : this.pickerIntl.hour12AMLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"owlDTTimerClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerComponent.prototype, \"owlDTTimeTabIndex\", {\n get: function () {\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n OwlTimerComponent.prototype.ngOnInit = function () {\n };\n OwlTimerComponent.prototype.focus = function () {\n var _this = this;\n this.ngZone.runOutsideAngular(function () {\n _this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(function () {\n _this.elmRef.nativeElement.focus();\n });\n });\n };\n OwlTimerComponent.prototype.setHourValueViaInput = function (hours) {\n if (this.hour12Timer && this.isPM && hours >= 1 && hours <= 11) {\n hours = hours + 12;\n }\n else if (this.hour12Timer && !this.isPM && hours === 12) {\n hours = 0;\n }\n this.setHourValue(hours);\n };\n OwlTimerComponent.prototype.setHourValue = function (hours) {\n var m = this.dateTimeAdapter.setHours(this.pickerMoment, hours);\n this.selectedChange.emit(m);\n this.cdRef.markForCheck();\n };\n OwlTimerComponent.prototype.setMinuteValue = function (minutes) {\n var m = this.dateTimeAdapter.setMinutes(this.pickerMoment, minutes);\n this.selectedChange.emit(m);\n this.cdRef.markForCheck();\n };\n OwlTimerComponent.prototype.setSecondValue = function (seconds) {\n var m = this.dateTimeAdapter.setSeconds(this.pickerMoment, seconds);\n this.selectedChange.emit(m);\n this.cdRef.markForCheck();\n };\n OwlTimerComponent.prototype.setMeridiem = function (event) {\n this.isPM = !this.isPM;\n var hours = this.hourValue;\n if (this.isPM) {\n hours = hours + 12;\n }\n else {\n hours = hours - 12;\n }\n if (hours >= 0 && hours <= 23) {\n this.setHourValue(hours);\n }\n this.cdRef.markForCheck();\n event.preventDefault();\n };\n OwlTimerComponent.prototype.upHourEnabled = function () {\n return !this.maxDateTime || this.compareHours(this.stepHour, this.maxDateTime) < 1;\n };\n OwlTimerComponent.prototype.downHourEnabled = function () {\n return !this.minDateTime || this.compareHours(-this.stepHour, this.minDateTime) > -1;\n };\n OwlTimerComponent.prototype.upMinuteEnabled = function () {\n return !this.maxDateTime || this.compareMinutes(this.stepMinute, this.maxDateTime) < 1;\n };\n OwlTimerComponent.prototype.downMinuteEnabled = function () {\n return !this.minDateTime || this.compareMinutes(-this.stepMinute, this.minDateTime) > -1;\n };\n OwlTimerComponent.prototype.upSecondEnabled = function () {\n return !this.maxDateTime || this.compareSeconds(this.stepSecond, this.maxDateTime) < 1;\n };\n OwlTimerComponent.prototype.downSecondEnabled = function () {\n return !this.minDateTime || this.compareSeconds(-this.stepSecond, this.minDateTime) > -1;\n };\n OwlTimerComponent.prototype.compareHours = function (amount, comparedDate) {\n var hours = this.dateTimeAdapter.getHours(this.pickerMoment) + amount;\n var result = this.dateTimeAdapter.setHours(this.pickerMoment, hours);\n return this.dateTimeAdapter.compare(result, comparedDate);\n };\n OwlTimerComponent.prototype.compareMinutes = function (amount, comparedDate) {\n var minutes = this.dateTimeAdapter.getMinutes(this.pickerMoment) + amount;\n var result = this.dateTimeAdapter.setMinutes(this.pickerMoment, minutes);\n return this.dateTimeAdapter.compare(result, comparedDate);\n };\n OwlTimerComponent.prototype.compareSeconds = function (amount, comparedDate) {\n var seconds = this.dateTimeAdapter.getSeconds(this.pickerMoment) + amount;\n var result = this.dateTimeAdapter.setSeconds(this.pickerMoment, seconds);\n return this.dateTimeAdapter.compare(result, comparedDate);\n };\n OwlTimerComponent.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlTimerComponent.prototype, \"pickerMoment\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlTimerComponent.prototype, \"minDateTime\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlTimerComponent.prototype, \"maxDateTime\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlTimerComponent.prototype, \"showSecondsTimer\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlTimerComponent.prototype, \"hour12Timer\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlTimerComponent.prototype, \"stepHour\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlTimerComponent.prototype, \"stepMinute\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlTimerComponent.prototype, \"stepSecond\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlTimerComponent.prototype, \"selectedChange\", void 0);\n __decorate([\n HostBinding('class.owl-dt-timer'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlTimerComponent.prototype, \"owlDTTimerClass\", null);\n __decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [])\n ], OwlTimerComponent.prototype, \"owlDTTimeTabIndex\", null);\n OwlTimerComponent = __decorate([ __param(4, Optional()),\n __metadata(\"design:paramtypes\", [NgZone,\n ElementRef,\n OwlDateTimeIntl,\n ChangeDetectorRef,\n DateTimeAdapter])\n ], OwlTimerComponent);\nOwlTimerComponent.ɵfac = function OwlTimerComponent_Factory(t) { return new (t || OwlTimerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.OwlDateTimeIntl), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateTimeAdapter, 8)); };\nOwlTimerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlTimerComponent, selectors: [[\"owl-date-time-timer\"]], hostVars: 3, hostBindings: function OwlTimerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.owlDTTimeTabIndex);\n ɵngcc0.ɵɵclassProp(\"owl-dt-timer\", ctx.owlDTTimerClass);\n } }, inputs: { stepHour: \"stepHour\", stepMinute: \"stepMinute\", stepSecond: \"stepSecond\", pickerMoment: \"pickerMoment\", minDateTime: \"minDateTime\", maxDateTime: \"maxDateTime\", showSecondsTimer: \"showSecondsTimer\", hour12Timer: \"hour12Timer\" }, outputs: { selectedChange: \"selectedChange\" }, exportAs: [\"owlDateTimeTimer\"], decls: 4, vars: 22, consts: [[3, \"upBtnAriaLabel\", \"downBtnAriaLabel\", \"upBtnDisabled\", \"downBtnDisabled\", \"boxValue\", \"value\", \"min\", \"max\", \"step\", \"inputLabel\", \"inputChange\", \"valueChange\"], [3, \"showDivider\", \"upBtnAriaLabel\", \"downBtnAriaLabel\", \"upBtnDisabled\", \"downBtnDisabled\", \"value\", \"min\", \"max\", \"step\", \"inputLabel\", \"inputChange\", \"valueChange\"], [3, \"showDivider\", \"upBtnAriaLabel\", \"downBtnAriaLabel\", \"upBtnDisabled\", \"downBtnDisabled\", \"value\", \"min\", \"max\", \"step\", \"inputLabel\", \"inputChange\", \"valueChange\", 4, \"ngIf\"], [\"class\", \"owl-dt-timer-hour12\", 4, \"ngIf\"], [1, \"owl-dt-timer-hour12\"], [\"type\", \"button\", \"tabindex\", \"0\", 1, \"owl-dt-control-button\", \"owl-dt-timer-hour12-box\", 3, \"click\"], [\"tabindex\", \"-1\", 1, \"owl-dt-control-button-content\"]], template: function OwlTimerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-timer-box\", 0);\n ɵngcc0.ɵɵlistener(\"inputChange\", function OwlTimerComponent_Template_owl_date_time_timer_box_inputChange_0_listener($event) { return ctx.setHourValueViaInput($event); })(\"valueChange\", function OwlTimerComponent_Template_owl_date_time_timer_box_valueChange_0_listener($event) { return ctx.setHourValue($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(1, \"owl-date-time-timer-box\", 1);\n ɵngcc0.ɵɵlistener(\"inputChange\", function OwlTimerComponent_Template_owl_date_time_timer_box_inputChange_1_listener($event) { return ctx.setMinuteValue($event); })(\"valueChange\", function OwlTimerComponent_Template_owl_date_time_timer_box_valueChange_1_listener($event) { return ctx.setMinuteValue($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, OwlTimerComponent_owl_date_time_timer_box_2_Template, 1, 10, \"owl-date-time-timer-box\", 2);\n ɵngcc0.ɵɵtemplate(3, OwlTimerComponent_div_3_Template, 4, 1, \"div\", 3);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"upBtnAriaLabel\", ctx.upHourButtonLabel)(\"downBtnAriaLabel\", ctx.downHourButtonLabel)(\"upBtnDisabled\", !ctx.upHourEnabled())(\"downBtnDisabled\", !ctx.downHourEnabled())(\"boxValue\", ctx.hourBoxValue)(\"value\", ctx.hourValue)(\"min\", 0)(\"max\", 23)(\"step\", ctx.stepHour)(\"inputLabel\", \"Hour\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"showDivider\", true)(\"upBtnAriaLabel\", ctx.upMinuteButtonLabel)(\"downBtnAriaLabel\", ctx.downMinuteButtonLabel)(\"upBtnDisabled\", !ctx.upMinuteEnabled())(\"downBtnDisabled\", !ctx.downMinuteEnabled())(\"value\", ctx.minuteValue)(\"min\", 0)(\"max\", 59)(\"step\", ctx.stepMinute)(\"inputLabel\", \"Minute\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showSecondsTimer);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hour12Timer);\n } }, directives: [ɵngcc3.OwlTimerBoxComponent, ɵngcc4.NgIf], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlTimerComponent, [{\n type: Component,\n args: [{\n exportAs: 'owlDateTimeTimer',\n selector: 'owl-date-time-timer',\n template: \"
\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.OwlDateTimeIntl }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.DateTimeAdapter, decorators: [{\n type: Optional\n }] }]; }, { stepHour: [{\n type: Input\n }], stepMinute: [{\n type: Input\n }], stepSecond: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], pickerMoment: [{\n type: Input\n }], minDateTime: [{\n type: Input\n }], maxDateTime: [{\n type: Input\n }], owlDTTimerClass: [{\n type: HostBinding,\n args: ['class.owl-dt-timer']\n }], owlDTTimeTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], showSecondsTimer: [{\n type: Input\n }], hour12Timer: [{\n type: Input\n }] }); })();\n return OwlTimerComponent;\n}());\nexport { OwlTimerComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyJ0aW1lci5jb21wb25lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FTTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQTBCO0FBQzFCO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufTtcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgTmdab25lLCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZUludGwgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xudmFyIE93bFRpbWVyQ29tcG9uZW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPd2xUaW1lckNvbXBvbmVudChuZ1pvbmUsIGVsbVJlZiwgcGlja2VySW50bCwgY2RSZWYsIGRhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5lbG1SZWYgPSBlbG1SZWY7XG4gICAgICAgIHRoaXMucGlja2VySW50bCA9IHBpY2tlckludGw7XG4gICAgICAgIHRoaXMuY2RSZWYgPSBjZFJlZjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIgPSBkYXRlVGltZUFkYXB0ZXI7XG4gICAgICAgIHRoaXMuaXNQTSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0ZXBIb3VyID0gMTtcbiAgICAgICAgdGhpcy5zdGVwTWludXRlID0gMTtcbiAgICAgICAgdGhpcy5zdGVwU2Vjb25kID0gMTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJNb21lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb21lbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlck1vbWVudCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5EYXRlVGltZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGVUaW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9taW5EYXRlVGltZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtYXhEYXRlVGltZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGVUaW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXhEYXRlVGltZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJob3VyVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnBpY2tlck1vbWVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwiaG91ckJveFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaG91cnMgPSB0aGlzLmhvdXJWYWx1ZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5ob3VyMTJUaW1lcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IDEyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUE0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91cnMgPiAwICYmIGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1BNID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUE0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChob3VycyA+IDEyICYmIGhvdXJzIDwgMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnMgPSBob3VycyAtIDEyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUE0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwibWludXRlVmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWNvbmRWYWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHModGhpcy5waWNrZXJNb21lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLCBcInVwSG91ckJ1dHRvbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnVwSG91ckxhYmVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLCBcImRvd25Ib3VyQnV0dG9uTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwuZG93bkhvdXJMYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJ1cE1pbnV0ZUJ1dHRvbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnVwTWludXRlTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwiZG93bk1pbnV0ZUJ1dHRvbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLmRvd25NaW51dGVMYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJ1cFNlY29uZEJ1dHRvbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLnVwU2Vjb25kTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwiZG93blNlY29uZEJ1dHRvbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLmRvd25TZWNvbmRMYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJob3VyMTJCdXR0b25MYWJlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNQTSA/IHRoaXMucGlja2VySW50bC5ob3VyMTJQTUxhYmVsIDogdGhpcy5waWNrZXJJbnRsLmhvdXIxMkFNTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRUaW1lckNsYXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVFRpbWVUYWJJbmRleFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUubmdPbkluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZWxtUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZS5zZXRIb3VyVmFsdWVWaWFJbnB1dCA9IGZ1bmN0aW9uIChob3Vycykge1xuICAgICAgICBpZiAodGhpcy5ob3VyMTJUaW1lciAmJiB0aGlzLmlzUE0gJiYgaG91cnMgPj0gMSAmJiBob3VycyA8PSAxMSkge1xuICAgICAgICAgICAgaG91cnMgPSBob3VycyArIDEyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaG91cjEyVGltZXIgJiYgIXRoaXMuaXNQTSAmJiBob3VycyA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXJzID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEhvdXJWYWx1ZShob3Vycyk7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUuc2V0SG91clZhbHVlID0gZnVuY3Rpb24gKGhvdXJzKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuc2V0SG91cnModGhpcy5waWNrZXJNb21lbnQsIGhvdXJzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KG0pO1xuICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG4gICAgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLnNldE1pbnV0ZVZhbHVlID0gZnVuY3Rpb24gKG1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5zZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50LCBtaW51dGVzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KG0pO1xuICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG4gICAgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLnNldFNlY29uZFZhbHVlID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5zZXRTZWNvbmRzKHRoaXMucGlja2VyTW9tZW50LCBzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KG0pO1xuICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG4gICAgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLnNldE1lcmlkaWVtID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNQTSA9ICF0aGlzLmlzUE07XG4gICAgICAgIHZhciBob3VycyA9IHRoaXMuaG91clZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc1BNKSB7XG4gICAgICAgICAgICBob3VycyA9IGhvdXJzICsgMTI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBob3VycyA9IGhvdXJzIC0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXJzID49IDAgJiYgaG91cnMgPD0gMjMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SG91clZhbHVlKGhvdXJzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLnVwSG91ckVuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tYXhEYXRlVGltZSB8fCB0aGlzLmNvbXBhcmVIb3Vycyh0aGlzLnN0ZXBIb3VyLCB0aGlzLm1heERhdGVUaW1lKSA8IDE7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUuZG93bkhvdXJFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubWluRGF0ZVRpbWUgfHwgdGhpcy5jb21wYXJlSG91cnMoLXRoaXMuc3RlcEhvdXIsIHRoaXMubWluRGF0ZVRpbWUpID4gLTE7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUudXBNaW51dGVFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubWF4RGF0ZVRpbWUgfHwgdGhpcy5jb21wYXJlTWludXRlcyh0aGlzLnN0ZXBNaW51dGUsIHRoaXMubWF4RGF0ZVRpbWUpIDwgMTtcbiAgICB9O1xuICAgIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZS5kb3duTWludXRlRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm1pbkRhdGVUaW1lIHx8IHRoaXMuY29tcGFyZU1pbnV0ZXMoLXRoaXMuc3RlcE1pbnV0ZSwgdGhpcy5taW5EYXRlVGltZSkgPiAtMTtcbiAgICB9O1xuICAgIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZS51cFNlY29uZEVuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tYXhEYXRlVGltZSB8fCB0aGlzLmNvbXBhcmVTZWNvbmRzKHRoaXMuc3RlcFNlY29uZCwgdGhpcy5tYXhEYXRlVGltZSkgPCAxO1xuICAgIH07XG4gICAgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLmRvd25TZWNvbmRFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubWluRGF0ZVRpbWUgfHwgdGhpcy5jb21wYXJlU2Vjb25kcygtdGhpcy5zdGVwU2Vjb25kLCB0aGlzLm1pbkRhdGVUaW1lKSA+IC0xO1xuICAgIH07XG4gICAgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLmNvbXBhcmVIb3VycyA9IGZ1bmN0aW9uIChhbW91bnQsIGNvbXBhcmVkRGF0ZSkge1xuICAgICAgICB2YXIgaG91cnMgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRIb3Vycyh0aGlzLnBpY2tlck1vbWVudCkgKyBhbW91bnQ7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5zZXRIb3Vycyh0aGlzLnBpY2tlck1vbWVudCwgaG91cnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShyZXN1bHQsIGNvbXBhcmVkRGF0ZSk7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUuY29tcGFyZU1pbnV0ZXMgPSBmdW5jdGlvbiAoYW1vdW50LCBjb21wYXJlZERhdGUpIHtcbiAgICAgICAgdmFyIG1pbnV0ZXMgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KSArIGFtb3VudDtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLnNldE1pbnV0ZXModGhpcy5waWNrZXJNb21lbnQsIG1pbnV0ZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShyZXN1bHQsIGNvbXBhcmVkRGF0ZSk7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUuY29tcGFyZVNlY29uZHMgPSBmdW5jdGlvbiAoYW1vdW50LCBjb21wYXJlZERhdGUpIHtcbiAgICAgICAgdmFyIHNlY29uZHMgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKHRoaXMucGlja2VyTW9tZW50KSArIGFtb3VudDtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLnNldFNlY29uZHModGhpcy5waWNrZXJNb21lbnQsIHNlY29uZHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShyZXN1bHQsIGNvbXBhcmVkRGF0ZSk7XG4gICAgfTtcbiAgICBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUuZ2V0VmFsaWREYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopKSA/IG9iaiA6IG51bGw7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyTW9tZW50XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5EYXRlVGltZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwibWF4RGF0ZVRpbWVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKVxuICAgIF0sIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzaG93U2Vjb25kc1RpbWVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKVxuICAgIF0sIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJob3VyMTJUaW1lclwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzdGVwSG91clwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIE93bFRpbWVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzdGVwTWludXRlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLCBcInN0ZXBTZWNvbmRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkQ2hhbmdlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtdGltZXInKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsVGltZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUVGltZXJDbGFzc1wiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE51bWJlciksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xUaW1lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRUaW1lVGFiSW5kZXhcIiwgbnVsbCk7XG4gICAgT3dsVGltZXJDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29tcG9uZW50KHtcbiAgICAgICAgICAgIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVUaW1lcicsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ293bC1kYXRlLXRpbWUtdGltZXInLFxuICAgICAgICAgICAgdGVtcGxhdGU6IFwiPG93bC1kYXRlLXRpbWUtdGltZXItYm94IFt1cEJ0bkFyaWFMYWJlbF09XFxcInVwSG91ckJ1dHRvbkxhYmVsXFxcIiBbZG93bkJ0bkFyaWFMYWJlbF09XFxcImRvd25Ib3VyQnV0dG9uTGFiZWxcXFwiIFt1cEJ0bkRpc2FibGVkXT1cXFwiIXVwSG91ckVuYWJsZWQoKVxcXCIgW2Rvd25CdG5EaXNhYmxlZF09XFxcIiFkb3duSG91ckVuYWJsZWQoKVxcXCIgW2JveFZhbHVlXT1cXFwiaG91ckJveFZhbHVlXFxcIiBbdmFsdWVdPVxcXCJob3VyVmFsdWVcXFwiIFttaW5dPVxcXCIwXFxcIiBbbWF4XT1cXFwiMjNcXFwiIFtzdGVwXT1cXFwic3RlcEhvdXJcXFwiIFtpbnB1dExhYmVsXT1cXFwiJ0hvdXInXFxcIiAoaW5wdXRDaGFuZ2UpPVxcXCJzZXRIb3VyVmFsdWVWaWFJbnB1dCgkZXZlbnQpXFxcIiAodmFsdWVDaGFuZ2UpPVxcXCJzZXRIb3VyVmFsdWUoJGV2ZW50KVxcXCI+PC9vd2wtZGF0ZS10aW1lLXRpbWVyLWJveD48b3dsLWRhdGUtdGltZS10aW1lci1ib3ggW3Nob3dEaXZpZGVyXT1cXFwidHJ1ZVxcXCIgW3VwQnRuQXJpYUxhYmVsXT1cXFwidXBNaW51dGVCdXR0b25MYWJlbFxcXCIgW2Rvd25CdG5BcmlhTGFiZWxdPVxcXCJkb3duTWludXRlQnV0dG9uTGFiZWxcXFwiIFt1cEJ0bkRpc2FibGVkXT1cXFwiIXVwTWludXRlRW5hYmxlZCgpXFxcIiBbZG93bkJ0bkRpc2FibGVkXT1cXFwiIWRvd25NaW51dGVFbmFibGVkKClcXFwiIFt2YWx1ZV09XFxcIm1pbnV0ZVZhbHVlXFxcIiBbbWluXT1cXFwiMFxcXCIgW21heF09XFxcIjU5XFxcIiBbc3RlcF09XFxcInN0ZXBNaW51dGVcXFwiIFtpbnB1dExhYmVsXT1cXFwiJ01pbnV0ZSdcXFwiIChpbnB1dENoYW5nZSk9XFxcInNldE1pbnV0ZVZhbHVlKCRldmVudClcXFwiICh2YWx1ZUNoYW5nZSk9XFxcInNldE1pbnV0ZVZhbHVlKCRldmVudClcXFwiPjwvb3dsLWRhdGUtdGltZS10aW1lci1ib3g+PG93bC1kYXRlLXRpbWUtdGltZXItYm94ICpuZ0lmPVxcXCJzaG93U2Vjb25kc1RpbWVyXFxcIiBbc2hvd0RpdmlkZXJdPVxcXCJ0cnVlXFxcIiBbdXBCdG5BcmlhTGFiZWxdPVxcXCJ1cFNlY29uZEJ1dHRvbkxhYmVsXFxcIiBbZG93bkJ0bkFyaWFMYWJlbF09XFxcImRvd25TZWNvbmRCdXR0b25MYWJlbFxcXCIgW3VwQnRuRGlzYWJsZWRdPVxcXCIhdXBTZWNvbmRFbmFibGVkKClcXFwiIFtkb3duQnRuRGlzYWJsZWRdPVxcXCIhZG93blNlY29uZEVuYWJsZWQoKVxcXCIgW3ZhbHVlXT1cXFwic2Vjb25kVmFsdWVcXFwiIFttaW5dPVxcXCIwXFxcIiBbbWF4XT1cXFwiNTlcXFwiIFtzdGVwXT1cXFwic3RlcFNlY29uZFxcXCIgW2lucHV0TGFiZWxdPVxcXCInU2Vjb25kJ1xcXCIgKGlucHV0Q2hhbmdlKT1cXFwic2V0U2Vjb25kVmFsdWUoJGV2ZW50KVxcXCIgKHZhbHVlQ2hhbmdlKT1cXFwic2V0U2Vjb25kVmFsdWUoJGV2ZW50KVxcXCI+PC9vd2wtZGF0ZS10aW1lLXRpbWVyLWJveD48ZGl2ICpuZ0lmPVxcXCJob3VyMTJUaW1lclxcXCIgY2xhc3M9XFxcIm93bC1kdC10aW1lci1ob3VyMTJcXFwiPjxidXR0b24gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtdGltZXItaG91cjEyLWJveFxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiB0YWJpbmRleD1cXFwiMFxcXCIgKGNsaWNrKT1cXFwic2V0TWVyaWRpZW0oJGV2ZW50KVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPnt7aG91cjEyQnV0dG9uTGFiZWx9fTwvc3Bhbj48L2J1dHRvbj48L2Rpdj5cIixcbiAgICAgICAgICAgIHN0eWxlczogW1wiXCJdLFxuICAgICAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgfSksXG4gICAgICAgIF9fcGFyYW0oNCwgT3B0aW9uYWwoKSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbTmdab25lLFxuICAgICAgICAgICAgRWxlbWVudFJlZixcbiAgICAgICAgICAgIE93bERhdGVUaW1lSW50bCxcbiAgICAgICAgICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgRGF0ZVRpbWVBZGFwdGVyXSlcbiAgICBdLCBPd2xUaW1lckNvbXBvbmVudCk7XG4gICAgcmV0dXJuIE93bFRpbWVyQ29tcG9uZW50O1xufSgpKTtcbmV4cG9ydCB7IE93bFRpbWVyQ29tcG9uZW50IH07XG4iXX0=","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from './numberedFixLen.pipe';\n\nfunction OwlTimerBoxComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 10);\n} }\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nvar OwlTimerBoxComponent = (function () {\n function OwlTimerBoxComponent() {\n this.showDivider = false;\n this.step = 1;\n this.valueChange = new EventEmitter();\n this.inputChange = new EventEmitter();\n this.inputStream = new Subject();\n this.inputStreamSub = Subscription.EMPTY;\n }\n Object.defineProperty(OwlTimerBoxComponent.prototype, \"displayValue\", {\n get: function () {\n return this.boxValue || this.value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlTimerBoxComponent.prototype, \"owlDTTimerBoxClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n OwlTimerBoxComponent.prototype.ngOnInit = function () {\n var _this = this;\n this.inputStreamSub = this.inputStream.pipe(debounceTime(500), distinctUntilChanged()).subscribe(function (val) {\n if (val) {\n var inputValue = coerceNumberProperty(val, 0);\n _this.updateValueViaInput(inputValue);\n }\n });\n };\n OwlTimerBoxComponent.prototype.ngOnDestroy = function () {\n this.inputStreamSub.unsubscribe();\n };\n OwlTimerBoxComponent.prototype.upBtnClicked = function () {\n this.updateValue(this.value + this.step);\n };\n OwlTimerBoxComponent.prototype.downBtnClicked = function () {\n this.updateValue(this.value - this.step);\n };\n OwlTimerBoxComponent.prototype.handleInputChange = function (val) {\n this.inputStream.next(val);\n };\n OwlTimerBoxComponent.prototype.updateValue = function (value) {\n this.valueChange.emit(value);\n };\n OwlTimerBoxComponent.prototype.updateValueViaInput = function (value) {\n if (value > this.max || value < this.min) {\n return;\n }\n this.inputChange.emit(value);\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlTimerBoxComponent.prototype, \"showDivider\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlTimerBoxComponent.prototype, \"upBtnAriaLabel\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlTimerBoxComponent.prototype, \"upBtnDisabled\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlTimerBoxComponent.prototype, \"downBtnAriaLabel\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlTimerBoxComponent.prototype, \"downBtnDisabled\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], OwlTimerBoxComponent.prototype, \"boxValue\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], OwlTimerBoxComponent.prototype, \"value\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], OwlTimerBoxComponent.prototype, \"min\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], OwlTimerBoxComponent.prototype, \"max\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlTimerBoxComponent.prototype, \"step\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlTimerBoxComponent.prototype, \"inputLabel\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlTimerBoxComponent.prototype, \"valueChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlTimerBoxComponent.prototype, \"inputChange\", void 0);\n __decorate([\n HostBinding('class.owl-dt-timer-box'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlTimerBoxComponent.prototype, \"owlDTTimerBoxClass\", null);\n OwlTimerBoxComponent = __decorate([ __metadata(\"design:paramtypes\", [])\n ], OwlTimerBoxComponent);\nOwlTimerBoxComponent.ɵfac = function OwlTimerBoxComponent_Factory(t) { return new (t || OwlTimerBoxComponent)(); };\nOwlTimerBoxComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlTimerBoxComponent, selectors: [[\"owl-date-time-timer-box\"]], hostVars: 2, hostBindings: function OwlTimerBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-timer-box\", ctx.owlDTTimerBoxClass);\n } }, inputs: { showDivider: \"showDivider\", step: \"step\", upBtnAriaLabel: \"upBtnAriaLabel\", upBtnDisabled: \"upBtnDisabled\", downBtnAriaLabel: \"downBtnAriaLabel\", downBtnDisabled: \"downBtnDisabled\", boxValue: \"boxValue\", value: \"value\", min: \"min\", max: \"max\", inputLabel: \"inputLabel\" }, outputs: { valueChange: \"valueChange\", inputChange: \"inputChange\" }, exportAs: [\"owlDateTimeTimerBox\"], decls: 15, vars: 10, consts: [[\"class\", \"owl-dt-timer-divider\", \"aria-hidden\", \"true\", 4, \"ngIf\"], [\"type\", \"button\", \"tabindex\", \"-1\", 1, \"owl-dt-control-button\", \"owl-dt-control-arrow-button\", 3, \"disabled\", \"click\"], [\"tabindex\", \"-1\", 1, \"owl-dt-control-button-content\"], [\"xmlns\", \"http://www.w3.org/2000/svg\", 0, \"xmlns\", \"xlink\", \"http://www.w3.org/1999/xlink\", \"version\", \"1.1\", \"x\", \"0px\", \"y\", \"0px\", \"viewBox\", \"0 0 451.847 451.846\", 0, \"xml\", \"space\", \"preserve\", \"width\", \"100%\", \"height\", \"100%\", 2, \"enable-background\", \"new 0 0 451.847 451.846\"], [\"d\", \"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\"], [1, \"owl-dt-timer-content\"], [\"maxlength\", \"2\", 1, \"owl-dt-timer-input\", 3, \"value\", \"input\"], [\"valueInput\", \"\"], [1, \"owl-hidden-accessible\"], [\"d\", \"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\"], [\"aria-hidden\", \"true\", 1, \"owl-dt-timer-divider\"]], template: function OwlTimerBoxComponent_Template(rf, ctx) { if (rf & 1) {\n var _r2 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, OwlTimerBoxComponent_div_0_Template, 1, 0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function OwlTimerBoxComponent_Template_button_click_1_listener() { return ctx.upBtnClicked(); });\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(3, \"svg\", 3);\n ɵngcc0.ɵɵelement(4, \"path\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelementStart(5, \"label\", 5);\n ɵngcc0.ɵɵelementStart(6, \"input\", 6, 7);\n ɵngcc0.ɵɵlistener(\"input\", function OwlTimerBoxComponent_Template_input_input_6_listener() { ɵngcc0.ɵɵrestoreView(_r2); var _r1 = ɵngcc0.ɵɵreference(7); return ctx.handleInputChange(_r1.value); });\n ɵngcc0.ɵɵpipe(8, \"numberFixedLen\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"span\", 8);\n ɵngcc0.ɵɵtext(10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function OwlTimerBoxComponent_Template_button_click_11_listener() { return ctx.downBtnClicked(); });\n ɵngcc0.ɵɵelementStart(12, \"span\", 2);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(13, \"svg\", 3);\n ɵngcc0.ɵɵelement(14, \"path\", 9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showDivider);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.upBtnDisabled);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.upBtnAriaLabel);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"value\", ɵngcc0.ɵɵpipeBind2(8, 7, ctx.displayValue, 2));\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx.inputLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.downBtnDisabled);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.downBtnAriaLabel);\n } }, directives: [ɵngcc1.NgIf], pipes: [ɵngcc2.NumberFixedLenPipe], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlTimerBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'owlDateTimeTimerBox',\n selector: 'owl-date-time-timer-box',\n template: \"
\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return []; }, { showDivider: [{\n type: Input\n }], step: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], inputChange: [{\n type: Output\n }], owlDTTimerBoxClass: [{\n type: HostBinding,\n args: ['class.owl-dt-timer-box']\n }], upBtnAriaLabel: [{\n type: Input\n }], upBtnDisabled: [{\n type: Input\n }], downBtnAriaLabel: [{\n type: Input\n }], downBtnDisabled: [{\n type: Input\n }], boxValue: [{\n type: Input\n }], value: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], inputLabel: [{\n type: Input\n }] }); })();\n return OwlTimerBoxComponent;\n}());\nexport { OwlTimerBoxComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXItYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsidGltZXItYm94LmNvbXBvbmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBU087QUFDUDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUE2QjtBQUM3QjtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xudmFyIE93bFRpbWVyQm94Q29tcG9uZW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPd2xUaW1lckJveENvbXBvbmVudCgpIHtcbiAgICAgICAgdGhpcy5zaG93RGl2aWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmlucHV0U3RyZWFtID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5pbnB1dFN0cmVhbVN1YiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJkaXNwbGF5VmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJveFZhbHVlIHx8IHRoaXMudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xUaW1lckJveENvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRUaW1lckJveENsYXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLm5nT25Jbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmlucHV0U3RyZWFtU3ViID0gdGhpcy5pbnB1dFN0cmVhbS5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICAgIHZhciBpbnB1dFZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsLCAwKTtcbiAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGVWYWx1ZVZpYUlucHV0KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZS5uZ09uRGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbnB1dFN0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLnVwQnRuQ2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnZhbHVlICsgdGhpcy5zdGVwKTtcbiAgICB9O1xuICAgIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZS5kb3duQnRuQ2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnZhbHVlIC0gdGhpcy5zdGVwKTtcbiAgICB9O1xuICAgIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVJbnB1dENoYW5nZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdGhpcy5pbnB1dFN0cmVhbS5uZXh0KHZhbCk7XG4gICAgfTtcbiAgICBPd2xUaW1lckJveENvbXBvbmVudC5wcm90b3R5cGUudXBkYXRlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9O1xuICAgIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZS51cGRhdGVWYWx1ZVZpYUlucHV0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4IHx8IHZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLCBcInNob3dEaXZpZGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLCBcInVwQnRuQXJpYUxhYmVsXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKVxuICAgIF0sIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJ1cEJ0bkRpc2FibGVkXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLCBcImRvd25CdG5BcmlhTGFiZWxcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLCBcImRvd25CdG5EaXNhYmxlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgTnVtYmVyKVxuICAgIF0sIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJib3hWYWx1ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgTnVtYmVyKVxuICAgIF0sIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgTnVtYmVyKVxuICAgIF0sIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE51bWJlcilcbiAgICBdLCBPd2xUaW1lckJveENvbXBvbmVudC5wcm90b3R5cGUsIFwibWF4XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLCBcInN0ZXBcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcbiAgICBdLCBPd2xUaW1lckJveENvbXBvbmVudC5wcm90b3R5cGUsIFwiaW5wdXRMYWJlbFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xUaW1lckJveENvbXBvbmVudC5wcm90b3R5cGUsIFwidmFsdWVDaGFuZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQucHJvdG90eXBlLCBcImlucHV0Q2hhbmdlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtdGltZXItYm94JyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bFRpbWVyQm94Q29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVFRpbWVyQm94Q2xhc3NcIiwgbnVsbCk7XG4gICAgT3dsVGltZXJCb3hDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29tcG9uZW50KHtcbiAgICAgICAgICAgIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVUaW1lckJveCcsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ293bC1kYXRlLXRpbWUtdGltZXItYm94JyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBcIjxkaXYgKm5nSWY9XFxcInNob3dEaXZpZGVyXFxcIiBjbGFzcz1cXFwib3dsLWR0LXRpbWVyLWRpdmlkZXJcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIj48L2Rpdj48YnV0dG9uIGNsYXNzPVxcXCJvd2wtZHQtY29udHJvbC1idXR0b24gb3dsLWR0LWNvbnRyb2wtYXJyb3ctYnV0dG9uXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIHRhYmluZGV4PVxcXCItMVxcXCIgW2Rpc2FibGVkXT1cXFwidXBCdG5EaXNhYmxlZFxcXCIgW2F0dHIuYXJpYS1sYWJlbF09XFxcInVwQnRuQXJpYUxhYmVsXFxcIiAoY2xpY2spPVxcXCJ1cEJ0bkNsaWNrZWQoKVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XFxcIlNWRyBBcnJvdyBVcFxcXCI+IC0tPiA8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgeG1sbnM6eGxpbms9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeD1cXFwiMHB4XFxcIiB5PVxcXCIwcHhcXFwiIHZpZXdCb3g9XFxcIjAgMCA0NTEuODQ3IDQ1MS44NDZcXFwiIHN0eWxlPVxcXCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ1MS44NDcgNDUxLjg0NjtcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIiBoZWlnaHQ9XFxcIjEwMCVcXFwiPjxwYXRoIGQ9XFxcIk0yNDguMjkyLDEwNi40MDZsMTk0LjI4MSwxOTQuMjljMTIuMzY1LDEyLjM1OSwxMi4zNjUsMzIuMzkxLDAsNDQuNzQ0Yy0xMi4zNTQsMTIuMzU0LTMyLjM5MSwxMi4zNTQtNDQuNzQ0LDBcXG4gICAgICAgICAgICAgICAgICAgICAgICBMMjI1LjkyMywxNzMuNTI5TDU0LjAxOCwzNDUuNDRjLTEyLjM2LDEyLjM1NC0zMi4zOTUsMTIuMzU0LTQ0Ljc0OCwwYy0xMi4zNTktMTIuMzU0LTEyLjM1OS0zMi4zOTEsMC00NC43NUwyMDMuNTU0LDEwNi40XFxuICAgICAgICAgICAgICAgICAgICAgICAgYzYuMTgtNi4xNzQsMTQuMjcxLTkuMjU5LDIyLjM2OS05LjI1OUMyMzQuMDE4LDk3LjE0MSwyNDIuMTE1LDEwMC4yMzIsMjQ4LjI5MiwxMDYuNDA2elxcXCIvPjwvc3ZnPjwhLS0gPC9lZGl0b3ItZm9sZD4gLS0+PC9zcGFuPjwvYnV0dG9uPjxsYWJlbCBjbGFzcz1cXFwib3dsLWR0LXRpbWVyLWNvbnRlbnRcXFwiPjxpbnB1dCBjbGFzcz1cXFwib3dsLWR0LXRpbWVyLWlucHV0XFxcIiBtYXhsZW5ndGg9XFxcIjJcXFwiIFt2YWx1ZV09XFxcImRpc3BsYXlWYWx1ZSB8IG51bWJlckZpeGVkTGVuIDogMlxcXCIgKGlucHV0KT1cXFwiaGFuZGxlSW5wdXRDaGFuZ2UodmFsdWVJbnB1dC52YWx1ZSlcXFwiICN2YWx1ZUlucHV0PiA8c3BhbiBjbGFzcz1cXFwib3dsLWhpZGRlbi1hY2Nlc3NpYmxlXFxcIj57e2lucHV0TGFiZWx9fTwvc3Bhbj48L2xhYmVsPjxidXR0b24gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udHJvbC1hcnJvdy1idXR0b25cXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIiBbZGlzYWJsZWRdPVxcXCJkb3duQnRuRGlzYWJsZWRcXFwiIFthdHRyLmFyaWEtbGFiZWxdPVxcXCJkb3duQnRuQXJpYUxhYmVsXFxcIiAoY2xpY2spPVxcXCJkb3duQnRuQ2xpY2tlZCgpXFxcIj48c3BhbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cXFwiU1ZHIEFycm93IERvd25cXFwiPiAtLT4gPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHg9XFxcIjBweFxcXCIgeT1cXFwiMHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgNDUxLjg0NyA0NTEuODQ2XFxcIiBzdHlsZT1cXFwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NTEuODQ3IDQ1MS44NDY7XFxcIiB4bWw6c3BhY2U9XFxcInByZXNlcnZlXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgaGVpZ2h0PVxcXCIxMDAlXFxcIj48cGF0aCBkPVxcXCJNMjI1LjkyMywzNTQuNzA2Yy04LjA5OCwwLTE2LjE5NS0zLjA5Mi0yMi4zNjktOS4yNjNMOS4yNywxNTEuMTU3Yy0xMi4zNTktMTIuMzU5LTEyLjM1OS0zMi4zOTcsMC00NC43NTFcXG4gICAgICAgICAgICAgICAgICAgICAgICBjMTIuMzU0LTEyLjM1NCwzMi4zODgtMTIuMzU0LDQ0Ljc0OCwwbDE3MS45MDUsMTcxLjkxNWwxNzEuOTA2LTE3MS45MDljMTIuMzU5LTEyLjM1NCwzMi4zOTEtMTIuMzU0LDQ0Ljc0NCwwXFxuICAgICAgICAgICAgICAgICAgICAgICAgYzEyLjM2NSwxMi4zNTQsMTIuMzY1LDMyLjM5MiwwLDQ0Ljc1MUwyNDguMjkyLDM0NS40NDlDMjQyLjExNSwzNTEuNjIxLDIzNC4wMTgsMzU0LjcwNiwyMjUuOTIzLDM1NC43MDZ6XFxcIi8+PC9zdmc+PCEtLSA8L2VkaXRvci1mb2xkPiAtLT48L3NwYW4+PC9idXR0b24+XCIsXG4gICAgICAgICAgICBzdHlsZXM6IFtcIlwiXSxcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgIH0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsVGltZXJCb3hDb21wb25lbnQpO1xuICAgIHJldHVybiBPd2xUaW1lckJveENvbXBvbmVudDtcbn0oKSk7XG5leHBvcnQgeyBPd2xUaW1lckJveENvbXBvbmVudCB9O1xuIl19","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './date-time-picker-intl.service';\nimport * as ɵngcc2 from './adapter/date-time-adapter.class';\nimport * as ɵngcc3 from '@angular/cdk/a11y';\nimport * as ɵngcc4 from '@angular/common';\nimport * as ɵngcc5 from './calendar.component';\nimport * as ɵngcc6 from './timer.component';\n\nfunction OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template(rf, ctx) { if (rf & 1) {\n var _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-calendar\", 5);\n ɵngcc0.ɵɵlistener(\"pickerMomentChange\", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_pickerMomentChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); var ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.pickerMoment = $event; })(\"yearSelected\", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_yearSelected_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); var ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.picker.selectYear($event); })(\"monthSelected\", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_monthSelected_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); var ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.picker.selectMonth($event); })(\"selectedChange\", function OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template_owl_date_time_calendar_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); var ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.dateSelected($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"firstDayOfWeek\", ctx_r0.picker.firstDayOfWeek)(\"pickerMoment\", ctx_r0.pickerMoment)(\"selected\", ctx_r0.picker.selected)(\"selecteds\", ctx_r0.picker.selecteds)(\"selectMode\", ctx_r0.picker.selectMode)(\"minDate\", ctx_r0.picker.minDateTime)(\"maxDate\", ctx_r0.picker.maxDateTime)(\"dateFilter\", ctx_r0.picker.dateTimeFilter)(\"startView\", ctx_r0.picker.startView)(\"hideOtherMonths\", ctx_r0.picker.hideOtherMonths);\n} }\nfunction OwlDateTimeContainerComponent_owl_date_time_timer_2_Template(rf, ctx) { if (rf & 1) {\n var _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-timer\", 6);\n ɵngcc0.ɵɵlistener(\"selectedChange\", function OwlDateTimeContainerComponent_owl_date_time_timer_2_Template_owl_date_time_timer_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r10); var ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.timeSelected($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"pickerMoment\", ctx_r1.pickerMoment)(\"minDateTime\", ctx_r1.picker.minDateTime)(\"maxDateTime\", ctx_r1.picker.maxDateTime)(\"showSecondsTimer\", ctx_r1.picker.showSecondsTimer)(\"hour12Timer\", ctx_r1.picker.hour12Timer)(\"stepHour\", ctx_r1.picker.stepHour)(\"stepMinute\", ctx_r1.picker.stepMinute)(\"stepSecond\", ctx_r1.picker.stepSecond);\n} }\nvar _c0 = function (a0) { return { \"owl-dt-container-info-active\": a0 }; };\nfunction OwlDateTimeContainerComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n var _r14 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 7);\n ɵngcc0.ɵɵelementStart(1, \"div\", 8, 9);\n ɵngcc0.ɵɵlistener(\"click\", function OwlDateTimeContainerComponent_div_3_Template_div_click_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r14); var ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.handleClickOnInfoGroup($event, 0); })(\"keydown\", function OwlDateTimeContainerComponent_div_3_Template_div_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r14); var _r12 = ɵngcc0.ɵɵreference(9); var ctx_r15 = ɵngcc0.ɵɵnextContext(); return ctx_r15.handleKeydownOnInfoGroup($event, _r12, 0); });\n ɵngcc0.ɵɵelementStart(3, \"span\", 10);\n ɵngcc0.ɵɵelementStart(4, \"span\", 11);\n ɵngcc0.ɵɵtext(5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"span\", 12);\n ɵngcc0.ɵɵtext(7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(8, \"div\", 13, 14);\n ɵngcc0.ɵɵlistener(\"click\", function OwlDateTimeContainerComponent_div_3_Template_div_click_8_listener($event) { ɵngcc0.ɵɵrestoreView(_r14); var ctx_r16 = ɵngcc0.ɵɵnextContext(); return ctx_r16.handleClickOnInfoGroup($event, 1); })(\"keydown\", function OwlDateTimeContainerComponent_div_3_Template_div_keydown_8_listener($event) { ɵngcc0.ɵɵrestoreView(_r14); var _r11 = ɵngcc0.ɵɵreference(2); var ctx_r17 = ɵngcc0.ɵɵnextContext(); return ctx_r17.handleKeydownOnInfoGroup($event, _r11, 1); });\n ɵngcc0.ɵɵelementStart(10, \"span\", 10);\n ɵngcc0.ɵɵelementStart(11, \"span\", 11);\n ɵngcc0.ɵɵtext(12);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(13, \"span\", 12);\n ɵngcc0.ɵɵtext(14);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx_r2.activeSelectedIndex === 0 ? 0 : -1)(\"ngClass\", ɵngcc0.ɵɵpureFunction1(10, _c0, ctx_r2.activeSelectedIndex === 0));\n ɵngcc0.ɵɵattribute(\"aria-checked\", ctx_r2.activeSelectedIndex === 0);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate1(\"\", ctx_r2.fromLabel, \":\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r2.fromFormattedValue);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx_r2.activeSelectedIndex === 1 ? 0 : -1)(\"ngClass\", ɵngcc0.ɵɵpureFunction1(12, _c0, ctx_r2.activeSelectedIndex === 1));\n ɵngcc0.ɵɵattribute(\"aria-checked\", ctx_r2.activeSelectedIndex === 1);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate1(\"\", ctx_r2.toLabel, \":\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r2.toFormattedValue);\n} }\nfunction OwlDateTimeContainerComponent_div_4_Template(rf, ctx) { if (rf & 1) {\n var _r19 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 15);\n ɵngcc0.ɵɵelementStart(1, \"button\", 16);\n ɵngcc0.ɵɵlistener(\"click\", function OwlDateTimeContainerComponent_div_4_Template_button_click_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r19); var ctx_r18 = ɵngcc0.ɵɵnextContext(); return ctx_r18.onCancelClicked($event); });\n ɵngcc0.ɵɵelementStart(2, \"span\", 17);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"button\", 16);\n ɵngcc0.ɵɵlistener(\"click\", function OwlDateTimeContainerComponent_div_4_Template_button_click_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r19); var ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.onSetClicked($event); });\n ɵngcc0.ɵɵelementStart(5, \"span\", 17);\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r3.cancelLabel);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r3.setLabel);\n} }\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Optional, ViewChild } from '@angular/core';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { OwlCalendarComponent } from './calendar.component';\nimport { OwlTimerComponent } from './timer.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { Subject } from 'rxjs';\nimport { owlDateTimePickerAnimations } from './date-time-picker.animations';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nvar OwlDateTimeContainerComponent = (function () {\n function OwlDateTimeContainerComponent(cdRef, elmRef, pickerIntl, dateTimeAdapter) {\n this.cdRef = cdRef;\n this.elmRef = elmRef;\n this.pickerIntl = pickerIntl;\n this.dateTimeAdapter = dateTimeAdapter;\n this.activeSelectedIndex = 0;\n this.hidePicker$ = new Subject();\n this.confirmSelected$ = new Subject();\n this.pickerOpened$ = new Subject();\n }\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"hidePickerStream\", {\n get: function () {\n return this.hidePicker$.asObservable();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"confirmSelectedStream\", {\n get: function () {\n return this.confirmSelected$.asObservable();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"pickerOpenedStream\", {\n get: function () {\n return this.pickerOpened$.asObservable();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"pickerMoment\", {\n get: function () {\n return this._clamPickerMoment;\n },\n set: function (value) {\n if (value) {\n this._clamPickerMoment = this.dateTimeAdapter.clampDate(value, this.picker.minDateTime, this.picker.maxDateTime);\n }\n this.cdRef.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"pickerType\", {\n get: function () {\n return this.picker.pickerType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"cancelLabel\", {\n get: function () {\n return this.pickerIntl.cancelBtnLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"setLabel\", {\n get: function () {\n return this.pickerIntl.setBtnLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"fromLabel\", {\n get: function () {\n return this.pickerIntl.rangeFromLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"toLabel\", {\n get: function () {\n return this.pickerIntl.rangeToLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"fromFormattedValue\", {\n get: function () {\n var value = this.picker.selecteds[0];\n return value ? this.dateTimeAdapter.format(value, this.picker.formatString) : '';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"toFormattedValue\", {\n get: function () {\n var value = this.picker.selecteds[1];\n return value ? this.dateTimeAdapter.format(value, this.picker.formatString) : '';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"showControlButtons\", {\n get: function () {\n return this.picker.pickerMode === 'dialog' ||\n (this.picker.pickerType !== 'calendar' && this.picker.pickerMode !== 'inline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"containerElm\", {\n get: function () {\n return this.elmRef.nativeElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTContainerClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTPopupContainerClass\", {\n get: function () {\n return this.picker.pickerMode === 'popup';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTDialogContainerClass\", {\n get: function () {\n return this.picker.pickerMode === 'dialog';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTInlineContainerClass\", {\n get: function () {\n return this.picker.pickerMode === 'inline';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTContainerDisabledClass\", {\n get: function () {\n return this.picker.disabled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTContainerId\", {\n get: function () {\n return this.picker.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeContainerComponent.prototype, \"owlDTContainerAnimation\", {\n get: function () {\n return this.picker.pickerMode === 'inline' ? '' : 'enter';\n },\n enumerable: true,\n configurable: true\n });\n OwlDateTimeContainerComponent.prototype.ngOnInit = function () {\n };\n OwlDateTimeContainerComponent.prototype.ngAfterContentInit = function () {\n this.initPicker();\n };\n OwlDateTimeContainerComponent.prototype.ngAfterViewInit = function () {\n this.focusPicker();\n };\n OwlDateTimeContainerComponent.prototype.handleContainerAnimationDone = function (event) {\n var toState = event.toState;\n if (toState === 'enter') {\n this.pickerOpened$.next();\n }\n };\n OwlDateTimeContainerComponent.prototype.dateSelected = function (date) {\n var result;\n if (this.picker.isInSingleMode) {\n result = this.dateSelectedInSingleMode(date);\n if (result) {\n this.pickerMoment = result;\n this.picker.select(result);\n }\n else {\n if (this.pickerType === 'calendar') {\n this.hidePicker$.next(null);\n }\n }\n return;\n }\n if (this.picker.isInRangeMode) {\n result = this.dateSelectedInRangeMode(date);\n if (result) {\n this.pickerMoment = result[this.activeSelectedIndex];\n this.picker.select(result);\n }\n }\n };\n OwlDateTimeContainerComponent.prototype.timeSelected = function (time) {\n this.pickerMoment = this.dateTimeAdapter.clone(time);\n if (!this.picker.dateTimeChecker(this.pickerMoment)) {\n return;\n }\n if (this.picker.isInSingleMode) {\n this.picker.select(this.pickerMoment);\n return;\n }\n if (this.picker.isInRangeMode) {\n var selecteds = this.picker.selecteds.slice();\n if ((this.activeSelectedIndex === 0 && selecteds[1] && this.dateTimeAdapter.compare(this.pickerMoment, selecteds[1]) === 1) ||\n (this.activeSelectedIndex === 1 && selecteds[0] && this.dateTimeAdapter.compare(this.pickerMoment, selecteds[0]) === -1)) {\n selecteds[0] = this.pickerMoment;\n selecteds[1] = this.pickerMoment;\n }\n else {\n selecteds[this.activeSelectedIndex] = this.pickerMoment;\n }\n this.picker.select(selecteds);\n }\n };\n OwlDateTimeContainerComponent.prototype.onCancelClicked = function (event) {\n this.hidePicker$.next(null);\n event.preventDefault();\n return;\n };\n OwlDateTimeContainerComponent.prototype.onSetClicked = function (event) {\n if (!this.picker.dateTimeChecker(this.pickerMoment)) {\n this.hidePicker$.next(null);\n event.preventDefault();\n return;\n }\n this.confirmSelected$.next(event);\n event.preventDefault();\n return;\n };\n OwlDateTimeContainerComponent.prototype.handleClickOnInfoGroup = function (event, index) {\n this.setActiveSelectedIndex(index);\n event.preventDefault();\n event.stopPropagation();\n };\n OwlDateTimeContainerComponent.prototype.handleKeydownOnInfoGroup = function (event, next, index) {\n switch (event.keyCode) {\n case DOWN_ARROW:\n case RIGHT_ARROW:\n case UP_ARROW:\n case LEFT_ARROW:\n next.focus();\n this.setActiveSelectedIndex(index === 0 ? 1 : 0);\n event.preventDefault();\n event.stopPropagation();\n break;\n case SPACE:\n this.setActiveSelectedIndex(index);\n event.preventDefault();\n event.stopPropagation();\n break;\n default:\n return;\n }\n };\n OwlDateTimeContainerComponent.prototype.setActiveSelectedIndex = function (index) {\n if (this.picker.selectMode === 'range' &&\n this.activeSelectedIndex !== index) {\n this.activeSelectedIndex = index;\n var selected = this.picker.selecteds[this.activeSelectedIndex];\n if (this.picker.selecteds && selected) {\n this.pickerMoment = this.dateTimeAdapter.clone(selected);\n }\n }\n return;\n };\n OwlDateTimeContainerComponent.prototype.initPicker = function () {\n this.pickerMoment = this.picker.startAt || this.dateTimeAdapter.now();\n this.activeSelectedIndex = this.picker.selectMode === 'rangeTo' ? 1 : 0;\n };\n OwlDateTimeContainerComponent.prototype.dateSelectedInSingleMode = function (date) {\n if (this.dateTimeAdapter.isSameDay(date, this.picker.selected)) {\n return null;\n }\n return this.updateAndCheckCalendarDate(date);\n };\n OwlDateTimeContainerComponent.prototype.dateSelectedInRangeMode = function (date) {\n var from = this.picker.selecteds[0];\n var to = this.picker.selecteds[1];\n var result = this.updateAndCheckCalendarDate(date);\n if (!result) {\n return null;\n }\n if (this.picker.selectMode === 'range') {\n if (this.picker.selecteds && this.picker.selecteds.length && !to && from &&\n this.dateTimeAdapter.differenceInCalendarDays(result, from) >= 0) {\n to = result;\n this.activeSelectedIndex = 1;\n }\n else {\n from = result;\n to = null;\n this.activeSelectedIndex = 0;\n }\n }\n else if (this.picker.selectMode === 'rangeFrom') {\n from = result;\n if (to && this.dateTimeAdapter.compare(from, to) > 0) {\n to = null;\n }\n }\n else if (this.picker.selectMode === 'rangeTo') {\n to = result;\n if (from && this.dateTimeAdapter.compare(from, to) > 0) {\n from = null;\n }\n }\n return [from, to];\n };\n OwlDateTimeContainerComponent.prototype.updateAndCheckCalendarDate = function (date) {\n var result;\n if (this.picker.pickerType === 'both') {\n result = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(date), this.dateTimeAdapter.getMonth(date), this.dateTimeAdapter.getDate(date), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));\n result = this.dateTimeAdapter.clampDate(result, this.picker.minDateTime, this.picker.maxDateTime);\n }\n else {\n result = this.dateTimeAdapter.clone(date);\n }\n return this.picker.dateTimeChecker(result) ? result : null;\n };\n OwlDateTimeContainerComponent.prototype.focusPicker = function () {\n if (this.picker.pickerMode === 'inline') {\n return;\n }\n if (this.calendar) {\n this.calendar.focusActiveCell();\n }\n else if (this.timer) {\n this.timer.focus();\n }\n };\n __decorate([\n ViewChild(OwlCalendarComponent),\n __metadata(\"design:type\", OwlCalendarComponent)\n ], OwlDateTimeContainerComponent.prototype, \"calendar\", void 0);\n __decorate([\n ViewChild(OwlTimerComponent),\n __metadata(\"design:type\", OwlTimerComponent)\n ], OwlDateTimeContainerComponent.prototype, \"timer\", void 0);\n __decorate([\n HostBinding('class.owl-dt-container'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTContainerClass\", null);\n __decorate([\n HostBinding('class.owl-dt-popup-container'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTPopupContainerClass\", null);\n __decorate([\n HostBinding('class.owl-dt-dialog-container'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTDialogContainerClass\", null);\n __decorate([\n HostBinding('class.owl-dt-inline-container'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTInlineContainerClass\", null);\n __decorate([\n HostBinding('class.owl-dt-container-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTContainerDisabledClass\", null);\n __decorate([\n HostBinding('attr.id'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTContainerId\", null);\n __decorate([\n HostBinding('@transformPicker'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeContainerComponent.prototype, \"owlDTContainerAnimation\", null);\n __decorate([\n HostListener('@transformPicker.done', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDateTimeContainerComponent.prototype, \"handleContainerAnimationDone\", null);\n OwlDateTimeContainerComponent = __decorate([ __param(3, Optional()),\n __metadata(\"design:paramtypes\", [ChangeDetectorRef,\n ElementRef,\n OwlDateTimeIntl,\n DateTimeAdapter])\n ], OwlDateTimeContainerComponent);\nOwlDateTimeContainerComponent.ɵfac = function OwlDateTimeContainerComponent_Factory(t) { return new (t || OwlDateTimeContainerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.OwlDateTimeIntl), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateTimeAdapter, 8)); };\nOwlDateTimeContainerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlDateTimeContainerComponent, selectors: [[\"owl-date-time-container\"]], viewQuery: function OwlDateTimeContainerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(OwlCalendarComponent, true);\n ɵngcc0.ɵɵviewQuery(OwlTimerComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.calendar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.timer = _t.first);\n } }, hostVars: 12, hostBindings: function OwlDateTimeContainerComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@transformPicker.done\", function OwlDateTimeContainerComponent_animation_transformPicker_done_HostBindingHandler($event) { return ctx.handleContainerAnimationDone($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.owlDTContainerId);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@transformPicker\", ctx.owlDTContainerAnimation);\n ɵngcc0.ɵɵclassProp(\"owl-dt-container\", ctx.owlDTContainerClass)(\"owl-dt-popup-container\", ctx.owlDTPopupContainerClass)(\"owl-dt-dialog-container\", ctx.owlDTDialogContainerClass)(\"owl-dt-inline-container\", ctx.owlDTInlineContainerClass)(\"owl-dt-container-disabled\", ctx.owlDTContainerDisabledClass);\n } }, exportAs: [\"owlDateTimeContainer\"], decls: 5, vars: 6, consts: [[1, \"owl-dt-container-inner\", 3, \"cdkTrapFocus\"], [\"class\", \"owl-dt-container-row\", 3, \"firstDayOfWeek\", \"pickerMoment\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"startView\", \"hideOtherMonths\", \"pickerMomentChange\", \"yearSelected\", \"monthSelected\", \"selectedChange\", 4, \"ngIf\"], [\"class\", \"owl-dt-container-row\", 3, \"pickerMoment\", \"minDateTime\", \"maxDateTime\", \"showSecondsTimer\", \"hour12Timer\", \"stepHour\", \"stepMinute\", \"stepSecond\", \"selectedChange\", 4, \"ngIf\"], [\"role\", \"radiogroup\", \"class\", \"owl-dt-container-info owl-dt-container-row\", 4, \"ngIf\"], [\"class\", \"owl-dt-container-buttons owl-dt-container-row\", 4, \"ngIf\"], [1, \"owl-dt-container-row\", 3, \"firstDayOfWeek\", \"pickerMoment\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"startView\", \"hideOtherMonths\", \"pickerMomentChange\", \"yearSelected\", \"monthSelected\", \"selectedChange\"], [1, \"owl-dt-container-row\", 3, \"pickerMoment\", \"minDateTime\", \"maxDateTime\", \"showSecondsTimer\", \"hour12Timer\", \"stepHour\", \"stepMinute\", \"stepSecond\", \"selectedChange\"], [\"role\", \"radiogroup\", 1, \"owl-dt-container-info\", \"owl-dt-container-row\"], [\"role\", \"radio\", 1, \"owl-dt-control\", \"owl-dt-container-range\", \"owl-dt-container-from\", 3, \"tabindex\", \"ngClass\", \"click\", \"keydown\"], [\"from\", \"\"], [\"tabindex\", \"-1\", 1, \"owl-dt-control-content\", \"owl-dt-container-range-content\"], [1, \"owl-dt-container-info-label\"], [1, \"owl-dt-container-info-value\"], [\"role\", \"radio\", 1, \"owl-dt-control\", \"owl-dt-container-range\", \"owl-dt-container-to\", 3, \"tabindex\", \"ngClass\", \"click\", \"keydown\"], [\"to\", \"\"], [1, \"owl-dt-container-buttons\", \"owl-dt-container-row\"], [\"type\", \"button\", \"tabindex\", \"0\", 1, \"owl-dt-control\", \"owl-dt-control-button\", \"owl-dt-container-control-button\", 3, \"click\"], [\"tabindex\", \"-1\", 1, \"owl-dt-control-content\", \"owl-dt-control-button-content\"]], template: function OwlDateTimeContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵtemplate(1, OwlDateTimeContainerComponent_owl_date_time_calendar_1_Template, 1, 10, \"owl-date-time-calendar\", 1);\n ɵngcc0.ɵɵtemplate(2, OwlDateTimeContainerComponent_owl_date_time_timer_2_Template, 1, 8, \"owl-date-time-timer\", 2);\n ɵngcc0.ɵɵtemplate(3, OwlDateTimeContainerComponent_div_3_Template, 15, 14, \"div\", 3);\n ɵngcc0.ɵɵtemplate(4, OwlDateTimeContainerComponent_div_4_Template, 7, 2, \"div\", 4);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"cdkTrapFocus\", ctx.picker.pickerMode !== \"inline\")(\"@fadeInPicker\", ctx.picker.pickerMode === \"inline\" ? \"\" : \"enter\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.pickerType === \"both\" || ctx.pickerType === \"calendar\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.pickerType === \"both\" || ctx.pickerType === \"timer\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.picker.isInRangeMode);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showControlButtons);\n } }, directives: [ɵngcc3.CdkTrapFocus, ɵngcc4.NgIf, ɵngcc5.OwlCalendarComponent, ɵngcc6.OwlTimerComponent, ɵngcc4.NgClass], styles: [\"\"], data: { animation: [\n owlDateTimePickerAnimations.transformPicker,\n owlDateTimePickerAnimations.fadeInPicker\n ] }, changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeContainerComponent, [{\n type: Component,\n args: [{\n exportAs: 'owlDateTimeContainer',\n selector: 'owl-date-time-container',\n template: \"
{{fromLabel}}: {{fromFormattedValue}}
{{toLabel}}: {{toFormattedValue}}
\",\n styles: [\"\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n animations: [\n owlDateTimePickerAnimations.transformPicker,\n owlDateTimePickerAnimations.fadeInPicker\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.OwlDateTimeIntl }, { type: ɵngcc2.DateTimeAdapter, decorators: [{\n type: Optional\n }] }]; }, { owlDTContainerClass: [{\n type: HostBinding,\n args: ['class.owl-dt-container']\n }], owlDTPopupContainerClass: [{\n type: HostBinding,\n args: ['class.owl-dt-popup-container']\n }], owlDTDialogContainerClass: [{\n type: HostBinding,\n args: ['class.owl-dt-dialog-container']\n }], owlDTInlineContainerClass: [{\n type: HostBinding,\n args: ['class.owl-dt-inline-container']\n }], owlDTContainerDisabledClass: [{\n type: HostBinding,\n args: ['class.owl-dt-container-disabled']\n }], owlDTContainerId: [{\n type: HostBinding,\n args: ['attr.id']\n }], owlDTContainerAnimation: [{\n type: HostBinding,\n args: ['@transformPicker']\n }], handleContainerAnimationDone: [{\n type: HostListener,\n args: ['@transformPicker.done', ['$event']]\n }], calendar: [{\n type: ViewChild,\n args: [OwlCalendarComponent]\n }], timer: [{\n type: ViewChild,\n args: [OwlTimerComponent]\n }] }); })();\n return OwlDateTimeContainerComponent;\n}());\nexport { OwlDateTimeContainerComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyJkYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQWFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBc0M7QUFDdEM7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE93bERhdGVUaW1lSW50bCB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3dsQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xUaW1lckNvbXBvbmVudCB9IGZyb20gJy4vdGltZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBvd2xEYXRlVGltZVBpY2tlckFuaW1hdGlvbnMgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXIuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbnZhciBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQoY2RSZWYsIGVsbVJlZiwgcGlja2VySW50bCwgZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuY2RSZWYgPSBjZFJlZjtcbiAgICAgICAgdGhpcy5lbG1SZWYgPSBlbG1SZWY7XG4gICAgICAgIHRoaXMucGlja2VySW50bCA9IHBpY2tlckludGw7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyID0gZGF0ZVRpbWVBZGFwdGVyO1xuICAgICAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmhpZGVQaWNrZXIkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWQkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5waWNrZXJPcGVuZWQkID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJoaWRlUGlja2VyU3RyZWFtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRlUGlja2VyJC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJjb25maXJtU2VsZWN0ZWRTdHJlYW1cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1TZWxlY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyT3BlbmVkU3RyZWFtXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJPcGVuZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vbWVudFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NsYW1QaWNrZXJNb21lbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGFtUGlja2VyTW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xhbXBEYXRlKHZhbHVlLCB0aGlzLnBpY2tlci5taW5EYXRlVGltZSwgdGhpcy5waWNrZXIubWF4RGF0ZVRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJUeXBlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXIucGlja2VyVHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJjYW5jZWxMYWJlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5jYW5jZWxCdG5MYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZXRMYWJlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5zZXRCdG5MYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJmcm9tTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwucmFuZ2VGcm9tTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwidG9MYWJlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5yYW5nZVRvTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwiZnJvbUZvcm1hdHRlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnBpY2tlci5zZWxlY3RlZHNbMF07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5mb3JtYXQodmFsdWUsIHRoaXMucGlja2VyLmZvcm1hdFN0cmluZykgOiAnJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJ0b0Zvcm1hdHRlZFZhbHVlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnBpY2tlci5zZWxlY3RlZHNbMV07XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5mb3JtYXQodmFsdWUsIHRoaXMucGlja2VyLmZvcm1hdFN0cmluZykgOiAnJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzaG93Q29udHJvbEJ1dHRvbnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlci5waWNrZXJNb2RlID09PSAnZGlhbG9nJyB8fFxuICAgICAgICAgICAgICAgICh0aGlzLnBpY2tlci5waWNrZXJUeXBlICE9PSAnY2FsZW5kYXInICYmIHRoaXMucGlja2VyLnBpY2tlck1vZGUgIT09ICdpbmxpbmUnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJjb250YWluZXJFbG1cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUQ29udGFpbmVyQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUUG9wdXBDb250YWluZXJDbGFzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyLnBpY2tlck1vZGUgPT09ICdwb3B1cCc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFREaWFsb2dDb250YWluZXJDbGFzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyLnBpY2tlck1vZGUgPT09ICdkaWFsb2cnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUSW5saW5lQ29udGFpbmVyQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlci5waWNrZXJNb2RlID09PSAnaW5saW5lJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENvbnRhaW5lckRpc2FibGVkQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlci5kaXNhYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENvbnRhaW5lcklkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXIuaWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDb250YWluZXJBbmltYXRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlci5waWNrZXJNb2RlID09PSAnaW5saW5lJyA/ICcnIDogJ2VudGVyJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLm5nT25Jbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbml0UGlja2VyKCk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmZvY3VzUGlja2VyKCk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUuaGFuZGxlQ29udGFpbmVyQW5pbWF0aW9uRG9uZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgdG9TdGF0ZSA9IGV2ZW50LnRvU3RhdGU7XG4gICAgICAgIGlmICh0b1N0YXRlID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlck9wZW5lZCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUuZGF0ZVNlbGVjdGVkID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyLmlzSW5TaW5nbGVNb2RlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRhdGVTZWxlY3RlZEluU2luZ2xlTW9kZShkYXRlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3QocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpY2tlclR5cGUgPT09ICdjYWxlbmRhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUGlja2VyJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5waWNrZXIuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5kYXRlU2VsZWN0ZWRJblJhbmdlTW9kZShkYXRlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudCA9IHJlc3VsdFt0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyLnNlbGVjdChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUudGltZVNlbGVjdGVkID0gZnVuY3Rpb24gKHRpbWUpIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZSh0aW1lKTtcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlci5kYXRlVGltZUNoZWNrZXIodGhpcy5waWNrZXJNb21lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGlja2VyLmlzSW5TaW5nbGVNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3QodGhpcy5waWNrZXJNb21lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBpY2tlci5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRzID0gdGhpcy5waWNrZXIuc2VsZWN0ZWRzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMCAmJiBzZWxlY3RlZHNbMV0gJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZSh0aGlzLnBpY2tlck1vbWVudCwgc2VsZWN0ZWRzWzFdKSA9PT0gMSkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID09PSAxICYmIHNlbGVjdGVkc1swXSAmJiB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKHRoaXMucGlja2VyTW9tZW50LCBzZWxlY3RlZHNbMF0pID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMF0gPSB0aGlzLnBpY2tlck1vbWVudDtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZHNbMV0gPSB0aGlzLnBpY2tlck1vbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdID0gdGhpcy5waWNrZXJNb21lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3Qoc2VsZWN0ZWRzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLm9uQ2FuY2VsQ2xpY2tlZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0aGlzLmhpZGVQaWNrZXIkLm5leHQobnVsbCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5vblNldENsaWNrZWQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlci5kYXRlVGltZUNoZWNrZXIodGhpcy5waWNrZXJNb21lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVQaWNrZXIkLm5leHQobnVsbCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlybVNlbGVjdGVkJC5uZXh0KGV2ZW50KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLmhhbmRsZUNsaWNrT25JbmZvR3JvdXAgPSBmdW5jdGlvbiAoZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLmhhbmRsZUtleWRvd25PbkluZm9Hcm91cCA9IGZ1bmN0aW9uIChldmVudCwgbmV4dCwgaW5kZXgpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICAgICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgICAgICAgICBuZXh0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVTZWxlY3RlZEluZGV4KGluZGV4ID09PSAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNQQUNFOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5waWNrZXIuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyAmJlxuICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnBpY2tlci5zZWxlY3RlZHNbdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4XTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpY2tlci5zZWxlY3RlZHMgJiYgc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNsb25lKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUuaW5pdFBpY2tlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLnBpY2tlci5zdGFydEF0IHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgICAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPSB0aGlzLnBpY2tlci5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgPyAxIDogMDtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5kYXRlU2VsZWN0ZWRJblNpbmdsZU1vZGUgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KGRhdGUsIHRoaXMucGlja2VyLnNlbGVjdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQW5kQ2hlY2tDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUuZGF0ZVNlbGVjdGVkSW5SYW5nZU1vZGUgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICB2YXIgZnJvbSA9IHRoaXMucGlja2VyLnNlbGVjdGVkc1swXTtcbiAgICAgICAgdmFyIHRvID0gdGhpcy5waWNrZXIuc2VsZWN0ZWRzWzFdO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy51cGRhdGVBbmRDaGVja0NhbGVuZGFyRGF0ZShkYXRlKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBpY2tlci5zZWxlY3RNb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5waWNrZXIuc2VsZWN0ZWRzICYmIHRoaXMucGlja2VyLnNlbGVjdGVkcy5sZW5ndGggJiYgIXRvICYmIGZyb20gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMocmVzdWx0LCBmcm9tKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdG8gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZyb20gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgdG8gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5waWNrZXIuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScpIHtcbiAgICAgICAgICAgIGZyb20gPSByZXN1bHQ7XG4gICAgICAgICAgICBpZiAodG8gJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShmcm9tLCB0bykgPiAwKSB7XG4gICAgICAgICAgICAgICAgdG8gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGlja2VyLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJykge1xuICAgICAgICAgICAgdG8gPSByZXN1bHQ7XG4gICAgICAgICAgICBpZiAoZnJvbSAmJiB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGZyb20sIHRvKSA+IDApIHtcbiAgICAgICAgICAgICAgICBmcm9tID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zyb20sIHRvXTtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS51cGRhdGVBbmRDaGVja0NhbGVuZGFyRGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlci5waWNrZXJUeXBlID09PSAnYm90aCcpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUoZGF0ZSksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldEhvdXJzKHRoaXMucGlja2VyTW9tZW50KSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TWludXRlcyh0aGlzLnBpY2tlck1vbWVudCksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHModGhpcy5waWNrZXJNb21lbnQpKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNsYW1wRGF0ZShyZXN1bHQsIHRoaXMucGlja2VyLm1pbkRhdGVUaW1lLCB0aGlzLnBpY2tlci5tYXhEYXRlVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZShkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXIuZGF0ZVRpbWVDaGVja2VyKHJlc3VsdCkgPyByZXN1bHQgOiBudWxsO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLmZvY3VzUGlja2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5waWNrZXIucGlja2VyTW9kZSA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5mb2N1c0FjdGl2ZUNlbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVyLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBWaWV3Q2hpbGQoT3dsQ2FsZW5kYXJDb21wb25lbnQpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT3dsQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgXSwgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcImNhbGVuZGFyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIFZpZXdDaGlsZChPd2xUaW1lckNvbXBvbmVudCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPd2xUaW1lckNvbXBvbmVudClcbiAgICBdLCBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwidGltZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2NsYXNzLm93bC1kdC1jb250YWluZXInKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUQ29udGFpbmVyQ2xhc3NcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtcG9wdXAtY29udGFpbmVyJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVFBvcHVwQ29udGFpbmVyQ2xhc3NcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtZGlhbG9nLWNvbnRhaW5lcicpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFREaWFsb2dDb250YWluZXJDbGFzc1wiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2NsYXNzLm93bC1kdC1pbmxpbmUtY29udGFpbmVyJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVElubGluZUNvbnRhaW5lckNsYXNzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LWNvbnRhaW5lci1kaXNhYmxlZCcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDb250YWluZXJEaXNhYmxlZENsYXNzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnYXR0ci5pZCcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENvbnRhaW5lcklkXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnQHRyYW5zZm9ybVBpY2tlcicpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENvbnRhaW5lckFuaW1hdGlvblwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdExpc3RlbmVyKCdAdHJhbnNmb3JtUGlja2VyLmRvbmUnLCBbJyRldmVudCddKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwiaGFuZGxlQ29udGFpbmVyQW5pbWF0aW9uRG9uZVwiLCBudWxsKTtcbiAgICBPd2xEYXRlVGltZUNvbnRhaW5lckNvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBDb21wb25lbnQoe1xuICAgICAgICAgICAgZXhwb3J0QXM6ICdvd2xEYXRlVGltZUNvbnRhaW5lcicsXG4gICAgICAgICAgICBzZWxlY3RvcjogJ293bC1kYXRlLXRpbWUtY29udGFpbmVyJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBcIjxkaXYgW2Nka1RyYXBGb2N1c109XFxcInBpY2tlci5waWNrZXJNb2RlICE9PSAnaW5saW5lJ1xcXCIgW0BmYWRlSW5QaWNrZXJdPVxcXCJwaWNrZXIucGlja2VyTW9kZSA9PT0gJ2lubGluZSc/ICcnIDogJ2VudGVyJ1xcXCIgY2xhc3M9XFxcIm93bC1kdC1jb250YWluZXItaW5uZXJcXFwiPjxvd2wtZGF0ZS10aW1lLWNhbGVuZGFyICpuZ0lmPVxcXCJwaWNrZXJUeXBlID09PSAnYm90aCcgfHwgcGlja2VyVHlwZSA9PT0gJ2NhbGVuZGFyJ1xcXCIgY2xhc3M9XFxcIm93bC1kdC1jb250YWluZXItcm93XFxcIiBbZmlyc3REYXlPZldlZWtdPVxcXCJwaWNrZXIuZmlyc3REYXlPZldlZWtcXFwiIFsocGlja2VyTW9tZW50KV09XFxcInBpY2tlck1vbWVudFxcXCIgW3NlbGVjdGVkXT1cXFwicGlja2VyLnNlbGVjdGVkXFxcIiBbc2VsZWN0ZWRzXT1cXFwicGlja2VyLnNlbGVjdGVkc1xcXCIgW3NlbGVjdE1vZGVdPVxcXCJwaWNrZXIuc2VsZWN0TW9kZVxcXCIgW21pbkRhdGVdPVxcXCJwaWNrZXIubWluRGF0ZVRpbWVcXFwiIFttYXhEYXRlXT1cXFwicGlja2VyLm1heERhdGVUaW1lXFxcIiBbZGF0ZUZpbHRlcl09XFxcInBpY2tlci5kYXRlVGltZUZpbHRlclxcXCIgW3N0YXJ0Vmlld109XFxcInBpY2tlci5zdGFydFZpZXdcXFwiIFtoaWRlT3RoZXJNb250aHNdPVxcXCJwaWNrZXIuaGlkZU90aGVyTW9udGhzXFxcIiAoeWVhclNlbGVjdGVkKT1cXFwicGlja2VyLnNlbGVjdFllYXIoJGV2ZW50KVxcXCIgKG1vbnRoU2VsZWN0ZWQpPVxcXCJwaWNrZXIuc2VsZWN0TW9udGgoJGV2ZW50KVxcXCIgKHNlbGVjdGVkQ2hhbmdlKT1cXFwiZGF0ZVNlbGVjdGVkKCRldmVudClcXFwiPjwvb3dsLWRhdGUtdGltZS1jYWxlbmRhcj48b3dsLWRhdGUtdGltZS10aW1lciAqbmdJZj1cXFwicGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICd0aW1lcidcXFwiIGNsYXNzPVxcXCJvd2wtZHQtY29udGFpbmVyLXJvd1xcXCIgW3BpY2tlck1vbWVudF09XFxcInBpY2tlck1vbWVudFxcXCIgW21pbkRhdGVUaW1lXT1cXFwicGlja2VyLm1pbkRhdGVUaW1lXFxcIiBbbWF4RGF0ZVRpbWVdPVxcXCJwaWNrZXIubWF4RGF0ZVRpbWVcXFwiIFtzaG93U2Vjb25kc1RpbWVyXT1cXFwicGlja2VyLnNob3dTZWNvbmRzVGltZXJcXFwiIFtob3VyMTJUaW1lcl09XFxcInBpY2tlci5ob3VyMTJUaW1lclxcXCIgW3N0ZXBIb3VyXT1cXFwicGlja2VyLnN0ZXBIb3VyXFxcIiBbc3RlcE1pbnV0ZV09XFxcInBpY2tlci5zdGVwTWludXRlXFxcIiBbc3RlcFNlY29uZF09XFxcInBpY2tlci5zdGVwU2Vjb25kXFxcIiAoc2VsZWN0ZWRDaGFuZ2UpPVxcXCJ0aW1lU2VsZWN0ZWQoJGV2ZW50KVxcXCI+PC9vd2wtZGF0ZS10aW1lLXRpbWVyPjxkaXYgKm5nSWY9XFxcInBpY2tlci5pc0luUmFuZ2VNb2RlXFxcIiByb2xlPVxcXCJyYWRpb2dyb3VwXFxcIiBjbGFzcz1cXFwib3dsLWR0LWNvbnRhaW5lci1pbmZvIG93bC1kdC1jb250YWluZXItcm93XFxcIj48ZGl2IHJvbGU9XFxcInJhZGlvXFxcIiBbdGFiaW5kZXhdPVxcXCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwID8gMCA6IC0xXFxcIiBbYXR0ci5hcmlhLWNoZWNrZWRdPVxcXCJhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwXFxcIiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRhaW5lci1yYW5nZSBvd2wtZHQtY29udGFpbmVyLWZyb21cXFwiIFtuZ0NsYXNzXT1cXFwieydvd2wtZHQtY29udGFpbmVyLWluZm8tYWN0aXZlJzogYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMH1cXFwiIChjbGljayk9XFxcImhhbmRsZUNsaWNrT25JbmZvR3JvdXAoJGV2ZW50LCAwKVxcXCIgKGtleWRvd24pPVxcXCJoYW5kbGVLZXlkb3duT25JbmZvR3JvdXAoJGV2ZW50LCB0bywgMClcXFwiICNmcm9tPjxzcGFuIGNsYXNzPVxcXCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250YWluZXItcmFuZ2UtY29udGVudFxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj48c3BhbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXFxcIj57e2Zyb21MYWJlbH19Ojwvc3Bhbj4gPHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250YWluZXItaW5mby12YWx1ZVxcXCI+e3tmcm9tRm9ybWF0dGVkVmFsdWV9fTwvc3Bhbj48L3NwYW4+PC9kaXY+PGRpdiByb2xlPVxcXCJyYWRpb1xcXCIgW3RhYmluZGV4XT1cXFwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAtMVxcXCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cXFwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMVxcXCIgY2xhc3M9XFxcIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250YWluZXItcmFuZ2Ugb3dsLWR0LWNvbnRhaW5lci10b1xcXCIgW25nQ2xhc3NdPVxcXCJ7J293bC1kdC1jb250YWluZXItaW5mby1hY3RpdmUnOiBhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAxfVxcXCIgKGNsaWNrKT1cXFwiaGFuZGxlQ2xpY2tPbkluZm9Hcm91cCgkZXZlbnQsIDEpXFxcIiAoa2V5ZG93bik9XFxcImhhbmRsZUtleWRvd25PbkluZm9Hcm91cCgkZXZlbnQsIGZyb20sIDEpXFxcIiAjdG8+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRhaW5lci1yYW5nZS1jb250ZW50XFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjxzcGFuIGNsYXNzPVxcXCJvd2wtZHQtY29udGFpbmVyLWluZm8tbGFiZWxcXFwiPnt7dG9MYWJlbH19Ojwvc3Bhbj4gPHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250YWluZXItaW5mby12YWx1ZVxcXCI+e3t0b0Zvcm1hdHRlZFZhbHVlfX08L3NwYW4+PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYgKm5nSWY9XFxcInNob3dDb250cm9sQnV0dG9uc1xcXCIgY2xhc3M9XFxcIm93bC1kdC1jb250YWluZXItYnV0dG9ucyBvd2wtZHQtY29udGFpbmVyLXJvd1xcXCI+PGJ1dHRvbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250YWluZXItY29udHJvbC1idXR0b25cXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiIChjbGljayk9XFxcIm9uQ2FuY2VsQ2xpY2tlZCgkZXZlbnQpXFxcIj48c3BhbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wtY29udGVudCBvd2wtZHQtY29udHJvbC1idXR0b24tY29udGVudFxcXCIgdGFiaW5kZXg9XFxcIi0xXFxcIj57e2NhbmNlbExhYmVsfX08L3NwYW4+PC9idXR0b24+IDxidXR0b24gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udGFpbmVyLWNvbnRyb2wtYnV0dG9uXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIHRhYmluZGV4PVxcXCIwXFxcIiAoY2xpY2spPVxcXCJvblNldENsaWNrZWQoJGV2ZW50KVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+e3tzZXRMYWJlbH19PC9zcGFuPjwvYnV0dG9uPjwvZGl2PjwvZGl2PlwiLFxuICAgICAgICAgICAgc3R5bGVzOiBbXCJcIl0sXG4gICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgYW5pbWF0aW9uczogW1xuICAgICAgICAgICAgICAgIG93bERhdGVUaW1lUGlja2VyQW5pbWF0aW9ucy50cmFuc2Zvcm1QaWNrZXIsXG4gICAgICAgICAgICAgICAgb3dsRGF0ZVRpbWVQaWNrZXJBbmltYXRpb25zLmZhZGVJblBpY2tlclxuICAgICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgX19wYXJhbSgzLCBPcHRpb25hbCgpKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgIEVsZW1lbnRSZWYsXG4gICAgICAgICAgICBPd2xEYXRlVGltZUludGwsXG4gICAgICAgICAgICBEYXRlVGltZUFkYXB0ZXJdKVxuICAgIF0sIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50KTtcbiAgICByZXR1cm4gT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ7XG59KCkpO1xuZXhwb3J0IHsgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfTtcbiJdfQ==","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './adapter/date-time-adapter.class';\nimport * as ɵngcc2 from './date-time-picker-container.component';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostBinding, Inject, Input, Optional, Output, ViewChild } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { OwlDateTime } from './date-time.class';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\nexport var OWL_DATETIME_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(function () { return OwlDateTimeInlineComponent; }),\n multi: true\n};\nvar OwlDateTimeInlineComponent = (function (_super) {\n __extends(OwlDateTimeInlineComponent, _super);\n function OwlDateTimeInlineComponent(changeDetector, dateTimeAdapter, dateTimeFormats) {\n var _this = _super.call(this, dateTimeAdapter, dateTimeFormats) || this;\n _this.changeDetector = changeDetector;\n _this.dateTimeAdapter = dateTimeAdapter;\n _this.dateTimeFormats = dateTimeFormats;\n _this._pickerType = 'both';\n _this._disabled = false;\n _this._selectMode = 'single';\n _this._values = [];\n _this.yearSelected = new EventEmitter();\n _this.monthSelected = new EventEmitter();\n _this._selecteds = [];\n _this.onModelChange = function () {\n };\n _this.onModelTouched = function () {\n };\n return _this;\n }\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"pickerType\", {\n get: function () {\n return this._pickerType;\n },\n set: function (val) {\n if (val !== this._pickerType) {\n this._pickerType = val;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"disabled\", {\n get: function () {\n return !!this._disabled;\n },\n set: function (value) {\n this._disabled = coerceBooleanProperty(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"selectMode\", {\n get: function () {\n return this._selectMode;\n },\n set: function (mode) {\n if (mode !== 'single' && mode !== 'range' &&\n mode !== 'rangeFrom' && mode !== 'rangeTo') {\n throw Error('OwlDateTime Error: invalid selectMode value!');\n }\n this._selectMode = mode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"startAt\", {\n get: function () {\n if (this._startAt) {\n return this._startAt;\n }\n if (this.selectMode === 'single') {\n return this.value || null;\n }\n else if (this.selectMode === 'range' ||\n this.selectMode === 'rangeFrom') {\n return this.values[0] || null;\n }\n else if (this.selectMode === 'rangeTo') {\n return this.values[1] || null;\n }\n else {\n return null;\n }\n },\n set: function (date) {\n this._startAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"dateTimeFilter\", {\n get: function () {\n return this._dateTimeFilter;\n },\n set: function (filter) {\n this._dateTimeFilter = filter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"minDateTime\", {\n get: function () {\n return this._min || null;\n },\n set: function (value) {\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.changeDetector.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"maxDateTime\", {\n get: function () {\n return this._max || null;\n },\n set: function (value) {\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.changeDetector.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"value\", {\n get: function () {\n return this._value;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n value = this.getValidDate(value);\n this._value = value;\n this.selected = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"values\", {\n get: function () {\n return this._values;\n },\n set: function (values) {\n var _this = this;\n if (values && values.length > 0) {\n values = values.map(function (v) {\n v = _this.dateTimeAdapter.deserialize(v);\n v = _this.getValidDate(v);\n return v ? _this.dateTimeAdapter.clone(v) : null;\n });\n this._values = values.slice();\n this.selecteds = values.slice();\n }\n else {\n this._values = [];\n this.selecteds = [];\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"selected\", {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n this._selected = value;\n this.changeDetector.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"selecteds\", {\n get: function () {\n return this._selecteds;\n },\n set: function (values) {\n this._selecteds = values;\n this.changeDetector.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"opened\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"pickerMode\", {\n get: function () {\n return 'inline';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this._selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this._selectMode === 'range' || this._selectMode === 'rangeFrom'\n || this._selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInlineComponent.prototype, \"owlDTInlineClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n OwlDateTimeInlineComponent.prototype.ngOnInit = function () {\n this.container.picker = this;\n };\n OwlDateTimeInlineComponent.prototype.writeValue = function (value) {\n if (this.isInSingleMode) {\n this.value = value;\n this.container.pickerMoment = value;\n }\n else {\n this.values = value;\n this.container.pickerMoment = this._values[this.container.activeSelectedIndex];\n }\n };\n OwlDateTimeInlineComponent.prototype.registerOnChange = function (fn) {\n this.onModelChange = fn;\n };\n OwlDateTimeInlineComponent.prototype.registerOnTouched = function (fn) {\n this.onModelTouched = fn;\n };\n OwlDateTimeInlineComponent.prototype.setDisabledState = function (isDisabled) {\n this.disabled = isDisabled;\n };\n OwlDateTimeInlineComponent.prototype.select = function (date) {\n if (this.disabled) {\n return;\n }\n if (Array.isArray(date)) {\n this.values = date.slice();\n }\n else {\n this.value = date;\n }\n this.onModelChange(date);\n this.onModelTouched();\n };\n OwlDateTimeInlineComponent.prototype.selectYear = function (normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n };\n OwlDateTimeInlineComponent.prototype.selectMonth = function (normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n };\n __decorate([\n ViewChild(OwlDateTimeContainerComponent),\n __metadata(\"design:type\", OwlDateTimeContainerComponent)\n ], OwlDateTimeInlineComponent.prototype, \"container\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlDateTimeInlineComponent.prototype, \"pickerType\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTimeInlineComponent.prototype, \"disabled\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlDateTimeInlineComponent.prototype, \"selectMode\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInlineComponent.prototype, \"startAt\", null);\n __decorate([\n Input('owlDateTimeFilter'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], OwlDateTimeInlineComponent.prototype, \"dateTimeFilter\", null);\n __decorate([\n Input('min'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInlineComponent.prototype, \"minDateTime\", null);\n __decorate([\n Input('max'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInlineComponent.prototype, \"maxDateTime\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInlineComponent.prototype, \"value\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], OwlDateTimeInlineComponent.prototype, \"values\", null);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeInlineComponent.prototype, \"yearSelected\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeInlineComponent.prototype, \"monthSelected\", void 0);\n __decorate([\n HostBinding('class.owl-dt-inline'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeInlineComponent.prototype, \"owlDTInlineClass\", null);\n OwlDateTimeInlineComponent = __decorate([ __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(OWL_DATE_TIME_FORMATS)),\n __metadata(\"design:paramtypes\", [ChangeDetectorRef,\n DateTimeAdapter, Object])\n ], OwlDateTimeInlineComponent);\nOwlDateTimeInlineComponent.ɵfac = function OwlDateTimeInlineComponent_Factory(t) { return new (t || OwlDateTimeInlineComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8)); };\nOwlDateTimeInlineComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlDateTimeInlineComponent, selectors: [[\"owl-date-time-inline\"]], viewQuery: function OwlDateTimeInlineComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(OwlDateTimeContainerComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n } }, hostVars: 2, hostBindings: function OwlDateTimeInlineComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-inline\", ctx.owlDTInlineClass);\n } }, inputs: { pickerType: \"pickerType\", disabled: \"disabled\", selectMode: \"selectMode\", startAt: \"startAt\", dateTimeFilter: [\"owlDateTimeFilter\", \"dateTimeFilter\"], minDateTime: [\"min\", \"minDateTime\"], maxDateTime: [\"max\", \"maxDateTime\"], value: \"value\", values: \"values\" }, outputs: { yearSelected: \"yearSelected\", monthSelected: \"monthSelected\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n OWL_DATETIME_VALUE_ACCESSOR,\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, template: function OwlDateTimeInlineComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"owl-date-time-container\");\n } }, directives: [ɵngcc2.OwlDateTimeContainerComponent], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeInlineComponent, [{\n type: Component,\n args: [{\n selector: 'owl-date-time-inline',\n template: \"\",\n styles: [\"\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n providers: [\n OWL_DATETIME_VALUE_ACCESSOR,\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.DateTimeAdapter, decorators: [{\n type: Optional\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_FORMATS]\n }] }]; }, { pickerType: [{\n type: Input\n }], disabled: [{\n type: Input\n }], selectMode: [{\n type: Input\n }], startAt: [{\n type: Input\n }], dateTimeFilter: [{\n type: Input,\n args: ['owlDateTimeFilter']\n }], minDateTime: [{\n type: Input,\n args: ['min']\n }], maxDateTime: [{\n type: Input,\n args: ['max']\n }], value: [{\n type: Input\n }], values: [{\n type: Input\n }], owlDTInlineClass: [{\n type: HostBinding,\n args: ['class.owl-dt-inline']\n }], container: [{\n type: ViewChild,\n args: [OwlDateTimeContainerComponent]\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }] }); })();\n return OwlDateTimeInlineComponent;\n}(OwlDateTime));\nexport { OwlDateTimeInlineComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWlubGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbImRhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FXTztBQUNQO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFtQztBQUNuQztBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWUgfSBmcm9tICcuL2RhdGUtdGltZS5jbGFzcyc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX0RBVEVfVElNRV9GT1JNQVRTIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5leHBvcnQgdmFyIE9XTF9EQVRFVElNRV9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZihmdW5jdGlvbiAoKSB7IHJldHVybiBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudDsgfSksXG4gICAgbXVsdGk6IHRydWVcbn07XG52YXIgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudChjaGFuZ2VEZXRlY3RvciwgZGF0ZVRpbWVBZGFwdGVyLCBkYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGF0ZVRpbWVBZGFwdGVyLCBkYXRlVGltZUZvcm1hdHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgICAgIF90aGlzLmRhdGVUaW1lQWRhcHRlciA9IGRhdGVUaW1lQWRhcHRlcjtcbiAgICAgICAgX3RoaXMuZGF0ZVRpbWVGb3JtYXRzID0gZGF0ZVRpbWVGb3JtYXRzO1xuICAgICAgICBfdGhpcy5fcGlja2VyVHlwZSA9ICdib3RoJztcbiAgICAgICAgX3RoaXMuX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLl9zZWxlY3RNb2RlID0gJ3NpbmdsZSc7XG4gICAgICAgIF90aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgX3RoaXMueWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBfdGhpcy5tb250aFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBfdGhpcy5fc2VsZWN0ZWRzID0gW107XG4gICAgICAgIF90aGlzLm9uTW9kZWxDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH07XG4gICAgICAgIF90aGlzLm9uTW9kZWxUb3VjaGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BpY2tlclR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fcGlja2VyVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tlclR5cGUgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX2Rpc2FibGVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdE1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RNb2RlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgICAgICAgICBpZiAobW9kZSAhPT0gJ3NpbmdsZScgJiYgbW9kZSAhPT0gJ3JhbmdlJyAmJlxuICAgICAgICAgICAgICAgIG1vZGUgIT09ICdyYW5nZUZyb20nICYmIG1vZGUgIT09ICdyYW5nZVRvJykge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdPd2xEYXRlVGltZSBFcnJvcjogaW52YWxpZCBzZWxlY3RNb2RlIHZhbHVlIScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0TW9kZSA9IG1vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUsIFwic3RhcnRBdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRBdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwgbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF0gfHwgbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzFdIHx8IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRBdCA9IHRoaXMuZ2V0VmFsaWREYXRlKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJkYXRlVGltZUZpbHRlclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lRmlsdGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRmlsdGVyID0gZmlsdGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcIm1pbkRhdGVUaW1lXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9taW4gPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtYXhEYXRlVGltZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heCB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbWF4ID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcInZhbHVlc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IF90aGlzLmdldFZhbGlkRGF0ZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPyBfdGhpcy5kYXRlVGltZUFkYXB0ZXIuY2xvbmUodikgOiBudWxsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzID0gdmFsdWVzLnNsaWNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvcGVuZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnaW5saW5lJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJpc0luU2luZ2xlTW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcImlzSW5SYW5nZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8IHRoaXMuX3NlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUSW5saW5lQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUubmdPbkluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnBpY2tlciA9IHRoaXM7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUud3JpdGVWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucGlja2VyTW9tZW50ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucGlja2VyTW9tZW50ID0gdGhpcy5fdmFsdWVzW3RoaXMuY29udGFpbmVyLmFjdGl2ZVNlbGVjdGVkSW5kZXhdO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUucmVnaXN0ZXJPbkNoYW5nZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZS5yZWdpc3Rlck9uVG91Y2hlZCA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZSA9IGZ1bmN0aW9uIChpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gZGF0ZS5zbGljZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGRhdGUpO1xuICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKCk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUuc2VsZWN0WWVhciA9IGZ1bmN0aW9uIChub3JtYWxpemVkWWVhcikge1xuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRZZWFyKTtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZS5zZWxlY3RNb250aCA9IGZ1bmN0aW9uIChub3JtYWxpemVkTW9udGgpIHtcbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobm9ybWFsaXplZE1vbnRoKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBWaWV3Q2hpbGQoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQpXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcImNvbnRhaW5lclwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmddKVxuICAgIF0sIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJUeXBlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQm9vbGVhbl0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmddKVxuICAgIF0sIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RNb2RlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzdGFydEF0XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgnb3dsRGF0ZVRpbWVGaWx0ZXInKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtGdW5jdGlvbl0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcImRhdGVUaW1lRmlsdGVyXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgnbWluJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcIm1pbkRhdGVUaW1lXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgnbWF4JyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcIm1heERhdGVUaW1lXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtBcnJheV0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcInZhbHVlc1wiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQucHJvdG90eXBlLCBcInllYXJTZWxlY3RlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibW9udGhTZWxlY3RlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LWlubGluZScpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRJbmxpbmVDbGFzc1wiLCBudWxsKTtcbiAgICBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBDb21wb25lbnQoe1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdvd2wtZGF0ZS10aW1lLWlubGluZScsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCI8b3dsLWRhdGUtdGltZS1jb250YWluZXI+PC9vd2wtZGF0ZS10aW1lLWNvbnRhaW5lcj5cIixcbiAgICAgICAgICAgIHN0eWxlczogW1wiXCJdLFxuICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIE9XTF9EQVRFVElNRV9WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBfX3BhcmFtKDEsIE9wdGlvbmFsKCkpLFxuICAgICAgICBfX3BhcmFtKDIsIE9wdGlvbmFsKCkpLCBfX3BhcmFtKDIsIEluamVjdChPV0xfREFURV9USU1FX0ZPUk1BVFMpKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgIERhdGVUaW1lQWRhcHRlciwgT2JqZWN0XSlcbiAgICBdLCBPd2xEYXRlVGltZUlubGluZUNvbXBvbmVudCk7XG4gICAgcmV0dXJuIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50O1xufShPd2xEYXRlVGltZSkpO1xuZXhwb3J0IHsgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQgfTtcbiJdfQ==","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/overlay';\nimport * as ɵngcc2 from '../dialog';\nimport * as ɵngcc3 from './adapter/date-time-adapter.class';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, InjectionToken, Input, NgZone, Optional, Output, ViewContainerRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nimport { OwlDateTime } from './date-time.class';\nimport { OwlDialogService } from '../dialog';\nimport { merge, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nexport var OWL_DTPICKER_SCROLL_STRATEGY = new InjectionToken('owl-dtpicker-scroll-strategy');\nexport function OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return function () { return overlay.scrollStrategies.block(); };\n}\nexport var OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER = {\n provide: OWL_DTPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\nvar OwlDateTimeComponent = (function (_super) {\n __extends(OwlDateTimeComponent, _super);\n function OwlDateTimeComponent(overlay, viewContainerRef, dialogService, ngZone, changeDetector, dateTimeAdapter, defaultScrollStrategy, dateTimeFormats, document) {\n var _this = _super.call(this, dateTimeAdapter, dateTimeFormats) || this;\n _this.overlay = overlay;\n _this.viewContainerRef = viewContainerRef;\n _this.dialogService = dialogService;\n _this.ngZone = ngZone;\n _this.changeDetector = changeDetector;\n _this.dateTimeAdapter = dateTimeAdapter;\n _this.defaultScrollStrategy = defaultScrollStrategy;\n _this.dateTimeFormats = dateTimeFormats;\n _this.document = document;\n _this.backdropClass = [];\n _this.panelClass = [];\n _this._pickerType = 'both';\n _this._pickerMode = 'popup';\n _this._opened = false;\n _this.afterPickerClosed = new EventEmitter();\n _this.afterPickerOpen = new EventEmitter();\n _this.yearSelected = new EventEmitter();\n _this.monthSelected = new EventEmitter();\n _this.confirmSelectedChange = new EventEmitter();\n _this.disabledChange = new EventEmitter();\n _this.dtInputSub = Subscription.EMPTY;\n _this.hidePickerStreamSub = Subscription.EMPTY;\n _this.confirmSelectedStreamSub = Subscription.EMPTY;\n _this.pickerOpenedStreamSub = Subscription.EMPTY;\n _this.focusedElementBeforeOpen = null;\n _this._selecteds = [];\n return _this;\n }\n Object.defineProperty(OwlDateTimeComponent.prototype, \"startAt\", {\n get: function () {\n if (this._startAt) {\n return this._startAt;\n }\n if (this._dtInput) {\n if (this._dtInput.selectMode === 'single') {\n return this._dtInput.value || null;\n }\n else if (this._dtInput.selectMode === 'range' ||\n this._dtInput.selectMode === 'rangeFrom') {\n return this._dtInput.values[0] || null;\n }\n else if (this._dtInput.selectMode === 'rangeTo') {\n return this._dtInput.values[1] || null;\n }\n }\n else {\n return null;\n }\n },\n set: function (date) {\n this._startAt = this.getValidDate(this.dateTimeAdapter.deserialize(date));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"pickerType\", {\n get: function () {\n return this._pickerType;\n },\n set: function (val) {\n if (val !== this._pickerType) {\n this._pickerType = val;\n if (this._dtInput) {\n this._dtInput.formatNativeInputValue();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"pickerMode\", {\n get: function () {\n return this._pickerMode;\n },\n set: function (mode) {\n if (mode === 'popup') {\n this._pickerMode = mode;\n }\n else {\n this._pickerMode = 'dialog';\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"disabled\", {\n get: function () {\n return this._disabled === undefined && this._dtInput ?\n this._dtInput.disabled : !!this._disabled;\n },\n set: function (value) {\n value = coerceBooleanProperty(value);\n if (value !== this._disabled) {\n this._disabled = value;\n this.disabledChange.next(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"opened\", {\n get: function () {\n return this._opened;\n },\n set: function (val) {\n val ? this.open() : this.close();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"dtInput\", {\n get: function () {\n return this._dtInput;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"selected\", {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n this._selected = value;\n this.changeDetector.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"selecteds\", {\n get: function () {\n return this._selecteds;\n },\n set: function (values) {\n this._selecteds = values;\n this.changeDetector.markForCheck();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"minDateTime\", {\n get: function () {\n return this._dtInput && this._dtInput.min;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"maxDateTime\", {\n get: function () {\n return this._dtInput && this._dtInput.max;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"dateTimeFilter\", {\n get: function () {\n return this._dtInput && this._dtInput.dateTimeFilter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"selectMode\", {\n get: function () {\n return this._dtInput.selectMode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this._dtInput.isInSingleMode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this._dtInput.isInRangeMode;\n },\n enumerable: true,\n configurable: true\n });\n OwlDateTimeComponent.prototype.ngOnInit = function () {\n };\n OwlDateTimeComponent.prototype.ngOnDestroy = function () {\n this.close();\n this.dtInputSub.unsubscribe();\n this.disabledChange.complete();\n if (this.popupRef) {\n this.popupRef.dispose();\n }\n };\n OwlDateTimeComponent.prototype.registerInput = function (input) {\n var _this = this;\n if (this._dtInput) {\n throw Error('A Owl DateTimePicker can only be associated with a single input.');\n }\n this._dtInput = input;\n this.dtInputSub = this._dtInput.valueChange.subscribe(function (value) {\n if (Array.isArray(value)) {\n _this.selecteds = value;\n }\n else {\n _this.selected = value;\n }\n });\n };\n OwlDateTimeComponent.prototype.open = function () {\n var _this = this;\n if (this._opened || this.disabled) {\n return;\n }\n if (!this._dtInput) {\n throw Error('Attempted to open an DateTimePicker with no associated input.');\n }\n if (this.document) {\n this.focusedElementBeforeOpen = this.document.activeElement;\n }\n if (this.isInSingleMode) {\n this.selected = this._dtInput.value;\n }\n else if (this.isInRangeMode) {\n this.selecteds = this._dtInput.values;\n }\n if (this.selected && this.pickerType !== 'calendar' && this._startAt) {\n this.selected = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.selected), this.dateTimeAdapter.getMonth(this.selected), this.dateTimeAdapter.getDate(this.selected), this.dateTimeAdapter.getHours(this._startAt), this.dateTimeAdapter.getMinutes(this._startAt), this.dateTimeAdapter.getSeconds(this._startAt));\n }\n this.pickerMode === 'dialog' ?\n this.openAsDialog() :\n this.openAsPopup();\n this.pickerContainer.picker = this;\n this.hidePickerStreamSub = this.pickerContainer.hidePickerStream\n .subscribe(function () {\n _this.close();\n });\n this.confirmSelectedStreamSub = this.pickerContainer.confirmSelectedStream\n .subscribe(function (event) {\n _this.confirmSelect(event);\n });\n };\n OwlDateTimeComponent.prototype.select = function (date) {\n if (Array.isArray(date)) {\n this.selecteds = date.slice();\n }\n else {\n this.selected = date;\n }\n if (this.pickerMode !== 'dialog' &&\n this.pickerType === 'calendar' &&\n ((this.selectMode === 'single' && this.selected) ||\n (this.selectMode === 'rangeFrom' && this.selecteds[0]) ||\n (this.selectMode === 'rangeTo' && this.selecteds[1]) ||\n (this.selectMode === 'range' && this.selecteds[0] && this.selecteds[1]))) {\n this.confirmSelect();\n }\n };\n OwlDateTimeComponent.prototype.selectYear = function (normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n };\n OwlDateTimeComponent.prototype.selectMonth = function (normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n };\n OwlDateTimeComponent.prototype.close = function () {\n var _this = this;\n if (!this._opened) {\n return;\n }\n if (this.popupRef && this.popupRef.hasAttached()) {\n this.popupRef.detach();\n }\n if (this.pickerContainerPortal && this.pickerContainerPortal.isAttached) {\n this.pickerContainerPortal.detach();\n }\n if (this.hidePickerStreamSub) {\n this.hidePickerStreamSub.unsubscribe();\n this.hidePickerStreamSub = null;\n }\n if (this.confirmSelectedStreamSub) {\n this.confirmSelectedStreamSub.unsubscribe();\n this.confirmSelectedStreamSub = null;\n }\n if (this.pickerOpenedStreamSub) {\n this.pickerOpenedStreamSub.unsubscribe();\n this.pickerOpenedStreamSub = null;\n }\n if (this.dialogRef) {\n this.dialogRef.close();\n this.dialogRef = null;\n }\n var completeClose = function () {\n if (_this._opened) {\n _this._opened = false;\n _this.afterPickerClosed.emit(null);\n _this.focusedElementBeforeOpen = null;\n }\n };\n if (this.focusedElementBeforeOpen &&\n typeof this.focusedElementBeforeOpen.focus === 'function') {\n this.focusedElementBeforeOpen.focus();\n setTimeout(completeClose);\n }\n else {\n completeClose();\n }\n };\n OwlDateTimeComponent.prototype.confirmSelect = function (event) {\n if (this.isInSingleMode) {\n var selected = this.selected || this.startAt || this.dateTimeAdapter.now();\n this.confirmSelectedChange.emit(selected);\n }\n else if (this.isInRangeMode) {\n this.confirmSelectedChange.emit(this.selecteds);\n }\n this.close();\n return;\n };\n OwlDateTimeComponent.prototype.openAsDialog = function () {\n var _this = this;\n this.dialogRef = this.dialogService.open(OwlDateTimeContainerComponent, {\n autoFocus: false,\n backdropClass: ['cdk-overlay-dark-backdrop'].concat(coerceArray(this.backdropClass)),\n paneClass: ['owl-dt-dialog'].concat(coerceArray(this.panelClass)),\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),\n });\n this.pickerContainer = this.dialogRef.componentInstance;\n this.dialogRef.afterOpen().subscribe(function () {\n _this.afterPickerOpen.emit(null);\n _this._opened = true;\n });\n this.dialogRef.afterClosed().subscribe(function () { return _this.close(); });\n };\n OwlDateTimeComponent.prototype.openAsPopup = function () {\n var _this = this;\n if (!this.pickerContainerPortal) {\n this.pickerContainerPortal = new ComponentPortal(OwlDateTimeContainerComponent, this.viewContainerRef);\n }\n if (!this.popupRef) {\n this.createPopup();\n }\n if (!this.popupRef.hasAttached()) {\n var componentRef = this.popupRef.attach(this.pickerContainerPortal);\n this.pickerContainer = componentRef.instance;\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(function () {\n _this.popupRef.updatePosition();\n });\n this.pickerOpenedStreamSub =\n this.pickerContainer.pickerOpenedStream.pipe(take(1)).subscribe(function () {\n _this.afterPickerOpen.emit(null);\n _this._opened = true;\n });\n }\n };\n OwlDateTimeComponent.prototype.createPopup = function () {\n var _this = this;\n var overlayConfig = new OverlayConfig({\n positionStrategy: this.createPopupPositionStrategy(),\n hasBackdrop: true,\n backdropClass: ['cdk-overlay-transparent-backdrop'].concat(coerceArray(this.backdropClass)),\n scrollStrategy: this.scrollStrategy || this.defaultScrollStrategy(),\n panelClass: ['owl-dt-popup'].concat(coerceArray(this.panelClass)),\n });\n this.popupRef = this.overlay.create(overlayConfig);\n merge(this.popupRef.backdropClick(), this.popupRef.detachments(), this.popupRef.keydownEvents().pipe(filter(function (event) { return event.keyCode === ESCAPE ||\n (_this._dtInput && event.altKey && event.keyCode === UP_ARROW); }))).subscribe(function () { return _this.close(); });\n };\n OwlDateTimeComponent.prototype.createPopupPositionStrategy = function () {\n return this.overlay.position()\n .flexibleConnectedTo(this._dtInput.elementRef)\n .withTransformOriginOn('.owl-dt-container')\n .withFlexibleDimensions(false)\n .withPush(false)\n .withPositions([\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top', offsetY: -176 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top', offsetY: -352 },\n ]);\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"backdropClass\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"panelClass\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeComponent.prototype, \"startAt\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlDateTimeComponent.prototype, \"pickerType\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlDateTimeComponent.prototype, \"pickerMode\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTimeComponent.prototype, \"disabled\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTimeComponent.prototype, \"opened\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"scrollStrategy\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"afterPickerClosed\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"afterPickerOpen\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"yearSelected\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeComponent.prototype, \"monthSelected\", void 0);\n OwlDateTimeComponent = __decorate([ __param(5, Optional()),\n __param(6, Inject(OWL_DTPICKER_SCROLL_STRATEGY)),\n __param(7, Optional()), __param(7, Inject(OWL_DATE_TIME_FORMATS)),\n __param(8, Optional()), __param(8, Inject(DOCUMENT)),\n __metadata(\"design:paramtypes\", [Overlay,\n ViewContainerRef,\n OwlDialogService,\n NgZone,\n ChangeDetectorRef,\n DateTimeAdapter, Function, Object, Object])\n ], OwlDateTimeComponent);\nOwlDateTimeComponent.ɵfac = function OwlDateTimeComponent_Factory(t) { return new (t || OwlDateTimeComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Overlay), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.OwlDialogService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DTPICKER_SCROLL_STRATEGY), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8)); };\nOwlDateTimeComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlDateTimeComponent, selectors: [[\"owl-date-time\"]], inputs: { startAt: \"startAt\", pickerType: \"pickerType\", pickerMode: \"pickerMode\", disabled: \"disabled\", opened: \"opened\", backdropClass: \"backdropClass\", panelClass: \"panelClass\", scrollStrategy: \"scrollStrategy\" }, outputs: { afterPickerClosed: \"afterPickerClosed\", afterPickerOpen: \"afterPickerOpen\", yearSelected: \"yearSelected\", monthSelected: \"monthSelected\" }, exportAs: [\"owlDateTime\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function OwlDateTimeComponent_Template(rf, ctx) { }, styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeComponent, [{\n type: Component,\n args: [{\n selector: 'owl-date-time',\n exportAs: 'owlDateTime',\n template: \"\",\n styles: [\"\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n }]\n }], function () { return [{ type: ɵngcc1.Overlay }, { type: ɵngcc0.ViewContainerRef }, { type: ɵngcc2.OwlDialogService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc3.DateTimeAdapter, decorators: [{\n type: Optional\n }] }, { type: Function, decorators: [{\n type: Inject,\n args: [OWL_DTPICKER_SCROLL_STRATEGY]\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_FORMATS]\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { startAt: [{\n type: Input\n }], pickerType: [{\n type: Input\n }], pickerMode: [{\n type: Input\n }], disabled: [{\n type: Input\n }], opened: [{\n type: Input\n }], backdropClass: [{\n type: Input\n }], panelClass: [{\n type: Input\n }], scrollStrategy: [{\n type: Input\n }], afterPickerClosed: [{\n type: Output\n }], afterPickerOpen: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }] }); })();\n return OwlDateTimeComponent;\n}(OwlDateTime));\nexport { OwlDateTimeComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbImRhdGUtdGltZS1waWNrZXIuY29tcG9uZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQVNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQTZCO0FBQzdCO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fcGFyYW0gPSAodGhpcyAmJiB0aGlzLl9fcGFyYW0pIHx8IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn07XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgTmdab25lLCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBFU0NBUEUsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX0RBVEVfVElNRV9GT1JNQVRTIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWUgfSBmcm9tICcuL2RhdGUtdGltZS5jbGFzcyc7XG5pbXBvcnQgeyBPd2xEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vZGlhbG9nJztcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmV4cG9ydCB2YXIgT1dMX0RUUElDS0VSX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbignb3dsLWR0cGlja2VyLXNjcm9sbC1zdHJhdGVneScpO1xuZXhwb3J0IGZ1bmN0aW9uIE9XTF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfUFJPVklERVJfRkFDVE9SWShvdmVybGF5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpOyB9O1xufVxuZXhwb3J0IHZhciBPV0xfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSID0ge1xuICAgIHByb3ZpZGU6IE9XTF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1ksXG4gICAgZGVwczogW092ZXJsYXldLFxuICAgIHVzZUZhY3Rvcnk6IE9XTF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfUFJPVklERVJfRkFDVE9SWSxcbn07XG52YXIgT3dsRGF0ZVRpbWVDb21wb25lbnQgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPd2xEYXRlVGltZUNvbXBvbmVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPd2xEYXRlVGltZUNvbXBvbmVudChvdmVybGF5LCB2aWV3Q29udGFpbmVyUmVmLCBkaWFsb2dTZXJ2aWNlLCBuZ1pvbmUsIGNoYW5nZURldGVjdG9yLCBkYXRlVGltZUFkYXB0ZXIsIGRlZmF1bHRTY3JvbGxTdHJhdGVneSwgZGF0ZVRpbWVGb3JtYXRzLCBkb2N1bWVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkYXRlVGltZUFkYXB0ZXIsIGRhdGVUaW1lRm9ybWF0cykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICAgIF90aGlzLnZpZXdDb250YWluZXJSZWYgPSB2aWV3Q29udGFpbmVyUmVmO1xuICAgICAgICBfdGhpcy5kaWFsb2dTZXJ2aWNlID0gZGlhbG9nU2VydmljZTtcbiAgICAgICAgX3RoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICBfdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICBfdGhpcy5kYXRlVGltZUFkYXB0ZXIgPSBkYXRlVGltZUFkYXB0ZXI7XG4gICAgICAgIF90aGlzLmRlZmF1bHRTY3JvbGxTdHJhdGVneSA9IGRlZmF1bHRTY3JvbGxTdHJhdGVneTtcbiAgICAgICAgX3RoaXMuZGF0ZVRpbWVGb3JtYXRzID0gZGF0ZVRpbWVGb3JtYXRzO1xuICAgICAgICBfdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICBfdGhpcy5iYWNrZHJvcENsYXNzID0gW107XG4gICAgICAgIF90aGlzLnBhbmVsQ2xhc3MgPSBbXTtcbiAgICAgICAgX3RoaXMuX3BpY2tlclR5cGUgPSAnYm90aCc7XG4gICAgICAgIF90aGlzLl9waWNrZXJNb2RlID0gJ3BvcHVwJztcbiAgICAgICAgX3RoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5hZnRlclBpY2tlckNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgX3RoaXMuYWZ0ZXJQaWNrZXJPcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBfdGhpcy55ZWFyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIF90aGlzLm1vbnRoU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIF90aGlzLmNvbmZpcm1TZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgX3RoaXMuZGlzYWJsZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIF90aGlzLmR0SW5wdXRTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIF90aGlzLmhpZGVQaWNrZXJTdHJlYW1TdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIF90aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1YiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgX3RoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICBfdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSBudWxsO1xuICAgICAgICBfdGhpcy5fc2VsZWN0ZWRzID0gW107XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzdGFydEF0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2R0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9kdElucHV0LnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dC52YWx1ZXNbMF0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fZHRJbnB1dC5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXQudmFsdWVzWzFdIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0QXQgPSB0aGlzLmdldFZhbGlkRGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyVHlwZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BpY2tlclR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5fcGlja2VyVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tlclR5cGUgPSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2R0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHRJbnB1dC5mb3JtYXROYXRpdmVJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb2RlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tlck1vZGUgPSBtb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGlja2VyTW9kZSA9ICdkaWFsb2cnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9kdElucHV0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9kdElucHV0LmRpc2FibGVkIDogISF0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwib3BlbmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhbCA/IHRoaXMub3BlbigpIDogdGhpcy5jbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImR0SW5wdXRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRzID0gdmFsdWVzO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5EYXRlVGltZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2R0SW5wdXQgJiYgdGhpcy5fZHRJbnB1dC5taW47XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibWF4RGF0ZVRpbWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0ICYmIHRoaXMuX2R0SW5wdXQubWF4O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImRhdGVUaW1lRmlsdGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZHRJbnB1dCAmJiB0aGlzLl9kdElucHV0LmRhdGVUaW1lRmlsdGVyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdE1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0LnNlbGVjdE1vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblNpbmdsZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0LmlzSW5TaW5nbGVNb2RlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImlzSW5SYW5nZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kdElucHV0LmlzSW5SYW5nZU1vZGU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZS5uZ09uSW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZS5uZ09uRGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmR0SW5wdXRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAodGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZS5yZWdpc3RlcklucHV0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLl9kdElucHV0KSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignQSBPd2wgRGF0ZVRpbWVQaWNrZXIgY2FuIG9ubHkgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2R0SW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5kdElucHV0U3ViID0gdGhpcy5fZHRJbnB1dC52YWx1ZUNoYW5nZS5zdWJzY3JpYmUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5zZWxlY3RlZHMgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF90aGlzLnNlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZHRJbnB1dCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0F0dGVtcHRlZCB0byBvcGVuIGFuIERhdGVUaW1lUGlja2VyIHdpdGggbm8gYXNzb2NpYXRlZCBpbnB1dC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLl9kdElucHV0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHMgPSB0aGlzLl9kdElucHV0LnZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiB0aGlzLnBpY2tlclR5cGUgIT09ICdjYWxlbmRhcicgJiYgdGhpcy5fc3RhcnRBdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLnNlbGVjdGVkKSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5zZWxlY3RlZCksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5zZWxlY3RlZCksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldEhvdXJzKHRoaXMuX3N0YXJ0QXQpLCB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMuX3N0YXJ0QXQpLCB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRTZWNvbmRzKHRoaXMuX3N0YXJ0QXQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpY2tlck1vZGUgPT09ICdkaWFsb2cnID9cbiAgICAgICAgICAgIHRoaXMub3BlbkFzRGlhbG9nKCkgOlxuICAgICAgICAgICAgdGhpcy5vcGVuQXNQb3B1cCgpO1xuICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lci5waWNrZXIgPSB0aGlzO1xuICAgICAgICB0aGlzLmhpZGVQaWNrZXJTdHJlYW1TdWIgPSB0aGlzLnBpY2tlckNvbnRhaW5lci5oaWRlUGlja2VyU3RyZWFtXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1YiA9IHRoaXMucGlja2VyQ29udGFpbmVyLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVxuICAgICAgICAgICAgLnN1YnNjcmliZShmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIF90aGlzLmNvbmZpcm1TZWxlY3QoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZHMgPSBkYXRlLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5waWNrZXJNb2RlICE9PSAnZGlhbG9nJyAmJlxuICAgICAgICAgICAgdGhpcy5waWNrZXJUeXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgICAoKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScgJiYgdGhpcy5zZWxlY3RlZCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJyAmJiB0aGlzLnNlbGVjdGVkc1swXSkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgJiYgdGhpcy5zZWxlY3RlZHNbMV0pIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyAmJiB0aGlzLnNlbGVjdGVkc1swXSAmJiB0aGlzLnNlbGVjdGVkc1sxXSkpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdFllYXIgPSBmdW5jdGlvbiAobm9ybWFsaXplZFllYXIpIHtcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdChub3JtYWxpemVkWWVhcik7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUuc2VsZWN0TW9udGggPSBmdW5jdGlvbiAobm9ybWFsaXplZE1vbnRoKSB7XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KG5vcm1hbGl6ZWRNb250aCk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5fb3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9wdXBSZWYgJiYgdGhpcy5wb3B1cFJlZi5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbCAmJiB0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbC5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbC5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oaWRlUGlja2VyU3RyZWFtU3ViKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVQaWNrZXJTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVBpY2tlclN0cmVhbVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlybVNlbGVjdGVkU3RyZWFtU3ViKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZFN0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRTdHJlYW1TdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBpY2tlck9wZW5lZFN0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJPcGVuZWRTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyT3BlbmVkU3RyZWFtU3ViID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaWFsb2dSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbXBsZXRlQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuX29wZW5lZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBfdGhpcy5hZnRlclBpY2tlckNsb3NlZC5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgIF90aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cygpO1xuICAgICAgICAgICAgc2V0VGltZW91dChjb21wbGV0ZUNsb3NlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBsZXRlQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLmNvbmZpcm1TZWxlY3QgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5zdGFydEF0IHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgICAgICAgICAgdGhpcy5jb25maXJtU2VsZWN0ZWRDaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1TZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZS5vcGVuQXNEaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBbJ2Nkay1vdmVybGF5LWRhcmstYmFja2Ryb3AnXS5jb25jYXQoY29lcmNlQXJyYXkodGhpcy5iYWNrZHJvcENsYXNzKSksXG4gICAgICAgICAgICBwYW5lQ2xhc3M6IFsnb3dsLWR0LWRpYWxvZyddLmNvbmNhdChjb2VyY2VBcnJheSh0aGlzLnBhbmVsQ2xhc3MpKSxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5IHx8IHRoaXMuZGVmYXVsdFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lciA9IHRoaXMuZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlck9wZW4oKS5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuYWZ0ZXJQaWNrZXJPcGVuLmVtaXQobnVsbCk7XG4gICAgICAgICAgICBfdGhpcy5fb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmNsb3NlKCk7IH0pO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLm9wZW5Bc1BvcHVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMucGlja2VyQ29udGFpbmVyUG9ydGFsKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmLmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRSZWYgPSB0aGlzLnBvcHVwUmVmLmF0dGFjaCh0aGlzLnBpY2tlckNvbnRhaW5lclBvcnRhbCk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNvbnRhaW5lciA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wb3B1cFJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlck9wZW5lZFN0cmVhbVN1YiA9XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDb250YWluZXIucGlja2VyT3BlbmVkU3RyZWFtLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYWZ0ZXJQaWNrZXJPcGVuLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9vcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlUG9wdXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5jcmVhdGVQb3B1cFBvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogWydjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCddLmNvbmNhdChjb2VyY2VBcnJheSh0aGlzLmJhY2tkcm9wQ2xhc3MpKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLnNjcm9sbFN0cmF0ZWd5IHx8IHRoaXMuZGVmYXVsdFNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ293bC1kdC1wb3B1cCddLmNvbmNhdChjb2VyY2VBcnJheSh0aGlzLnBhbmVsQ2xhc3MpKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKG92ZXJsYXlDb25maWcpO1xuICAgICAgICBtZXJnZSh0aGlzLnBvcHVwUmVmLmJhY2tkcm9wQ2xpY2soKSwgdGhpcy5wb3B1cFJlZi5kZXRhY2htZW50cygpLCB0aGlzLnBvcHVwUmVmLmtleWRvd25FdmVudHMoKS5waXBlKGZpbHRlcihmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSB8fFxuICAgICAgICAgICAgKF90aGlzLl9kdElucHV0ICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXlDb2RlID09PSBVUF9BUlJPVyk7IH0pKSkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmNsb3NlKCk7IH0pO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLmNyZWF0ZVBvcHVwUG9zaXRpb25TdHJhdGVneSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheS5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9kdElucHV0LmVsZW1lbnRSZWYpXG4gICAgICAgICAgICAud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCcub3dsLWR0LWNvbnRhaW5lcicpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ3RvcCcgfSxcbiAgICAgICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcbiAgICAgICAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAndG9wJyB9LFxuICAgICAgICAgICAgeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdib3R0b20nIH0sXG4gICAgICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnLCBvZmZzZXRZOiAtMTc2IH0sXG4gICAgICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnLCBvZmZzZXRZOiAtMzUyIH0sXG4gICAgICAgIF0pO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImJhY2tkcm9wQ2xhc3NcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwicGFuZWxDbGFzc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzdGFydEF0XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmddKVxuICAgIF0sIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJUeXBlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmddKVxuICAgIF0sIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJNb2RlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQm9vbGVhbl0pXG4gICAgXSwgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQm9vbGVhbl0pXG4gICAgXSwgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcIm9wZW5lZFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwic2Nyb2xsU3RyYXRlZ3lcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcImFmdGVyUGlja2VyQ2xvc2VkXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIE93bERhdGVUaW1lQ29tcG9uZW50LnByb3RvdHlwZSwgXCJhZnRlclBpY2tlck9wZW5cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsRGF0ZVRpbWVDb21wb25lbnQucHJvdG90eXBlLCBcInllYXJTZWxlY3RlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xEYXRlVGltZUNvbXBvbmVudC5wcm90b3R5cGUsIFwibW9udGhTZWxlY3RlZFwiLCB2b2lkIDApO1xuICAgIE93bERhdGVUaW1lQ29tcG9uZW50ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIENvbXBvbmVudCh7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ293bC1kYXRlLXRpbWUnLFxuICAgICAgICAgICAgZXhwb3J0QXM6ICdvd2xEYXRlVGltZScsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCJcIixcbiAgICAgICAgICAgIHN0eWxlczogW1wiXCJdLFxuICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICAgICAgfSksXG4gICAgICAgIF9fcGFyYW0oNSwgT3B0aW9uYWwoKSksXG4gICAgICAgIF9fcGFyYW0oNiwgSW5qZWN0KE9XTF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kpKSxcbiAgICAgICAgX19wYXJhbSg3LCBPcHRpb25hbCgpKSwgX19wYXJhbSg3LCBJbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTKSksXG4gICAgICAgIF9fcGFyYW0oOCwgT3B0aW9uYWwoKSksIF9fcGFyYW0oOCwgSW5qZWN0KERPQ1VNRU5UKSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT3ZlcmxheSxcbiAgICAgICAgICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBPd2xEaWFsb2dTZXJ2aWNlLFxuICAgICAgICAgICAgTmdab25lLFxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICBEYXRlVGltZUFkYXB0ZXIsIEZ1bmN0aW9uLCBPYmplY3QsIE9iamVjdF0pXG4gICAgXSwgT3dsRGF0ZVRpbWVDb21wb25lbnQpO1xuICAgIHJldHVybiBPd2xEYXRlVGltZUNvbXBvbmVudDtcbn0oT3dsRGF0ZVRpbWUpKTtcbmV4cG9ydCB7IE93bERhdGVUaW1lQ29tcG9uZW50IH07XG4iXX0=","import { animate, animateChild, group, query, state, style, transition, trigger } from '@angular/animations';\nexport var owlDateTimePickerAnimations = {\n transformPicker: trigger('transformPicker', [\n state('void', style({ opacity: 0, transform: 'scale(1, 0)' })),\n state('enter', style({ opacity: 1, transform: 'scale(1, 1)' })),\n transition('void => enter', group([\n query('@fadeInPicker', animateChild(), { optional: true }),\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')\n ])),\n transition('enter => void', animate('100ms linear', style({ opacity: 0 })))\n ]),\n fadeInPicker: trigger('fadeInPicker', [\n state('enter', style({ opacity: 1 })),\n state('void', style({ opacity: 0 })),\n transition('void => enter', animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')),\n ])\n};\n","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './date-time-picker-intl.service';\nimport * as ɵngcc2 from './adapter/date-time-adapter.class';\nimport * as ɵngcc3 from './calendar-body.component';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Optional, Output, ViewChild } from '@angular/core';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nexport var YEARS_PER_ROW = 3;\nexport var YEAR_ROWS = 7;\nvar OwlMultiYearViewComponent = (function () {\n function OwlMultiYearViewComponent(cdRef, pickerIntl, dateTimeAdapter) {\n this.cdRef = cdRef;\n this.pickerIntl = pickerIntl;\n this.dateTimeAdapter = dateTimeAdapter;\n this._selectMode = 'single';\n this._selecteds = [];\n this.initiated = false;\n this.change = new EventEmitter();\n this.yearSelected = new EventEmitter();\n this.pickerMomentChange = new EventEmitter();\n this.keyboardEnter = new EventEmitter();\n }\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"selectMode\", {\n get: function () {\n return this._selectMode;\n },\n set: function (val) {\n this._selectMode = val;\n if (this.initiated) {\n this.setSelectedYears();\n this.cdRef.markForCheck();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"selected\", {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n var oldSelected = this._selected;\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\n this.setSelectedYears();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"selecteds\", {\n get: function () {\n return this._selecteds;\n },\n set: function (values) {\n var _this = this;\n this._selecteds = values.map(function (v) {\n v = _this.dateTimeAdapter.deserialize(v);\n return _this.getValidDate(v);\n });\n this.setSelectedYears();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"pickerMoment\", {\n get: function () {\n return this._pickerMoment;\n },\n set: function (value) {\n var oldMoment = this._pickerMoment;\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();\n if (oldMoment && this._pickerMoment &&\n !this.isSameYearList(oldMoment, this._pickerMoment)) {\n this.generateYearList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"dateFilter\", {\n get: function () {\n return this._dateFilter;\n },\n set: function (filter) {\n this._dateFilter = filter;\n if (this.initiated) {\n this.generateYearList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"minDate\", {\n get: function () {\n return this._minDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateYearList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"maxDate\", {\n get: function () {\n return this._maxDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateYearList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"todayYear\", {\n get: function () {\n return this._todayYear;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"years\", {\n get: function () {\n return this._years;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"selectedYears\", {\n get: function () {\n return this._selectedYears;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this.selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\n || this.selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"activeCell\", {\n get: function () {\n if (this._pickerMoment) {\n return this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"tableHeader\", {\n get: function () {\n if (this._years && this._years.length > 0) {\n return this._years[0][0].displayValue + \" ~ \" + this._years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"prevButtonLabel\", {\n get: function () {\n return this.pickerIntl.prevMultiYearLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"nextButtonLabel\", {\n get: function () {\n return this.pickerIntl.nextMultiYearLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"owlDTCalendarView\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMultiYearViewComponent.prototype, \"owlDTCalendarMultiYearView\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n OwlMultiYearViewComponent.prototype.ngOnInit = function () {\n };\n OwlMultiYearViewComponent.prototype.ngAfterContentInit = function () {\n this._todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now());\n this.generateYearList();\n this.initiated = true;\n };\n OwlMultiYearViewComponent.prototype.selectCalendarCell = function (cell) {\n this.selectYear(cell.value);\n };\n OwlMultiYearViewComponent.prototype.selectYear = function (year) {\n this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1));\n var firstDateOfMonth = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), 1);\n var daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);\n var selected = this.dateTimeAdapter.createDate(year, this.dateTimeAdapter.getMonth(this.pickerMoment), Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));\n this.change.emit(selected);\n };\n OwlMultiYearViewComponent.prototype.prevYearList = function (event) {\n this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1 * YEAR_ROWS * YEARS_PER_ROW);\n this.generateYearList();\n event.preventDefault();\n };\n OwlMultiYearViewComponent.prototype.nextYearList = function (event) {\n this._pickerMoment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, YEAR_ROWS * YEARS_PER_ROW);\n this.generateYearList();\n event.preventDefault();\n };\n OwlMultiYearViewComponent.prototype.generateYearList = function () {\n this._years = [];\n var pickerMomentYear = this.dateTimeAdapter.getYear(this._pickerMoment);\n var offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS);\n for (var i = 0; i < YEAR_ROWS; i++) {\n var row = [];\n for (var j = 0; j < YEARS_PER_ROW; j++) {\n var year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW);\n var yearCell = this.createYearCell(year);\n row.push(yearCell);\n }\n this._years.push(row);\n }\n return;\n };\n OwlMultiYearViewComponent.prototype.previousEnabled = function () {\n if (!this.minDate) {\n return true;\n }\n return !this.minDate || !this.isSameYearList(this._pickerMoment, this.minDate);\n };\n OwlMultiYearViewComponent.prototype.nextEnabled = function () {\n return !this.maxDate || !this.isSameYearList(this._pickerMoment, this.maxDate);\n };\n OwlMultiYearViewComponent.prototype.handleCalendarKeydown = function (event) {\n var moment;\n switch (event.keyCode) {\n case LEFT_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1);\n this.pickerMomentChange.emit(moment);\n break;\n case RIGHT_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, 1);\n this.pickerMomentChange.emit(moment);\n break;\n case UP_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -1 * YEARS_PER_ROW);\n this.pickerMomentChange.emit(moment);\n break;\n case DOWN_ARROW:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, YEARS_PER_ROW);\n this.pickerMomentChange.emit(moment);\n break;\n case HOME:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, -this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS));\n this.pickerMomentChange.emit(moment);\n break;\n case END:\n moment = this.dateTimeAdapter.addCalendarYears(this._pickerMoment, (YEARS_PER_ROW * YEAR_ROWS) - this.dateTimeAdapter.getYear(this._pickerMoment) % (YEARS_PER_ROW * YEAR_ROWS) - 1);\n this.pickerMomentChange.emit(moment);\n break;\n case PAGE_UP:\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? -10 * (YEARS_PER_ROW * YEAR_ROWS) : -1 * (YEARS_PER_ROW * YEAR_ROWS));\n this.pickerMomentChange.emit(moment);\n break;\n case PAGE_DOWN:\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? 10 * (YEARS_PER_ROW * YEAR_ROWS) : (YEARS_PER_ROW * YEAR_ROWS));\n this.pickerMomentChange.emit(moment);\n break;\n case ENTER:\n this.selectYear(this.dateTimeAdapter.getYear(this._pickerMoment));\n this.keyboardEnter.emit();\n break;\n default:\n return;\n }\n this.focusActiveCell();\n event.preventDefault();\n };\n OwlMultiYearViewComponent.prototype.createYearCell = function (year) {\n var startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1);\n var ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear);\n var cellClass = 'owl-dt-year-' + year;\n return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass);\n };\n OwlMultiYearViewComponent.prototype.setSelectedYears = function () {\n var _this = this;\n this._selectedYears = [];\n if (this.isInSingleMode && this.selected) {\n this._selectedYears[0] = this.dateTimeAdapter.getYear(this.selected);\n }\n if (this.isInRangeMode && this.selecteds) {\n this._selectedYears = this.selecteds.map(function (selected) {\n if (_this.dateTimeAdapter.isValid(selected)) {\n return _this.dateTimeAdapter.getYear(selected);\n }\n else {\n return null;\n }\n });\n }\n };\n OwlMultiYearViewComponent.prototype.isYearEnabled = function (year) {\n if (year === undefined || year === null ||\n (this.maxDate && year > this.dateTimeAdapter.getYear(this.maxDate)) ||\n (this.minDate && year < this.dateTimeAdapter.getYear(this.minDate))) {\n return false;\n }\n if (!this.dateFilter) {\n return true;\n }\n var firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1);\n for (var date = firstOfYear; this.dateTimeAdapter.getYear(date) == year; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n return false;\n };\n OwlMultiYearViewComponent.prototype.isSameYearList = function (date1, date2) {\n return Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) ===\n Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS));\n };\n OwlMultiYearViewComponent.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n OwlMultiYearViewComponent.prototype.focusActiveCell = function () {\n this.calendarBodyElm.focusActiveCell();\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlMultiYearViewComponent.prototype, \"selectMode\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMultiYearViewComponent.prototype, \"selected\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], OwlMultiYearViewComponent.prototype, \"selecteds\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMultiYearViewComponent.prototype, \"pickerMoment\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], OwlMultiYearViewComponent.prototype, \"dateFilter\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMultiYearViewComponent.prototype, \"minDate\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMultiYearViewComponent.prototype, \"maxDate\", null);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlMultiYearViewComponent.prototype, \"change\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlMultiYearViewComponent.prototype, \"yearSelected\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], OwlMultiYearViewComponent.prototype, \"pickerMomentChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], OwlMultiYearViewComponent.prototype, \"keyboardEnter\", void 0);\n __decorate([\n ViewChild(OwlCalendarBodyComponent),\n __metadata(\"design:type\", OwlCalendarBodyComponent)\n ], OwlMultiYearViewComponent.prototype, \"calendarBodyElm\", void 0);\n __decorate([\n HostBinding('class.owl-dt-calendar-view'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlMultiYearViewComponent.prototype, \"owlDTCalendarView\", null);\n __decorate([\n HostBinding('class.owl-dt-calendar-multi-year-view'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlMultiYearViewComponent.prototype, \"owlDTCalendarMultiYearView\", null);\n OwlMultiYearViewComponent = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [ChangeDetectorRef,\n OwlDateTimeIntl,\n DateTimeAdapter])\n ], OwlMultiYearViewComponent);\nOwlMultiYearViewComponent.ɵfac = function OwlMultiYearViewComponent_Factory(t) { return new (t || OwlMultiYearViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.OwlDateTimeIntl), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateTimeAdapter, 8)); };\nOwlMultiYearViewComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlMultiYearViewComponent, selectors: [[\"owl-date-time-multi-year-view\"]], viewQuery: function OwlMultiYearViewComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(OwlCalendarBodyComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.calendarBodyElm = _t.first);\n } }, hostVars: 4, hostBindings: function OwlMultiYearViewComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar-view\", ctx.owlDTCalendarView)(\"owl-dt-calendar-multi-year-view\", ctx.owlDTCalendarMultiYearView);\n } }, inputs: { selectMode: \"selectMode\", selected: \"selected\", selecteds: \"selecteds\", pickerMoment: \"pickerMoment\", dateFilter: \"dateFilter\", minDate: \"minDate\", maxDate: \"maxDate\" }, outputs: { change: \"change\", yearSelected: \"yearSelected\", pickerMomentChange: \"pickerMomentChange\", keyboardEnter: \"keyboardEnter\" }, decls: 14, vars: 12, consts: [[\"type\", \"button\", \"tabindex\", \"0\", 1, \"owl-dt-control-button\", \"owl-dt-control-arrow-button\", 3, \"disabled\", \"click\"], [\"tabindex\", \"-1\", 1, \"owl-dt-control-button-content\"], [\"xmlns\", \"http://www.w3.org/2000/svg\", 0, \"xmlns\", \"xlink\", \"http://www.w3.org/1999/xlink\", \"version\", \"1.1\", \"x\", \"0px\", \"y\", \"0px\", \"viewBox\", \"0 0 250.738 250.738\", 0, \"xml\", \"space\", \"preserve\", \"width\", \"100%\", \"height\", \"100%\", 2, \"enable-background\", \"new 0 0 250.738 250.738\"], [\"d\", \"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\", 2, \"fill-rule\", \"evenodd\", \"clip-rule\", \"evenodd\"], [1, \"owl-dt-calendar-table\", \"owl-dt-calendar-multi-year-table\"], [1, \"owl-dt-calendar-header\"], [\"colspan\", \"3\"], [\"owl-date-time-calendar-body\", \"\", \"role\", \"grid\", 3, \"rows\", \"numCols\", \"cellRatio\", \"activeCell\", \"todayValue\", \"selectedValues\", \"selectMode\", \"keydown\", \"select\"], [\"version\", \"1.1\", \"xmlns\", \"http://www.w3.org/2000/svg\", 0, \"xmlns\", \"xlink\", \"http://www.w3.org/1999/xlink\", \"x\", \"0px\", \"y\", \"0px\", \"viewBox\", \"0 0 250.738 250.738\", 0, \"xml\", \"space\", \"preserve\", 2, \"enable-background\", \"new 0 0 250.738 250.738\"], [\"d\", \"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\\n C197.237,120.447,195.534,115.448,191.75,111.689z\", 2, \"fill-rule\", \"evenodd\", \"clip-rule\", \"evenodd\"]], template: function OwlMultiYearViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function OwlMultiYearViewComponent_Template_button_click_0_listener($event) { return ctx.prevYearList($event); });\n ɵngcc0.ɵɵelementStart(1, \"span\", 1);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(2, \"svg\", 2);\n ɵngcc0.ɵɵelement(3, \"path\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelementStart(4, \"table\", 4);\n ɵngcc0.ɵɵelementStart(5, \"thead\", 5);\n ɵngcc0.ɵɵelementStart(6, \"tr\");\n ɵngcc0.ɵɵelementStart(7, \"th\", 6);\n ɵngcc0.ɵɵtext(8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"tbody\", 7);\n ɵngcc0.ɵɵlistener(\"keydown\", function OwlMultiYearViewComponent_Template_tbody_keydown_9_listener($event) { return ctx.handleCalendarKeydown($event); })(\"select\", function OwlMultiYearViewComponent_Template_tbody_select_9_listener($event) { return ctx.selectCalendarCell($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"button\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function OwlMultiYearViewComponent_Template_button_click_10_listener($event) { return ctx.nextYearList($event); });\n ɵngcc0.ɵɵelementStart(11, \"span\", 1);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(12, \"svg\", 8);\n ɵngcc0.ɵɵelement(13, \"path\", 9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx.previousEnabled());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.prevButtonLabel);\n ɵngcc0.ɵɵadvance(8);\n ɵngcc0.ɵɵtextInterpolate(ctx.tableHeader);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rows\", ctx.years)(\"numCols\", 3)(\"cellRatio\", 3 / 7)(\"activeCell\", ctx.activeCell)(\"todayValue\", ctx.todayYear)(\"selectedValues\", ctx.selectedYears)(\"selectMode\", ctx.selectMode);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx.nextEnabled());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.nextButtonLabel);\n } }, directives: [ɵngcc3.OwlCalendarBodyComponent], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlMultiYearViewComponent, [{\n type: Component,\n args: [{\n selector: 'owl-date-time-multi-year-view',\n template: \"
{{tableHeader}}
\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.OwlDateTimeIntl }, { type: ɵngcc2.DateTimeAdapter, decorators: [{\n type: Optional\n }] }]; }, { change: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], pickerMomentChange: [{\n type: Output\n }], keyboardEnter: [{\n type: Output\n }], selectMode: [{\n type: Input\n }], selected: [{\n type: Input\n }], selecteds: [{\n type: Input\n }], pickerMoment: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], owlDTCalendarView: [{\n type: HostBinding,\n args: ['class.owl-dt-calendar-view']\n }], owlDTCalendarMultiYearView: [{\n type: HostBinding,\n args: ['class.owl-dt-calendar-multi-year-view']\n }], calendarBodyElm: [{\n type: ViewChild,\n args: [OwlCalendarBodyComponent]\n }] }); })();\n return OwlMultiYearViewComponent;\n}());\nexport { OwlMultiYearViewComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBUU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBa0M7QUFDbEM7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBDYWxlbmRhckNlbGwsIE93bENhbGVuZGFyQm9keUNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5ELCBFTlRFUiwgSE9NRSwgTEVGVF9BUlJPVywgUEFHRV9ET1dOLCBQQUdFX1VQLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWludGwuc2VydmljZSc7XG5leHBvcnQgdmFyIFlFQVJTX1BFUl9ST1cgPSAzO1xuZXhwb3J0IHZhciBZRUFSX1JPV1MgPSA3O1xudmFyIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQoY2RSZWYsIHBpY2tlckludGwsIGRhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICB0aGlzLmNkUmVmID0gY2RSZWY7XG4gICAgICAgIHRoaXMucGlja2VySW50bCA9IHBpY2tlckludGw7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyID0gZGF0ZVRpbWVBZGFwdGVyO1xuICAgICAgICB0aGlzLl9zZWxlY3RNb2RlID0gJ3NpbmdsZSc7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IFtdO1xuICAgICAgICB0aGlzLmluaXRpYXRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmtleWJvYXJkRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RNb2RlID0gdmFsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFllYXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb2xkU2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZDtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzU2FtZURheShvbGRTZWxlY3RlZCwgdGhpcy5fc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFllYXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IHZhbHVlcy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB2ID0gX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHYpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5nZXRWYWxpZERhdGUodik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRZZWFycygpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyTW9tZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGlja2VyTW9tZW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9sZE1vbWVudCA9IHRoaXMuX3BpY2tlck1vbWVudDtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fcGlja2VyTW9tZW50ID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgICAgICAgICAgaWYgKG9sZE1vbWVudCAmJiB0aGlzLl9waWNrZXJNb21lbnQgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5pc1NhbWVZZWFyTGlzdChvbGRNb21lbnQsIHRoaXMuX3BpY2tlck1vbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImRhdGVGaWx0ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlRmlsdGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWF0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1pbkRhdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJMaXN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwidG9kYXlZZWFyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9kYXlZZWFyO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwieWVhcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl95ZWFycztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkWWVhcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFllYXJzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblNpbmdsZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblJhbmdlTW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fCB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbyc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJhY3RpdmVDZWxsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGlja2VyTW9tZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KSAlIChZRUFSU19QRVJfUk9XICogWUVBUl9ST1dTKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInRhYmxlSGVhZGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5feWVhcnMgJiYgdGhpcy5feWVhcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95ZWFyc1swXVswXS5kaXNwbGF5VmFsdWUgKyBcIiB+IFwiICsgdGhpcy5feWVhcnNbWUVBUl9ST1dTIC0gMV1bWUVBUlNfUEVSX1JPVyAtIDFdLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInByZXZCdXR0b25MYWJlbFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5wcmV2TXVsdGlZZWFyTGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJuZXh0QnV0dG9uTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwubmV4dE11bHRpWWVhckxhYmVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhclZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhck11bHRpWWVhclZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5uZ09uSW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB9O1xuICAgIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fdG9kYXlZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyTGlzdCgpO1xuICAgICAgICB0aGlzLmluaXRpYXRlZCA9IHRydWU7XG4gICAgfTtcbiAgICBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5zZWxlY3RDYWxlbmRhckNlbGwgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdFllYXIoY2VsbC52YWx1ZSk7XG4gICAgfTtcbiAgICBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5zZWxlY3RZZWFyID0gZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdCh0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIDAsIDEpKTtcbiAgICAgICAgdmFyIGZpcnN0RGF0ZU9mTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMucGlja2VyTW9tZW50KSwgMSk7XG4gICAgICAgIHZhciBkYXlzSW5Nb250aCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKGZpcnN0RGF0ZU9mTW9udGgpO1xuICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMucGlja2VyTW9tZW50KSwgTWF0aC5taW4oZGF5c0luTW9udGgsIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpKSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnModGhpcy5waWNrZXJNb21lbnQpLCB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyh0aGlzLnBpY2tlck1vbWVudCkpO1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHNlbGVjdGVkKTtcbiAgICB9O1xuICAgIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLnByZXZZZWFyTGlzdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCAtMSAqIFlFQVJfUk9XUyAqIFlFQVJTX1BFUl9ST1cpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhckxpc3QoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLm5leHRZZWFyTGlzdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCBZRUFSX1JPV1MgKiBZRUFSU19QRVJfUk9XKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJMaXN0KCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5nZW5lcmF0ZVllYXJMaXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl95ZWFycyA9IFtdO1xuICAgICAgICB2YXIgcGlja2VyTW9tZW50WWVhciA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fcGlja2VyTW9tZW50KTtcbiAgICAgICAgdmFyIG9mZnNldCA9IHBpY2tlck1vbWVudFllYXIgJSAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgWUVBUl9ST1dTOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByb3cgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgWUVBUlNfUEVSX1JPVzsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHllYXIgPSBwaWNrZXJNb21lbnRZZWFyIC0gb2Zmc2V0ICsgKGogKyBpICogWUVBUlNfUEVSX1JPVyk7XG4gICAgICAgICAgICAgICAgdmFyIHllYXJDZWxsID0gdGhpcy5jcmVhdGVZZWFyQ2VsbCh5ZWFyKTtcbiAgICAgICAgICAgICAgICByb3cucHVzaCh5ZWFyQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl95ZWFycy5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUucHJldmlvdXNFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLm1pbkRhdGUgfHwgIXRoaXMuaXNTYW1lWWVhckxpc3QodGhpcy5fcGlja2VyTW9tZW50LCB0aGlzLm1pbkRhdGUpO1xuICAgIH07XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUubmV4dEVuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tYXhEYXRlIHx8ICF0aGlzLmlzU2FtZVllYXJMaXN0KHRoaXMuX3BpY2tlck1vbWVudCwgdGhpcy5tYXhEYXRlKTtcbiAgICB9O1xuICAgIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLmhhbmRsZUNhbGVuZGFyS2V5ZG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgbW9tZW50O1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuX3BpY2tlck1vbWVudCwgLTEpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUklHSFRfQVJST1c6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9waWNrZXJNb21lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9waWNrZXJNb21lbnQsIC0xICogWUVBUlNfUEVSX1JPVyk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fcGlja2VyTW9tZW50LCBZRUFSU19QRVJfUk9XKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEhPTUU6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9waWNrZXJNb21lbnQsIC10aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkgJSAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUykpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRU5EOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fcGlja2VyTW9tZW50LCAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUykgLSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkgJSAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUykgLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBBR0VfVVA6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgZXZlbnQuYWx0S2V5ID8gLTEwICogKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpIDogLTEgKiAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUykpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEFHRV9ET1dOOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5waWNrZXJNb21lbnQsIGV2ZW50LmFsdEtleSA/IDEwICogKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpIDogKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVOVEVSOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0WWVhcih0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCkpO1xuICAgICAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRFbnRlci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUuY3JlYXRlWWVhckNlbGwgPSBmdW5jdGlvbiAoeWVhcikge1xuICAgICAgICB2YXIgc3RhcnREYXRlT2ZZZWFyID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAwLCAxKTtcbiAgICAgICAgdmFyIGFyaWFMYWJlbCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHN0YXJ0RGF0ZU9mWWVhcik7XG4gICAgICAgIHZhciBjZWxsQ2xhc3MgPSAnb3dsLWR0LXllYXItJyArIHllYXI7XG4gICAgICAgIHJldHVybiBuZXcgQ2FsZW5kYXJDZWxsKHllYXIsIHllYXIudG9TdHJpbmcoKSwgYXJpYUxhYmVsLCB0aGlzLmlzWWVhckVuYWJsZWQoeWVhciksIGZhbHNlLCBjZWxsQ2xhc3MpO1xuICAgIH07XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUuc2V0U2VsZWN0ZWRZZWFycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRZZWFycyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFllYXJzWzBdID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlICYmIHRoaXMuc2VsZWN0ZWRzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFllYXJzID0gdGhpcy5zZWxlY3RlZHMubWFwKGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5pc1llYXJFbmFibGVkID0gZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCB8fCB5ZWFyID09PSBudWxsIHx8XG4gICAgICAgICAgICAodGhpcy5tYXhEYXRlICYmIHllYXIgPiB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4RGF0ZSkpIHx8XG4gICAgICAgICAgICAodGhpcy5taW5EYXRlICYmIHllYXIgPCB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMubWluRGF0ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmaXJzdE9mWWVhciA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMCwgMSk7XG4gICAgICAgIGZvciAodmFyIGRhdGUgPSBmaXJzdE9mWWVhcjsgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKSA9PSB5ZWFyOyBkYXRlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUuaXNTYW1lWWVhckxpc3QgPSBmdW5jdGlvbiAoZGF0ZTEsIGRhdGUyKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZTEpIC8gKFlFQVJTX1BFUl9ST1cgKiBZRUFSX1JPV1MpKSA9PT1cbiAgICAgICAgICAgIE1hdGguZmxvb3IodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMikgLyAoWUVBUlNfUEVSX1JPVyAqIFlFQVJfUk9XUykpO1xuICAgIH07XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUuZ2V0VmFsaWREYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopKSA/IG9iaiA6IG51bGw7XG4gICAgfTtcbiAgICBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5mb2N1c0FjdGl2ZUNlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJCb2R5RWxtLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZ10pXG4gICAgXSwgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0TW9kZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtBcnJheV0pXG4gICAgXSwgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vbWVudFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtGdW5jdGlvbl0pXG4gICAgXSwgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiZGF0ZUZpbHRlclwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5EYXRlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1heERhdGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImNoYW5nZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJ5ZWFyU2VsZWN0ZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBFdmVudEVtaXR0ZXIpXG4gICAgXSwgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyTW9tZW50Q2hhbmdlXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRXZlbnRFbWl0dGVyKVxuICAgIF0sIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImtleWJvYXJkRW50ZXJcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgVmlld0NoaWxkKE93bENhbGVuZGFyQm9keUNvbXBvbmVudCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQpXG4gICAgXSwgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiY2FsZW5kYXJCb2R5RWxtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY2FsZW5kYXItdmlldycpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENhbGVuZGFyVmlld1wiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2NsYXNzLm93bC1kdC1jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhck11bHRpWWVhclZpZXdcIiwgbnVsbCk7XG4gICAgT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBDb21wb25lbnQoe1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdvd2wtZGF0ZS10aW1lLW11bHRpLXllYXItdmlldycsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCI8YnV0dG9uIGNsYXNzPVxcXCJvd2wtZHQtY29udHJvbC1idXR0b24gb3dsLWR0LWNvbnRyb2wtYXJyb3ctYnV0dG9uXFxcIiBbZGlzYWJsZWRdPVxcXCIhcHJldmlvdXNFbmFibGVkKClcXFwiIFthdHRyLmFyaWEtbGFiZWxdPVxcXCJwcmV2QnV0dG9uTGFiZWxcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiIChjbGljayk9XFxcInByZXZZZWFyTGlzdCgkZXZlbnQpXFxcIj48c3BhbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cXFwiU1ZHIEFycm93IExlZnRcXFwiPiAtLT4gPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHg9XFxcIjBweFxcXCIgeT1cXFwiMHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjUwLjczOCAyNTAuNzM4XFxcIiBzdHlsZT1cXFwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAuNzM4IDI1MC43Mzg7XFxcIiB4bWw6c3BhY2U9XFxcInByZXNlcnZlXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgaGVpZ2h0PVxcXCIxMDAlXFxcIj48cGF0aCBzdHlsZT1cXFwiZmlsbC1ydWxlOiBldmVub2RkOyBjbGlwLXJ1bGU6IGV2ZW5vZGQ7XFxcIiBkPVxcXCJNOTYuNjMzLDEyNS4zNjlsOTUuMDUzLTk0LjUzM2M3LjEwMS03LjA1NSw3LjEwMS0xOC40OTIsMC0yNS41NDYgICBjLTcuMS03LjA1NC0xOC42MTMtNy4wNTQtMjUuNzE0LDBMNTguOTg5LDExMS42ODljLTMuNzg0LDMuNzU5LTUuNDg3LDguNzU5LTUuMjM4LDEzLjY4Yy0wLjI0OSw0LjkyMiwxLjQ1NCw5LjkyMSw1LjIzOCwxMy42ODEgICBsMTA2Ljk4MywxMDYuMzk4YzcuMTAxLDcuMDU1LDE4LjYxMyw3LjA1NSwyNS43MTQsMGM3LjEwMS03LjA1NCw3LjEwMS0xOC40OTEsMC0yNS41NDRMOTYuNjMzLDEyNS4zNjl6XFxcIi8+PC9zdmc+PCEtLSA8L2VkaXRvci1mb2xkPiAtLT48L3NwYW4+PC9idXR0b24+PHRhYmxlIGNsYXNzPVxcXCJvd2wtZHQtY2FsZW5kYXItdGFibGUgb3dsLWR0LWNhbGVuZGFyLW11bHRpLXllYXItdGFibGVcXFwiPjx0aGVhZCBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLWhlYWRlclxcXCI+PHRyPjx0aCBjb2xzcGFuPVxcXCIzXFxcIj57e3RhYmxlSGVhZGVyfX08L3RoPjwvdHI+PC90aGVhZD48dGJvZHkgb3dsLWRhdGUtdGltZS1jYWxlbmRhci1ib2R5IHJvbGU9XFxcImdyaWRcXFwiIFtyb3dzXT1cXFwieWVhcnNcXFwiIFtudW1Db2xzXT1cXFwiM1xcXCIgW2NlbGxSYXRpb109XFxcIjMgLyA3XFxcIiBbYWN0aXZlQ2VsbF09XFxcImFjdGl2ZUNlbGxcXFwiIFt0b2RheVZhbHVlXT1cXFwidG9kYXlZZWFyXFxcIiBbc2VsZWN0ZWRWYWx1ZXNdPVxcXCJzZWxlY3RlZFllYXJzXFxcIiBbc2VsZWN0TW9kZV09XFxcInNlbGVjdE1vZGVcXFwiIChrZXlkb3duKT1cXFwiaGFuZGxlQ2FsZW5kYXJLZXlkb3duKCRldmVudClcXFwiIChzZWxlY3QpPVxcXCJzZWxlY3RDYWxlbmRhckNlbGwoJGV2ZW50KVxcXCI+PC90Ym9keT48L3RhYmxlPjxidXR0b24gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udHJvbC1hcnJvdy1idXR0b25cXFwiIFtkaXNhYmxlZF09XFxcIiFuZXh0RW5hYmxlZCgpXFxcIiBbYXR0ci5hcmlhLWxhYmVsXT1cXFwibmV4dEJ1dHRvbkxhYmVsXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiIHRhYmluZGV4PVxcXCIwXFxcIiAoY2xpY2spPVxcXCJuZXh0WWVhckxpc3QoJGV2ZW50KVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XFxcIlNWRyBBcnJvdyBSaWdodFxcXCI+IC0tPiA8c3ZnIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB4bWxuczp4bGluaz1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1xcXCIgeD1cXFwiMHB4XFxcIiB5PVxcXCIwcHhcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNTAuNzM4IDI1MC43MzhcXFwiIHN0eWxlPVxcXCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI1MC43MzggMjUwLjczODtcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiPjxwYXRoIHN0eWxlPVxcXCJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtcXFwiIGQ9XFxcIk0xOTEuNzUsMTExLjY4OUw4NC43NjYsNS4yOTFjLTcuMS03LjA1NS0xOC42MTMtNy4wNTUtMjUuNzEzLDBcXG4gICAgICAgICAgICAgICAgYy03LjEwMSw3LjA1NC03LjEwMSwxOC40OSwwLDI1LjU0NGw5NS4wNTMsOTQuNTM0bC05NS4wNTMsOTQuNTMzYy03LjEwMSw3LjA1NC03LjEwMSwxOC40OTEsMCwyNS41NDVcXG4gICAgICAgICAgICAgICAgYzcuMSw3LjA1NCwxOC42MTMsNy4wNTQsMjUuNzEzLDBMMTkxLjc1LDEzOS4wNWMzLjc4NC0zLjc1OSw1LjQ4Ny04Ljc1OSw1LjIzOC0xMy42ODFcXG4gICAgICAgICAgICAgICAgQzE5Ny4yMzcsMTIwLjQ0NywxOTUuNTM0LDExNS40NDgsMTkxLjc1LDExMS42ODl6XFxcIi8+PC9zdmc+PCEtLSA8L2VkaXRvci1mb2xkPiAtLT48L3NwYW4+PC9idXR0b24+XCIsXG4gICAgICAgICAgICBzdHlsZXM6IFtcIlwiXSxcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgIH0pLFxuICAgICAgICBfX3BhcmFtKDIsIE9wdGlvbmFsKCkpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0NoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgT3dsRGF0ZVRpbWVJbnRsLFxuICAgICAgICAgICAgRGF0ZVRpbWVBZGFwdGVyXSlcbiAgICBdLCBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50KTtcbiAgICByZXR1cm4gT3dsTXVsdGlZZWFyVmlld0NvbXBvbmVudDtcbn0oKSk7XG5leHBvcnQgeyBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50IH07XG4iXX0=","export { OwlDialogModule } from './dialog.module';\nexport { OwlDialogService } from './dialog.service';\nexport { OwlDialogRef } from './dialog-ref.class';\n","import * as ɵngcc0 from '@angular/core';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { OWL_DIALOG_SCROLL_STRATEGY_PROVIDER, OwlDialogService } from './dialog.service';\nimport { OwlDialogContainerComponent } from './dialog-container.component';\nvar OwlDialogModule = (function () {\n function OwlDialogModule() {\n }\nOwlDialogModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: OwlDialogModule });\nOwlDialogModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function OwlDialogModule_Factory(t) { return new (t || OwlDialogModule)(); }, providers: [\n OWL_DIALOG_SCROLL_STRATEGY_PROVIDER,\n OwlDialogService,\n ], imports: [[CommonModule, A11yModule, OverlayModule, PortalModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(OwlDialogModule, { declarations: function () { return [OwlDialogContainerComponent]; }, imports: function () { return [CommonModule, A11yModule, OverlayModule, PortalModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDialogModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, A11yModule, OverlayModule, PortalModule],\n exports: [],\n declarations: [\n OwlDialogContainerComponent,\n ],\n providers: [\n OWL_DIALOG_SCROLL_STRATEGY_PROVIDER,\n OwlDialogService,\n ],\n entryComponents: [\n OwlDialogContainerComponent,\n ]\n }]\n }], function () { return []; }, null); })();\n return OwlDialogModule;\n}());\nexport { OwlDialogModule };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiZGlhbG9nLm1vZHVsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dEQWdCd0I7QUFDeEI7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgT1dMX0RJQUxPR19TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIsIE93bERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQnO1xudmFyIE93bERpYWxvZ01vZHVsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGlhbG9nTW9kdWxlKCkge1xuICAgIH1cbiAgICBPd2xEaWFsb2dNb2R1bGUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgTmdNb2R1bGUoe1xuICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQTExeU1vZHVsZSwgT3ZlcmxheU1vZHVsZSwgUG9ydGFsTW9kdWxlXSxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtdLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSLFxuICAgICAgICAgICAgICAgIE93bERpYWxvZ1NlcnZpY2UsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZW50cnlDb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIF0sIE93bERpYWxvZ01vZHVsZSk7XG4gICAgcmV0dXJuIE93bERpYWxvZ01vZHVsZTtcbn0oKSk7XG5leHBvcnQgeyBPd2xEaWFsb2dNb2R1bGUgfTtcbiJdfQ==","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './adapter/date-time-adapter.class';\nimport * as ɵngcc2 from './calendar-body.component';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Inject, Input, Optional, Output, ViewChild } from '@angular/core';\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nimport { Subscription } from 'rxjs';\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nvar MONTHS_PER_YEAR = 12;\nvar MONTHS_PER_ROW = 3;\nvar OwlYearViewComponent = (function () {\n function OwlYearViewComponent(cdRef, dateTimeAdapter, dateTimeFormats) {\n this.cdRef = cdRef;\n this.dateTimeAdapter = dateTimeAdapter;\n this.dateTimeFormats = dateTimeFormats;\n this._selectMode = 'single';\n this._selecteds = [];\n this.localeSub = Subscription.EMPTY;\n this.initiated = false;\n this.selectedMonths = [];\n this.change = new EventEmitter();\n this.monthSelected = new EventEmitter();\n this.pickerMomentChange = new EventEmitter();\n this.keyboardEnter = new EventEmitter();\n this.monthNames = this.dateTimeAdapter.getMonthNames('short');\n }\n Object.defineProperty(OwlYearViewComponent.prototype, \"selectMode\", {\n get: function () {\n return this._selectMode;\n },\n set: function (val) {\n this._selectMode = val;\n if (this.initiated) {\n this.generateMonthList();\n this.cdRef.markForCheck();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"selected\", {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n this.setSelectedMonths();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"selecteds\", {\n get: function () {\n return this._selecteds;\n },\n set: function (values) {\n this._selecteds = [];\n for (var i = 0; i < values.length; i++) {\n var value = this.dateTimeAdapter.deserialize(values[i]);\n this._selecteds.push(this.getValidDate(value));\n }\n this.setSelectedMonths();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"pickerMoment\", {\n get: function () {\n return this._pickerMoment;\n },\n set: function (value) {\n var oldMoment = this._pickerMoment;\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();\n if (!this.hasSameYear(oldMoment, this._pickerMoment) && this.initiated) {\n this.generateMonthList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"dateFilter\", {\n get: function () {\n return this._dateFilter;\n },\n set: function (filter) {\n this._dateFilter = filter;\n if (this.initiated) {\n this.generateMonthList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"minDate\", {\n get: function () {\n return this._minDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateMonthList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"maxDate\", {\n get: function () {\n return this._maxDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateMonthList();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"months\", {\n get: function () {\n return this._months;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"activeCell\", {\n get: function () {\n if (this._pickerMoment) {\n return this.dateTimeAdapter.getMonth(this._pickerMoment);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this.selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\n || this.selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlYearViewComponent.prototype, \"owlDTCalendarView\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n OwlYearViewComponent.prototype.ngOnInit = function () {\n var _this = this;\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(function () {\n _this.generateMonthList();\n _this.cdRef.markForCheck();\n });\n };\n OwlYearViewComponent.prototype.ngAfterContentInit = function () {\n this.generateMonthList();\n this.initiated = true;\n };\n OwlYearViewComponent.prototype.ngOnDestroy = function () {\n this.localeSub.unsubscribe();\n };\n OwlYearViewComponent.prototype.selectCalendarCell = function (cell) {\n this.selectMonth(cell.value);\n };\n OwlYearViewComponent.prototype.selectMonth = function (month) {\n var firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);\n this.monthSelected.emit(firstDateOfMonth);\n var daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);\n var result = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));\n this.change.emit(result);\n };\n OwlYearViewComponent.prototype.handleCalendarKeydown = function (event) {\n var moment;\n switch (event.keyCode) {\n case LEFT_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1);\n this.pickerMomentChange.emit(moment);\n break;\n case RIGHT_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1);\n this.pickerMomentChange.emit(moment);\n break;\n case UP_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -3);\n this.pickerMomentChange.emit(moment);\n break;\n case DOWN_ARROW:\n moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 3);\n this.pickerMomentChange.emit(moment);\n break;\n case HOME:\n moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -this.dateTimeAdapter.getMonth(this.pickerMoment));\n this.pickerMomentChange.emit(moment);\n break;\n case END:\n moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 11 - this.dateTimeAdapter.getMonth(this.pickerMoment));\n this.pickerMomentChange.emit(moment);\n break;\n case PAGE_UP:\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? -10 : -1);\n this.pickerMomentChange.emit(moment);\n break;\n case PAGE_DOWN:\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? 10 : 1);\n this.pickerMomentChange.emit(moment);\n break;\n case ENTER:\n this.selectMonth(this.dateTimeAdapter.getMonth(this.pickerMoment));\n this.keyboardEnter.emit();\n break;\n default:\n return;\n }\n this.focusActiveCell();\n event.preventDefault();\n };\n OwlYearViewComponent.prototype.generateMonthList = function () {\n if (!this.pickerMoment) {\n return;\n }\n this.setSelectedMonths();\n this.todayMonth = this.getMonthInCurrentYear(this.dateTimeAdapter.now());\n this._months = [];\n for (var i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {\n var row = [];\n for (var j = 0; j < MONTHS_PER_ROW; j++) {\n var month = j + i * MONTHS_PER_ROW;\n var monthCell = this.createMonthCell(month);\n row.push(monthCell);\n }\n this._months.push(row);\n }\n return;\n };\n OwlYearViewComponent.prototype.createMonthCell = function (month) {\n var startDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);\n var ariaLabel = this.dateTimeAdapter.format(startDateOfMonth, this.dateTimeFormats.monthYearA11yLabel);\n var cellClass = 'owl-dt-month-' + month;\n return new CalendarCell(month, this.monthNames[month], ariaLabel, this.isMonthEnabled(month), false, cellClass);\n };\n OwlYearViewComponent.prototype.isMonthEnabled = function (month) {\n var firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);\n for (var date = firstDateOfMonth; this.dateTimeAdapter.getMonth(date) === month; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {\n if (!!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate || this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\n (!this.maxDate || this.dateTimeAdapter.compare(date, this.maxDate) <= 0)) {\n return true;\n }\n }\n return false;\n };\n OwlYearViewComponent.prototype.getMonthInCurrentYear = function (date) {\n if (this.getValidDate(date) && this.getValidDate(this._pickerMoment)) {\n var result = this.dateTimeAdapter.compareYear(date, this._pickerMoment);\n if (result < 0) {\n return -1;\n }\n else if (result > 0) {\n return 12;\n }\n else {\n return this.dateTimeAdapter.getMonth(date);\n }\n }\n else {\n return null;\n }\n };\n OwlYearViewComponent.prototype.setSelectedMonths = function () {\n this.selectedMonths = [];\n if (this.isInSingleMode && this.selected) {\n this.selectedMonths[0] = this.getMonthInCurrentYear(this.selected);\n }\n if (this.isInRangeMode && this.selecteds) {\n this.selectedMonths[0] = this.getMonthInCurrentYear(this.selecteds[0]);\n this.selectedMonths[1] = this.getMonthInCurrentYear(this.selecteds[1]);\n }\n };\n OwlYearViewComponent.prototype.hasSameYear = function (dateLeft, dateRight) {\n return !!(dateLeft && dateRight &&\n this.dateTimeAdapter.getYear(dateLeft) === this.dateTimeAdapter.getYear(dateRight));\n };\n OwlYearViewComponent.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n OwlYearViewComponent.prototype.focusActiveCell = function () {\n this.calendarBodyElm.focusActiveCell();\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlYearViewComponent.prototype, \"selectMode\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlYearViewComponent.prototype, \"selected\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], OwlYearViewComponent.prototype, \"selecteds\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlYearViewComponent.prototype, \"pickerMoment\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], OwlYearViewComponent.prototype, \"dateFilter\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlYearViewComponent.prototype, \"minDate\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlYearViewComponent.prototype, \"maxDate\", null);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlYearViewComponent.prototype, \"change\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlYearViewComponent.prototype, \"monthSelected\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], OwlYearViewComponent.prototype, \"pickerMomentChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], OwlYearViewComponent.prototype, \"keyboardEnter\", void 0);\n __decorate([\n ViewChild(OwlCalendarBodyComponent),\n __metadata(\"design:type\", OwlCalendarBodyComponent)\n ], OwlYearViewComponent.prototype, \"calendarBodyElm\", void 0);\n __decorate([\n HostBinding('class.owl-dt-calendar-view'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlYearViewComponent.prototype, \"owlDTCalendarView\", null);\n OwlYearViewComponent = __decorate([ __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(OWL_DATE_TIME_FORMATS)),\n __metadata(\"design:paramtypes\", [ChangeDetectorRef,\n DateTimeAdapter, Object])\n ], OwlYearViewComponent);\nOwlYearViewComponent.ɵfac = function OwlYearViewComponent_Factory(t) { return new (t || OwlYearViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8)); };\nOwlYearViewComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlYearViewComponent, selectors: [[\"owl-date-time-year-view\"]], viewQuery: function OwlYearViewComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(OwlCalendarBodyComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.calendarBodyElm = _t.first);\n } }, hostVars: 2, hostBindings: function OwlYearViewComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar-view\", ctx.owlDTCalendarView);\n } }, inputs: { selectMode: \"selectMode\", selected: \"selected\", selecteds: \"selecteds\", pickerMoment: \"pickerMoment\", dateFilter: \"dateFilter\", minDate: \"minDate\", maxDate: \"maxDate\" }, outputs: { change: \"change\", monthSelected: \"monthSelected\", pickerMomentChange: \"pickerMomentChange\", keyboardEnter: \"keyboardEnter\" }, exportAs: [\"owlMonthView\"], decls: 5, vars: 7, consts: [[1, \"owl-dt-calendar-table\", \"owl-dt-calendar-year-table\"], [1, \"owl-dt-calendar-header\"], [\"aria-hidden\", \"true\", \"colspan\", \"3\", 1, \"owl-dt-calendar-table-divider\"], [\"owl-date-time-calendar-body\", \"\", \"role\", \"grid\", 3, \"rows\", \"numCols\", \"cellRatio\", \"activeCell\", \"todayValue\", \"selectedValues\", \"selectMode\", \"keydown\", \"select\"]], template: function OwlYearViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 0);\n ɵngcc0.ɵɵelementStart(1, \"thead\", 1);\n ɵngcc0.ɵɵelementStart(2, \"tr\");\n ɵngcc0.ɵɵelement(3, \"th\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"tbody\", 3);\n ɵngcc0.ɵɵlistener(\"keydown\", function OwlYearViewComponent_Template_tbody_keydown_4_listener($event) { return ctx.handleCalendarKeydown($event); })(\"select\", function OwlYearViewComponent_Template_tbody_select_4_listener($event) { return ctx.selectCalendarCell($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"rows\", ctx.months)(\"numCols\", 3)(\"cellRatio\", 3 / 7)(\"activeCell\", ctx.activeCell)(\"todayValue\", ctx.todayMonth)(\"selectedValues\", ctx.selectedMonths)(\"selectMode\", ctx.selectMode);\n } }, directives: [ɵngcc2.OwlCalendarBodyComponent], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlYearViewComponent, [{\n type: Component,\n args: [{\n selector: 'owl-date-time-year-view',\n exportAs: 'owlMonthView',\n template: \"
\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.DateTimeAdapter, decorators: [{\n type: Optional\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_FORMATS]\n }] }]; }, { change: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], pickerMomentChange: [{\n type: Output\n }], keyboardEnter: [{\n type: Output\n }], selectMode: [{\n type: Input\n }], selected: [{\n type: Input\n }], selecteds: [{\n type: Input\n }], pickerMoment: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], owlDTCalendarView: [{\n type: HostBinding,\n args: ['class.owl-dt-calendar-view']\n }], calendarBodyElm: [{\n type: ViewChild,\n args: [OwlCalendarBodyComponent]\n }] }); })();\n return OwlYearViewComponent;\n}());\nexport { OwlYearViewComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQVNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDZWxsLCBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERPV05fQVJST1csIEVORCwgRU5URVIsIEhPTUUsIExFRlRfQVJST1csIFBBR0VfRE9XTiwgUEFHRV9VUCwgUklHSFRfQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbnZhciBNT05USFNfUEVSX1lFQVIgPSAxMjtcbnZhciBNT05USFNfUEVSX1JPVyA9IDM7XG52YXIgT3dsWWVhclZpZXdDb21wb25lbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE93bFllYXJWaWV3Q29tcG9uZW50KGNkUmVmLCBkYXRlVGltZUFkYXB0ZXIsIGRhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICB0aGlzLmNkUmVmID0gY2RSZWY7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyID0gZGF0ZVRpbWVBZGFwdGVyO1xuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0cyA9IGRhdGVUaW1lRm9ybWF0cztcbiAgICAgICAgdGhpcy5fc2VsZWN0TW9kZSA9ICdzaW5nbGUnO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIHRoaXMuaW5pdGlhdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb250aHMgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5tb250aE5hbWVzID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnc2hvcnQnKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RNb2RlID0gdmFsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1vbnRoTGlzdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkTW9udGhzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZXNbaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkcy5wdXNoKHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkTW9udGhzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyTW9tZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGlja2VyTW9tZW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9sZE1vbWVudCA9IHRoaXMuX3BpY2tlck1vbWVudDtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fcGlja2VyTW9tZW50ID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1NhbWVZZWFyKG9sZE1vbWVudCwgdGhpcy5fcGlja2VyTW9tZW50KSAmJiB0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVNb250aExpc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJkYXRlRmlsdGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZUZpbHRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlRmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1vbnRoTGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1pbkRhdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1vbnRoTGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1heERhdGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1vbnRoTGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1vbnRoc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRocztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJhY3RpdmVDZWxsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGlja2VyTW9tZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX3BpY2tlck1vbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblNpbmdsZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImlzSW5SYW5nZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJ1xuICAgICAgICAgICAgICAgIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERUQ2FsZW5kYXJWaWV3XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLm5nT25Jbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmxvY2FsZVN1YiA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmdlbmVyYXRlTW9udGhMaXN0KCk7XG4gICAgICAgICAgICBfdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlTW9udGhMaXN0KCk7XG4gICAgICAgIHRoaXMuaW5pdGlhdGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5uZ09uRGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5zZWxlY3RDYWxlbmRhckNlbGwgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoKGNlbGwudmFsdWUpO1xuICAgIH07XG4gICAgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdE1vbnRoID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICAgIHZhciBmaXJzdERhdGVPZk1vbnRoID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMucGlja2VyTW9tZW50KSwgbW9udGgsIDEpO1xuICAgICAgICB0aGlzLm1vbnRoU2VsZWN0ZWQuZW1pdChmaXJzdERhdGVPZk1vbnRoKTtcbiAgICAgICAgdmFyIGRheXNJbk1vbnRoID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoZmlyc3REYXRlT2ZNb250aCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5waWNrZXJNb21lbnQpLCBtb250aCwgTWF0aC5taW4oZGF5c0luTW9udGgsIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpKSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnModGhpcy5waWNrZXJNb21lbnQpLCB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyh0aGlzLnBpY2tlck1vbWVudCkpO1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHJlc3VsdCk7XG4gICAgfTtcbiAgICBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUuaGFuZGxlQ2FsZW5kYXJLZXlkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBtb21lbnQ7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMucGlja2VyTW9tZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgLTMpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRE9XTl9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgMyk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBIT01FOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMucGlja2VyTW9tZW50LCAtdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5waWNrZXJNb21lbnQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVORDpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgMTEgLSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnBpY2tlck1vbWVudCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCBldmVudC5hbHRLZXkgPyAtMTAgOiAtMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQQUdFX0RPV046XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgZXZlbnQuYWx0S2V5ID8gMTAgOiAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVOVEVSOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9udGgodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5waWNrZXJNb21lbnQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmtleWJvYXJkRW50ZXIuZW1pdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNlbGwoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5nZW5lcmF0ZU1vbnRoTGlzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlck1vbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRNb250aHMoKTtcbiAgICAgICAgdGhpcy50b2RheU1vbnRoID0gdGhpcy5nZXRNb250aEluQ3VycmVudFllYXIodGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KCkpO1xuICAgICAgICB0aGlzLl9tb250aHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNT05USFNfUEVSX1lFQVIgLyBNT05USFNfUEVSX1JPVzsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IE1PTlRIU19QRVJfUk9XOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBqICsgaSAqIE1PTlRIU19QRVJfUk9XO1xuICAgICAgICAgICAgICAgIHZhciBtb250aENlbGwgPSB0aGlzLmNyZWF0ZU1vbnRoQ2VsbChtb250aCk7XG4gICAgICAgICAgICAgICAgcm93LnB1c2gobW9udGhDZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21vbnRocy5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLmNyZWF0ZU1vbnRoQ2VsbCA9IGZ1bmN0aW9uIChtb250aCkge1xuICAgICAgICB2YXIgc3RhcnREYXRlT2ZNb250aCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLnBpY2tlck1vbWVudCksIG1vbnRoLCAxKTtcbiAgICAgICAgdmFyIGFyaWFMYWJlbCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChzdGFydERhdGVPZk1vbnRoLCB0aGlzLmRhdGVUaW1lRm9ybWF0cy5tb250aFllYXJBMTF5TGFiZWwpO1xuICAgICAgICB2YXIgY2VsbENsYXNzID0gJ293bC1kdC1tb250aC0nICsgbW9udGg7XG4gICAgICAgIHJldHVybiBuZXcgQ2FsZW5kYXJDZWxsKG1vbnRoLCB0aGlzLm1vbnRoTmFtZXNbbW9udGhdLCBhcmlhTGFiZWwsIHRoaXMuaXNNb250aEVuYWJsZWQobW9udGgpLCBmYWxzZSwgY2VsbENsYXNzKTtcbiAgICB9O1xuICAgIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5pc01vbnRoRW5hYmxlZCA9IGZ1bmN0aW9uIChtb250aCkge1xuICAgICAgICB2YXIgZmlyc3REYXRlT2ZNb250aCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLnBpY2tlck1vbWVudCksIG1vbnRoLCAxKTtcbiAgICAgICAgZm9yICh2YXIgZGF0ZSA9IGZpcnN0RGF0ZU9mTW9udGg7IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGUpID09PSBtb250aDsgZGF0ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCAxKSkge1xuICAgICAgICAgICAgaWYgKCEhZGF0ZSAmJlxuICAgICAgICAgICAgICAgICghdGhpcy5kYXRlRmlsdGVyIHx8IHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkgJiZcbiAgICAgICAgICAgICAgICAoIXRoaXMubWluRGF0ZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPj0gMCkgJiZcbiAgICAgICAgICAgICAgICAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWF4RGF0ZSkgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUuZ2V0TW9udGhJbkN1cnJlbnRZZWFyID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsaWREYXRlKGRhdGUpICYmIHRoaXMuZ2V0VmFsaWREYXRlKHRoaXMuX3BpY2tlck1vbWVudCkpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlWWVhcihkYXRlLCB0aGlzLl9waWNrZXJNb21lbnQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTZWxlY3RlZE1vbnRocyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRocyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9udGhzWzBdID0gdGhpcy5nZXRNb250aEluQ3VycmVudFllYXIodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSAmJiB0aGlzLnNlbGVjdGVkcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoc1swXSA9IHRoaXMuZ2V0TW9udGhJbkN1cnJlbnRZZWFyKHRoaXMuc2VsZWN0ZWRzWzBdKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb250aHNbMV0gPSB0aGlzLmdldE1vbnRoSW5DdXJyZW50WWVhcih0aGlzLnNlbGVjdGVkc1sxXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5oYXNTYW1lWWVhciA9IGZ1bmN0aW9uIChkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7XG4gICAgICAgIHJldHVybiAhIShkYXRlTGVmdCAmJiBkYXRlUmlnaHQgJiZcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZUxlZnQpID09PSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGVSaWdodCkpO1xuICAgIH07XG4gICAgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLmdldFZhbGlkRGF0ZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRhdGVUaW1lQWRhcHRlci5pc0RhdGVJbnN0YW5jZShvYmopICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQob2JqKSkgPyBvYmogOiBudWxsO1xuICAgIH07XG4gICAgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLmZvY3VzQWN0aXZlQ2VsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckJvZHlFbG0uZm9jdXNBY3RpdmVDZWxsKCk7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbU3RyaW5nXSlcbiAgICBdLCBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0TW9kZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBBcnJheSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQXJyYXldKVxuICAgIF0sIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZHNcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vbWVudFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtGdW5jdGlvbl0pXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImRhdGVGaWx0ZXJcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1pbkRhdGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1heERhdGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIE91dHB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIE93bFllYXJWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJjaGFuZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIm1vbnRoU2VsZWN0ZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBFdmVudEVtaXR0ZXIpXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vbWVudENoYW5nZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEV2ZW50RW1pdHRlcilcbiAgICBdLCBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwia2V5Ym9hcmRFbnRlclwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBWaWV3Q2hpbGQoT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE93bENhbGVuZGFyQm9keUNvbXBvbmVudClcbiAgICBdLCBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiY2FsZW5kYXJCb2R5RWxtXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY2FsZW5kYXItdmlldycpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xZZWFyVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhclZpZXdcIiwgbnVsbCk7XG4gICAgT3dsWWVhclZpZXdDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29tcG9uZW50KHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS15ZWFyLXZpZXcnLFxuICAgICAgICAgICAgZXhwb3J0QXM6ICdvd2xNb250aFZpZXcnLFxuICAgICAgICAgICAgdGVtcGxhdGU6IFwiPHRhYmxlIGNsYXNzPVxcXCJvd2wtZHQtY2FsZW5kYXItdGFibGUgb3dsLWR0LWNhbGVuZGFyLXllYXItdGFibGVcXFwiPjx0aGVhZCBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLWhlYWRlclxcXCI+PHRyPjx0aCBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLXRhYmxlLWRpdmlkZXJcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBjb2xzcGFuPVxcXCIzXFxcIj48L3RoPjwvdHI+PC90aGVhZD48dGJvZHkgb3dsLWRhdGUtdGltZS1jYWxlbmRhci1ib2R5IHJvbGU9XFxcImdyaWRcXFwiIFtyb3dzXT1cXFwibW9udGhzXFxcIiBbbnVtQ29sc109XFxcIjNcXFwiIFtjZWxsUmF0aW9dPVxcXCIzIC8gN1xcXCIgW2FjdGl2ZUNlbGxdPVxcXCJhY3RpdmVDZWxsXFxcIiBbdG9kYXlWYWx1ZV09XFxcInRvZGF5TW9udGhcXFwiIFtzZWxlY3RlZFZhbHVlc109XFxcInNlbGVjdGVkTW9udGhzXFxcIiBbc2VsZWN0TW9kZV09XFxcInNlbGVjdE1vZGVcXFwiIChrZXlkb3duKT1cXFwiaGFuZGxlQ2FsZW5kYXJLZXlkb3duKCRldmVudClcXFwiIChzZWxlY3QpPVxcXCJzZWxlY3RDYWxlbmRhckNlbGwoJGV2ZW50KVxcXCI+PC90Ym9keT48L3RhYmxlPlwiLFxuICAgICAgICAgICAgc3R5bGVzOiBbXCJcIl0sXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICB9KSxcbiAgICAgICAgX19wYXJhbSgxLCBPcHRpb25hbCgpKSxcbiAgICAgICAgX19wYXJhbSgyLCBPcHRpb25hbCgpKSwgX19wYXJhbSgyLCBJbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTKSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICBEYXRlVGltZUFkYXB0ZXIsIE9iamVjdF0pXG4gICAgXSwgT3dsWWVhclZpZXdDb21wb25lbnQpO1xuICAgIHJldHVybiBPd2xZZWFyVmlld0NvbXBvbmVudDtcbn0oKSk7XG5leHBvcnQgeyBPd2xZZWFyVmlld0NvbXBvbmVudCB9O1xuIl19","export * from './object.utils';\n","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './adapter/date-time-adapter.class';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from './calendar-body.component';\n\nfunction OwlMonthViewComponent_th_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 6);\n ɵngcc0.ɵɵelementStart(1, \"span\");\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var weekday_r1 = ctx.$implicit;\n ɵngcc0.ɵɵattribute(\"aria-label\", weekday_r1.long);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(weekday_r1.short);\n} }\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Inject, Input, Optional, Output, ViewChild } from '@angular/core';\nimport { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nimport { Subscription } from 'rxjs';\nimport { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nvar DAYS_PER_WEEK = 7;\nvar WEEKS_PER_VIEW = 6;\nvar OwlMonthViewComponent = (function () {\n function OwlMonthViewComponent(cdRef, dateTimeAdapter, dateTimeFormats) {\n this.cdRef = cdRef;\n this.dateTimeAdapter = dateTimeAdapter;\n this.dateTimeFormats = dateTimeFormats;\n this.hideOtherMonths = false;\n this._firstDayOfWeek = 0;\n this._selectMode = 'single';\n this._selecteds = [];\n this.localeSub = Subscription.EMPTY;\n this.initiated = false;\n this.selectedDates = [];\n this.selectedChange = new EventEmitter();\n this.userSelection = new EventEmitter();\n this.pickerMomentChange = new EventEmitter();\n }\n Object.defineProperty(OwlMonthViewComponent.prototype, \"firstDayOfWeek\", {\n get: function () {\n return this._firstDayOfWeek;\n },\n set: function (val) {\n val = coerceNumberProperty(val);\n if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {\n this._firstDayOfWeek = val;\n if (this.initiated) {\n this.generateWeekDays();\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"selectMode\", {\n get: function () {\n return this._selectMode;\n },\n set: function (val) {\n this._selectMode = val;\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"selected\", {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n var oldSelected = this._selected;\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {\n this.setSelectedDates();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"selecteds\", {\n get: function () {\n return this._selecteds;\n },\n set: function (values) {\n var _this = this;\n this._selecteds = values.map(function (v) {\n v = _this.dateTimeAdapter.deserialize(v);\n return _this.getValidDate(v);\n });\n this.setSelectedDates();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"pickerMoment\", {\n get: function () {\n return this._pickerMoment;\n },\n set: function (value) {\n var oldMoment = this._pickerMoment;\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();\n this.firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this._pickerMoment), this.dateTimeAdapter.getMonth(this._pickerMoment), 1);\n if (!this.isSameMonth(oldMoment, this._pickerMoment) && this.initiated) {\n this.generateCalendar();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"dateFilter\", {\n get: function () {\n return this._dateFilter;\n },\n set: function (filter) {\n this._dateFilter = filter;\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"minDate\", {\n get: function () {\n return this._minDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._minDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"maxDate\", {\n get: function () {\n return this._maxDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._maxDate = this.getValidDate(value);\n if (this.initiated) {\n this.generateCalendar();\n this.cdRef.markForCheck();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"weekdays\", {\n get: function () {\n return this._weekdays;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"days\", {\n get: function () {\n return this._days;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"activeCell\", {\n get: function () {\n if (this.pickerMoment) {\n return this.dateTimeAdapter.getDate(this.pickerMoment) + this.firstRowOffset - 1;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this.selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\n || this.selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlMonthViewComponent.prototype, \"owlDTCalendarView\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n OwlMonthViewComponent.prototype.ngOnInit = function () {\n var _this = this;\n this.generateWeekDays();\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(function () {\n _this.generateWeekDays();\n _this.generateCalendar();\n _this.cdRef.markForCheck();\n });\n };\n OwlMonthViewComponent.prototype.ngAfterContentInit = function () {\n this.generateCalendar();\n this.initiated = true;\n };\n OwlMonthViewComponent.prototype.ngOnDestroy = function () {\n this.localeSub.unsubscribe();\n };\n OwlMonthViewComponent.prototype.selectCalendarCell = function (cell) {\n if (!cell.enabled || (this.hideOtherMonths && cell.out)) {\n return;\n }\n this.selectDate(cell.value);\n };\n OwlMonthViewComponent.prototype.selectDate = function (date) {\n var daysDiff = date - 1;\n var selected = this.dateTimeAdapter.addCalendarDays(this.firstDateOfMonth, daysDiff);\n this.selectedChange.emit(selected);\n this.userSelection.emit();\n };\n OwlMonthViewComponent.prototype.handleCalendarKeydown = function (event) {\n var moment;\n switch (event.keyCode) {\n case LEFT_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, -1);\n this.pickerMomentChange.emit(moment);\n break;\n case RIGHT_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 1);\n this.pickerMomentChange.emit(moment);\n break;\n case UP_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, -7);\n this.pickerMomentChange.emit(moment);\n break;\n case DOWN_ARROW:\n moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 7);\n this.pickerMomentChange.emit(moment);\n break;\n case HOME:\n moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 1 - this.dateTimeAdapter.getDate(this.pickerMoment));\n this.pickerMomentChange.emit(moment);\n break;\n case END:\n moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment) -\n this.dateTimeAdapter.getDate(this.pickerMoment));\n this.pickerMomentChange.emit(moment);\n break;\n case PAGE_UP:\n moment = event.altKey ?\n this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1) :\n this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1);\n this.pickerMomentChange.emit(moment);\n break;\n case PAGE_DOWN:\n moment = event.altKey ?\n this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1) :\n this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1);\n this.pickerMomentChange.emit(moment);\n break;\n case ENTER:\n if (!this.dateFilter || this.dateFilter(this.pickerMoment)) {\n this.selectDate(this.dateTimeAdapter.getDate(this.pickerMoment));\n }\n break;\n default:\n return;\n }\n this.focusActiveCell();\n event.preventDefault();\n };\n OwlMonthViewComponent.prototype.generateWeekDays = function () {\n var longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long');\n var shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short');\n var narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow');\n var firstDayOfWeek = this.firstDayOfWeek;\n var weekdays = longWeekdays.map(function (long, i) {\n return { long: long, short: shortWeekdays[i], narrow: narrowWeekdays[i] };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n this.dateNames = this.dateTimeAdapter.getDateNames();\n return;\n };\n OwlMonthViewComponent.prototype.generateCalendar = function () {\n if (!this.pickerMoment) {\n return;\n }\n this.todayDate = null;\n var startWeekdayOfMonth = this.dateTimeAdapter.getDay(this.firstDateOfMonth);\n var firstDayOfWeek = this.firstDayOfWeek;\n var daysDiff = 0 - (startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) % DAYS_PER_WEEK;\n this.firstRowOffset = Math.abs(daysDiff);\n this._days = [];\n for (var i = 0; i < WEEKS_PER_VIEW; i++) {\n var week = [];\n for (var j = 0; j < DAYS_PER_WEEK; j++) {\n var date = this.dateTimeAdapter.addCalendarDays(this.firstDateOfMonth, daysDiff);\n var dateCell = this.createDateCell(date, daysDiff);\n if (this.dateTimeAdapter.isSameDay(this.dateTimeAdapter.now(), date)) {\n this.todayDate = daysDiff + 1;\n }\n week.push(dateCell);\n daysDiff += 1;\n }\n this._days.push(week);\n }\n this.setSelectedDates();\n };\n OwlMonthViewComponent.prototype.createDateCell = function (date, daysDiff) {\n var daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment);\n var dateNum = this.dateTimeAdapter.getDate(date);\n var dateName = dateNum.toString();\n var ariaLabel = this.dateTimeAdapter.format(date, this.dateTimeFormats.dateA11yLabel);\n var enabled = this.isDateEnabled(date);\n var dayValue = daysDiff + 1;\n var out = dayValue < 1 || dayValue > daysInMonth;\n var cellClass = 'owl-dt-day-' + this.dateTimeAdapter.getDay(date);\n return new CalendarCell(dayValue, dateName, ariaLabel, enabled, out, cellClass);\n };\n OwlMonthViewComponent.prototype.isDateEnabled = function (date) {\n return !!date &&\n (!this.dateFilter || this.dateFilter(date)) &&\n (!this.minDate || this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&\n (!this.maxDate || this.dateTimeAdapter.compare(date, this.maxDate) <= 0);\n };\n OwlMonthViewComponent.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n OwlMonthViewComponent.prototype.isSameMonth = function (dateLeft, dateRight) {\n return !!(dateLeft && dateRight &&\n this.dateTimeAdapter.isValid(dateLeft) && this.dateTimeAdapter.isValid(dateRight) &&\n this.dateTimeAdapter.getYear(dateLeft) === this.dateTimeAdapter.getYear(dateRight) &&\n this.dateTimeAdapter.getMonth(dateLeft) === this.dateTimeAdapter.getMonth(dateRight));\n };\n OwlMonthViewComponent.prototype.setSelectedDates = function () {\n var _this = this;\n this.selectedDates = [];\n if (!this.firstDateOfMonth) {\n return;\n }\n if (this.isInSingleMode && this.selected) {\n var dayDiff = this.dateTimeAdapter.differenceInCalendarDays(this.selected, this.firstDateOfMonth);\n this.selectedDates[0] = dayDiff + 1;\n return;\n }\n if (this.isInRangeMode && this.selecteds) {\n this.selectedDates = this.selecteds.map(function (selected) {\n if (_this.dateTimeAdapter.isValid(selected)) {\n var dayDiff = _this.dateTimeAdapter.differenceInCalendarDays(selected, _this.firstDateOfMonth);\n return dayDiff + 1;\n }\n else {\n return null;\n }\n });\n }\n };\n OwlMonthViewComponent.prototype.focusActiveCell = function () {\n this.calendarBodyElm.focusActiveCell();\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlMonthViewComponent.prototype, \"hideOtherMonths\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n ], OwlMonthViewComponent.prototype, \"firstDayOfWeek\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlMonthViewComponent.prototype, \"selectMode\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMonthViewComponent.prototype, \"selected\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], OwlMonthViewComponent.prototype, \"selecteds\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMonthViewComponent.prototype, \"pickerMoment\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], OwlMonthViewComponent.prototype, \"dateFilter\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMonthViewComponent.prototype, \"minDate\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlMonthViewComponent.prototype, \"maxDate\", null);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlMonthViewComponent.prototype, \"selectedChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlMonthViewComponent.prototype, \"userSelection\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n ], OwlMonthViewComponent.prototype, \"pickerMomentChange\", void 0);\n __decorate([\n ViewChild(OwlCalendarBodyComponent),\n __metadata(\"design:type\", OwlCalendarBodyComponent)\n ], OwlMonthViewComponent.prototype, \"calendarBodyElm\", void 0);\n __decorate([\n HostBinding('class.owl-dt-calendar-view'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlMonthViewComponent.prototype, \"owlDTCalendarView\", null);\n OwlMonthViewComponent = __decorate([ __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(OWL_DATE_TIME_FORMATS)),\n __metadata(\"design:paramtypes\", [ChangeDetectorRef,\n DateTimeAdapter, Object])\n ], OwlMonthViewComponent);\nOwlMonthViewComponent.ɵfac = function OwlMonthViewComponent_Factory(t) { return new (t || OwlMonthViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8)); };\nOwlMonthViewComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlMonthViewComponent, selectors: [[\"owl-date-time-month-view\"]], viewQuery: function OwlMonthViewComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(OwlCalendarBodyComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.calendarBodyElm = _t.first);\n } }, hostVars: 2, hostBindings: function OwlMonthViewComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar-view\", ctx.owlDTCalendarView);\n } }, inputs: { hideOtherMonths: \"hideOtherMonths\", firstDayOfWeek: \"firstDayOfWeek\", selectMode: \"selectMode\", selected: \"selected\", selecteds: \"selecteds\", pickerMoment: \"pickerMoment\", dateFilter: \"dateFilter\", minDate: \"minDate\", maxDate: \"maxDate\" }, outputs: { selectedChange: \"selectedChange\", userSelection: \"userSelection\", pickerMomentChange: \"pickerMomentChange\" }, exportAs: [\"owlYearView\"], decls: 7, vars: 8, consts: [[1, \"owl-dt-calendar-table\", \"owl-dt-calendar-month-table\"], [1, \"owl-dt-calendar-header\"], [1, \"owl-dt-weekdays\"], [\"class\", \"owl-dt-weekday\", \"scope\", \"col\", 4, \"ngFor\", \"ngForOf\"], [\"aria-hidden\", \"true\", \"colspan\", \"7\", 1, \"owl-dt-calendar-table-divider\"], [\"owl-date-time-calendar-body\", \"\", \"role\", \"grid\", 3, \"rows\", \"todayValue\", \"selectedValues\", \"selectMode\", \"activeCell\", \"keydown\", \"select\"], [\"scope\", \"col\", 1, \"owl-dt-weekday\"]], template: function OwlMonthViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 0);\n ɵngcc0.ɵɵelementStart(1, \"thead\", 1);\n ɵngcc0.ɵɵelementStart(2, \"tr\", 2);\n ɵngcc0.ɵɵtemplate(3, OwlMonthViewComponent_th_3_Template, 3, 2, \"th\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"tr\");\n ɵngcc0.ɵɵelement(5, \"th\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"tbody\", 5);\n ɵngcc0.ɵɵlistener(\"keydown\", function OwlMonthViewComponent_Template_tbody_keydown_6_listener($event) { return ctx.handleCalendarKeydown($event); })(\"select\", function OwlMonthViewComponent_Template_tbody_select_6_listener($event) { return ctx.selectCalendarCell($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar-only-current-month\", ctx.hideOtherMonths);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.weekdays);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"rows\", ctx.days)(\"todayValue\", ctx.todayDate)(\"selectedValues\", ctx.selectedDates)(\"selectMode\", ctx.selectMode)(\"activeCell\", ctx.activeCell);\n } }, directives: [ɵngcc2.NgForOf, ɵngcc3.OwlCalendarBodyComponent], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlMonthViewComponent, [{\n type: Component,\n args: [{\n selector: 'owl-date-time-month-view',\n exportAs: 'owlYearView',\n template: \"
{{weekday.short}}
\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.DateTimeAdapter, decorators: [{\n type: Optional\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_FORMATS]\n }] }]; }, { hideOtherMonths: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], userSelection: [{\n type: Output\n }], pickerMomentChange: [{\n type: Output\n }], firstDayOfWeek: [{\n type: Input\n }], selectMode: [{\n type: Input\n }], selected: [{\n type: Input\n }], selecteds: [{\n type: Input\n }], pickerMoment: [{\n type: Input\n }], dateFilter: [{\n type: Input\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], owlDTCalendarView: [{\n type: HostBinding,\n args: ['class.owl-dt-calendar-view']\n }], calendarBodyElm: [{\n type: ViewChild,\n args: [OwlCalendarBodyComponent]\n }] }); })();\n return OwlMonthViewComponent;\n}());\nexport { OwlMonthViewComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbImNhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQVNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUE4QjtBQUM5QjtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fcGFyYW0gPSAodGhpcyAmJiB0aGlzLl9fcGFyYW0pIHx8IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn07XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYWxlbmRhckNlbGwsIE93bENhbGVuZGFyQm9keUNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7IE9XTF9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5ELCBFTlRFUiwgSE9NRSwgTEVGVF9BUlJPVywgUEFHRV9ET1dOLCBQQUdFX1VQLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xudmFyIERBWVNfUEVSX1dFRUsgPSA3O1xudmFyIFdFRUtTX1BFUl9WSUVXID0gNjtcbnZhciBPd2xNb250aFZpZXdDb21wb25lbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE93bE1vbnRoVmlld0NvbXBvbmVudChjZFJlZiwgZGF0ZVRpbWVBZGFwdGVyLCBkYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgdGhpcy5jZFJlZiA9IGNkUmVmO1xuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlciA9IGRhdGVUaW1lQWRhcHRlcjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdHMgPSBkYXRlVGltZUZvcm1hdHM7XG4gICAgICAgIHRoaXMuaGlkZU90aGVyTW9udGhzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gMDtcbiAgICAgICAgdGhpcy5fc2VsZWN0TW9kZSA9ICdzaW5nbGUnO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIHRoaXMuaW5pdGlhdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnVzZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJmaXJzdERheU9mV2Vla1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHZhbCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbCk7XG4gICAgICAgICAgICBpZiAodmFsID49IDAgJiYgdmFsIDw9IDYgJiYgdmFsICE9PSB0aGlzLl9maXJzdERheU9mV2Vlaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gdmFsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlV2Vla0RheXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RNb2RlID0gdmFsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvbGRTZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkO1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KG9sZFNlbGVjdGVkLCB0aGlzLl9zZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZHMgPSB2YWx1ZXMubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgdiA9IF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0VmFsaWREYXRlKHYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyTW9tZW50XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGlja2VyTW9tZW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9sZE1vbWVudCA9IHRoaXMuX3BpY2tlck1vbWVudDtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fcGlja2VyTW9tZW50ID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpO1xuICAgICAgICAgICAgdGhpcy5maXJzdERhdGVPZk1vbnRoID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuX3BpY2tlck1vbWVudCksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX3BpY2tlck1vbWVudCksIDEpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2FtZU1vbnRoKG9sZE1vbWVudCwgdGhpcy5fcGlja2VyTW9tZW50KSAmJiB0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJkYXRlRmlsdGVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZUZpbHRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlRmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWF0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcIndlZWtkYXlzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImRheXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXlzO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJhY3RpdmVDZWxsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5waWNrZXJNb21lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLnBpY2tlck1vbWVudCkgKyB0aGlzLmZpcnN0Um93T2Zmc2V0IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblNpbmdsZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJpc0luUmFuZ2VNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbSdcbiAgICAgICAgICAgICAgICB8fCB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhclZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLm5nT25Jbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmdlbmVyYXRlV2Vla0RheXMoKTtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5nZW5lcmF0ZVdlZWtEYXlzKCk7XG4gICAgICAgICAgICBfdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgICAgICBfdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhdGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUubmdPbkRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubG9jYWxlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdENhbGVuZGFyQ2VsbCA9IGZ1bmN0aW9uIChjZWxsKSB7XG4gICAgICAgIGlmICghY2VsbC5lbmFibGVkIHx8ICh0aGlzLmhpZGVPdGhlck1vbnRocyAmJiBjZWxsLm91dCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdERhdGUoY2VsbC52YWx1ZSk7XG4gICAgfTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdERhdGUgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICB2YXIgZGF5c0RpZmYgPSBkYXRlIC0gMTtcbiAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMuZmlyc3REYXRlT2ZNb250aCwgZGF5c0RpZmYpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLnVzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICAgIH07XG4gICAgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVDYWxlbmRhcktleWRvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIG1vbWVudDtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIExFRlRfQVJST1c6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMucGlja2VyTW9tZW50LCAtMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXModGhpcy5waWNrZXJNb21lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMucGlja2VyTW9tZW50LCAtNyk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLnBpY2tlck1vbWVudCwgNyk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBIT01FOlxuICAgICAgICAgICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLnBpY2tlck1vbWVudCwgMSAtIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVORDpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXModGhpcy5waWNrZXJNb21lbnQsIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKHRoaXMucGlja2VyTW9tZW50KSAtXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBBR0VfVVA6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gZXZlbnQuYWx0S2V5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgLTEpIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5waWNrZXJNb21lbnQsIC0xKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBBR0VfRE9XTjpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSBldmVudC5hbHRLZXkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCAxKSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMucGlja2VyTW9tZW50LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVOVEVSOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRlRmlsdGVyIHx8IHRoaXMuZGF0ZUZpbHRlcih0aGlzLnBpY2tlck1vbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5nZW5lcmF0ZVdlZWtEYXlzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbG9uZ1dlZWtkYXlzID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICAgICAgdmFyIHNob3J0V2Vla2RheXMgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnc2hvcnQnKTtcbiAgICAgICAgdmFyIG5hcnJvd1dlZWtkYXlzID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ25hcnJvdycpO1xuICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrO1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBsb25nV2Vla2RheXMubWFwKGZ1bmN0aW9uIChsb25nLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBsb25nOiBsb25nLCBzaG9ydDogc2hvcnRXZWVrZGF5c1tpXSwgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXMgPSB3ZWVrZGF5cy5zbGljZShmaXJzdERheU9mV2VlaykuY29uY2F0KHdlZWtkYXlzLnNsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgICAgIHRoaXMuZGF0ZU5hbWVzID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZU5hbWVzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUuZ2VuZXJhdGVDYWxlbmRhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlck1vbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9kYXlEYXRlID0gbnVsbDtcbiAgICAgICAgdmFyIHN0YXJ0V2Vla2RheU9mTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXkodGhpcy5maXJzdERhdGVPZk1vbnRoKTtcbiAgICAgICAgdmFyIGZpcnN0RGF5T2ZXZWVrID0gdGhpcy5maXJzdERheU9mV2VlaztcbiAgICAgICAgdmFyIGRheXNEaWZmID0gMCAtIChzdGFydFdlZWtkYXlPZk1vbnRoICsgKERBWVNfUEVSX1dFRUsgLSBmaXJzdERheU9mV2VlaykpICUgREFZU19QRVJfV0VFSztcbiAgICAgICAgdGhpcy5maXJzdFJvd09mZnNldCA9IE1hdGguYWJzKGRheXNEaWZmKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFdFRUtTX1BFUl9WSUVXOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB3ZWVrID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IERBWVNfUEVSX1dFRUs7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBkYXRlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHRoaXMuZmlyc3REYXRlT2ZNb250aCwgZGF5c0RpZmYpO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlQ2VsbCA9IHRoaXMuY3JlYXRlRGF0ZUNlbGwoZGF0ZSwgZGF5c0RpZmYpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1NhbWVEYXkodGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KCksIGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9kYXlEYXRlID0gZGF5c0RpZmYgKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3ZWVrLnB1c2goZGF0ZUNlbGwpO1xuICAgICAgICAgICAgICAgIGRheXNEaWZmICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9kYXlzLnB1c2god2Vlayk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGVzKCk7XG4gICAgfTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLmNyZWF0ZURhdGVDZWxsID0gZnVuY3Rpb24gKGRhdGUsIGRheXNEaWZmKSB7XG4gICAgICAgIHZhciBkYXlzSW5Nb250aCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKHRoaXMucGlja2VyTW9tZW50KTtcbiAgICAgICAgdmFyIGRhdGVOdW0gPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlKGRhdGUpO1xuICAgICAgICB2YXIgZGF0ZU5hbWUgPSBkYXRlTnVtLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBhcmlhTGFiZWwgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5kYXRlVGltZUZvcm1hdHMuZGF0ZUExMXlMYWJlbCk7XG4gICAgICAgIHZhciBlbmFibGVkID0gdGhpcy5pc0RhdGVFbmFibGVkKGRhdGUpO1xuICAgICAgICB2YXIgZGF5VmFsdWUgPSBkYXlzRGlmZiArIDE7XG4gICAgICAgIHZhciBvdXQgPSBkYXlWYWx1ZSA8IDEgfHwgZGF5VmFsdWUgPiBkYXlzSW5Nb250aDtcbiAgICAgICAgdmFyIGNlbGxDbGFzcyA9ICdvd2wtZHQtZGF5LScgKyB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXkoZGF0ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ2FsZW5kYXJDZWxsKGRheVZhbHVlLCBkYXRlTmFtZSwgYXJpYUxhYmVsLCBlbmFibGVkLCBvdXQsIGNlbGxDbGFzcyk7XG4gICAgfTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLmlzRGF0ZUVuYWJsZWQgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gISFkYXRlICYmXG4gICAgICAgICAgICAoIXRoaXMuZGF0ZUZpbHRlciB8fCB0aGlzLmRhdGVGaWx0ZXIoZGF0ZSkpICYmXG4gICAgICAgICAgICAoIXRoaXMubWluRGF0ZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPj0gMCkgJiZcbiAgICAgICAgICAgICghdGhpcy5tYXhEYXRlIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZGF0ZSwgdGhpcy5tYXhEYXRlKSA8PSAwKTtcbiAgICB9O1xuICAgIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUuZ2V0VmFsaWREYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopKSA/IG9iaiA6IG51bGw7XG4gICAgfTtcbiAgICBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLmlzU2FtZU1vbnRoID0gZnVuY3Rpb24gKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHtcbiAgICAgICAgcmV0dXJuICEhKGRhdGVMZWZ0ICYmIGRhdGVSaWdodCAmJlxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChkYXRlTGVmdCkgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChkYXRlUmlnaHQpICYmXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGVMZWZ0KSA9PT0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlUmlnaHQpICYmXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlTGVmdCkgPT09IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGVSaWdodCkpO1xuICAgIH07XG4gICAgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTZWxlY3RlZERhdGVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0RGF0ZU9mTW9udGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSAmJiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB2YXIgZGF5RGlmZiA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyh0aGlzLnNlbGVjdGVkLCB0aGlzLmZpcnN0RGF0ZU9mTW9udGgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzWzBdID0gZGF5RGlmZiArIDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSAmJiB0aGlzLnNlbGVjdGVkcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZHMubWFwKGZ1bmN0aW9uIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRheURpZmYgPSBfdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKHNlbGVjdGVkLCBfdGhpcy5maXJzdERhdGVPZk1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheURpZmYgKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUuZm9jdXNBY3RpdmVDZWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyQm9keUVsbS5mb2N1c0FjdGl2ZUNlbGwoKTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbilcbiAgICBdLCBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImhpZGVPdGhlck1vbnRoc1wiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgTnVtYmVyKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtOdW1iZXJdKVxuICAgIF0sIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwiZmlyc3REYXlPZldlZWtcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZ10pXG4gICAgXSwgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RNb2RlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBBcnJheSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQXJyYXldKVxuICAgIF0sIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwicGlja2VyTW9tZW50XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0Z1bmN0aW9uXSlcbiAgICBdLCBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcImRhdGVGaWx0ZXJcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5EYXRlXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwibWF4RGF0ZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZENoYW5nZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xNb250aFZpZXdDb21wb25lbnQucHJvdG90eXBlLCBcInVzZXJTZWxlY3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBFdmVudEVtaXR0ZXIpXG4gICAgXSwgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJNb21lbnRDaGFuZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgVmlld0NoaWxkKE93bENhbGVuZGFyQm9keUNvbXBvbmVudCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQpXG4gICAgXSwgT3dsTW9udGhWaWV3Q29tcG9uZW50LnByb3RvdHlwZSwgXCJjYWxlbmRhckJvZHlFbG1cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2NsYXNzLm93bC1kdC1jYWxlbmRhci12aWV3JyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bE1vbnRoVmlld0NvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhclZpZXdcIiwgbnVsbCk7XG4gICAgT3dsTW9udGhWaWV3Q29tcG9uZW50ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIENvbXBvbmVudCh7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ293bC1kYXRlLXRpbWUtbW9udGgtdmlldycsXG4gICAgICAgICAgICBleHBvcnRBczogJ293bFllYXJWaWV3JyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBcIjx0YWJsZSBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLXRhYmxlIG93bC1kdC1jYWxlbmRhci1tb250aC10YWJsZVxcXCIgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1vbmx5LWN1cnJlbnQtbW9udGhdPVxcXCJoaWRlT3RoZXJNb250aHNcXFwiPjx0aGVhZCBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLWhlYWRlclxcXCI+PHRyIGNsYXNzPVxcXCJvd2wtZHQtd2Vla2RheXNcXFwiPjx0aCAqbmdGb3I9XFxcImxldCB3ZWVrZGF5IG9mIHdlZWtkYXlzXFxcIiBbYXR0ci5hcmlhLWxhYmVsXT1cXFwid2Vla2RheS5sb25nXFxcIiBjbGFzcz1cXFwib3dsLWR0LXdlZWtkYXlcXFwiIHNjb3BlPVxcXCJjb2xcXFwiPjxzcGFuPnt7d2Vla2RheS5zaG9ydH19PC9zcGFuPjwvdGg+PC90cj48dHI+PHRoIGNsYXNzPVxcXCJvd2wtZHQtY2FsZW5kYXItdGFibGUtZGl2aWRlclxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGNvbHNwYW49XFxcIjdcXFwiPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBvd2wtZGF0ZS10aW1lLWNhbGVuZGFyLWJvZHkgcm9sZT1cXFwiZ3JpZFxcXCIgW3Jvd3NdPVxcXCJkYXlzXFxcIiBbdG9kYXlWYWx1ZV09XFxcInRvZGF5RGF0ZVxcXCIgW3NlbGVjdGVkVmFsdWVzXT1cXFwic2VsZWN0ZWREYXRlc1xcXCIgW3NlbGVjdE1vZGVdPVxcXCJzZWxlY3RNb2RlXFxcIiBbYWN0aXZlQ2VsbF09XFxcImFjdGl2ZUNlbGxcXFwiIChrZXlkb3duKT1cXFwiaGFuZGxlQ2FsZW5kYXJLZXlkb3duKCRldmVudClcXFwiIChzZWxlY3QpPVxcXCJzZWxlY3RDYWxlbmRhckNlbGwoJGV2ZW50KVxcXCI+PC90Ym9keT48L3RhYmxlPlwiLFxuICAgICAgICAgICAgc3R5bGVzOiBbXCJcIl0sXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICB9KSxcbiAgICAgICAgX19wYXJhbSgxLCBPcHRpb25hbCgpKSxcbiAgICAgICAgX19wYXJhbSgyLCBPcHRpb25hbCgpKSwgX19wYXJhbSgyLCBJbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTKSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICBEYXRlVGltZUFkYXB0ZXIsIE9iamVjdF0pXG4gICAgXSwgT3dsTW9udGhWaWV3Q29tcG9uZW50KTtcbiAgICByZXR1cm4gT3dsTW9udGhWaWV3Q29tcG9uZW50O1xufSgpKTtcbmV4cG9ydCB7IE93bE1vbnRoVmlld0NvbXBvbmVudCB9O1xuIl19","import * as ɵngcc0 from '@angular/core';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nvar OwlDateTimeIntl = (function () {\n function OwlDateTimeIntl() {\n this.changes = new Subject();\n this.upSecondLabel = 'Add a second';\n this.downSecondLabel = 'Minus a second';\n this.upMinuteLabel = 'Add a minute';\n this.downMinuteLabel = 'Minus a minute';\n this.upHourLabel = 'Add a hour';\n this.downHourLabel = 'Minus a hour';\n this.prevMonthLabel = 'Previous month';\n this.nextMonthLabel = 'Next month';\n this.prevYearLabel = 'Previous year';\n this.nextYearLabel = 'Next year';\n this.prevMultiYearLabel = 'Previous 21 years';\n this.nextMultiYearLabel = 'Next 21 years';\n this.switchToMonthViewLabel = 'Change to month view';\n this.switchToMultiYearViewLabel = 'Choose month and year';\n this.cancelBtnLabel = 'Cancel';\n this.setBtnLabel = 'Set';\n this.rangeFromLabel = 'From';\n this.rangeToLabel = 'To';\n this.hour12AMLabel = 'AM';\n this.hour12PMLabel = 'PM';\n }\n OwlDateTimeIntl.ngInjectableDef = i0.defineInjectable({ factory: function OwlDateTimeIntl_Factory() { return new OwlDateTimeIntl(); }, token: OwlDateTimeIntl, providedIn: \"root\" });\nOwlDateTimeIntl.ɵfac = function OwlDateTimeIntl_Factory(t) { return new (t || OwlDateTimeIntl)(); };\nOwlDateTimeIntl.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: OwlDateTimeIntl, factory: function (t) { return OwlDateTimeIntl.ɵfac(t); }, providedIn: 'root' });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeIntl, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return []; }, null); })();\n return OwlDateTimeIntl;\n}());\nexport { OwlDateTimeIntl };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1pbnRsLnNlcnZpY2UuanMiLCJzb3VyY2VzIjpbImRhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O2dEQUd3QjtBQUN4QjtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBpMCBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xudmFyIE93bERhdGVUaW1lSW50bCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGF0ZVRpbWVJbnRsKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnVwU2Vjb25kTGFiZWwgPSAnQWRkIGEgc2Vjb25kJztcbiAgICAgICAgdGhpcy5kb3duU2Vjb25kTGFiZWwgPSAnTWludXMgYSBzZWNvbmQnO1xuICAgICAgICB0aGlzLnVwTWludXRlTGFiZWwgPSAnQWRkIGEgbWludXRlJztcbiAgICAgICAgdGhpcy5kb3duTWludXRlTGFiZWwgPSAnTWludXMgYSBtaW51dGUnO1xuICAgICAgICB0aGlzLnVwSG91ckxhYmVsID0gJ0FkZCBhIGhvdXInO1xuICAgICAgICB0aGlzLmRvd25Ib3VyTGFiZWwgPSAnTWludXMgYSBob3VyJztcbiAgICAgICAgdGhpcy5wcmV2TW9udGhMYWJlbCA9ICdQcmV2aW91cyBtb250aCc7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoTGFiZWwgPSAnTmV4dCBtb250aCc7XG4gICAgICAgIHRoaXMucHJldlllYXJMYWJlbCA9ICdQcmV2aW91cyB5ZWFyJztcbiAgICAgICAgdGhpcy5uZXh0WWVhckxhYmVsID0gJ05leHQgeWVhcic7XG4gICAgICAgIHRoaXMucHJldk11bHRpWWVhckxhYmVsID0gJ1ByZXZpb3VzIDIxIHllYXJzJztcbiAgICAgICAgdGhpcy5uZXh0TXVsdGlZZWFyTGFiZWwgPSAnTmV4dCAyMSB5ZWFycyc7XG4gICAgICAgIHRoaXMuc3dpdGNoVG9Nb250aFZpZXdMYWJlbCA9ICdDaGFuZ2UgdG8gbW9udGggdmlldyc7XG4gICAgICAgIHRoaXMuc3dpdGNoVG9NdWx0aVllYXJWaWV3TGFiZWwgPSAnQ2hvb3NlIG1vbnRoIGFuZCB5ZWFyJztcbiAgICAgICAgdGhpcy5jYW5jZWxCdG5MYWJlbCA9ICdDYW5jZWwnO1xuICAgICAgICB0aGlzLnNldEJ0bkxhYmVsID0gJ1NldCc7XG4gICAgICAgIHRoaXMucmFuZ2VGcm9tTGFiZWwgPSAnRnJvbSc7XG4gICAgICAgIHRoaXMucmFuZ2VUb0xhYmVsID0gJ1RvJztcbiAgICAgICAgdGhpcy5ob3VyMTJBTUxhYmVsID0gJ0FNJztcbiAgICAgICAgdGhpcy5ob3VyMTJQTUxhYmVsID0gJ1BNJztcbiAgICB9XG4gICAgT3dsRGF0ZVRpbWVJbnRsLm5nSW5qZWN0YWJsZURlZiA9IGkwLmRlZmluZUluamVjdGFibGUoeyBmYWN0b3J5OiBmdW5jdGlvbiBPd2xEYXRlVGltZUludGxfRmFjdG9yeSgpIHsgcmV0dXJuIG5ldyBPd2xEYXRlVGltZUludGwoKTsgfSwgdG9rZW46IE93bERhdGVUaW1lSW50bCwgcHJvdmlkZWRJbjogXCJyb290XCIgfSk7XG4gICAgT3dsRGF0ZVRpbWVJbnRsID0gX19kZWNvcmF0ZShbXG4gICAgICAgIEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbiAgICBdLCBPd2xEYXRlVGltZUludGwpO1xuICAgIHJldHVybiBPd2xEYXRlVGltZUludGw7XG59KCkpO1xuZXhwb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH07XG4iXX0=","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './date-time-picker-intl.service';\nimport * as ɵngcc2 from './adapter/date-time-adapter.class';\nimport * as ɵngcc3 from '@angular/cdk/a11y';\nimport * as ɵngcc4 from '@angular/common';\nimport * as ɵngcc5 from './calendar-month-view.component';\nimport * as ɵngcc6 from './calendar-year-view.component';\nimport * as ɵngcc7 from './calendar-multi-year-view.component';\n\nfunction OwlCalendarComponent_owl_date_time_month_view_18_Template(rf, ctx) { if (rf & 1) {\n var _r4 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-month-view\", 16);\n ɵngcc0.ɵɵlistener(\"pickerMomentChange\", function OwlCalendarComponent_owl_date_time_month_view_18_Template_owl_date_time_month_view_pickerMomentChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r4); var ctx_r3 = ɵngcc0.ɵɵnextContext(); return ctx_r3.handlePickerMomentChange($event); })(\"selectedChange\", function OwlCalendarComponent_owl_date_time_month_view_18_Template_owl_date_time_month_view_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r4); var ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.dateSelected($event); })(\"userSelection\", function OwlCalendarComponent_owl_date_time_month_view_18_Template_owl_date_time_month_view_userSelection_0_listener() { ɵngcc0.ɵɵrestoreView(_r4); var ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.userSelected(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"pickerMoment\", ctx_r0.pickerMoment)(\"firstDayOfWeek\", ctx_r0.firstDayOfWeek)(\"selected\", ctx_r0.selected)(\"selecteds\", ctx_r0.selecteds)(\"selectMode\", ctx_r0.selectMode)(\"minDate\", ctx_r0.minDate)(\"maxDate\", ctx_r0.maxDate)(\"dateFilter\", ctx_r0.dateFilter)(\"hideOtherMonths\", ctx_r0.hideOtherMonths);\n} }\nfunction OwlCalendarComponent_owl_date_time_year_view_19_Template(rf, ctx) { if (rf & 1) {\n var _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-year-view\", 17);\n ɵngcc0.ɵɵlistener(\"keyboardEnter\", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_keyboardEnter_0_listener() { ɵngcc0.ɵɵrestoreView(_r8); var ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.focusActiveCell(); })(\"pickerMomentChange\", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_pickerMomentChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); var ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.handlePickerMomentChange($event); })(\"monthSelected\", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_monthSelected_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); var ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10.selectMonthInYearView($event); })(\"change\", function OwlCalendarComponent_owl_date_time_year_view_19_Template_owl_date_time_year_view_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); var ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.goToDateInView($event, \"month\"); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"pickerMoment\", ctx_r1.pickerMoment)(\"selected\", ctx_r1.selected)(\"selecteds\", ctx_r1.selecteds)(\"selectMode\", ctx_r1.selectMode)(\"minDate\", ctx_r1.minDate)(\"maxDate\", ctx_r1.maxDate)(\"dateFilter\", ctx_r1.dateFilter);\n} }\nfunction OwlCalendarComponent_owl_date_time_multi_year_view_20_Template(rf, ctx) { if (rf & 1) {\n var _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"owl-date-time-multi-year-view\", 18);\n ɵngcc0.ɵɵlistener(\"keyboardEnter\", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_keyboardEnter_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); var ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.focusActiveCell(); })(\"pickerMomentChange\", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_pickerMomentChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); var ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14.handlePickerMomentChange($event); })(\"yearSelected\", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_yearSelected_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); var ctx_r15 = ɵngcc0.ɵɵnextContext(); return ctx_r15.selectYearInMultiYearView($event); })(\"change\", function OwlCalendarComponent_owl_date_time_multi_year_view_20_Template_owl_date_time_multi_year_view_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); var ctx_r16 = ɵngcc0.ɵɵnextContext(); return ctx_r16.goToDateInView($event, \"year\"); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"pickerMoment\", ctx_r2.pickerMoment)(\"selected\", ctx_r2.selected)(\"selecteds\", ctx_r2.selecteds)(\"selectMode\", ctx_r2.selectMode)(\"minDate\", ctx_r2.minDate)(\"maxDate\", ctx_r2.maxDate)(\"dateFilter\", ctx_r2.dateFilter);\n} }\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Inject, Input, NgZone, Optional, Output } from '@angular/core';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nimport { take } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\nvar OwlCalendarComponent = (function () {\n function OwlCalendarComponent(elmRef, pickerIntl, ngZone, cdRef, dateTimeAdapter, dateTimeFormats) {\n var _this = this;\n this.elmRef = elmRef;\n this.pickerIntl = pickerIntl;\n this.ngZone = ngZone;\n this.cdRef = cdRef;\n this.dateTimeAdapter = dateTimeAdapter;\n this.dateTimeFormats = dateTimeFormats;\n this.firstDayOfWeek = 0;\n this._selecteds = [];\n this.startView = 'month';\n this.pickerMomentChange = new EventEmitter();\n this.selectedChange = new EventEmitter();\n this.userSelection = new EventEmitter();\n this.yearSelected = new EventEmitter();\n this.monthSelected = new EventEmitter();\n this.dateFilterForViews = function (date) {\n return !!date &&\n (!_this.dateFilter || _this.dateFilter(date)) &&\n (!_this.minDate || _this.dateTimeAdapter.compare(date, _this.minDate) >= 0) &&\n (!_this.maxDate || _this.dateTimeAdapter.compare(date, _this.maxDate) <= 0);\n };\n this.intlChangesSub = Subscription.EMPTY;\n this.moveFocusOnNextTick = false;\n this.intlChangesSub = this.pickerIntl.changes.subscribe(function () {\n _this.cdRef.markForCheck();\n });\n }\n Object.defineProperty(OwlCalendarComponent.prototype, \"minDate\", {\n get: function () {\n return this._minDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n value = this.getValidDate(value);\n this._minDate = value ?\n this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value)) : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"maxDate\", {\n get: function () {\n return this._maxDate;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n value = this.getValidDate(value);\n this._maxDate = value ?\n this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(value), this.dateTimeAdapter.getMonth(value), this.dateTimeAdapter.getDate(value)) : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"pickerMoment\", {\n get: function () {\n return this._pickerMoment;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"selected\", {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this._selected = this.getValidDate(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"selecteds\", {\n get: function () {\n return this._selecteds;\n },\n set: function (values) {\n var _this = this;\n this._selecteds = values.map(function (v) {\n v = _this.dateTimeAdapter.deserialize(v);\n return _this.getValidDate(v);\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"periodButtonText\", {\n get: function () {\n return this.isMonthView ? this.dateTimeAdapter.format(this.pickerMoment, this.dateTimeFormats.monthYearLabel) :\n this.dateTimeAdapter.getYearName(this.pickerMoment);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"periodButtonLabel\", {\n get: function () {\n return this.isMonthView ? this.pickerIntl.switchToMultiYearViewLabel :\n this.pickerIntl.switchToMonthViewLabel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"prevButtonLabel\", {\n get: function () {\n if (this._currentView === 'month') {\n return this.pickerIntl.prevMonthLabel;\n }\n else if (this._currentView === 'year') {\n return this.pickerIntl.prevYearLabel;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"nextButtonLabel\", {\n get: function () {\n if (this._currentView === 'month') {\n return this.pickerIntl.nextMonthLabel;\n }\n else if (this._currentView === 'year') {\n return this.pickerIntl.nextYearLabel;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"currentView\", {\n get: function () {\n return this._currentView;\n },\n set: function (view) {\n this._currentView = view;\n this.moveFocusOnNextTick = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this.selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\n || this.selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"showControlArrows\", {\n get: function () {\n return this._currentView !== 'multi-years';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"isMonthView\", {\n get: function () {\n return this._currentView === 'month';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarComponent.prototype, \"owlDTCalendarClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n OwlCalendarComponent.prototype.ngOnInit = function () {\n };\n OwlCalendarComponent.prototype.ngAfterContentInit = function () {\n this._currentView = this.startView;\n };\n OwlCalendarComponent.prototype.ngAfterViewChecked = function () {\n if (this.moveFocusOnNextTick) {\n this.moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n };\n OwlCalendarComponent.prototype.ngOnDestroy = function () {\n this.intlChangesSub.unsubscribe();\n };\n OwlCalendarComponent.prototype.toggleViews = function () {\n this.currentView = this._currentView == 'month' ? 'multi-years' : 'month';\n };\n OwlCalendarComponent.prototype.previousClicked = function () {\n this.pickerMoment = this.isMonthView ?\n this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1) :\n this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1);\n this.pickerMomentChange.emit(this.pickerMoment);\n };\n OwlCalendarComponent.prototype.nextClicked = function () {\n this.pickerMoment = this.isMonthView ?\n this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1) :\n this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1);\n this.pickerMomentChange.emit(this.pickerMoment);\n };\n OwlCalendarComponent.prototype.dateSelected = function (date) {\n if (!this.dateFilterForViews(date)) {\n return;\n }\n this.selectedChange.emit(date);\n };\n OwlCalendarComponent.prototype.goToDateInView = function (date, view) {\n this.handlePickerMomentChange(date);\n this.currentView = view;\n return;\n };\n OwlCalendarComponent.prototype.handlePickerMomentChange = function (date) {\n this.pickerMoment = this.dateTimeAdapter.clampDate(date, this.minDate, this.maxDate);\n this.pickerMomentChange.emit(this.pickerMoment);\n return;\n };\n OwlCalendarComponent.prototype.userSelected = function () {\n this.userSelection.emit();\n };\n OwlCalendarComponent.prototype.prevButtonEnabled = function () {\n return !this.minDate || !this.isSameView(this.pickerMoment, this.minDate);\n };\n OwlCalendarComponent.prototype.nextButtonEnabled = function () {\n return !this.maxDate || !this.isSameView(this.pickerMoment, this.maxDate);\n };\n OwlCalendarComponent.prototype.focusActiveCell = function () {\n var _this = this;\n this.ngZone.runOutsideAngular(function () {\n _this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(function () {\n _this.elmRef.nativeElement.querySelector('.owl-dt-calendar-cell-active').focus();\n });\n });\n };\n OwlCalendarComponent.prototype.selectYearInMultiYearView = function (normalizedYear) {\n this.yearSelected.emit(normalizedYear);\n };\n OwlCalendarComponent.prototype.selectMonthInYearView = function (normalizedMonth) {\n this.monthSelected.emit(normalizedMonth);\n };\n OwlCalendarComponent.prototype.isSameView = function (date1, date2) {\n if (this._currentView === 'month') {\n return !!(date1 && date2 &&\n this.dateTimeAdapter.getYear(date1) === this.dateTimeAdapter.getYear(date2) &&\n this.dateTimeAdapter.getMonth(date1) === this.dateTimeAdapter.getMonth(date2));\n }\n else if (this._currentView === 'year') {\n return !!(date1 && date2 &&\n this.dateTimeAdapter.getYear(date1) === this.dateTimeAdapter.getYear(date2));\n }\n else {\n return false;\n }\n };\n OwlCalendarComponent.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Function)\n ], OwlCalendarComponent.prototype, \"dateFilter\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarComponent.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlCalendarComponent.prototype, \"minDate\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlCalendarComponent.prototype, \"maxDate\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlCalendarComponent.prototype, \"pickerMoment\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlCalendarComponent.prototype, \"selectMode\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlCalendarComponent.prototype, \"selected\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], OwlCalendarComponent.prototype, \"selecteds\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlCalendarComponent.prototype, \"startView\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlCalendarComponent.prototype, \"hideOtherMonths\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarComponent.prototype, \"pickerMomentChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarComponent.prototype, \"selectedChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarComponent.prototype, \"userSelection\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarComponent.prototype, \"yearSelected\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarComponent.prototype, \"monthSelected\", void 0);\n __decorate([\n HostBinding('class.owl-dt-calendar'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlCalendarComponent.prototype, \"owlDTCalendarClass\", null);\n OwlCalendarComponent = __decorate([ __param(4, Optional()),\n __param(5, Optional()), __param(5, Inject(OWL_DATE_TIME_FORMATS)),\n __metadata(\"design:paramtypes\", [ElementRef,\n OwlDateTimeIntl,\n NgZone,\n ChangeDetectorRef,\n DateTimeAdapter, Object])\n ], OwlCalendarComponent);\nOwlCalendarComponent.ɵfac = function OwlCalendarComponent_Factory(t) { return new (t || OwlCalendarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.OwlDateTimeIntl), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8)); };\nOwlCalendarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlCalendarComponent, selectors: [[\"owl-date-time-calendar\"]], hostVars: 2, hostBindings: function OwlCalendarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar\", ctx.owlDTCalendarClass);\n } }, inputs: { firstDayOfWeek: \"firstDayOfWeek\", startView: \"startView\", minDate: \"minDate\", maxDate: \"maxDate\", pickerMoment: \"pickerMoment\", selected: \"selected\", selecteds: \"selecteds\", dateFilter: \"dateFilter\", selectMode: \"selectMode\", hideOtherMonths: \"hideOtherMonths\" }, outputs: { pickerMomentChange: \"pickerMomentChange\", selectedChange: \"selectedChange\", userSelection: \"userSelection\", yearSelected: \"yearSelected\", monthSelected: \"monthSelected\" }, exportAs: [\"owlDateTimeCalendar\"], decls: 21, vars: 16, consts: [[1, \"owl-dt-calendar-control\"], [\"type\", \"button\", \"tabindex\", \"0\", 1, \"owl-dt-control\", \"owl-dt-control-button\", \"owl-dt-control-arrow-button\", 3, \"disabled\", \"click\"], [\"tabindex\", \"-1\", 1, \"owl-dt-control-content\", \"owl-dt-control-button-content\"], [\"xmlns\", \"http://www.w3.org/2000/svg\", 0, \"xmlns\", \"xlink\", \"http://www.w3.org/1999/xlink\", \"version\", \"1.1\", \"x\", \"0px\", \"y\", \"0px\", \"viewBox\", \"0 0 250.738 250.738\", 0, \"xml\", \"space\", \"preserve\", \"width\", \"100%\", \"height\", \"100%\", 2, \"enable-background\", \"new 0 0 250.738 250.738\"], [\"d\", \"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\", 2, \"fill-rule\", \"evenodd\", \"clip-rule\", \"evenodd\"], [1, \"owl-dt-calendar-control-content\"], [\"type\", \"button\", \"tabindex\", \"0\", 1, \"owl-dt-control\", \"owl-dt-control-button\", \"owl-dt-control-period-button\", 3, \"click\"], [1, \"owl-dt-control-button-arrow\"], [\"version\", \"1.1\", \"xmlns\", \"http://www.w3.org/2000/svg\", 0, \"xmlns\", \"xlink\", \"http://www.w3.org/1999/xlink\", \"x\", \"0px\", \"y\", \"0px\", \"width\", \"50%\", \"height\", \"50%\", \"viewBox\", \"0 0 292.362 292.362\", 0, \"xml\", \"space\", \"preserve\", 2, \"enable-background\", \"new 0 0 292.362 292.362\"], [\"d\", \"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\"], [\"version\", \"1.1\", \"xmlns\", \"http://www.w3.org/2000/svg\", 0, \"xmlns\", \"xlink\", \"http://www.w3.org/1999/xlink\", \"x\", \"0px\", \"y\", \"0px\", \"viewBox\", \"0 0 250.738 250.738\", 0, \"xml\", \"space\", \"preserve\", 2, \"enable-background\", \"new 0 0 250.738 250.738\"], [\"d\", \"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\\n C197.237,120.447,195.534,115.448,191.75,111.689z\", 2, \"fill-rule\", \"evenodd\", \"clip-rule\", \"evenodd\"], [\"cdkMonitorSubtreeFocus\", \"\", \"tabindex\", \"-1\", 1, \"owl-dt-calendar-main\", 3, \"ngSwitch\"], [3, \"pickerMoment\", \"firstDayOfWeek\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"hideOtherMonths\", \"pickerMomentChange\", \"selectedChange\", \"userSelection\", 4, \"ngSwitchCase\"], [3, \"pickerMoment\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"keyboardEnter\", \"pickerMomentChange\", \"monthSelected\", \"change\", 4, \"ngSwitchCase\"], [3, \"pickerMoment\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"keyboardEnter\", \"pickerMomentChange\", \"yearSelected\", \"change\", 4, \"ngSwitchCase\"], [3, \"pickerMoment\", \"firstDayOfWeek\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"hideOtherMonths\", \"pickerMomentChange\", \"selectedChange\", \"userSelection\"], [3, \"pickerMoment\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"keyboardEnter\", \"pickerMomentChange\", \"monthSelected\", \"change\"], [3, \"pickerMoment\", \"selected\", \"selecteds\", \"selectMode\", \"minDate\", \"maxDate\", \"dateFilter\", \"keyboardEnter\", \"pickerMomentChange\", \"yearSelected\", \"change\"]], template: function OwlCalendarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function OwlCalendarComponent_Template_button_click_1_listener() { return ctx.previousClicked(); });\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(3, \"svg\", 3);\n ɵngcc0.ɵɵelement(4, \"path\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelementStart(5, \"div\", 5);\n ɵngcc0.ɵɵelementStart(6, \"button\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function OwlCalendarComponent_Template_button_click_6_listener() { return ctx.toggleViews(); });\n ɵngcc0.ɵɵelementStart(7, \"span\", 2);\n ɵngcc0.ɵɵtext(8);\n ɵngcc0.ɵɵelementStart(9, \"span\", 7);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(10, \"svg\", 8);\n ɵngcc0.ɵɵelementStart(11, \"g\");\n ɵngcc0.ɵɵelement(12, \"path\", 9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelementStart(13, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function OwlCalendarComponent_Template_button_click_13_listener() { return ctx.nextClicked(); });\n ɵngcc0.ɵɵelementStart(14, \"span\", 2);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(15, \"svg\", 10);\n ɵngcc0.ɵɵelement(16, \"path\", 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelementStart(17, \"div\", 12);\n ɵngcc0.ɵɵtemplate(18, OwlCalendarComponent_owl_date_time_month_view_18_Template, 1, 9, \"owl-date-time-month-view\", 13);\n ɵngcc0.ɵɵtemplate(19, OwlCalendarComponent_owl_date_time_year_view_19_Template, 1, 7, \"owl-date-time-year-view\", 14);\n ɵngcc0.ɵɵtemplate(20, OwlCalendarComponent_owl_date_time_multi_year_view_20_Template, 1, 7, \"owl-date-time-multi-year-view\", 15);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx.showControlArrows ? \"visible\" : \"hidden\");\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx.prevButtonEnabled());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.prevButtonLabel);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.periodButtonLabel);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\"\", ctx.periodButtonText, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"transform\", \"rotate(\" + (ctx.isMonthView ? 0 : 180) + \"deg)\");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx.showControlArrows ? \"visible\" : \"hidden\");\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx.nextButtonEnabled());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.nextButtonLabel);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.currentView);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"month\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"year\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"multi-years\");\n } }, directives: [ɵngcc3.CdkMonitorFocus, ɵngcc4.NgSwitch, ɵngcc4.NgSwitchCase, ɵngcc5.OwlMonthViewComponent, ɵngcc6.OwlYearViewComponent, ɵngcc7.OwlMultiYearViewComponent], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlCalendarComponent, [{\n type: Component,\n args: [{\n selector: 'owl-date-time-calendar',\n exportAs: 'owlDateTimeCalendar',\n template: \"
\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.OwlDateTimeIntl }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.DateTimeAdapter, decorators: [{\n type: Optional\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_FORMATS]\n }] }]; }, { firstDayOfWeek: [{\n type: Input\n }], startView: [{\n type: Input\n }], pickerMomentChange: [{\n type: Output\n }], selectedChange: [{\n type: Output\n }], userSelection: [{\n type: Output\n }], yearSelected: [{\n type: Output\n }], monthSelected: [{\n type: Output\n }], minDate: [{\n type: Input\n }], maxDate: [{\n type: Input\n }], pickerMoment: [{\n type: Input\n }], selected: [{\n type: Input\n }], selecteds: [{\n type: Input\n }], owlDTCalendarClass: [{\n type: HostBinding,\n args: ['class.owl-dt-calendar']\n }], dateFilter: [{\n type: Input\n }], selectMode: [{\n type: Input\n }], hideOtherMonths: [{\n type: Input\n }] }); })();\n return OwlCalendarComponent;\n}());\nexport { OwlCalendarComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlcyI6WyJjYWxlbmRhci5jb21wb25lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBU087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUE2QjtBQUM3QjtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIF9fcGFyYW0gPSAodGhpcyAmJiB0aGlzLl9fcGFyYW0pIHx8IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn07XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgTmdab25lLCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZUludGwgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG52YXIgT3dsQ2FsZW5kYXJDb21wb25lbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE93bENhbGVuZGFyQ29tcG9uZW50KGVsbVJlZiwgcGlja2VySW50bCwgbmdab25lLCBjZFJlZiwgZGF0ZVRpbWVBZGFwdGVyLCBkYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5lbG1SZWYgPSBlbG1SZWY7XG4gICAgICAgIHRoaXMucGlja2VySW50bCA9IHBpY2tlckludGw7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmNkUmVmID0gY2RSZWY7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyID0gZGF0ZVRpbWVBZGFwdGVyO1xuICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0cyA9IGRhdGVUaW1lRm9ybWF0cztcbiAgICAgICAgdGhpcy5maXJzdERheU9mV2VlayA9IDA7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0VmlldyA9ICdtb250aCc7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnVzZXJTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLm1vbnRoU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZGF0ZUZpbHRlckZvclZpZXdzID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWRhdGUgJiZcbiAgICAgICAgICAgICAgICAoIV90aGlzLmRhdGVGaWx0ZXIgfHwgX3RoaXMuZGF0ZUZpbHRlcihkYXRlKSkgJiZcbiAgICAgICAgICAgICAgICAoIV90aGlzLm1pbkRhdGUgfHwgX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZGF0ZSwgX3RoaXMubWluRGF0ZSkgPj0gMCkgJiZcbiAgICAgICAgICAgICAgICAoIV90aGlzLm1heERhdGUgfHwgX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZGF0ZSwgX3RoaXMubWF4RGF0ZSkgPD0gMCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW50bENoYW5nZXNTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzT25OZXh0VGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludGxDaGFuZ2VzU3ViID0gdGhpcy5waWNrZXJJbnRsLmNoYW5nZXMuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtaW5EYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gdmFsdWUgP1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZSh2YWx1ZSkpIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJtYXhEYXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdmFsdWUgP1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZSh2YWx1ZSkpIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwaWNrZXJNb21lbnRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9waWNrZXJNb21lbnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tlck1vbWVudCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IHZhbHVlcy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB2ID0gX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHYpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5nZXRWYWxpZERhdGUodik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwZXJpb2RCdXR0b25UZXh0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01vbnRoVmlldyA/IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdCh0aGlzLnBpY2tlck1vbWVudCwgdGhpcy5kYXRlVGltZUZvcm1hdHMubW9udGhZZWFyTGFiZWwpIDpcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZSh0aGlzLnBpY2tlck1vbWVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwicGVyaW9kQnV0dG9uTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTW9udGhWaWV3ID8gdGhpcy5waWNrZXJJbnRsLnN3aXRjaFRvTXVsdGlZZWFyVmlld0xhYmVsIDpcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckludGwuc3dpdGNoVG9Nb250aFZpZXdMYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwcmV2QnV0dG9uTGFiZWxcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwucHJldk1vbnRoTGFiZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5wcmV2WWVhckxhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwibmV4dEJ1dHRvbkxhYmVsXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJJbnRsLm5leHRNb250aExhYmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpY2tlckludGwubmV4dFllYXJMYWJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcImN1cnJlbnRWaWV3XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXc7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRWaWV3ID0gdmlldztcbiAgICAgICAgICAgIHRoaXMubW92ZUZvY3VzT25OZXh0VGljayA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblNpbmdsZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcImlzSW5SYW5nZU1vZGVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJ1xuICAgICAgICAgICAgICAgIHx8IHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcInNob3dDb250cm9sQXJyb3dzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXcgIT09ICdtdWx0aS15ZWFycyc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNNb250aFZpZXdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmlldyA9PT0gJ21vbnRoJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENhbGVuZGFyQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUubmdPbkluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmlldyA9IHRoaXMuc3RhcnRWaWV3O1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3Q2hlY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubW92ZUZvY3VzT25OZXh0VGljaykge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRm9jdXNPbk5leHRUaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUubmdPbkRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW50bENoYW5nZXNTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZS50b2dnbGVWaWV3cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMuX2N1cnJlbnRWaWV3ID09ICdtb250aCcgPyAnbXVsdGkteWVhcnMnIDogJ21vbnRoJztcbiAgICB9O1xuICAgIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZS5wcmV2aW91c0NsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5pc01vbnRoVmlldyA/XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgLTEpIDpcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5waWNrZXJNb21lbnQsIC0xKTtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdCh0aGlzLnBpY2tlck1vbWVudCk7XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUubmV4dENsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5pc01vbnRoVmlldyA/XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLnBpY2tlck1vbWVudCwgMSkgOlxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLnBpY2tlck1vbWVudCwgMSk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQodGhpcy5waWNrZXJNb21lbnQpO1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLmRhdGVTZWxlY3RlZCA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRlRmlsdGVyRm9yVmlld3MoZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUuZ29Ub0RhdGVJblZpZXcgPSBmdW5jdGlvbiAoZGF0ZSwgdmlldykge1xuICAgICAgICB0aGlzLmhhbmRsZVBpY2tlck1vbWVudENoYW5nZShkYXRlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXc7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZS5oYW5kbGVQaWNrZXJNb21lbnRDaGFuZ2UgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNsYW1wRGF0ZShkYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQodGhpcy5waWNrZXJNb21lbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUudXNlclNlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVzZXJTZWxlY3Rpb24uZW1pdCgpO1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLnByZXZCdXR0b25FbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubWluRGF0ZSB8fCAhdGhpcy5pc1NhbWVWaWV3KHRoaXMucGlja2VyTW9tZW50LCB0aGlzLm1pbkRhdGUpO1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLm5leHRCdXR0b25FbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubWF4RGF0ZSB8fCAhdGhpcy5pc1NhbWVWaWV3KHRoaXMucGlja2VyTW9tZW50LCB0aGlzLm1heERhdGUpO1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLmZvY3VzQWN0aXZlQ2VsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcub3dsLWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZS5zZWxlY3RZZWFySW5NdWx0aVllYXJWaWV3ID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRZZWFyKSB7XG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkLmVtaXQobm9ybWFsaXplZFllYXIpO1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdE1vbnRoSW5ZZWFyVmlldyA9IGZ1bmN0aW9uIChub3JtYWxpemVkTW9udGgpIHtcbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobm9ybWFsaXplZE1vbnRoKTtcbiAgICB9O1xuICAgIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZS5pc1NhbWVWaWV3ID0gZnVuY3Rpb24gKGRhdGUxLCBkYXRlMikge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHJldHVybiAhIShkYXRlMSAmJiBkYXRlMiAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZTEpID09PSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUyKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGUxKSA9PT0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZTIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICByZXR1cm4gISEoZGF0ZTEgJiYgZGF0ZTIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUxKSA9PT0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihkYXRlMikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUuZ2V0VmFsaWREYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopKSA/IG9iaiA6IG51bGw7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKVxuICAgIF0sIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJkYXRlRmlsdGVyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcImZpcnN0RGF5T2ZXZWVrXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcIm1pbkRhdGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcIm1heERhdGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vbWVudFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcbiAgICBdLCBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0TW9kZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKVxuICAgIF0sIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RlZFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtBcnJheV0pXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkc1wiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcbiAgICBdLCBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwic3RhcnRWaWV3XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKVxuICAgIF0sIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJoaWRlT3RoZXJNb250aHNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcInBpY2tlck1vbWVudENoYW5nZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRDaGFuZ2VcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcInVzZXJTZWxlY3Rpb25cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJDb21wb25lbnQucHJvdG90eXBlLCBcInllYXJTZWxlY3RlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xDYWxlbmRhckNvbXBvbmVudC5wcm90b3R5cGUsIFwibW9udGhTZWxlY3RlZFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LWNhbGVuZGFyJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bENhbGVuZGFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEVENhbGVuZGFyQ2xhc3NcIiwgbnVsbCk7XG4gICAgT3dsQ2FsZW5kYXJDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29tcG9uZW50KHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnb3dsLWRhdGUtdGltZS1jYWxlbmRhcicsXG4gICAgICAgICAgICBleHBvcnRBczogJ293bERhdGVUaW1lQ2FsZW5kYXInLFxuICAgICAgICAgICAgdGVtcGxhdGU6IFwiPGRpdiBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLWNvbnRyb2xcXFwiPjwhLS0gZm9jdXMgd2hlbiBrZXlib2FyZCB0YWIgKGh0dHA6Ly9raXp1LnJ1L2VuL2Jsb2cva2V5Ym9hcmQtb25seS1mb2N1cy8jeCkgLS0+IDxidXR0b24gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udHJvbC1hcnJvdy1idXR0b25cXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiIFtzdHlsZS52aXNpYmlsaXR5XT1cXFwic2hvd0NvbnRyb2xBcnJvd3M/ICd2aXNpYmxlJzogJ2hpZGRlbidcXFwiIFtkaXNhYmxlZF09XFxcIiFwcmV2QnV0dG9uRW5hYmxlZCgpXFxcIiBbYXR0ci5hcmlhLWxhYmVsXT1cXFwicHJldkJ1dHRvbkxhYmVsXFxcIiAoY2xpY2spPVxcXCJwcmV2aW91c0NsaWNrZWQoKVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cXFwiU1ZHIEFycm93IExlZnRcXFwiPiAtLT4gPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHg9XFxcIjBweFxcXCIgeT1cXFwiMHB4XFxcIiB2aWV3Qm94PVxcXCIwIDAgMjUwLjczOCAyNTAuNzM4XFxcIiBzdHlsZT1cXFwiZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAuNzM4IDI1MC43Mzg7XFxcIiB4bWw6c3BhY2U9XFxcInByZXNlcnZlXFxcIiB3aWR0aD1cXFwiMTAwJVxcXCIgaGVpZ2h0PVxcXCIxMDAlXFxcIj48cGF0aCBzdHlsZT1cXFwiZmlsbC1ydWxlOiBldmVub2RkOyBjbGlwLXJ1bGU6IGV2ZW5vZGQ7XFxcIiBkPVxcXCJNOTYuNjMzLDEyNS4zNjlsOTUuMDUzLTk0LjUzM2M3LjEwMS03LjA1NSw3LjEwMS0xOC40OTIsMC0yNS41NDYgICBjLTcuMS03LjA1NC0xOC42MTMtNy4wNTQtMjUuNzE0LDBMNTguOTg5LDExMS42ODljLTMuNzg0LDMuNzU5LTUuNDg3LDguNzU5LTUuMjM4LDEzLjY4Yy0wLjI0OSw0LjkyMiwxLjQ1NCw5LjkyMSw1LjIzOCwxMy42ODEgICBsMTA2Ljk4MywxMDYuMzk4YzcuMTAxLDcuMDU1LDE4LjYxMyw3LjA1NSwyNS43MTQsMGM3LjEwMS03LjA1NCw3LjEwMS0xOC40OTEsMC0yNS41NDRMOTYuNjMzLDEyNS4zNjl6XFxcIi8+PC9zdmc+PCEtLSA8L2VkaXRvci1mb2xkPiAtLT48L3NwYW4+PC9idXR0b24+PGRpdiBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLWNvbnRyb2wtY29udGVudFxcXCI+PGJ1dHRvbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250cm9sLXBlcmlvZC1idXR0b25cXFwiIHR5cGU9XFxcImJ1dHRvblxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiIFthdHRyLmFyaWEtbGFiZWxdPVxcXCJwZXJpb2RCdXR0b25MYWJlbFxcXCIgKGNsaWNrKT1cXFwidG9nZ2xlVmlld3MoKVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+e3twZXJpb2RCdXR0b25UZXh0fX0gPHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jb250cm9sLWJ1dHRvbi1hcnJvd1xcXCIgW3N0eWxlLnRyYW5zZm9ybV09XFxcIidyb3RhdGUoJyArIChpc01vbnRoVmlldz8gMCA6IDE4MCkgKydkZWcpJ1xcXCI+PCEtLSA8ZWRpdG9yLWZvbGQgZGVzYz1cXFwiU1ZHIEFycm93XFxcIj4gLS0+IDxzdmcgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHhtbG5zOnhsaW5rPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXFxcIiB4PVxcXCIwcHhcXFwiIHk9XFxcIjBweFxcXCIgd2lkdGg9XFxcIjUwJVxcXCIgaGVpZ2h0PVxcXCI1MCVcXFwiIHZpZXdCb3g9XFxcIjAgMCAyOTIuMzYyIDI5Mi4zNjJcXFwiIHN0eWxlPVxcXCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI5Mi4zNjIgMjkyLjM2MjtcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiPjxnPjxwYXRoIGQ9XFxcIk0yODYuOTM1LDY5LjM3N2MtMy42MTQtMy42MTctNy44OTgtNS40MjQtMTIuODQ4LTUuNDI0SDE4LjI3NGMtNC45NTIsMC05LjIzMywxLjgwNy0xMi44NSw1LjQyNFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQzEuODA3LDcyLjk5OCwwLDc3LjI3OSwwLDgyLjIyOGMwLDQuOTQ4LDEuODA3LDkuMjI5LDUuNDI0LDEyLjg0N2wxMjcuOTA3LDEyNy45MDdjMy42MjEsMy42MTcsNy45MDIsNS40MjgsMTIuODUsNS40MjhcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM5LjIzMy0xLjgxMSwxMi44NDctNS40MjhMMjg2LjkzNSw5NS4wNzRjMy42MTMtMy42MTcsNS40MjctNy44OTgsNS40MjctMTIuODQ3QzI5Mi4zNjIsNzcuMjc5LDI5MC41NDgsNzIuOTk4LDI4Ni45MzUsNjkuMzc3elxcXCIvPjwvZz48L3N2Zz48IS0tIDwvZWRpdG9yLWZvbGQ+IC0tPjwvc3Bhbj48L3NwYW4+PC9idXR0b24+PC9kaXY+PGJ1dHRvbiBjbGFzcz1cXFwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250cm9sLWFycm93LWJ1dHRvblxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIiB0YWJpbmRleD1cXFwiMFxcXCIgW3N0eWxlLnZpc2liaWxpdHldPVxcXCJzaG93Q29udHJvbEFycm93cz8gJ3Zpc2libGUnOiAnaGlkZGVuJ1xcXCIgW2Rpc2FibGVkXT1cXFwiIW5leHRCdXR0b25FbmFibGVkKClcXFwiIFthdHRyLmFyaWEtbGFiZWxdPVxcXCJuZXh0QnV0dG9uTGFiZWxcXFwiIChjbGljayk9XFxcIm5leHRDbGlja2VkKClcXFwiPjxzcGFuIGNsYXNzPVxcXCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XFxcIiB0YWJpbmRleD1cXFwiLTFcXFwiPjwhLS0gPGVkaXRvci1mb2xkIGRlc2M9XFxcIlNWRyBBcnJvdyBSaWdodFxcXCI+IC0tPiA8c3ZnIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB4bWxuczp4bGluaz1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1xcXCIgeD1cXFwiMHB4XFxcIiB5PVxcXCIwcHhcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNTAuNzM4IDI1MC43MzhcXFwiIHN0eWxlPVxcXCJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI1MC43MzggMjUwLjczODtcXFwiIHhtbDpzcGFjZT1cXFwicHJlc2VydmVcXFwiPjxwYXRoIHN0eWxlPVxcXCJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtcXFwiIGQ9XFxcIk0xOTEuNzUsMTExLjY4OUw4NC43NjYsNS4yOTFjLTcuMS03LjA1NS0xOC42MTMtNy4wNTUtMjUuNzEzLDBcXG4gICAgICAgICAgICAgICAgICAgIGMtNy4xMDEsNy4wNTQtNy4xMDEsMTguNDksMCwyNS41NDRsOTUuMDUzLDk0LjUzNGwtOTUuMDUzLDk0LjUzM2MtNy4xMDEsNy4wNTQtNy4xMDEsMTguNDkxLDAsMjUuNTQ1XFxuICAgICAgICAgICAgICAgICAgICBjNy4xLDcuMDU0LDE4LjYxMyw3LjA1NCwyNS43MTMsMEwxOTEuNzUsMTM5LjA1YzMuNzg0LTMuNzU5LDUuNDg3LTguNzU5LDUuMjM4LTEzLjY4MVxcbiAgICAgICAgICAgICAgICAgICAgQzE5Ny4yMzcsMTIwLjQ0NywxOTUuNTM0LDExNS40NDgsMTkxLjc1LDExMS42ODl6XFxcIi8+PC9zdmc+PCEtLSA8L2VkaXRvci1mb2xkPiAtLT48L3NwYW4+PC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz1cXFwib3dsLWR0LWNhbGVuZGFyLW1haW5cXFwiIGNka01vbml0b3JTdWJ0cmVlRm9jdXMgW25nU3dpdGNoXT1cXFwiY3VycmVudFZpZXdcXFwiIHRhYmluZGV4PVxcXCItMVxcXCI+PG93bC1kYXRlLXRpbWUtbW9udGgtdmlldyAqbmdTd2l0Y2hDYXNlPVxcXCInbW9udGgnXFxcIiBbcGlja2VyTW9tZW50XT1cXFwicGlja2VyTW9tZW50XFxcIiBbZmlyc3REYXlPZldlZWtdPVxcXCJmaXJzdERheU9mV2Vla1xcXCIgW3NlbGVjdGVkXT1cXFwic2VsZWN0ZWRcXFwiIFtzZWxlY3RlZHNdPVxcXCJzZWxlY3RlZHNcXFwiIFtzZWxlY3RNb2RlXT1cXFwic2VsZWN0TW9kZVxcXCIgW21pbkRhdGVdPVxcXCJtaW5EYXRlXFxcIiBbbWF4RGF0ZV09XFxcIm1heERhdGVcXFwiIFtkYXRlRmlsdGVyXT1cXFwiZGF0ZUZpbHRlclxcXCIgW2hpZGVPdGhlck1vbnRoc109XFxcImhpZGVPdGhlck1vbnRoc1xcXCIgKHBpY2tlck1vbWVudENoYW5nZSk9XFxcImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXFxcIiAoc2VsZWN0ZWRDaGFuZ2UpPVxcXCJkYXRlU2VsZWN0ZWQoJGV2ZW50KVxcXCIgKHVzZXJTZWxlY3Rpb24pPVxcXCJ1c2VyU2VsZWN0ZWQoKVxcXCI+PC9vd2wtZGF0ZS10aW1lLW1vbnRoLXZpZXc+PG93bC1kYXRlLXRpbWUteWVhci12aWV3ICpuZ1N3aXRjaENhc2U9XFxcIid5ZWFyJ1xcXCIgW3BpY2tlck1vbWVudF09XFxcInBpY2tlck1vbWVudFxcXCIgW3NlbGVjdGVkXT1cXFwic2VsZWN0ZWRcXFwiIFtzZWxlY3RlZHNdPVxcXCJzZWxlY3RlZHNcXFwiIFtzZWxlY3RNb2RlXT1cXFwic2VsZWN0TW9kZVxcXCIgW21pbkRhdGVdPVxcXCJtaW5EYXRlXFxcIiBbbWF4RGF0ZV09XFxcIm1heERhdGVcXFwiIFtkYXRlRmlsdGVyXT1cXFwiZGF0ZUZpbHRlclxcXCIgKGtleWJvYXJkRW50ZXIpPVxcXCJmb2N1c0FjdGl2ZUNlbGwoKVxcXCIgKHBpY2tlck1vbWVudENoYW5nZSk9XFxcImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXFxcIiAobW9udGhTZWxlY3RlZCk9XFxcInNlbGVjdE1vbnRoSW5ZZWFyVmlldygkZXZlbnQpXFxcIiAoY2hhbmdlKT1cXFwiZ29Ub0RhdGVJblZpZXcoJGV2ZW50LCAnbW9udGgnKVxcXCI+PC9vd2wtZGF0ZS10aW1lLXllYXItdmlldz48b3dsLWRhdGUtdGltZS1tdWx0aS15ZWFyLXZpZXcgKm5nU3dpdGNoQ2FzZT1cXFwiJ211bHRpLXllYXJzJ1xcXCIgW3BpY2tlck1vbWVudF09XFxcInBpY2tlck1vbWVudFxcXCIgW3NlbGVjdGVkXT1cXFwic2VsZWN0ZWRcXFwiIFtzZWxlY3RlZHNdPVxcXCJzZWxlY3RlZHNcXFwiIFtzZWxlY3RNb2RlXT1cXFwic2VsZWN0TW9kZVxcXCIgW21pbkRhdGVdPVxcXCJtaW5EYXRlXFxcIiBbbWF4RGF0ZV09XFxcIm1heERhdGVcXFwiIFtkYXRlRmlsdGVyXT1cXFwiZGF0ZUZpbHRlclxcXCIgKGtleWJvYXJkRW50ZXIpPVxcXCJmb2N1c0FjdGl2ZUNlbGwoKVxcXCIgKHBpY2tlck1vbWVudENoYW5nZSk9XFxcImhhbmRsZVBpY2tlck1vbWVudENoYW5nZSgkZXZlbnQpXFxcIiAoeWVhclNlbGVjdGVkKT1cXFwic2VsZWN0WWVhckluTXVsdGlZZWFyVmlldygkZXZlbnQpXFxcIiAoY2hhbmdlKT1cXFwiZ29Ub0RhdGVJblZpZXcoJGV2ZW50LCAneWVhcicpXFxcIj48L293bC1kYXRlLXRpbWUtbXVsdGkteWVhci12aWV3PjwvZGl2PlwiLFxuICAgICAgICAgICAgc3R5bGVzOiBbXCJcIl0sXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICB9KSxcbiAgICAgICAgX19wYXJhbSg0LCBPcHRpb25hbCgpKSxcbiAgICAgICAgX19wYXJhbSg1LCBPcHRpb25hbCgpKSwgX19wYXJhbSg1LCBJbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTKSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRWxlbWVudFJlZixcbiAgICAgICAgICAgIE93bERhdGVUaW1lSW50bCxcbiAgICAgICAgICAgIE5nWm9uZSxcbiAgICAgICAgICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgRGF0ZVRpbWVBZGFwdGVyLCBPYmplY3RdKVxuICAgIF0sIE93bENhbGVuZGFyQ29tcG9uZW50KTtcbiAgICByZXR1cm4gT3dsQ2FsZW5kYXJDb21wb25lbnQ7XG59KCkpO1xuZXhwb3J0IHsgT3dsQ2FsZW5kYXJDb21wb25lbnQgfTtcbiJdfQ==","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/overlay';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from './dialog-config.class';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Inject, Injectable, InjectionToken, Injector, Optional, SkipSelf, TemplateRef } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { OwlDialogConfig } from './dialog-config.class';\nimport { OwlDialogRef } from './dialog-ref.class';\nimport { OwlDialogContainerComponent } from './dialog-container.component';\nimport { extendObject } from '../utils';\nimport { defer, Subject } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { Overlay, OverlayConfig, OverlayContainer } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nexport var OWL_DIALOG_DATA = new InjectionToken('OwlDialogData');\nexport var OWL_DIALOG_SCROLL_STRATEGY = new InjectionToken('owl-dialog-scroll-strategy');\nexport function OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return function () { return overlay.scrollStrategies.block(); };\n}\nexport var OWL_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: OWL_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: OWL_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\nexport var OWL_DIALOG_DEFAULT_OPTIONS = new InjectionToken('owl-dialog-default-options');\nvar OwlDialogService = (function () {\n function OwlDialogService(overlay, injector, location, scrollStrategy, defaultOptions, parentDialog, overlayContainer) {\n var _this = this;\n this.overlay = overlay;\n this.injector = injector;\n this.location = location;\n this.scrollStrategy = scrollStrategy;\n this.defaultOptions = defaultOptions;\n this.parentDialog = parentDialog;\n this.overlayContainer = overlayContainer;\n this.ariaHiddenElements = new Map();\n this._openDialogsAtThisLevel = [];\n this._afterOpenAtThisLevel = new Subject();\n this._afterAllClosedAtThisLevel = new Subject();\n this.afterAllClosed = defer(function () { return _this._openDialogsAtThisLevel.length ?\n _this._afterAllClosed :\n _this._afterAllClosed.pipe(startWith(undefined)); });\n if (!parentDialog && location) {\n location.subscribe(function () { return _this.closeAll(); });\n }\n }\n Object.defineProperty(OwlDialogService.prototype, \"openDialogs\", {\n get: function () {\n return this.parentDialog ? this.parentDialog.openDialogs : this._openDialogsAtThisLevel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogService.prototype, \"afterOpen\", {\n get: function () {\n return this.parentDialog ? this.parentDialog.afterOpen : this._afterOpenAtThisLevel;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogService.prototype, \"_afterAllClosed\", {\n get: function () {\n var parent = this.parentDialog;\n return parent ? parent._afterAllClosed : this._afterAllClosedAtThisLevel;\n },\n enumerable: true,\n configurable: true\n });\n OwlDialogService.prototype.open = function (componentOrTemplateRef, config) {\n var _this = this;\n config = applyConfigDefaults(config, this.defaultOptions);\n if (config.id && this.getDialogById(config.id)) {\n throw Error(\"Dialog with id \\\"\" + config.id + \"\\\" exists already. The dialog id must be unique.\");\n }\n var overlayRef = this.createOverlay(config);\n var dialogContainer = this.attachDialogContainer(overlayRef, config);\n var dialogRef = this.attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);\n if (!this.openDialogs.length) {\n this.hideNonDialogContentFromAssistiveTechnology();\n }\n this.openDialogs.push(dialogRef);\n dialogRef.afterClosed().subscribe(function () { return _this.removeOpenDialog(dialogRef); });\n this.afterOpen.next(dialogRef);\n return dialogRef;\n };\n OwlDialogService.prototype.closeAll = function () {\n var i = this.openDialogs.length;\n while (i--) {\n this.openDialogs[i].close();\n }\n };\n OwlDialogService.prototype.getDialogById = function (id) {\n return this.openDialogs.find(function (dialog) { return dialog.id === id; });\n };\n OwlDialogService.prototype.attachDialogContent = function (componentOrTemplateRef, dialogContainer, overlayRef, config) {\n var dialogRef = new OwlDialogRef(overlayRef, dialogContainer, config.id, this.location);\n if (config.hasBackdrop) {\n overlayRef.backdropClick().subscribe(function () {\n if (!dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n }\n if (componentOrTemplateRef instanceof TemplateRef) {\n }\n else {\n var injector = this.createInjector(config, dialogRef, dialogContainer);\n var contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, undefined, injector));\n dialogRef.componentInstance = contentRef.instance;\n }\n dialogRef\n .updateSize(config.width, config.height)\n .updatePosition(config.position);\n return dialogRef;\n };\n OwlDialogService.prototype.createInjector = function (config, dialogRef, dialogContainer) {\n var userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n var injectionTokens = new WeakMap();\n injectionTokens.set(OwlDialogRef, dialogRef);\n injectionTokens.set(OwlDialogContainerComponent, dialogContainer);\n injectionTokens.set(OWL_DIALOG_DATA, config.data);\n return new PortalInjector(userInjector || this.injector, injectionTokens);\n };\n OwlDialogService.prototype.createOverlay = function (config) {\n var overlayConfig = this.getOverlayConfig(config);\n return this.overlay.create(overlayConfig);\n };\n OwlDialogService.prototype.attachDialogContainer = function (overlayRef, config) {\n var containerPortal = new ComponentPortal(OwlDialogContainerComponent, config.viewContainerRef);\n var containerRef = overlayRef.attach(containerPortal);\n containerRef.instance.setConfig(config);\n return containerRef.instance;\n };\n OwlDialogService.prototype.getOverlayConfig = function (dialogConfig) {\n var state = new OverlayConfig({\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),\n panelClass: dialogConfig.paneClass,\n hasBackdrop: dialogConfig.hasBackdrop,\n minWidth: dialogConfig.minWidth,\n minHeight: dialogConfig.minHeight,\n maxWidth: dialogConfig.maxWidth,\n maxHeight: dialogConfig.maxHeight\n });\n if (dialogConfig.backdropClass) {\n state.backdropClass = dialogConfig.backdropClass;\n }\n return state;\n };\n OwlDialogService.prototype.removeOpenDialog = function (dialogRef) {\n var index = this._openDialogsAtThisLevel.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n if (!this.openDialogs.length) {\n this.ariaHiddenElements.forEach(function (previousValue, element) {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n }\n else {\n element.removeAttribute('aria-hidden');\n }\n });\n this.ariaHiddenElements.clear();\n this._afterAllClosed.next();\n }\n }\n };\n OwlDialogService.prototype.hideNonDialogContentFromAssistiveTechnology = function () {\n var overlayContainer = this.overlayContainer.getContainerElement();\n if (overlayContainer.parentElement) {\n var siblings = overlayContainer.parentElement.children;\n for (var i = siblings.length - 1; i > -1; i--) {\n var sibling = siblings[i];\n if (sibling !== overlayContainer &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live')) {\n this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n };\n OwlDialogService = __decorate([ __param(2, Optional()),\n __param(3, Inject(OWL_DIALOG_SCROLL_STRATEGY)),\n __param(4, Optional()), __param(4, Inject(OWL_DIALOG_DEFAULT_OPTIONS)),\n __param(5, Optional()), __param(5, SkipSelf()),\n __metadata(\"design:paramtypes\", [Overlay,\n Injector,\n Location, Function, OwlDialogConfig,\n OwlDialogService,\n OverlayContainer])\n ], OwlDialogService);\nOwlDialogService.ɵfac = function OwlDialogService_Factory(t) { return new (t || OwlDialogService)(ɵngcc0.ɵɵinject(ɵngcc1.Overlay), ɵngcc0.ɵɵinject(ɵngcc0.Injector), ɵngcc0.ɵɵinject(ɵngcc2.Location, 8), ɵngcc0.ɵɵinject(OWL_DIALOG_SCROLL_STRATEGY), ɵngcc0.ɵɵinject(OWL_DIALOG_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵinject(OwlDialogService, 12), ɵngcc0.ɵɵinject(ɵngcc1.OverlayContainer)); };\nOwlDialogService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: OwlDialogService, factory: function (t) { return OwlDialogService.ɵfac(t); } });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDialogService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.Overlay }, { type: ɵngcc0.Injector }, { type: ɵngcc2.Location, decorators: [{\n type: Optional\n }] }, { type: Function, decorators: [{\n type: Inject,\n args: [OWL_DIALOG_SCROLL_STRATEGY]\n }] }, { type: ɵngcc3.OwlDialogConfig, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DIALOG_DEFAULT_OPTIONS]\n }] }, { type: OwlDialogService, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc1.OverlayContainer }]; }, null); })();\n return OwlDialogService;\n}());\nexport { OwlDialogService };\nfunction applyConfigDefaults(config, defaultOptions) {\n return extendObject(new OwlDialogConfig(), config, defaultOptions);\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VzIjpbImRpYWxvZy5zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUVBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufTtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBPcHRpb25hbCwgU2tpcFNlbGYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPd2xEaWFsb2dDb25maWcgfSBmcm9tICcuL2RpYWxvZy1jb25maWcuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGlhbG9nUmVmIH0gZnJvbSAnLi9kaWFsb2ctcmVmLmNsYXNzJztcbmltcG9ydCB7IE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZXh0ZW5kT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZGVmZXIsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlDb250YWluZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFBvcnRhbEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5leHBvcnQgdmFyIE9XTF9ESUFMT0dfREFUQSA9IG5ldyBJbmplY3Rpb25Ub2tlbignT3dsRGlhbG9nRGF0YScpO1xuZXhwb3J0IHZhciBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbignb3dsLWRpYWxvZy1zY3JvbGwtc3RyYXRlZ3knKTtcbmV4cG9ydCBmdW5jdGlvbiBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUl9GQUNUT1JZKG92ZXJsYXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCk7IH07XG59XG5leHBvcnQgdmFyIE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSID0ge1xuICAgIHByb3ZpZGU6IE9XTF9ESUFMT0dfU0NST0xMX1NUUkFURUdZLFxuICAgIGRlcHM6IFtPdmVybGF5XSxcbiAgICB1c2VGYWN0b3J5OiBPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUl9GQUNUT1JZLFxufTtcbmV4cG9ydCB2YXIgT1dMX0RJQUxPR19ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ293bC1kaWFsb2ctZGVmYXVsdC1vcHRpb25zJyk7XG52YXIgT3dsRGlhbG9nU2VydmljZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGlhbG9nU2VydmljZShvdmVybGF5LCBpbmplY3RvciwgbG9jYXRpb24sIHNjcm9sbFN0cmF0ZWd5LCBkZWZhdWx0T3B0aW9ucywgcGFyZW50RGlhbG9nLCBvdmVybGF5Q29udGFpbmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMub3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5ID0gc2Nyb2xsU3RyYXRlZ3k7XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgdGhpcy5wYXJlbnREaWFsb2cgPSBwYXJlbnREaWFsb2c7XG4gICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lciA9IG92ZXJsYXlDb250YWluZXI7XG4gICAgICAgIHRoaXMuYXJpYUhpZGRlbkVsZW1lbnRzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsID0gW107XG4gICAgICAgIHRoaXMuX2FmdGVyT3BlbkF0VGhpc0xldmVsID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJBbGxDbG9zZWQgPSBkZWZlcihmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbC5sZW5ndGggP1xuICAgICAgICAgICAgX3RoaXMuX2FmdGVyQWxsQ2xvc2VkIDpcbiAgICAgICAgICAgIF90aGlzLl9hZnRlckFsbENsb3NlZC5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpKTsgfSk7XG4gICAgICAgIGlmICghcGFyZW50RGlhbG9nICYmIGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5zdWJzY3JpYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuY2xvc2VBbGwoKTsgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERpYWxvZ1NlcnZpY2UucHJvdG90eXBlLCBcIm9wZW5EaWFsb2dzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnREaWFsb2cgPyB0aGlzLnBhcmVudERpYWxvZy5vcGVuRGlhbG9ncyA6IHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEaWFsb2dTZXJ2aWNlLnByb3RvdHlwZSwgXCJhZnRlck9wZW5cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudERpYWxvZyA/IHRoaXMucGFyZW50RGlhbG9nLmFmdGVyT3BlbiA6IHRoaXMuX2FmdGVyT3BlbkF0VGhpc0xldmVsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGlhbG9nU2VydmljZS5wcm90b3R5cGUsIFwiX2FmdGVyQWxsQ2xvc2VkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnREaWFsb2c7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50Ll9hZnRlckFsbENsb3NlZCA6IHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE93bERpYWxvZ1NlcnZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAoY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNvbmZpZyA9IGFwcGx5Q29uZmlnRGVmYXVsdHMoY29uZmlnLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcbiAgICAgICAgaWYgKGNvbmZpZy5pZCAmJiB0aGlzLmdldERpYWxvZ0J5SWQoY29uZmlnLmlkKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJEaWFsb2cgd2l0aCBpZCBcXFwiXCIgKyBjb25maWcuaWQgKyBcIlxcXCIgZXhpc3RzIGFscmVhZHkuIFRoZSBkaWFsb2cgaWQgbXVzdCBiZSB1bmlxdWUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KGNvbmZpZyk7XG4gICAgICAgIHZhciBkaWFsb2dDb250YWluZXIgPSB0aGlzLmF0dGFjaERpYWxvZ0NvbnRhaW5lcihvdmVybGF5UmVmLCBjb25maWcpO1xuICAgICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5hdHRhY2hEaWFsb2dDb250ZW50KGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIGRpYWxvZ0NvbnRhaW5lciwgb3ZlcmxheVJlZiwgY29uZmlnKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuRGlhbG9ncy5wdXNoKGRpYWxvZ1JlZik7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5yZW1vdmVPcGVuRGlhbG9nKGRpYWxvZ1JlZik7IH0pO1xuICAgICAgICB0aGlzLmFmdGVyT3Blbi5uZXh0KGRpYWxvZ1JlZik7XG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XG4gICAgfTtcbiAgICBPd2xEaWFsb2dTZXJ2aWNlLnByb3RvdHlwZS5jbG9zZUFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuRGlhbG9nc1tpXS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEaWFsb2dTZXJ2aWNlLnByb3RvdHlwZS5nZXREaWFsb2dCeUlkID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoZnVuY3Rpb24gKGRpYWxvZykgeyByZXR1cm4gZGlhbG9nLmlkID09PSBpZDsgfSk7XG4gICAgfTtcbiAgICBPd2xEaWFsb2dTZXJ2aWNlLnByb3RvdHlwZS5hdHRhY2hEaWFsb2dDb250ZW50ID0gZnVuY3Rpb24gKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIGRpYWxvZ0NvbnRhaW5lciwgb3ZlcmxheVJlZiwgY29uZmlnKSB7XG4gICAgICAgIHZhciBkaWFsb2dSZWYgPSBuZXcgT3dsRGlhbG9nUmVmKG92ZXJsYXlSZWYsIGRpYWxvZ0NvbnRhaW5lciwgY29uZmlnLmlkLCB0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgaWYgKGNvbmZpZy5oYXNCYWNrZHJvcCkge1xuICAgICAgICAgICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluamVjdG9yID0gdGhpcy5jcmVhdGVJbmplY3Rvcihjb25maWcsIGRpYWxvZ1JlZiwgZGlhbG9nQ29udGFpbmVyKTtcbiAgICAgICAgICAgIHZhciBjb250ZW50UmVmID0gZGlhbG9nQ29udGFpbmVyLmF0dGFjaENvbXBvbmVudFBvcnRhbChuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIHVuZGVmaW5lZCwgaW5qZWN0b3IpKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSA9IGNvbnRlbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgZGlhbG9nUmVmXG4gICAgICAgICAgICAudXBkYXRlU2l6ZShjb25maWcud2lkdGgsIGNvbmZpZy5oZWlnaHQpXG4gICAgICAgICAgICAudXBkYXRlUG9zaXRpb24oY29uZmlnLnBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgICB9O1xuICAgIE93bERpYWxvZ1NlcnZpY2UucHJvdG90eXBlLmNyZWF0ZUluamVjdG9yID0gZnVuY3Rpb24gKGNvbmZpZywgZGlhbG9nUmVmLCBkaWFsb2dDb250YWluZXIpIHtcbiAgICAgICAgdmFyIHVzZXJJbmplY3RvciA9IGNvbmZpZyAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZiAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZi5pbmplY3RvcjtcbiAgICAgICAgdmFyIGluamVjdGlvblRva2VucyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIGluamVjdGlvblRva2Vucy5zZXQoT3dsRGlhbG9nUmVmLCBkaWFsb2dSZWYpO1xuICAgICAgICBpbmplY3Rpb25Ub2tlbnMuc2V0KE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCwgZGlhbG9nQ29udGFpbmVyKTtcbiAgICAgICAgaW5qZWN0aW9uVG9rZW5zLnNldChPV0xfRElBTE9HX0RBVEEsIGNvbmZpZy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb3J0YWxJbmplY3Rvcih1c2VySW5qZWN0b3IgfHwgdGhpcy5pbmplY3RvciwgaW5qZWN0aW9uVG9rZW5zKTtcbiAgICB9O1xuICAgIE93bERpYWxvZ1NlcnZpY2UucHJvdG90eXBlLmNyZWF0ZU92ZXJsYXkgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHZhciBvdmVybGF5Q29uZmlnID0gdGhpcy5nZXRPdmVybGF5Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXkuY3JlYXRlKG92ZXJsYXlDb25maWcpO1xuICAgIH07XG4gICAgT3dsRGlhbG9nU2VydmljZS5wcm90b3R5cGUuYXR0YWNoRGlhbG9nQ29udGFpbmVyID0gZnVuY3Rpb24gKG92ZXJsYXlSZWYsIGNvbmZpZykge1xuICAgICAgICB2YXIgY29udGFpbmVyUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQsIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdmFyIGNvbnRhaW5lclJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKGNvbnRhaW5lclBvcnRhbCk7XG4gICAgICAgIGNvbnRhaW5lclJlZi5pbnN0YW5jZS5zZXRDb25maWcoY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcbiAgICB9O1xuICAgIE93bERpYWxvZ1NlcnZpY2UucHJvdG90eXBlLmdldE92ZXJsYXlDb25maWcgPSBmdW5jdGlvbiAoZGlhbG9nQ29uZmlnKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IGRpYWxvZ0NvbmZpZy5zY3JvbGxTdHJhdGVneSB8fCB0aGlzLnNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBkaWFsb2dDb25maWcucGFuZUNsYXNzLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGRpYWxvZ0NvbmZpZy5oYXNCYWNrZHJvcCxcbiAgICAgICAgICAgIG1pbldpZHRoOiBkaWFsb2dDb25maWcubWluV2lkdGgsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IGRpYWxvZ0NvbmZpZy5taW5IZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogZGlhbG9nQ29uZmlnLm1heFdpZHRoLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBkaWFsb2dDb25maWcubWF4SGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGlhbG9nQ29uZmlnLmJhY2tkcm9wQ2xhc3MpIHtcbiAgICAgICAgICAgIHN0YXRlLmJhY2tkcm9wQ2xhc3MgPSBkaWFsb2dDb25maWcuYmFja2Ryb3BDbGFzcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcbiAgICBPd2xEaWFsb2dTZXJ2aWNlLnByb3RvdHlwZS5yZW1vdmVPcGVuRGlhbG9nID0gZnVuY3Rpb24gKGRpYWxvZ1JlZikge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLmluZGV4T2YoZGlhbG9nUmVmKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcmlhSGlkZGVuRWxlbWVudHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZnRlckFsbENsb3NlZC5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bERpYWxvZ1NlcnZpY2UucHJvdG90eXBlLmhpZGVOb25EaWFsb2dDb250ZW50RnJvbUFzc2lzdGl2ZVRlY2hub2xvZ3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvdmVybGF5Q29udGFpbmVyID0gdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKG92ZXJsYXlDb250YWluZXIucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIHNpYmxpbmdzID0gb3ZlcmxheUNvbnRhaW5lci5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aCAtIDE7IGkgPiAtMTsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoc2libGluZyAhPT0gb3ZlcmxheUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJyAmJlxuICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU1RZTEUnICYmXG4gICAgICAgICAgICAgICAgICAgICFzaWJsaW5nLmhhc0F0dHJpYnV0ZSgnYXJpYS1saXZlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmlhSGlkZGVuRWxlbWVudHMuc2V0KHNpYmxpbmcsIHNpYmxpbmcuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpKTtcbiAgICAgICAgICAgICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bERpYWxvZ1NlcnZpY2UgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5qZWN0YWJsZSgpLFxuICAgICAgICBfX3BhcmFtKDIsIE9wdGlvbmFsKCkpLFxuICAgICAgICBfX3BhcmFtKDMsIEluamVjdChPV0xfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSkpLFxuICAgICAgICBfX3BhcmFtKDQsIE9wdGlvbmFsKCkpLCBfX3BhcmFtKDQsIEluamVjdChPV0xfRElBTE9HX0RFRkFVTFRfT1BUSU9OUykpLFxuICAgICAgICBfX3BhcmFtKDUsIE9wdGlvbmFsKCkpLCBfX3BhcmFtKDUsIFNraXBTZWxmKCkpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW092ZXJsYXksXG4gICAgICAgICAgICBJbmplY3RvcixcbiAgICAgICAgICAgIExvY2F0aW9uLCBGdW5jdGlvbiwgT3dsRGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgT3dsRGlhbG9nU2VydmljZSxcbiAgICAgICAgICAgIE92ZXJsYXlDb250YWluZXJdKVxuICAgIF0sIE93bERpYWxvZ1NlcnZpY2UpO1xuICAgIHJldHVybiBPd2xEaWFsb2dTZXJ2aWNlO1xufSgpKTtcbmV4cG9ydCB7IE93bERpYWxvZ1NlcnZpY2UgfTtcbmZ1bmN0aW9uIGFwcGx5Q29uZmlnRGVmYXVsdHMoY29uZmlnLCBkZWZhdWx0T3B0aW9ucykge1xuICAgIHJldHVybiBleHRlbmRPYmplY3QobmV3IE93bERpYWxvZ0NvbmZpZygpLCBjb25maWcsIGRlZmF1bHRPcHRpb25zKTtcbn1cbiJdfQ==","export function extendObject(dest) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) {\n var source = sources_1[_a];\n if (source != null) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n return dest;\n}\n","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './adapter/date-time-adapter.class';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Inject, Input, Optional } from '@angular/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nvar nextUniqueId = 0;\nvar OwlDateTime = (function () {\n function OwlDateTime(dateTimeAdapter, dateTimeFormats) {\n var _this = this;\n this.dateTimeAdapter = dateTimeAdapter;\n this.dateTimeFormats = dateTimeFormats;\n this._showSecondsTimer = false;\n this._hour12Timer = false;\n this.startView = 'month';\n this._stepHour = 1;\n this._stepMinute = 1;\n this._stepSecond = 1;\n this._firstDayOfWeek = 0;\n this._hideOtherMonths = false;\n this.dateTimeChecker = function (dateTime) {\n return !!dateTime &&\n (!_this.dateTimeFilter || _this.dateTimeFilter(dateTime)) &&\n (!_this.minDateTime || _this.dateTimeAdapter.compare(dateTime, _this.minDateTime) >= 0) &&\n (!_this.maxDateTime || _this.dateTimeAdapter.compare(dateTime, _this.maxDateTime) <= 0);\n };\n if (!this.dateTimeAdapter) {\n throw Error(\"OwlDateTimePicker: No provider found for DateTimeAdapter. You must import one of the following \" +\n \"modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a \" +\n \"custom implementation.\");\n }\n if (!this.dateTimeFormats) {\n throw Error(\"OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following \" +\n \"modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a \" +\n \"custom implementation.\");\n }\n this._id = \"owl-dt-picker-\" + nextUniqueId++;\n }\n Object.defineProperty(OwlDateTime.prototype, \"showSecondsTimer\", {\n get: function () {\n return this._showSecondsTimer;\n },\n set: function (val) {\n this._showSecondsTimer = coerceBooleanProperty(val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"hour12Timer\", {\n get: function () {\n return this._hour12Timer;\n },\n set: function (val) {\n this._hour12Timer = coerceBooleanProperty(val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"stepHour\", {\n get: function () {\n return this._stepHour;\n },\n set: function (val) {\n this._stepHour = coerceNumberProperty(val, 1);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"stepMinute\", {\n get: function () {\n return this._stepMinute;\n },\n set: function (val) {\n this._stepMinute = coerceNumberProperty(val, 1);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"stepSecond\", {\n get: function () {\n return this._stepSecond;\n },\n set: function (val) {\n this._stepSecond = coerceNumberProperty(val, 1);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"firstDayOfWeek\", {\n get: function () {\n return this._firstDayOfWeek;\n },\n set: function (value) {\n value = coerceNumberProperty(value, 0);\n if (value > 6 || value < 0) {\n this._firstDayOfWeek = 0;\n }\n else {\n this._firstDayOfWeek = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"hideOtherMonths\", {\n get: function () {\n return this._hideOtherMonths;\n },\n set: function (val) {\n this._hideOtherMonths = coerceBooleanProperty(val);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"id\", {\n get: function () {\n return this._id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"formatString\", {\n get: function () {\n return this.pickerType === 'both' ? this.dateTimeFormats.fullPickerInput :\n this.pickerType === 'calendar' ? this.dateTimeFormats.datePickerInput :\n this.dateTimeFormats.timePickerInput;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTime.prototype, \"disabled\", {\n get: function () {\n return false;\n },\n enumerable: true,\n configurable: true\n });\n OwlDateTime.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTime.prototype, \"showSecondsTimer\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTime.prototype, \"hour12Timer\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlDateTime.prototype, \"startView\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n ], OwlDateTime.prototype, \"stepHour\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n ], OwlDateTime.prototype, \"stepMinute\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n ], OwlDateTime.prototype, \"stepSecond\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n ], OwlDateTime.prototype, \"firstDayOfWeek\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTime.prototype, \"hideOtherMonths\", null);\n OwlDateTime = __decorate([\n __param(0, Optional()),\n __param(1, Optional()), __param(1, Inject(OWL_DATE_TIME_FORMATS)),\n __metadata(\"design:paramtypes\", [DateTimeAdapter, Object])\n ], OwlDateTime);\nOwlDateTime.ɵfac = function OwlDateTime_Factory(t) { return new (t || OwlDateTime)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8)); };\nOwlDateTime.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: OwlDateTime, inputs: { startView: \"startView\", showSecondsTimer: \"showSecondsTimer\", hour12Timer: \"hour12Timer\", stepHour: \"stepHour\", stepMinute: \"stepMinute\", stepSecond: \"stepSecond\", firstDayOfWeek: \"firstDayOfWeek\", hideOtherMonths: \"hideOtherMonths\" } });\n\n return OwlDateTime;\n}());\nexport { OwlDateTime };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmNsYXNzLmpzIiwic291cmNlcyI6WyJkYXRlLXRpbWUuY2xhc3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBb0I7QUFDcEI7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuaW1wb3J0IHsgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1hZGFwdGVyLmNsYXNzJztcbmltcG9ydCB7IE9XTF9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJztcbnZhciBuZXh0VW5pcXVlSWQgPSAwO1xudmFyIE93bERhdGVUaW1lID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPd2xEYXRlVGltZShkYXRlVGltZUFkYXB0ZXIsIGRhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlciA9IGRhdGVUaW1lQWRhcHRlcjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdHMgPSBkYXRlVGltZUZvcm1hdHM7XG4gICAgICAgIHRoaXMuX3Nob3dTZWNvbmRzVGltZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faG91cjEyVGltZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFydFZpZXcgPSAnbW9udGgnO1xuICAgICAgICB0aGlzLl9zdGVwSG91ciA9IDE7XG4gICAgICAgIHRoaXMuX3N0ZXBNaW51dGUgPSAxO1xuICAgICAgICB0aGlzLl9zdGVwU2Vjb25kID0gMTtcbiAgICAgICAgdGhpcy5fZmlyc3REYXlPZldlZWsgPSAwO1xuICAgICAgICB0aGlzLl9oaWRlT3RoZXJNb250aHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUNoZWNrZXIgPSBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWRhdGVUaW1lICYmXG4gICAgICAgICAgICAgICAgKCFfdGhpcy5kYXRlVGltZUZpbHRlciB8fCBfdGhpcy5kYXRlVGltZUZpbHRlcihkYXRlVGltZSkpICYmXG4gICAgICAgICAgICAgICAgKCFfdGhpcy5taW5EYXRlVGltZSB8fCBfdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlVGltZSwgX3RoaXMubWluRGF0ZVRpbWUpID49IDApICYmXG4gICAgICAgICAgICAgICAgKCFfdGhpcy5tYXhEYXRlVGltZSB8fCBfdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlVGltZSwgX3RoaXMubWF4RGF0ZVRpbWUpIDw9IDApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoIXRoaXMuZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIk93bERhdGVUaW1lUGlja2VyOiBObyBwcm92aWRlciBmb3VuZCBmb3IgRGF0ZVRpbWVBZGFwdGVyLiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgXCIgK1xuICAgICAgICAgICAgICAgIFwibW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlLCBPd2xNb21lbnREYXRlVGltZU1vZHVsZSwgb3IgcHJvdmlkZSBhIFwiICtcbiAgICAgICAgICAgICAgICBcImN1c3RvbSBpbXBsZW1lbnRhdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJPd2xEYXRlVGltZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yIE9XTF9EQVRFX1RJTUVfRk9STUFUUy4gWW91IG11c3QgaW1wb3J0IG9uZSBvZiB0aGUgZm9sbG93aW5nIFwiICtcbiAgICAgICAgICAgICAgICBcIm1vZHVsZXMgYXQgeW91ciBhcHBsaWNhdGlvbiByb290OiBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSwgT3dsTW9tZW50RGF0ZVRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJjdXN0b20gaW1wbGVtZW50YXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lkID0gXCJvd2wtZHQtcGlja2VyLVwiICsgbmV4dFVuaXF1ZUlkKys7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZS5wcm90b3R5cGUsIFwic2hvd1NlY29uZHNUaW1lclwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dTZWNvbmRzVGltZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NlY29uZHNUaW1lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcImhvdXIxMlRpbWVyXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faG91cjEyVGltZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5faG91cjEyVGltZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJzdGVwSG91clwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBIb3VyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0ZXBIb3VyID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsLCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJzdGVwTWludXRlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlcE1pbnV0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGVwTWludXRlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsLCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJzdGVwU2Vjb25kXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlcFNlY29uZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGVwU2Vjb25kID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsLCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJmaXJzdERheU9mV2Vla1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgMCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiA2IHx8IHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZS5wcm90b3R5cGUsIFwiaGlkZU90aGVyTW9udGhzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGlkZU90aGVyTW9udGhzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZGVPdGhlck1vbnRocyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcImlkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZS5wcm90b3R5cGUsIFwiZm9ybWF0U3RyaW5nXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJUeXBlID09PSAnYm90aCcgPyB0aGlzLmRhdGVUaW1lRm9ybWF0cy5mdWxsUGlja2VySW5wdXQgOlxuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyVHlwZSA9PT0gJ2NhbGVuZGFyJyA/IHRoaXMuZGF0ZVRpbWVGb3JtYXRzLmRhdGVQaWNrZXJJbnB1dCA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRzLnRpbWVQaWNrZXJJbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJkaXNhYmxlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPd2xEYXRlVGltZS5wcm90b3R5cGUuZ2V0VmFsaWREYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopKSA/IG9iaiA6IG51bGw7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0Jvb2xlYW5dKVxuICAgIF0sIE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJzaG93U2Vjb25kc1RpbWVyXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQm9vbGVhbl0pXG4gICAgXSwgT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcImhvdXIxMlRpbWVyXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxuICAgIF0sIE93bERhdGVUaW1lLnByb3RvdHlwZSwgXCJzdGFydFZpZXdcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE51bWJlciksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbTnVtYmVyXSlcbiAgICBdLCBPd2xEYXRlVGltZS5wcm90b3R5cGUsIFwic3RlcEhvdXJcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBOdW1iZXIpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW051bWJlcl0pXG4gICAgXSwgT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcInN0ZXBNaW51dGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBOdW1iZXIpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW051bWJlcl0pXG4gICAgXSwgT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcInN0ZXBTZWNvbmRcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBOdW1iZXIpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW051bWJlcl0pXG4gICAgXSwgT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcImZpcnN0RGF5T2ZXZWVrXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbQm9vbGVhbl0pXG4gICAgXSwgT3dsRGF0ZVRpbWUucHJvdG90eXBlLCBcImhpZGVPdGhlck1vbnRoc1wiLCBudWxsKTtcbiAgICBPd2xEYXRlVGltZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBfX3BhcmFtKDAsIE9wdGlvbmFsKCkpLFxuICAgICAgICBfX3BhcmFtKDEsIE9wdGlvbmFsKCkpLCBfX3BhcmFtKDEsIEluamVjdChPV0xfREFURV9USU1FX0ZPUk1BVFMpKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtEYXRlVGltZUFkYXB0ZXIsIE9iamVjdF0pXG4gICAgXSwgT3dsRGF0ZVRpbWUpO1xuICAgIHJldHVybiBPd2xEYXRlVGltZTtcbn0oKSk7XG5leHBvcnQgeyBPd2xEYXRlVGltZSB9O1xuIl19","import * as ɵngcc0 from '@angular/core';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { OwlDateTimeTriggerDirective } from './date-time-picker-trigger.directive';\nimport { OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER, OwlDateTimeComponent } from './date-time-picker.component';\nimport { OwlDateTimeContainerComponent } from './date-time-picker-container.component';\nimport { OwlDateTimeInputDirective } from './date-time-picker-input.directive';\nimport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nimport { OwlMonthViewComponent } from './calendar-month-view.component';\nimport { OwlCalendarBodyComponent } from './calendar-body.component';\nimport { OwlYearViewComponent } from './calendar-year-view.component';\nimport { OwlMultiYearViewComponent } from './calendar-multi-year-view.component';\nimport { OwlTimerBoxComponent } from './timer-box.component';\nimport { OwlTimerComponent } from './timer.component';\nimport { NumberFixedLenPipe } from './numberedFixLen.pipe';\nimport { OwlCalendarComponent } from './calendar.component';\nimport { OwlDateTimeInlineComponent } from './date-time-inline.component';\nimport { OwlDialogModule } from '../dialog';\nvar OwlDateTimeModule = (function () {\n function OwlDateTimeModule() {\n }\nOwlDateTimeModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: OwlDateTimeModule });\nOwlDateTimeModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function OwlDateTimeModule_Factory(t) { return new (t || OwlDateTimeModule)(); }, providers: [\n OwlDateTimeIntl,\n OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER,\n ], imports: [[CommonModule, OverlayModule, OwlDialogModule, A11yModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(OwlDateTimeModule, { declarations: function () { return [OwlDateTimeTriggerDirective,\n OwlDateTimeInputDirective,\n OwlDateTimeComponent,\n OwlDateTimeContainerComponent,\n OwlMultiYearViewComponent,\n OwlYearViewComponent,\n OwlMonthViewComponent,\n OwlTimerComponent,\n OwlTimerBoxComponent,\n OwlCalendarComponent,\n OwlCalendarBodyComponent,\n NumberFixedLenPipe,\n OwlDateTimeInlineComponent]; }, imports: function () { return [CommonModule, OverlayModule, OwlDialogModule, A11yModule]; }, exports: function () { return [OwlCalendarComponent,\n OwlTimerComponent,\n OwlDateTimeTriggerDirective,\n OwlDateTimeInputDirective,\n OwlDateTimeComponent,\n OwlDateTimeInlineComponent,\n OwlMultiYearViewComponent,\n OwlYearViewComponent,\n OwlMonthViewComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, OverlayModule, OwlDialogModule, A11yModule],\n exports: [\n OwlCalendarComponent,\n OwlTimerComponent,\n OwlDateTimeTriggerDirective,\n OwlDateTimeInputDirective,\n OwlDateTimeComponent,\n OwlDateTimeInlineComponent,\n OwlMultiYearViewComponent,\n OwlYearViewComponent,\n OwlMonthViewComponent,\n ],\n declarations: [\n OwlDateTimeTriggerDirective,\n OwlDateTimeInputDirective,\n OwlDateTimeComponent,\n OwlDateTimeContainerComponent,\n OwlMultiYearViewComponent,\n OwlYearViewComponent,\n OwlMonthViewComponent,\n OwlTimerComponent,\n OwlTimerBoxComponent,\n OwlCalendarComponent,\n OwlCalendarBodyComponent,\n NumberFixedLenPipe,\n OwlDateTimeInlineComponent,\n ],\n providers: [\n OwlDateTimeIntl,\n OWL_DTPICKER_SCROLL_STRATEGY_PROVIDER,\n ],\n entryComponents: [\n OwlDateTimeContainerComponent,\n ]\n }]\n }], function () { return []; }, null); })();\n return OwlDateTimeModule;\n}());\nexport { OwlDateTimeModule };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiZGF0ZS10aW1lLm1vZHVsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dEQXNDMEI7QUFDMUI7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci10cmlnZ2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPV0xfRFRQSUNLRVJfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSLCBPd2xEYXRlVGltZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZUludGwgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXItaW50bC5zZXJ2aWNlJztcbmltcG9ydCB7IE93bE1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xZZWFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPd2xNdWx0aVllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IE93bFRpbWVyQm94Q29tcG9uZW50IH0gZnJvbSAnLi90aW1lci1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE93bFRpbWVyQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRml4ZWRMZW5QaXBlIH0gZnJvbSAnLi9udW1iZXJlZEZpeExlbi5waXBlJztcbmltcG9ydCB7IE93bENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS1pbmxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE93bERpYWxvZ01vZHVsZSB9IGZyb20gJy4uL2RpYWxvZyc7XG52YXIgT3dsRGF0ZVRpbWVNb2R1bGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE93bERhdGVUaW1lTW9kdWxlKCkge1xuICAgIH1cbiAgICBPd2xEYXRlVGltZU1vZHVsZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBOZ01vZHVsZSh7XG4gICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBPdmVybGF5TW9kdWxlLCBPd2xEaWFsb2dNb2R1bGUsIEExMXlNb2R1bGVdLFxuICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgIE93bENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bFRpbWVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgIE93bERhdGVUaW1lQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bERhdGVUaW1lSW5saW5lQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgT3dsWWVhclZpZXdDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgT3dsTW9udGhWaWV3Q29tcG9uZW50LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgIE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgIE93bERhdGVUaW1lQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bERhdGVUaW1lQ29udGFpbmVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bE11bHRpWWVhclZpZXdDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgT3dsWWVhclZpZXdDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgT3dsTW9udGhWaWV3Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bFRpbWVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bFRpbWVyQm94Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIE93bENhbGVuZGFyQm9keUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBOdW1iZXJGaXhlZExlblBpcGUsXG4gICAgICAgICAgICAgICAgT3dsRGF0ZVRpbWVJbmxpbmVDb21wb25lbnQsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgT3dsRGF0ZVRpbWVJbnRsLFxuICAgICAgICAgICAgICAgIE9XTF9EVFBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZW50cnlDb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQsXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgXSwgT3dsRGF0ZVRpbWVNb2R1bGUpO1xuICAgIHJldHVybiBPd2xEYXRlVGltZU1vZHVsZTtcbn0oKSk7XG5leHBvcnQgeyBPd2xEYXRlVGltZU1vZHVsZSB9O1xuIl19","import { NoopScrollStrategy } from '@angular/cdk/overlay';\nvar uniqueId = 0;\nvar OwlDialogConfig = (function () {\n function OwlDialogConfig() {\n this.ariaDescribedBy = null;\n this.autoFocus = true;\n this.hasBackdrop = true;\n this.data = null;\n this.disableClose = false;\n this.role = 'dialog';\n this.paneClass = '';\n this.event = null;\n this.backdropClass = '';\n this.closeOnNavigation = true;\n this.width = '';\n this.height = '';\n this.maxWidth = '85vw';\n this.scrollStrategy = new NoopScrollStrategy();\n this.id = \"owl-dialog-\" + uniqueId++;\n }\n return OwlDialogConfig;\n}());\nexport { OwlDialogConfig };\n","import * as ɵngcc0 from '@angular/core';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { ChangeDetectorRef, Directive, HostBinding, HostListener, Input } from '@angular/core';\nimport { OwlDateTimeComponent } from './date-time-picker.component';\nimport { merge, of as observableOf, Subscription } from 'rxjs';\nvar OwlDateTimeTriggerDirective = (function () {\n function OwlDateTimeTriggerDirective(changeDetector) {\n this.changeDetector = changeDetector;\n this.stateChanges = Subscription.EMPTY;\n }\n Object.defineProperty(OwlDateTimeTriggerDirective.prototype, \"disabled\", {\n get: function () {\n return this._disabled === undefined ? this.dtPicker.disabled : !!this._disabled;\n },\n set: function (value) {\n this._disabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeTriggerDirective.prototype, \"owlDTTriggerDisabledClass\", {\n get: function () {\n return this.disabled;\n },\n enumerable: true,\n configurable: true\n });\n OwlDateTimeTriggerDirective.prototype.ngOnInit = function () {\n };\n OwlDateTimeTriggerDirective.prototype.ngOnChanges = function (changes) {\n if (changes.datepicker) {\n this.watchStateChanges();\n }\n };\n OwlDateTimeTriggerDirective.prototype.ngAfterContentInit = function () {\n this.watchStateChanges();\n };\n OwlDateTimeTriggerDirective.prototype.ngOnDestroy = function () {\n this.stateChanges.unsubscribe();\n };\n OwlDateTimeTriggerDirective.prototype.handleClickOnHost = function (event) {\n if (this.dtPicker) {\n this.dtPicker.open();\n event.stopPropagation();\n }\n };\n OwlDateTimeTriggerDirective.prototype.watchStateChanges = function () {\n var _this = this;\n this.stateChanges.unsubscribe();\n var inputDisabled = this.dtPicker && this.dtPicker.dtInput ?\n this.dtPicker.dtInput.disabledChange : observableOf();\n var pickerDisabled = this.dtPicker ?\n this.dtPicker.disabledChange : observableOf();\n this.stateChanges = merge(pickerDisabled, inputDisabled)\n .subscribe(function () {\n _this.changeDetector.markForCheck();\n });\n };\n __decorate([\n Input('owlDateTimeTrigger'),\n __metadata(\"design:type\", OwlDateTimeComponent)\n ], OwlDateTimeTriggerDirective.prototype, \"dtPicker\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n ], OwlDateTimeTriggerDirective.prototype, \"disabled\", null);\n __decorate([\n HostBinding('class.owl-dt-trigger-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeTriggerDirective.prototype, \"owlDTTriggerDisabledClass\", null);\n __decorate([\n HostListener('click', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Event]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDateTimeTriggerDirective.prototype, \"handleClickOnHost\", null);\n OwlDateTimeTriggerDirective = __decorate([ __metadata(\"design:paramtypes\", [ChangeDetectorRef])\n ], OwlDateTimeTriggerDirective);\nOwlDateTimeTriggerDirective.ɵfac = function OwlDateTimeTriggerDirective_Factory(t) { return new (t || OwlDateTimeTriggerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nOwlDateTimeTriggerDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: OwlDateTimeTriggerDirective, selectors: [[\"\", \"owlDateTimeTrigger\", \"\"]], hostVars: 2, hostBindings: function OwlDateTimeTriggerDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function OwlDateTimeTriggerDirective_click_HostBindingHandler($event) { return ctx.handleClickOnHost($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-trigger-disabled\", ctx.owlDTTriggerDisabledClass);\n } }, inputs: { disabled: \"disabled\", dtPicker: [\"owlDateTimeTrigger\", \"dtPicker\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeTriggerDirective, [{\n type: Directive,\n args: [{\n selector: '[owlDateTimeTrigger]'\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }]; }, { disabled: [{\n type: Input\n }], owlDTTriggerDisabledClass: [{\n type: HostBinding,\n args: ['class.owl-dt-trigger-disabled']\n }], handleClickOnHost: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], dtPicker: [{\n type: Input,\n args: ['owlDateTimeTrigger']\n }] }); })();\n return OwlDateTimeTriggerDirective;\n}());\nexport { OwlDateTimeTriggerDirective };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZXMiOlsiZGF0ZS10aW1lLXBpY2tlci10cmlnZ2VyLmRpcmVjdGl2ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FJTztBQUNQOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBb0M7QUFDcEM7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPd2xEYXRlVGltZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgbWVyZ2UsIG9mIGFzIG9ic2VydmFibGVPZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG52YXIgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUoY2hhbmdlRGV0ZWN0b3IpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcyA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZS5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5kdFBpY2tlci5kaXNhYmxlZCA6ICEhdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLnByb3RvdHlwZSwgXCJvd2xEVFRyaWdnZXJEaXNhYmxlZENsYXNzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLnByb3RvdHlwZS5uZ09uSW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZS5wcm90b3R5cGUubmdPbkNoYW5nZXMgPSBmdW5jdGlvbiAoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5kYXRlcGlja2VyKSB7XG4gICAgICAgICAgICB0aGlzLndhdGNoU3RhdGVDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLndhdGNoU3RhdGVDaGFuZ2VzKCk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUucHJvdG90eXBlLm5nT25EZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLnByb3RvdHlwZS5oYW5kbGVDbGlja09uSG9zdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kdFBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5kdFBpY2tlci5vcGVuKCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLnByb3RvdHlwZS53YXRjaFN0YXRlQ2hhbmdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdmFyIGlucHV0RGlzYWJsZWQgPSB0aGlzLmR0UGlja2VyICYmIHRoaXMuZHRQaWNrZXIuZHRJbnB1dCA/XG4gICAgICAgICAgICB0aGlzLmR0UGlja2VyLmR0SW5wdXQuZGlzYWJsZWRDaGFuZ2UgOiBvYnNlcnZhYmxlT2YoKTtcbiAgICAgICAgdmFyIHBpY2tlckRpc2FibGVkID0gdGhpcy5kdFBpY2tlciA/XG4gICAgICAgICAgICB0aGlzLmR0UGlja2VyLmRpc2FibGVkQ2hhbmdlIDogb2JzZXJ2YWJsZU9mKCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzID0gbWVyZ2UocGlja2VyRGlzYWJsZWQsIGlucHV0RGlzYWJsZWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgnb3dsRGF0ZVRpbWVUcmlnZ2VyJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPd2xEYXRlVGltZUNvbXBvbmVudClcbiAgICBdLCBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUucHJvdG90eXBlLCBcImR0UGlja2VyXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtCb29sZWFuXSlcbiAgICBdLCBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LXRyaWdnZXItZGlzYWJsZWQnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlLnByb3RvdHlwZSwgXCJvd2xEVFRyaWdnZXJEaXNhYmxlZENsYXNzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRXZlbnRdKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUucHJvdG90eXBlLCBcImhhbmRsZUNsaWNrT25Ib3N0XCIsIG51bGwpO1xuICAgIE93bERhdGVUaW1lVHJpZ2dlckRpcmVjdGl2ZSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICBEaXJlY3RpdmUoe1xuICAgICAgICAgICAgc2VsZWN0b3I6ICdbb3dsRGF0ZVRpbWVUcmlnZ2VyXScsXG4gICAgICAgIH0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0NoYW5nZURldGVjdG9yUmVmXSlcbiAgICBdLCBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmUpO1xuICAgIHJldHVybiBPd2xEYXRlVGltZVRyaWdnZXJEaXJlY3RpdmU7XG59KCkpO1xuZXhwb3J0IHsgT3dsRGF0ZVRpbWVUcmlnZ2VyRGlyZWN0aXZlIH07XG4iXX0=","export var OWL_NATIVE_DATE_TIME_FORMATS = {\n parseInput: null,\n fullPickerInput: { year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric' },\n datePickerInput: { year: 'numeric', month: 'numeric', day: 'numeric' },\n timePickerInput: { hour: 'numeric', minute: 'numeric' },\n monthYearLabel: { year: 'numeric', month: 'short' },\n dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n monthYearA11yLabel: { year: 'numeric', month: 'long' },\n};\n","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\n\nvar _c0 = [\"owl-date-time-calendar-body\", \"\"];\nvar _c1 = function (a0, a1, a2) { return { \"owl-dt-calendar-cell-out\": a0, \"owl-dt-calendar-cell-today\": a1, \"owl-dt-calendar-cell-selected\": a2 }; };\nfunction OwlCalendarBodyComponent_tr_0_td_1_Template(rf, ctx) { if (rf & 1) {\n var _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"td\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function OwlCalendarBodyComponent_tr_0_td_1_Template_td_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r7); var item_r4 = ctx.$implicit; var ctx_r6 = ɵngcc0.ɵɵnextContext(2); return ctx_r6.selectCell(item_r4); });\n ɵngcc0.ɵɵelementStart(1, \"span\", 4);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var item_r4 = ctx.$implicit;\n var colIndex_r5 = ctx.index;\n var rowIndex_r2 = ɵngcc0.ɵɵnextContext().index;\n var ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassMapInterpolate1(\"owl-dt-calendar-cell \", item_r4.cellClass, \"\");\n ɵngcc0.ɵɵstyleProp(\"width\", 100 / ctx_r3.numCols, \"%\")(\"padding-top\", 50 * ctx_r3.cellRatio / ctx_r3.numCols, \"%\")(\"padding-bottom\", 50 * ctx_r3.cellRatio / ctx_r3.numCols, \"%\");\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar-cell-active\", ctx_r3.isActiveCell(rowIndex_r2, colIndex_r5))(\"owl-dt-calendar-cell-disabled\", !item_r4.enabled)(\"owl-dt-calendar-cell-in-range\", ctx_r3.isInRange(item_r4.value))(\"owl-dt-calendar-cell-range-from\", ctx_r3.isRangeFrom(item_r4.value))(\"owl-dt-calendar-cell-range-to\", ctx_r3.isRangeTo(item_r4.value));\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx_r3.isActiveCell(rowIndex_r2, colIndex_r5) ? 0 : -1);\n ɵngcc0.ɵɵattribute(\"aria-label\", item_r4.ariaLabel)(\"aria-disabled\", !item_r4.enabled || null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction3(24, _c1, item_r4.out, item_r4.value === ctx_r3.todayValue, ctx_r3.isSelected(item_r4.value)));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(item_r4.displayValue);\n} }\nfunction OwlCalendarBodyComponent_tr_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(1, OwlCalendarBodyComponent_tr_0_td_1_Template, 3, 28, \"td\", 2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n var row_r1 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", row_r1);\n} }\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output } from '@angular/core';\nimport { take } from 'rxjs/operators';\nvar CalendarCell = (function () {\n function CalendarCell(value, displayValue, ariaLabel, enabled, out, cellClass) {\n if (out === void 0) { out = false; }\n if (cellClass === void 0) { cellClass = ''; }\n this.value = value;\n this.displayValue = displayValue;\n this.ariaLabel = ariaLabel;\n this.enabled = enabled;\n this.out = out;\n this.cellClass = cellClass;\n }\n return CalendarCell;\n}());\nexport { CalendarCell };\nvar OwlCalendarBodyComponent = (function () {\n function OwlCalendarBodyComponent(elmRef, ngZone) {\n this.elmRef = elmRef;\n this.ngZone = ngZone;\n this.activeCell = 0;\n this.numCols = 7;\n this.cellRatio = 1;\n this.select = new EventEmitter();\n }\n Object.defineProperty(OwlCalendarBodyComponent.prototype, \"owlDTCalendarBodyClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarBodyComponent.prototype, \"isInSingleMode\", {\n get: function () {\n return this.selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlCalendarBodyComponent.prototype, \"isInRangeMode\", {\n get: function () {\n return this.selectMode === 'range' || this.selectMode === 'rangeFrom'\n || this.selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n OwlCalendarBodyComponent.prototype.ngOnInit = function () {\n };\n OwlCalendarBodyComponent.prototype.selectCell = function (cell) {\n this.select.emit(cell);\n };\n OwlCalendarBodyComponent.prototype.isActiveCell = function (rowIndex, colIndex) {\n var cellNumber = rowIndex * this.numCols + colIndex;\n return cellNumber === this.activeCell;\n };\n OwlCalendarBodyComponent.prototype.isSelected = function (value) {\n if (!this.selectedValues || this.selectedValues.length === 0) {\n return false;\n }\n if (this.isInSingleMode) {\n return value === this.selectedValues[0];\n }\n if (this.isInRangeMode) {\n var fromValue = this.selectedValues[0];\n var toValue = this.selectedValues[1];\n return value === fromValue || value === toValue;\n }\n };\n OwlCalendarBodyComponent.prototype.isInRange = function (value) {\n if (this.isInRangeMode) {\n var fromValue = this.selectedValues[0];\n var toValue = this.selectedValues[1];\n if (fromValue !== null && toValue !== null) {\n return value >= fromValue && value <= toValue;\n }\n else {\n return value === fromValue || value === toValue;\n }\n }\n };\n OwlCalendarBodyComponent.prototype.isRangeFrom = function (value) {\n if (this.isInRangeMode) {\n var fromValue = this.selectedValues[0];\n return fromValue !== null && value === fromValue;\n }\n };\n OwlCalendarBodyComponent.prototype.isRangeTo = function (value) {\n if (this.isInRangeMode) {\n var toValue = this.selectedValues[1];\n return toValue !== null && value === toValue;\n }\n };\n OwlCalendarBodyComponent.prototype.focusActiveCell = function () {\n var _this = this;\n this.ngZone.runOutsideAngular(function () {\n _this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(function () {\n _this.elmRef.nativeElement.querySelector('.owl-dt-calendar-cell-active').focus();\n });\n });\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarBodyComponent.prototype, \"activeCell\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], OwlCalendarBodyComponent.prototype, \"rows\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarBodyComponent.prototype, \"numCols\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarBodyComponent.prototype, \"cellRatio\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Number)\n ], OwlCalendarBodyComponent.prototype, \"todayValue\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array)\n ], OwlCalendarBodyComponent.prototype, \"selectedValues\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", String)\n ], OwlCalendarBodyComponent.prototype, \"selectMode\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlCalendarBodyComponent.prototype, \"select\", void 0);\n __decorate([\n HostBinding('class.owl-dt-calendar-body'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlCalendarBodyComponent.prototype, \"owlDTCalendarBodyClass\", null);\n OwlCalendarBodyComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone])\n ], OwlCalendarBodyComponent);\nOwlCalendarBodyComponent.ɵfac = function OwlCalendarBodyComponent_Factory(t) { return new (t || OwlCalendarBodyComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nOwlCalendarBodyComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlCalendarBodyComponent, selectors: [[\"\", \"owl-date-time-calendar-body\", \"\"]], hostVars: 2, hostBindings: function OwlCalendarBodyComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"owl-dt-calendar-body\", ctx.owlDTCalendarBodyClass);\n } }, inputs: { activeCell: \"activeCell\", numCols: \"numCols\", cellRatio: \"cellRatio\", rows: \"rows\", todayValue: \"todayValue\", selectedValues: \"selectedValues\", selectMode: \"selectMode\" }, outputs: { select: \"select\" }, exportAs: [\"owlDateTimeCalendarBody\"], attrs: _c0, decls: 1, vars: 1, consts: [[\"role\", \"row\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"row\"], [3, \"class\", \"tabindex\", \"owl-dt-calendar-cell-active\", \"owl-dt-calendar-cell-disabled\", \"owl-dt-calendar-cell-in-range\", \"owl-dt-calendar-cell-range-from\", \"owl-dt-calendar-cell-range-to\", \"width\", \"paddingTop\", \"paddingBottom\", \"click\", 4, \"ngFor\", \"ngForOf\"], [3, \"tabindex\", \"click\"], [1, \"owl-dt-calendar-cell-content\", 3, \"ngClass\"]], template: function OwlCalendarBodyComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, OwlCalendarBodyComponent_tr_0_Template, 2, 1, \"tr\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.rows);\n } }, directives: [ɵngcc1.NgForOf, ɵngcc1.NgClass], styles: [\"\"], changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlCalendarBodyComponent, [{\n type: Component,\n args: [{\n selector: '[owl-date-time-calendar-body]',\n exportAs: 'owlDateTimeCalendarBody',\n template: \"{{item.displayValue}}\",\n styles: [\"\"],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { activeCell: [{\n type: Input\n }], numCols: [{\n type: Input\n }], cellRatio: [{\n type: Input\n }], select: [{\n type: Output\n }], owlDTCalendarBodyClass: [{\n type: HostBinding,\n args: ['class.owl-dt-calendar-body']\n }], rows: [{\n type: Input\n }], todayValue: [{\n type: Input\n }], selectedValues: [{\n type: Input\n }], selectMode: [{\n type: Input\n }] }); })();\n return OwlCalendarBodyComponent;\n}());\nexport { OwlCalendarBodyComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbImNhbGVuZGFyLWJvZHkuY29tcG9uZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FTTztBQUNQO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFpQztBQUNqQztBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE5nWm9uZSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xudmFyIENhbGVuZGFyQ2VsbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2FsZW5kYXJDZWxsKHZhbHVlLCBkaXNwbGF5VmFsdWUsIGFyaWFMYWJlbCwgZW5hYmxlZCwgb3V0LCBjZWxsQ2xhc3MpIHtcbiAgICAgICAgaWYgKG91dCA9PT0gdm9pZCAwKSB7IG91dCA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChjZWxsQ2xhc3MgPT09IHZvaWQgMCkgeyBjZWxsQ2xhc3MgPSAnJzsgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gZGlzcGxheVZhbHVlO1xuICAgICAgICB0aGlzLmFyaWFMYWJlbCA9IGFyaWFMYWJlbDtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgICAgIHRoaXMuY2VsbENsYXNzID0gY2VsbENsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gQ2FsZW5kYXJDZWxsO1xufSgpKTtcbmV4cG9ydCB7IENhbGVuZGFyQ2VsbCB9O1xudmFyIE93bENhbGVuZGFyQm9keUNvbXBvbmVudCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50KGVsbVJlZiwgbmdab25lKSB7XG4gICAgICAgIHRoaXMuZWxtUmVmID0gZWxtUmVmO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5hY3RpdmVDZWxsID0gMDtcbiAgICAgICAgdGhpcy5udW1Db2xzID0gNztcbiAgICAgICAgdGhpcy5jZWxsUmF0aW8gPSAxO1xuICAgICAgICB0aGlzLnNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhckJvZHlDbGFzc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xDYWxlbmRhckJvZHlDb21wb25lbnQucHJvdG90eXBlLCBcImlzSW5TaW5nbGVNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUsIFwiaXNJblJhbmdlTW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJyB8fCB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2VUbyc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUubmdPbkluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQucHJvdG90eXBlLnNlbGVjdENlbGwgPSBmdW5jdGlvbiAoY2VsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdC5lbWl0KGNlbGwpO1xuICAgIH07XG4gICAgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LnByb3RvdHlwZS5pc0FjdGl2ZUNlbGwgPSBmdW5jdGlvbiAocm93SW5kZXgsIGNvbEluZGV4KSB7XG4gICAgICAgIHZhciBjZWxsTnVtYmVyID0gcm93SW5kZXggKiB0aGlzLm51bUNvbHMgKyBjb2xJbmRleDtcbiAgICAgICAgcmV0dXJuIGNlbGxOdW1iZXIgPT09IHRoaXMuYWN0aXZlQ2VsbDtcbiAgICB9O1xuICAgIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUuaXNTZWxlY3RlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRWYWx1ZXMgfHwgdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIHZhciBmcm9tVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdO1xuICAgICAgICAgICAgdmFyIHRvVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzFdO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmcm9tVmFsdWUgfHwgdmFsdWUgPT09IHRvVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUuaXNJblJhbmdlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIHZhciBmcm9tVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdO1xuICAgICAgICAgICAgdmFyIHRvVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzFdO1xuICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gbnVsbCAmJiB0b1ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID49IGZyb21WYWx1ZSAmJiB2YWx1ZSA8PSB0b1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmcm9tVmFsdWUgfHwgdmFsdWUgPT09IHRvVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUuaXNSYW5nZUZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgICAgICAgdmFyIGZyb21WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXNbMF07XG4gICAgICAgICAgICByZXR1cm4gZnJvbVZhbHVlICE9PSBudWxsICYmIHZhbHVlID09PSBmcm9tVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUuaXNSYW5nZVRvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIHZhciB0b1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1sxXTtcbiAgICAgICAgICAgIHJldHVybiB0b1ZhbHVlICE9PSBudWxsICYmIHZhbHVlID09PSB0b1ZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQucHJvdG90eXBlLmZvY3VzQWN0aXZlQ2VsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcub3dsLWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICAgIF0sIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUsIFwiYWN0aXZlQ2VsbFwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXG4gICAgXSwgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LnByb3RvdHlwZSwgXCJyb3dzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LnByb3RvdHlwZSwgXCJudW1Db2xzXCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LnByb3RvdHlwZSwgXCJjZWxsUmF0aW9cIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE51bWJlcilcbiAgICBdLCBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQucHJvdG90eXBlLCBcInRvZGF5VmFsdWVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxuICAgIF0sIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRWYWx1ZXNcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcbiAgICBdLCBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQucHJvdG90eXBlLCBcInNlbGVjdE1vZGVcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgT3V0cHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LnByb3RvdHlwZSwgXCJzZWxlY3RcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2NsYXNzLm93bC1kdC1jYWxlbmRhci1ib2R5JyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bENhbGVuZGFyQm9keUNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRFRDYWxlbmRhckJvZHlDbGFzc1wiLCBudWxsKTtcbiAgICBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgQ29tcG9uZW50KHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnW293bC1kYXRlLXRpbWUtY2FsZW5kYXItYm9keV0nLFxuICAgICAgICAgICAgZXhwb3J0QXM6ICdvd2xEYXRlVGltZUNhbGVuZGFyQm9keScsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCI8dHIgKm5nRm9yPVxcXCJsZXQgcm93IG9mIHJvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XFxcIiByb2xlPVxcXCJyb3dcXFwiPjx0ZCAqbmdGb3I9XFxcImxldCBpdGVtIG9mIHJvdzsgbGV0IGNvbEluZGV4ID0gaW5kZXhcXFwiIGNsYXNzPVxcXCJvd2wtZHQtY2FsZW5kYXItY2VsbCB7e2l0ZW0uY2VsbENsYXNzfX1cXFwiIFt0YWJpbmRleF09XFxcImlzQWN0aXZlQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpID8gMCA6IC0xXFxcIiBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlXT1cXFwiaXNBY3RpdmVDZWxsKHJvd0luZGV4LCBjb2xJbmRleClcXFwiIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1kaXNhYmxlZF09XFxcIiFpdGVtLmVuYWJsZWRcXFwiIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1pbi1yYW5nZV09XFxcImlzSW5SYW5nZShpdGVtLnZhbHVlKVxcXCIgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1jZWxsLXJhbmdlLWZyb21dPVxcXCJpc1JhbmdlRnJvbShpdGVtLnZhbHVlKVxcXCIgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1jZWxsLXJhbmdlLXRvXT1cXFwiaXNSYW5nZVRvKGl0ZW0udmFsdWUpXFxcIiBbYXR0ci5hcmlhLWxhYmVsXT1cXFwiaXRlbS5hcmlhTGFiZWxcXFwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVxcXCIhaXRlbS5lbmFibGVkIHx8IG51bGxcXFwiIFtzdHlsZS53aWR0aC4lXT1cXFwiMTAwIC8gbnVtQ29sc1xcXCIgW3N0eWxlLnBhZGRpbmdUb3AuJV09XFxcIjUwICogY2VsbFJhdGlvIC8gbnVtQ29sc1xcXCIgW3N0eWxlLnBhZGRpbmdCb3R0b20uJV09XFxcIjUwICogY2VsbFJhdGlvIC8gbnVtQ29sc1xcXCIgKGNsaWNrKT1cXFwic2VsZWN0Q2VsbChpdGVtKVxcXCI+PHNwYW4gY2xhc3M9XFxcIm93bC1kdC1jYWxlbmRhci1jZWxsLWNvbnRlbnRcXFwiIFtuZ0NsYXNzXT1cXFwie1xcbiAgICAgICAgICAgICAgICAnb3dsLWR0LWNhbGVuZGFyLWNlbGwtb3V0JzogaXRlbS5vdXQsXFxuICAgICAgICAgICAgICAgICdvd2wtZHQtY2FsZW5kYXItY2VsbC10b2RheSc6IGl0ZW0udmFsdWUgPT09IHRvZGF5VmFsdWUsXFxuICAgICAgICAgICAgICAgICdvd2wtZHQtY2FsZW5kYXItY2VsbC1zZWxlY3RlZCc6IGlzU2VsZWN0ZWQoaXRlbS52YWx1ZSlcXG4gICAgICAgICAgICAgIH1cXFwiPnt7aXRlbS5kaXNwbGF5VmFsdWV9fTwvc3Bhbj48L3RkPjwvdHI+XCIsXG4gICAgICAgICAgICBzdHlsZXM6IFtcIlwiXSxcbiAgICAgICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgIH0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0VsZW1lbnRSZWYsXG4gICAgICAgICAgICBOZ1pvbmVdKVxuICAgIF0sIE93bENhbGVuZGFyQm9keUNvbXBvbmVudCk7XG4gICAgcmV0dXJuIE93bENhbGVuZGFyQm9keUNvbXBvbmVudDtcbn0oKSk7XG5leHBvcnQgeyBPd2xDYWxlbmRhckJvZHlDb21wb25lbnQgfTtcbiJdfQ==","import * as ɵngcc0 from '@angular/core';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Pipe } from '@angular/core';\nvar NumberFixedLenPipe = (function () {\n function NumberFixedLenPipe() {\n }\n NumberFixedLenPipe.prototype.transform = function (num, len) {\n var number = Math.floor(num);\n var length = Math.floor(len);\n if (num === null || isNaN(number) || isNaN(length)) {\n return num;\n }\n var numString = number.toString();\n while (numString.length < length) {\n numString = '0' + numString;\n }\n return numString;\n };\nNumberFixedLenPipe.ɵfac = function NumberFixedLenPipe_Factory(t) { return new (t || NumberFixedLenPipe)(); };\nNumberFixedLenPipe.ɵpipe = ɵngcc0.ɵɵdefinePipe({ name: \"numberFixedLen\", type: NumberFixedLenPipe, pure: true });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumberFixedLenPipe, [{\n type: Pipe,\n args: [{\n name: 'numberFixedLen'\n }]\n }], function () { return []; }, null); })();\n return NumberFixedLenPipe;\n}());\nexport { NumberFixedLenPipe };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyZWRGaXhMZW4ucGlwZS5qcyIsInNvdXJjZXMiOlsibnVtYmVyZWRGaXhMZW4ucGlwZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2dEQUsyQjtBQUMzQjtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG52YXIgTnVtYmVyRml4ZWRMZW5QaXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOdW1iZXJGaXhlZExlblBpcGUoKSB7XG4gICAgfVxuICAgIE51bWJlckZpeGVkTGVuUGlwZS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKG51bSwgbGVuKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBNYXRoLmZsb29yKG51bSk7XG4gICAgICAgIHZhciBsZW5ndGggPSBNYXRoLmZsb29yKGxlbik7XG4gICAgICAgIGlmIChudW0gPT09IG51bGwgfHwgaXNOYU4obnVtYmVyKSB8fCBpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICB9XG4gICAgICAgIHZhciBudW1TdHJpbmcgPSBudW1iZXIudG9TdHJpbmcoKTtcbiAgICAgICAgd2hpbGUgKG51bVN0cmluZy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIG51bVN0cmluZyA9ICcwJyArIG51bVN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtU3RyaW5nO1xuICAgIH07XG4gICAgTnVtYmVyRml4ZWRMZW5QaXBlID0gX19kZWNvcmF0ZShbXG4gICAgICAgIFBpcGUoe1xuICAgICAgICAgICAgbmFtZTogJ251bWJlckZpeGVkTGVuJ1xuICAgICAgICB9KVxuICAgIF0sIE51bWJlckZpeGVkTGVuUGlwZSk7XG4gICAgcmV0dXJuIE51bWJlckZpeGVkTGVuUGlwZTtcbn0oKSk7XG5leHBvcnQgeyBOdW1iZXJGaXhlZExlblBpcGUgfTtcbiJdfQ==","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/cdk/portal';\n\nfunction OwlDialogContainerComponent_ng_template_0_Template(rf, ctx) { }\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Optional, ViewChild } from '@angular/core';\nimport { animate, animateChild, keyframes, style, transition, trigger } from '@angular/animations';\nimport { DOCUMENT } from '@angular/common';\nimport { FocusTrapFactory } from '@angular/cdk/a11y';\nimport { BasePortalOutlet, CdkPortalOutlet } from '@angular/cdk/portal';\nvar zoomFadeIn = { opacity: 0, transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})' };\nvar zoomFadeInFrom = {\n opacity: 0,\n transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})',\n transformOrigin: '{{ ox }} {{ oy }}'\n};\nvar OwlDialogContainerComponent = (function (_super) {\n __extends(OwlDialogContainerComponent, _super);\n function OwlDialogContainerComponent(changeDetector, elementRef, focusTrapFactory, document) {\n var _this = _super.call(this) || this;\n _this.changeDetector = changeDetector;\n _this.elementRef = elementRef;\n _this.focusTrapFactory = focusTrapFactory;\n _this.document = document;\n _this.ariaLabelledBy = null;\n _this.animationStateChanged = new EventEmitter();\n _this.isAnimating = false;\n _this.state = 'enter';\n _this.params = {\n x: '0px',\n y: '0px',\n ox: '50%',\n oy: '50%',\n scale: 0\n };\n _this.elementFocusedBeforeDialogWasOpened = null;\n return _this;\n }\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"config\", {\n get: function () {\n return this._config;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerClass\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerTabIndex\", {\n get: function () {\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerId\", {\n get: function () {\n return this._config.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerRole\", {\n get: function () {\n return this._config.role || null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerAriaLabelledby\", {\n get: function () {\n return this.ariaLabelledBy;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerAriaDescribedby\", {\n get: function () {\n return this._config.ariaDescribedBy || null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDialogContainerComponent.prototype, \"owlDialogContainerAnimation\", {\n get: function () {\n return { value: this.state, params: this.params };\n },\n enumerable: true,\n configurable: true\n });\n OwlDialogContainerComponent.prototype.ngOnInit = function () {\n };\n OwlDialogContainerComponent.prototype.attachComponentPortal = function (portal) {\n if (this.portalOutlet.hasAttached()) {\n throw Error('Attempting to attach dialog content after content is already attached');\n }\n this.savePreviouslyFocusedElement();\n return this.portalOutlet.attachComponentPortal(portal);\n };\n OwlDialogContainerComponent.prototype.attachTemplatePortal = function (portal) {\n throw new Error('Method not implemented.');\n };\n OwlDialogContainerComponent.prototype.setConfig = function (config) {\n this._config = config;\n if (config.event) {\n this.calculateZoomOrigin(event);\n }\n };\n OwlDialogContainerComponent.prototype.onAnimationStart = function (event) {\n this.isAnimating = true;\n this.animationStateChanged.emit(event);\n };\n OwlDialogContainerComponent.prototype.onAnimationDone = function (event) {\n if (event.toState === 'enter') {\n this.trapFocus();\n }\n else if (event.toState === 'exit') {\n this.restoreFocus();\n }\n this.animationStateChanged.emit(event);\n this.isAnimating = false;\n };\n OwlDialogContainerComponent.prototype.startExitAnimation = function () {\n this.state = 'exit';\n this.changeDetector.markForCheck();\n };\n OwlDialogContainerComponent.prototype.calculateZoomOrigin = function (event) {\n if (!event) {\n return;\n }\n var clientX = event.clientX;\n var clientY = event.clientY;\n var wh = window.innerWidth / 2;\n var hh = window.innerHeight / 2;\n var x = clientX - wh;\n var y = clientY - hh;\n var ox = clientX / window.innerWidth;\n var oy = clientY / window.innerHeight;\n this.params.x = x + \"px\";\n this.params.y = y + \"px\";\n this.params.ox = ox * 100 + \"%\";\n this.params.oy = oy * 100 + \"%\";\n this.params.scale = 0;\n return;\n };\n OwlDialogContainerComponent.prototype.savePreviouslyFocusedElement = function () {\n var _this = this;\n if (this.document) {\n this.elementFocusedBeforeDialogWasOpened = this.document.activeElement;\n Promise.resolve().then(function () { return _this.elementRef.nativeElement.focus(); });\n }\n };\n OwlDialogContainerComponent.prototype.trapFocus = function () {\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n }\n if (this._config.autoFocus) {\n this.focusTrap.focusInitialElementWhenReady();\n }\n };\n OwlDialogContainerComponent.prototype.restoreFocus = function () {\n var toFocus = this.elementFocusedBeforeDialogWasOpened;\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n };\n __decorate([\n ViewChild(CdkPortalOutlet),\n __metadata(\"design:type\", CdkPortalOutlet)\n ], OwlDialogContainerComponent.prototype, \"portalOutlet\", void 0);\n __decorate([\n HostBinding('class.owl-dialog-container'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerClass\", null);\n __decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerTabIndex\", null);\n __decorate([\n HostBinding('attr.id'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerId\", null);\n __decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerRole\", null);\n __decorate([\n HostBinding('attr.aria-labelledby'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerAriaLabelledby\", null);\n __decorate([\n HostBinding('attr.aria-describedby'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerAriaDescribedby\", null);\n __decorate([\n HostBinding('@slideModal'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n ], OwlDialogContainerComponent.prototype, \"owlDialogContainerAnimation\", null);\n __decorate([\n HostListener('@slideModal.start', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDialogContainerComponent.prototype, \"onAnimationStart\", null);\n __decorate([\n HostListener('@slideModal.done', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDialogContainerComponent.prototype, \"onAnimationDone\", null);\n OwlDialogContainerComponent = __decorate([ __param(3, Optional()), __param(3, Inject(DOCUMENT)),\n __metadata(\"design:paramtypes\", [ChangeDetectorRef,\n ElementRef,\n FocusTrapFactory, Object])\n ], OwlDialogContainerComponent);\nOwlDialogContainerComponent.ɵfac = function OwlDialogContainerComponent_Factory(t) { return new (t || OwlDialogContainerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusTrapFactory), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8)); };\nOwlDialogContainerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: OwlDialogContainerComponent, selectors: [[\"owl-dialog-container\"]], viewQuery: function OwlDialogContainerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(CdkPortalOutlet, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.portalOutlet = _t.first);\n } }, hostVars: 8, hostBindings: function OwlDialogContainerComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@slideModal.start\", function OwlDialogContainerComponent_animation_slideModal_start_HostBindingHandler($event) { return ctx.onAnimationStart($event); })(\"@slideModal.done\", function OwlDialogContainerComponent_animation_slideModal_done_HostBindingHandler($event) { return ctx.onAnimationDone($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.owlDialogContainerTabIndex)(\"id\", ctx.owlDialogContainerId)(\"role\", ctx.owlDialogContainerRole)(\"aria-labelledby\", ctx.owlDialogContainerAriaLabelledby)(\"aria-describedby\", ctx.owlDialogContainerAriaDescribedby);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@slideModal\", ctx.owlDialogContainerAnimation);\n ɵngcc0.ɵɵclassProp(\"owl-dialog-container\", ctx.owlDialogContainerClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"cdkPortalOutlet\", \"\"]], template: function OwlDialogContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, OwlDialogContainerComponent_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n } }, directives: [ɵngcc2.CdkPortalOutlet], encapsulation: 2, data: { animation: [\n trigger('slideModal', [\n transition('void => enter', [\n style(zoomFadeInFrom),\n animate('300ms cubic-bezier(0.35, 0, 0.25, 1)', style('*')),\n animate('150ms', keyframes([\n style({ transform: 'scale(1)', offset: 0 }),\n style({ transform: 'scale(1.05)', offset: 0.3 }),\n style({ transform: 'scale(.95)', offset: 0.8 }),\n style({ transform: 'scale(1)', offset: 1.0 })\n ])),\n animateChild()\n ], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%', scale: 1 } }),\n transition('enter => exit', [\n animateChild(),\n animate(200, style(zoomFadeIn))\n ], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%' } })\n ])\n ] } });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDialogContainerComponent, [{\n type: Component,\n args: [{\n selector: 'owl-dialog-container',\n template: \"\",\n animations: [\n trigger('slideModal', [\n transition('void => enter', [\n style(zoomFadeInFrom),\n animate('300ms cubic-bezier(0.35, 0, 0.25, 1)', style('*')),\n animate('150ms', keyframes([\n style({ transform: 'scale(1)', offset: 0 }),\n style({ transform: 'scale(1.05)', offset: 0.3 }),\n style({ transform: 'scale(.95)', offset: 0.8 }),\n style({ transform: 'scale(1)', offset: 1.0 })\n ])),\n animateChild()\n ], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%', scale: 1 } }),\n transition('enter => exit', [\n animateChild(),\n animate(200, style(zoomFadeIn))\n ], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%' } })\n ])\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.FocusTrapFactory }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { owlDialogContainerClass: [{\n type: HostBinding,\n args: ['class.owl-dialog-container']\n }], owlDialogContainerTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], owlDialogContainerId: [{\n type: HostBinding,\n args: ['attr.id']\n }], owlDialogContainerRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], owlDialogContainerAriaLabelledby: [{\n type: HostBinding,\n args: ['attr.aria-labelledby']\n }], owlDialogContainerAriaDescribedby: [{\n type: HostBinding,\n args: ['attr.aria-describedby']\n }], owlDialogContainerAnimation: [{\n type: HostBinding,\n args: ['@slideModal']\n }], onAnimationStart: [{\n type: HostListener,\n args: ['@slideModal.start', ['$event']]\n }], onAnimationDone: [{\n type: HostListener,\n args: ['@slideModal.done', ['$event']]\n }], portalOutlet: [{\n type: ViewChild,\n args: [CdkPortalOutlet]\n }] }); })();\n return OwlDialogContainerComponent;\n}(BasePortalOutlet));\nexport { OwlDialogContainerComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbImRpYWxvZy1jb250YWluZXIuY29tcG9uZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0F3Qk87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBb0M7QUFDcEM7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufTtcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPcHRpb25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBhbmltYXRlQ2hpbGQsIGtleWZyYW1lcywgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCYXNlUG9ydGFsT3V0bGV0LCBDZGtQb3J0YWxPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbnZhciB6b29tRmFkZUluID0geyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKHt7IHggfX0pIHRyYW5zbGF0ZVkoe3sgeSB9fSkgc2NhbGUoe3tzY2FsZX19KScgfTtcbnZhciB6b29tRmFkZUluRnJvbSA9IHtcbiAgICBvcGFjaXR5OiAwLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoe3sgeCB9fSkgdHJhbnNsYXRlWSh7eyB5IH19KSBzY2FsZSh7e3NjYWxlfX0pJyxcbiAgICB0cmFuc2Zvcm1PcmlnaW46ICd7eyBveCB9fSB7eyBveSB9fSdcbn07XG52YXIgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudChjaGFuZ2VEZXRlY3RvciwgZWxlbWVudFJlZiwgZm9jdXNUcmFwRmFjdG9yeSwgZG9jdW1lbnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgX3RoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgICAgIF90aGlzLmZvY3VzVHJhcEZhY3RvcnkgPSBmb2N1c1RyYXBGYWN0b3J5O1xuICAgICAgICBfdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICBfdGhpcy5hcmlhTGFiZWxsZWRCeSA9IG51bGw7XG4gICAgICAgIF90aGlzLmFuaW1hdGlvblN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgX3RoaXMuaXNBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuc3RhdGUgPSAnZW50ZXInO1xuICAgICAgICBfdGhpcy5wYXJhbXMgPSB7XG4gICAgICAgICAgICB4OiAnMHB4JyxcbiAgICAgICAgICAgIHk6ICcwcHgnLFxuICAgICAgICAgICAgb3g6ICc1MCUnLFxuICAgICAgICAgICAgb3k6ICc1MCUnLFxuICAgICAgICAgICAgc2NhbGU6IDBcbiAgICAgICAgfTtcbiAgICAgICAgX3RoaXMuZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcImNvbmZpZ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRGlhbG9nQ29udGFpbmVyQ2xhc3NcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEaWFsb2dDb250YWluZXJUYWJJbmRleFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEaWFsb2dDb250YWluZXJJZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5pZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRGlhbG9nQ29udGFpbmVyUm9sZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5yb2xlIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERpYWxvZ0NvbnRhaW5lckFyaWFMYWJlbGxlZGJ5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRCeTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRGlhbG9nQ29udGFpbmVyQXJpYURlc2NyaWJlZGJ5XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmFyaWFEZXNjcmliZWRCeSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEaWFsb2dDb250YWluZXJBbmltYXRpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLnN0YXRlLCBwYXJhbXM6IHRoaXMucGFyYW1zIH07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUubmdPbkluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcbiAgICBPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLmF0dGFjaENvbXBvbmVudFBvcnRhbCA9IGZ1bmN0aW9uIChwb3J0YWwpIHtcbiAgICAgICAgaWYgKHRoaXMucG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdBdHRlbXB0aW5nIHRvIGF0dGFjaCBkaWFsb2cgY29udGVudCBhZnRlciBjb250ZW50IGlzIGFscmVhZHkgYXR0YWNoZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpO1xuICAgIH07XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbCA9IGZ1bmN0aW9uIChwb3J0YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH07XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgaWYgKGNvbmZpZy5ldmVudCkge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVab29tT3JpZ2luKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5vbkFuaW1hdGlvblN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNBbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlQ2hhbmdlZC5lbWl0KGV2ZW50KTtcbiAgICB9O1xuICAgIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUub25BbmltYXRpb25Eb25lID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50b1N0YXRlID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLnRyYXBGb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdleGl0Jykge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXRlQ2hhbmdlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5pc0FuaW1hdGluZyA9IGZhbHNlO1xuICAgIH07XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5zdGFydEV4aXRBbmltYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnZXhpdCc7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcbiAgICBPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLmNhbGN1bGF0ZVpvb21PcmlnaW4gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjbGllbnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdmFyIGNsaWVudFkgPSBldmVudC5jbGllbnRZO1xuICAgICAgICB2YXIgd2ggPSB3aW5kb3cuaW5uZXJXaWR0aCAvIDI7XG4gICAgICAgIHZhciBoaCA9IHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gICAgICAgIHZhciB4ID0gY2xpZW50WCAtIHdoO1xuICAgICAgICB2YXIgeSA9IGNsaWVudFkgLSBoaDtcbiAgICAgICAgdmFyIG94ID0gY2xpZW50WCAvIHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICB2YXIgb3kgPSBjbGllbnRZIC8gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICB0aGlzLnBhcmFtcy54ID0geCArIFwicHhcIjtcbiAgICAgICAgdGhpcy5wYXJhbXMueSA9IHkgKyBcInB4XCI7XG4gICAgICAgIHRoaXMucGFyYW1zLm94ID0gb3ggKiAxMDAgKyBcIiVcIjtcbiAgICAgICAgdGhpcy5wYXJhbXMub3kgPSBveSAqIDEwMCArIFwiJVwiO1xuICAgICAgICB0aGlzLnBhcmFtcy5zY2FsZSA9IDA7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuICAgIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUuc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQgPSB0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpOyB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS50cmFwRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwID0gdGhpcy5mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZS5yZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0b0ZvY3VzID0gdGhpcy5lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDtcbiAgICAgICAgaWYgKHRvRm9jdXMgJiYgdHlwZW9mIHRvRm9jdXMuZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIFZpZXdDaGlsZChDZGtQb3J0YWxPdXRsZXQpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQ2RrUG9ydGFsT3V0bGV0KVxuICAgIF0sIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwicG9ydGFsT3V0bGV0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZGlhbG9nLWNvbnRhaW5lcicpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERpYWxvZ0NvbnRhaW5lckNsYXNzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgTnVtYmVyKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRGlhbG9nQ29udGFpbmVyVGFiSW5kZXhcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdhdHRyLmlkJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEaWFsb2dDb250YWluZXJJZFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRGlhbG9nQ29udGFpbmVyUm9sZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvd2xEaWFsb2dDb250YWluZXJBcmlhTGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuICAgIF0sIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib3dsRGlhbG9nQ29udGFpbmVyQXJpYURlc2NyaWJlZGJ5XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnQHNsaWRlTW9kYWwnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQucHJvdG90eXBlLCBcIm93bERpYWxvZ0NvbnRhaW5lckFuaW1hdGlvblwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdExpc3RlbmVyKCdAc2xpZGVNb2RhbC5zdGFydCcsIFsnJGV2ZW50J10pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgdm9pZCAwKVxuICAgIF0sIE93bERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudC5wcm90b3R5cGUsIFwib25BbmltYXRpb25TdGFydFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdExpc3RlbmVyKCdAc2xpZGVNb2RhbC5kb25lJywgWyckZXZlbnQnXSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJvbkFuaW1hdGlvbkRvbmVcIiwgbnVsbCk7XG4gICAgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50ID0gX19kZWNvcmF0ZShbXG4gICAgICAgIENvbXBvbmVudCh7XG4gICAgICAgICAgICBzZWxlY3RvcjogJ293bC1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBcIjxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cIixcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdzbGlkZU1vZGFsJywgW1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGVudGVyJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoem9vbUZhZGVJbkZyb20pLFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpJywgc3R5bGUoJyonKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlKCcxNTBtcycsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9mZnNldDogMCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlKDEuMDUpJywgb2Zmc2V0OiAwLjMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSguOTUpJywgb2Zmc2V0OiAwLjggfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9mZnNldDogMS4wIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlQ2hpbGQoKVxuICAgICAgICAgICAgICAgICAgICBdLCB7IHBhcmFtczogeyB4OiAnMHB4JywgeTogJzBweCcsIG94OiAnNTAlJywgb3k6ICc1MCUnLCBzY2FsZTogMSB9IH0pLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uKCdlbnRlciA9PiBleGl0JywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZUNoaWxkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlKDIwMCwgc3R5bGUoem9vbUZhZGVJbikpXG4gICAgICAgICAgICAgICAgICAgIF0sIHsgcGFyYW1zOiB7IHg6ICcwcHgnLCB5OiAnMHB4Jywgb3g6ICc1MCUnLCBveTogJzUwJScgfSB9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBfX3BhcmFtKDMsIE9wdGlvbmFsKCkpLCBfX3BhcmFtKDMsIEluamVjdChET0NVTUVOVCkpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0NoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgRWxlbWVudFJlZixcbiAgICAgICAgICAgIEZvY3VzVHJhcEZhY3RvcnksIE9iamVjdF0pXG4gICAgXSwgT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50KTtcbiAgICByZXR1cm4gT3dsRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50O1xufShCYXNlUG9ydGFsT3V0bGV0KSk7XG5leHBvcnQgeyBPd2xEaWFsb2dDb250YWluZXJDb21wb25lbnQgfTtcbiJdfQ==","export { OwlDateTimeModule } from './date-time.module';\nexport { OwlDateTimeIntl } from './date-time-picker-intl.service';\nexport { OwlNativeDateTimeModule } from './adapter/native-date-time.module';\nexport { OWL_DATE_TIME_LOCALE_PROVIDER, OWL_DATE_TIME_LOCALE, DateTimeAdapter } from './adapter/date-time-adapter.class';\nexport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nexport { OwlDateTimeInlineComponent } from './date-time-inline.component';\nexport { OwlDateTimeComponent } from './date-time-picker.component';\n","import { ESCAPE } from '@angular/cdk/keycodes';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nvar OwlDialogRef = (function () {\n function OwlDialogRef(overlayRef, container, id, location) {\n var _this = this;\n this.overlayRef = overlayRef;\n this.container = container;\n this.id = id;\n this._beforeClose$ = new Subject();\n this._afterOpen$ = new Subject();\n this._afterClosed$ = new Subject();\n this.locationChanged = Subscription.EMPTY;\n this.disableClose = this.container.config.disableClose;\n this.container.animationStateChanged\n .pipe(filter(function (event) { return event.phaseName === 'done' && event.toState === 'enter'; }), take(1))\n .subscribe(function () {\n _this._afterOpen$.next();\n _this._afterOpen$.complete();\n });\n this.container.animationStateChanged\n .pipe(filter(function (event) { return event.phaseName === 'done' && event.toState === 'exit'; }), take(1))\n .subscribe(function () {\n _this.overlayRef.dispose();\n _this.locationChanged.unsubscribe();\n _this._afterClosed$.next(_this.result);\n _this._afterClosed$.complete();\n _this.componentInstance = null;\n });\n this.overlayRef.keydownEvents()\n .pipe(filter(function (event) { return event.keyCode === ESCAPE && !_this.disableClose; }))\n .subscribe(function () { return _this.close(); });\n if (location) {\n this.locationChanged = location.subscribe(function () {\n if (_this.container.config.closeOnNavigation) {\n _this.close();\n }\n });\n }\n }\n OwlDialogRef.prototype.close = function (dialogResult) {\n var _this = this;\n this.result = dialogResult;\n this.container.animationStateChanged\n .pipe(filter(function (event) { return event.phaseName === 'start'; }), take(1))\n .subscribe(function () {\n _this._beforeClose$.next(dialogResult);\n _this._beforeClose$.complete();\n _this.overlayRef.detachBackdrop();\n });\n this.container.startExitAnimation();\n };\n OwlDialogRef.prototype.backdropClick = function () {\n return this.overlayRef.backdropClick();\n };\n OwlDialogRef.prototype.keydownEvents = function () {\n return this.overlayRef.keydownEvents();\n };\n OwlDialogRef.prototype.updatePosition = function (position) {\n var strategy = this.getPositionStrategy();\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n }\n else {\n strategy.centerHorizontally();\n }\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n }\n else {\n strategy.centerVertically();\n }\n this.overlayRef.updatePosition();\n return this;\n };\n OwlDialogRef.prototype.updateSize = function (width, height) {\n if (width === void 0) { width = 'auto'; }\n if (height === void 0) { height = 'auto'; }\n this.getPositionStrategy().width(width).height(height);\n this.overlayRef.updatePosition();\n return this;\n };\n OwlDialogRef.prototype.isAnimating = function () {\n return this.container.isAnimating;\n };\n OwlDialogRef.prototype.afterOpen = function () {\n return this._afterOpen$.asObservable();\n };\n OwlDialogRef.prototype.beforeClose = function () {\n return this._beforeClose$.asObservable();\n };\n OwlDialogRef.prototype.afterClosed = function () {\n return this._afterClosed$.asObservable();\n };\n OwlDialogRef.prototype.getPositionStrategy = function () {\n return this.overlayRef.getConfig().positionStrategy;\n };\n return OwlDialogRef;\n}());\nexport { OwlDialogRef };\n","import * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from './adapter/date-time-adapter.class';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Directive, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, Optional, Output, Renderer2 } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { OwlDateTimeComponent } from './date-time-picker.component';\nimport { DateTimeAdapter } from './adapter/date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';\nimport { Subscription } from 'rxjs';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nexport var OWL_DATETIME_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(function () { return OwlDateTimeInputDirective; }),\n multi: true\n};\nexport var OWL_DATETIME_VALIDATORS = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(function () { return OwlDateTimeInputDirective; }),\n multi: true\n};\nvar OwlDateTimeInputDirective = (function () {\n function OwlDateTimeInputDirective(elmRef, renderer, dateTimeAdapter, dateTimeFormats) {\n var _this = this;\n this.elmRef = elmRef;\n this.renderer = renderer;\n this.dateTimeAdapter = dateTimeAdapter;\n this.dateTimeFormats = dateTimeFormats;\n this._selectMode = 'single';\n this.rangeSeparator = '~';\n this._values = [];\n this.dateTimeChange = new EventEmitter();\n this.dateTimeInput = new EventEmitter();\n this.dtPickerSub = Subscription.EMPTY;\n this.localeSub = Subscription.EMPTY;\n this.lastValueValid = true;\n this.onModelChange = function () {\n };\n this.onModelTouched = function () {\n };\n this.validatorOnChange = function () {\n };\n this.parseValidator = function () {\n return _this.lastValueValid ?\n null : { 'owlDateTimeParse': { 'text': _this.elmRef.nativeElement.value } };\n };\n this.minValidator = function (control) {\n if (_this.isInSingleMode) {\n var controlValue = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value));\n return (!_this.min || !controlValue ||\n _this.dateTimeAdapter.compare(_this.min, controlValue) <= 0) ?\n null : { 'owlDateTimeMin': { 'min': _this.min, 'actual': controlValue } };\n }\n else if (_this.isInRangeMode && control.value) {\n var controlValueFrom = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[0]));\n var controlValueTo = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[1]));\n return (!_this.min || !controlValueFrom || !controlValueTo ||\n _this.dateTimeAdapter.compare(_this.min, controlValueFrom) <= 0) ?\n null : { 'owlDateTimeMin': { 'min': _this.min, 'actual': [controlValueFrom, controlValueTo] } };\n }\n };\n this.maxValidator = function (control) {\n if (_this.isInSingleMode) {\n var controlValue = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value));\n return (!_this.max || !controlValue ||\n _this.dateTimeAdapter.compare(_this.max, controlValue) >= 0) ?\n null : { 'owlDateTimeMax': { 'max': _this.max, 'actual': controlValue } };\n }\n else if (_this.isInRangeMode && control.value) {\n var controlValueFrom = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[0]));\n var controlValueTo = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[1]));\n return (!_this.max || !controlValueFrom || !controlValueTo ||\n _this.dateTimeAdapter.compare(_this.max, controlValueTo) >= 0) ?\n null : { 'owlDateTimeMax': { 'max': _this.max, 'actual': [controlValueFrom, controlValueTo] } };\n }\n };\n this.filterValidator = function (control) {\n var controlValue = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value));\n return !_this._dateTimeFilter || !controlValue || _this._dateTimeFilter(controlValue) ?\n null : { 'owlDateTimeFilter': true };\n };\n this.rangeValidator = function (control) {\n if (_this.isInSingleMode || !control.value) {\n return null;\n }\n var controlValueFrom = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[0]));\n var controlValueTo = _this.getValidDate(_this.dateTimeAdapter.deserialize(control.value[1]));\n return !controlValueFrom || !controlValueTo || _this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0 ?\n null : { 'owlDateTimeRange': true };\n };\n this.validator = Validators.compose([this.parseValidator, this.minValidator, this.maxValidator, this.filterValidator, this.rangeValidator]);\n this.valueChange = new EventEmitter();\n this.disabledChange = new EventEmitter();\n if (!this.dateTimeAdapter) {\n throw Error(\"OwlDateTimePicker: No provider found for DateTimePicker. You must import one of the following \" +\n \"modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a \" +\n \"custom implementation.\");\n }\n if (!this.dateTimeFormats) {\n throw Error(\"OwlDateTimePicker: No provider found for OWL_DATE_TIME_FORMATS. You must import one of the following \" +\n \"modules at your application root: OwlNativeDateTimeModule, OwlMomentDateTimeModule, or provide a \" +\n \"custom implementation.\");\n }\n this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(function () {\n _this.value = _this.value;\n });\n }\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"owlDateTime\", {\n set: function (value) {\n this.registerDateTimePicker(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"owlDateTimeFilter\", {\n set: function (filter) {\n this._dateTimeFilter = filter;\n this.validatorOnChange();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"dateTimeFilter\", {\n get: function () {\n return this._dateTimeFilter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"disabled\", {\n get: function () {\n return !!this._disabled;\n },\n set: function (value) {\n var newValue = coerceBooleanProperty(value);\n var element = this.elmRef.nativeElement;\n if (this._disabled !== newValue) {\n this._disabled = newValue;\n this.disabledChange.emit(newValue);\n }\n if (newValue && element.blur) {\n element.blur();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"min\", {\n get: function () {\n return this._min;\n },\n set: function (value) {\n this._min = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.validatorOnChange();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"max\", {\n get: function () {\n return this._max;\n },\n set: function (value) {\n this._max = this.getValidDate(this.dateTimeAdapter.deserialize(value));\n this.validatorOnChange();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"selectMode\", {\n get: function () {\n return this._selectMode;\n },\n set: function (mode) {\n if (mode !== 'single' && mode !== 'range' &&\n mode !== 'rangeFrom' && mode !== 'rangeTo') {\n throw Error('OwlDateTime Error: invalid selectMode value!');\n }\n this._selectMode = mode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"value\", {\n get: function () {\n return this._value;\n },\n set: function (value) {\n value = this.dateTimeAdapter.deserialize(value);\n this.lastValueValid = !value || this.dateTimeAdapter.isValid(value);\n value = this.getValidDate(value);\n var oldDate = this._value;\n this._value = value;\n this.formatNativeInputValue();\n if (!this.dateTimeAdapter.isEqual(oldDate, value)) {\n this.valueChange.emit(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"values\", {\n get: function () {\n return this._values;\n },\n set: function (values) {\n var _this = this;\n if (values && values.length > 0) {\n this._values = values.map(function (v) {\n v = _this.dateTimeAdapter.deserialize(v);\n return _this.getValidDate(v);\n });\n this.lastValueValid = (!this._values[0] || this.dateTimeAdapter.isValid(this._values[0])) && (!this._values[1] || this.dateTimeAdapter.isValid(this._values[1]));\n }\n else {\n this._values = [];\n this.lastValueValid = true;\n }\n this.formatNativeInputValue();\n this.valueChange.emit(this._values);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"elementRef\", {\n get: function () {\n return this.elmRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"isInSingleMode\", {\n get: function () {\n return this._selectMode === 'single';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"isInRangeMode\", {\n get: function () {\n return this._selectMode === 'range' || this._selectMode === 'rangeFrom'\n || this._selectMode === 'rangeTo';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"owlDateTimeInputAriaHaspopup\", {\n get: function () {\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"owlDateTimeInputAriaOwns\", {\n get: function () {\n return (this.dtPicker.opened && this.dtPicker.id) || null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"minIso8601\", {\n get: function () {\n return this.min ? this.dateTimeAdapter.toIso8601(this.min) : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"maxIso8601\", {\n get: function () {\n return this.max ? this.dateTimeAdapter.toIso8601(this.max) : null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(OwlDateTimeInputDirective.prototype, \"owlDateTimeInputDisabled\", {\n get: function () {\n return this.disabled;\n },\n enumerable: true,\n configurable: true\n });\n OwlDateTimeInputDirective.prototype.ngOnInit = function () {\n if (!this.dtPicker) {\n throw Error(\"OwlDateTimePicker: the picker input doesn't have any associated owl-date-time component\");\n }\n };\n OwlDateTimeInputDirective.prototype.ngAfterContentInit = function () {\n var _this = this;\n this.dtPickerSub = this.dtPicker.confirmSelectedChange.subscribe(function (selecteds) {\n if (Array.isArray(selecteds)) {\n _this.values = selecteds;\n }\n else {\n _this.value = selecteds;\n }\n _this.onModelChange(selecteds);\n _this.onModelTouched();\n _this.dateTimeChange.emit({ source: _this, value: selecteds, input: _this.elmRef.nativeElement });\n _this.dateTimeInput.emit({ source: _this, value: selecteds, input: _this.elmRef.nativeElement });\n });\n };\n OwlDateTimeInputDirective.prototype.ngOnDestroy = function () {\n this.dtPickerSub.unsubscribe();\n this.localeSub.unsubscribe();\n this.valueChange.complete();\n this.disabledChange.complete();\n };\n OwlDateTimeInputDirective.prototype.writeValue = function (value) {\n if (this.isInSingleMode) {\n this.value = value;\n }\n else {\n this.values = value;\n }\n };\n OwlDateTimeInputDirective.prototype.registerOnChange = function (fn) {\n this.onModelChange = fn;\n };\n OwlDateTimeInputDirective.prototype.registerOnTouched = function (fn) {\n this.onModelTouched = fn;\n };\n OwlDateTimeInputDirective.prototype.setDisabledState = function (isDisabled) {\n this.disabled = isDisabled;\n };\n OwlDateTimeInputDirective.prototype.validate = function (c) {\n return this.validator ? this.validator(c) : null;\n };\n OwlDateTimeInputDirective.prototype.registerOnValidatorChange = function (fn) {\n this.validatorOnChange = fn;\n };\n OwlDateTimeInputDirective.prototype.handleKeydownOnHost = function (event) {\n if (event.altKey && event.keyCode === DOWN_ARROW) {\n this.dtPicker.open();\n event.preventDefault();\n }\n };\n OwlDateTimeInputDirective.prototype.handleBlurOnHost = function (event) {\n this.onModelTouched();\n };\n OwlDateTimeInputDirective.prototype.handleInputOnHost = function (event) {\n var value = event.target.value;\n if (this._selectMode === 'single') {\n this.changeInputInSingleMode(value);\n }\n else if (this._selectMode === 'range') {\n this.changeInputInRangeMode(value);\n }\n else {\n this.changeInputInRangeFromToMode(value);\n }\n };\n OwlDateTimeInputDirective.prototype.handleChangeOnHost = function (event) {\n var v;\n if (this.isInSingleMode) {\n v = this.value;\n }\n else if (this.isInRangeMode) {\n v = this.values;\n }\n this.dateTimeChange.emit({\n source: this,\n value: v,\n input: this.elmRef.nativeElement\n });\n };\n OwlDateTimeInputDirective.prototype.formatNativeInputValue = function () {\n if (this.isInSingleMode) {\n this.renderer.setProperty(this.elmRef.nativeElement, 'value', this._value ? this.dateTimeAdapter.format(this._value, this.dtPicker.formatString) : '');\n }\n else if (this.isInRangeMode) {\n if (this._values && this.values.length > 0) {\n var from = this._values[0];\n var to = this._values[1];\n var fromFormatted = from ? this.dateTimeAdapter.format(from, this.dtPicker.formatString) : '';\n var toFormatted = to ? this.dateTimeAdapter.format(to, this.dtPicker.formatString) : '';\n if (!fromFormatted && !toFormatted) {\n this.renderer.setProperty(this.elmRef.nativeElement, 'value', null);\n }\n else {\n if (this._selectMode === 'range') {\n this.renderer.setProperty(this.elmRef.nativeElement, 'value', fromFormatted + ' ' + this.rangeSeparator + ' ' + toFormatted);\n }\n else if (this._selectMode === 'rangeFrom') {\n this.renderer.setProperty(this.elmRef.nativeElement, 'value', fromFormatted);\n }\n else if (this._selectMode === 'rangeTo') {\n this.renderer.setProperty(this.elmRef.nativeElement, 'value', toFormatted);\n }\n }\n }\n else {\n this.renderer.setProperty(this.elmRef.nativeElement, 'value', '');\n }\n }\n return;\n };\n OwlDateTimeInputDirective.prototype.registerDateTimePicker = function (picker) {\n if (picker) {\n this.dtPicker = picker;\n this.dtPicker.registerInput(this);\n }\n };\n OwlDateTimeInputDirective.prototype.getValidDate = function (obj) {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj)) ? obj : null;\n };\n OwlDateTimeInputDirective.prototype.convertTimeStringToDateTimeString = function (timeString, dateTime) {\n if (timeString) {\n var v = dateTime || this.dateTimeAdapter.now();\n var dateString = this.dateTimeAdapter.format(v, this.dateTimeFormats.datePickerInput);\n return dateString + ' ' + timeString;\n }\n else {\n return null;\n }\n };\n OwlDateTimeInputDirective.prototype.changeInputInSingleMode = function (inputValue) {\n var value = inputValue;\n if (this.dtPicker.pickerType === 'timer') {\n value = this.convertTimeStringToDateTimeString(value, this.value);\n }\n var result = this.dateTimeAdapter.parse(value, this.dateTimeFormats.parseInput);\n this.lastValueValid = !result || this.dateTimeAdapter.isValid(result);\n result = this.getValidDate(result);\n if (!this.isSameValue(result, this._value) ||\n result === null) {\n this._value = result;\n this.valueChange.emit(result);\n this.onModelChange(result);\n this.dateTimeInput.emit({ source: this, value: result, input: this.elmRef.nativeElement });\n }\n };\n OwlDateTimeInputDirective.prototype.changeInputInRangeFromToMode = function (inputValue) {\n var originalValue = this._selectMode === 'rangeFrom' ? this._values[0] : this._values[1];\n if (this.dtPicker.pickerType === 'timer') {\n inputValue = this.convertTimeStringToDateTimeString(inputValue, originalValue);\n }\n var result = this.dateTimeAdapter.parse(inputValue, this.dateTimeFormats.parseInput);\n this.lastValueValid = !result || this.dateTimeAdapter.isValid(result);\n result = this.getValidDate(result);\n if ((this._selectMode === 'rangeFrom' && this.isSameValue(result, this._values[0]) && result) ||\n (this._selectMode === 'rangeTo' && this.isSameValue(result, this._values[1])) && result) {\n return;\n }\n this._values = this._selectMode === 'rangeFrom' ? [result, this._values[1]] : [this._values[0], result];\n this.valueChange.emit(this._values);\n this.onModelChange(this._values);\n this.dateTimeInput.emit({ source: this, value: this._values, input: this.elmRef.nativeElement });\n };\n OwlDateTimeInputDirective.prototype.changeInputInRangeMode = function (inputValue) {\n var selecteds = inputValue.split(this.rangeSeparator);\n var fromString = selecteds[0];\n var toString = selecteds[1];\n if (this.dtPicker.pickerType === 'timer') {\n fromString = this.convertTimeStringToDateTimeString(fromString, this.values[0]);\n toString = this.convertTimeStringToDateTimeString(toString, this.values[1]);\n }\n var from = this.dateTimeAdapter.parse(fromString, this.dateTimeFormats.parseInput);\n var to = this.dateTimeAdapter.parse(toString, this.dateTimeFormats.parseInput);\n this.lastValueValid = (!from || this.dateTimeAdapter.isValid(from)) && (!to || this.dateTimeAdapter.isValid(to));\n from = this.getValidDate(from);\n to = this.getValidDate(to);\n if (!this.isSameValue(from, this._values[0]) ||\n !this.isSameValue(to, this._values[1]) ||\n (from === null && to === null)) {\n this._values = [from, to];\n this.valueChange.emit(this._values);\n this.onModelChange(this._values);\n this.dateTimeInput.emit({ source: this, value: this._values, input: this.elmRef.nativeElement });\n }\n };\n OwlDateTimeInputDirective.prototype.isSameValue = function (first, second) {\n if (first && second) {\n return this.dateTimeAdapter.compare(first, second) === 0;\n }\n return first == second;\n };\n __decorate([\n Input(),\n __metadata(\"design:type\", OwlDateTimeComponent),\n __metadata(\"design:paramtypes\", [OwlDateTimeComponent])\n ], OwlDateTimeInputDirective.prototype, \"owlDateTime\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n ], OwlDateTimeInputDirective.prototype, \"owlDateTimeFilter\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n ], OwlDateTimeInputDirective.prototype, \"_disabled\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInputDirective.prototype, \"min\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInputDirective.prototype, \"max\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n ], OwlDateTimeInputDirective.prototype, \"selectMode\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeInputDirective.prototype, \"rangeSeparator\", void 0);\n __decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n ], OwlDateTimeInputDirective.prototype, \"value\", null);\n __decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n ], OwlDateTimeInputDirective.prototype, \"values\", null);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeInputDirective.prototype, \"dateTimeChange\", void 0);\n __decorate([\n Output(),\n __metadata(\"design:type\", Object)\n ], OwlDateTimeInputDirective.prototype, \"dateTimeInput\", void 0);\n __decorate([\n HostBinding('attr.aria-haspopup'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeInputDirective.prototype, \"owlDateTimeInputAriaHaspopup\", null);\n __decorate([\n HostBinding('attr.aria-owns'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeInputDirective.prototype, \"owlDateTimeInputAriaOwns\", null);\n __decorate([\n HostBinding('attr.min'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeInputDirective.prototype, \"minIso8601\", null);\n __decorate([\n HostBinding('attr.max'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeInputDirective.prototype, \"maxIso8601\", null);\n __decorate([\n HostBinding('disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n ], OwlDateTimeInputDirective.prototype, \"owlDateTimeInputDisabled\", null);\n __decorate([\n HostListener('keydown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [KeyboardEvent]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDateTimeInputDirective.prototype, \"handleKeydownOnHost\", null);\n __decorate([\n HostListener('blur', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Event]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDateTimeInputDirective.prototype, \"handleBlurOnHost\", null);\n __decorate([\n HostListener('input', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDateTimeInputDirective.prototype, \"handleInputOnHost\", null);\n __decorate([\n HostListener('change', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n ], OwlDateTimeInputDirective.prototype, \"handleChangeOnHost\", null);\n OwlDateTimeInputDirective = __decorate([ __param(2, Optional()),\n __param(3, Optional()), __param(3, Inject(OWL_DATE_TIME_FORMATS)),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n DateTimeAdapter, Object])\n ], OwlDateTimeInputDirective);\nOwlDateTimeInputDirective.ɵfac = function OwlDateTimeInputDirective_Factory(t) { return new (t || OwlDateTimeInputDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DateTimeAdapter, 8), ɵngcc0.ɵɵdirectiveInject(OWL_DATE_TIME_FORMATS, 8)); };\nOwlDateTimeInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: OwlDateTimeInputDirective, selectors: [[\"input\", \"owlDateTime\", \"\"]], hostVars: 5, hostBindings: function OwlDateTimeInputDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function OwlDateTimeInputDirective_keydown_HostBindingHandler($event) { return ctx.handleKeydownOnHost($event); })(\"blur\", function OwlDateTimeInputDirective_blur_HostBindingHandler($event) { return ctx.handleBlurOnHost($event); })(\"input\", function OwlDateTimeInputDirective_input_HostBindingHandler($event) { return ctx.handleInputOnHost($event); })(\"change\", function OwlDateTimeInputDirective_change_HostBindingHandler($event) { return ctx.handleChangeOnHost($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"disabled\", ctx.owlDateTimeInputDisabled);\n ɵngcc0.ɵɵattribute(\"aria-haspopup\", ctx.owlDateTimeInputAriaHaspopup)(\"aria-owns\", ctx.owlDateTimeInputAriaOwns)(\"min\", ctx.minIso8601)(\"max\", ctx.maxIso8601);\n } }, inputs: { rangeSeparator: \"rangeSeparator\", owlDateTime: \"owlDateTime\", owlDateTimeFilter: \"owlDateTimeFilter\", min: \"min\", max: \"max\", selectMode: \"selectMode\", value: \"value\", values: \"values\", _disabled: \"_disabled\" }, outputs: { dateTimeChange: \"dateTimeChange\", dateTimeInput: \"dateTimeInput\" }, exportAs: [\"owlDateTimeInput\"], features: [ɵngcc0.ɵɵProvidersFeature([\n OWL_DATETIME_VALUE_ACCESSOR,\n OWL_DATETIME_VALIDATORS,\n ])] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlDateTimeInputDirective, [{\n type: Directive,\n args: [{\n selector: 'input[owlDateTime]',\n exportAs: 'owlDateTimeInput',\n providers: [\n OWL_DATETIME_VALUE_ACCESSOR,\n OWL_DATETIME_VALIDATORS,\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.DateTimeAdapter, decorators: [{\n type: Optional\n }] }, { type: Object, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [OWL_DATE_TIME_FORMATS]\n }] }]; }, { rangeSeparator: [{\n type: Input\n }], dateTimeChange: [{\n type: Output\n }], dateTimeInput: [{\n type: Output\n }], owlDateTime: [{\n type: Input\n }], owlDateTimeFilter: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], selectMode: [{\n type: Input\n }], value: [{\n type: Input\n }], values: [{\n type: Input\n }], owlDateTimeInputAriaHaspopup: [{\n type: HostBinding,\n args: ['attr.aria-haspopup']\n }], owlDateTimeInputAriaOwns: [{\n type: HostBinding,\n args: ['attr.aria-owns']\n }], minIso8601: [{\n type: HostBinding,\n args: ['attr.min']\n }], maxIso8601: [{\n type: HostBinding,\n args: ['attr.max']\n }], owlDateTimeInputDisabled: [{\n type: HostBinding,\n args: ['disabled']\n }], handleKeydownOnHost: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], handleBlurOnHost: [{\n type: HostListener,\n args: ['blur', ['$event']]\n }], handleInputOnHost: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], handleChangeOnHost: [{\n type: HostListener,\n args: ['change', ['$event']]\n }], _disabled: [{\n type: Input\n }] }); })();\n return OwlDateTimeInputDirective;\n}());\nexport { OwlDateTimeInputDirective };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VzIjpbImRhdGUtdGltZS1waWNrZXItaW5wdXQuZGlyZWN0aXZlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBU087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBa0M7QUFDbEM7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IE93bERhdGVUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX0RBVEVfVElNRV9GT1JNQVRTIH0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuZXhwb3J0IHZhciBPV0xfREFURVRJTUVfVkFMVUVfQUNDRVNTT1IgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoZnVuY3Rpb24gKCkgeyByZXR1cm4gT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZTsgfSksXG4gICAgbXVsdGk6IHRydWVcbn07XG5leHBvcnQgdmFyIE9XTF9EQVRFVElNRV9WQUxJREFUT1JTID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoZnVuY3Rpb24gKCkgeyByZXR1cm4gT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZTsgfSksXG4gICAgbXVsdGk6IHRydWVcbn07XG52YXIgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZShlbG1SZWYsIHJlbmRlcmVyLCBkYXRlVGltZUFkYXB0ZXIsIGRhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmVsbVJlZiA9IGVsbVJlZjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlciA9IGRhdGVUaW1lQWRhcHRlcjtcbiAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdHMgPSBkYXRlVGltZUZvcm1hdHM7XG4gICAgICAgIHRoaXMuX3NlbGVjdE1vZGUgPSAnc2luZ2xlJztcbiAgICAgICAgdGhpcy5yYW5nZVNlcGFyYXRvciA9ICd+JztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kdFBpY2tlclN1YiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIHRoaXMubGFzdFZhbHVlVmFsaWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmFsaWRhdG9yT25DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGFyc2VWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMubGFzdFZhbHVlVmFsaWQgP1xuICAgICAgICAgICAgICAgIG51bGwgOiB7ICdvd2xEYXRlVGltZVBhcnNlJzogeyAndGV4dCc6IF90aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50LnZhbHVlIH0gfTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzSW5TaW5nbGVNb2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xWYWx1ZSA9IF90aGlzLmdldFZhbGlkRGF0ZShfdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoY29udHJvbC52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoIV90aGlzLm1pbiB8fCAhY29udHJvbFZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKF90aGlzLm1pbiwgY29udHJvbFZhbHVlKSA8PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGwgOiB7ICdvd2xEYXRlVGltZU1pbic6IHsgJ21pbic6IF90aGlzLm1pbiwgJ2FjdHVhbCc6IGNvbnRyb2xWYWx1ZSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5pc0luUmFuZ2VNb2RlICYmIGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udHJvbFZhbHVlRnJvbSA9IF90aGlzLmdldFZhbGlkRGF0ZShfdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoY29udHJvbC52YWx1ZVswXSkpO1xuICAgICAgICAgICAgICAgIHZhciBjb250cm9sVmFsdWVUbyA9IF90aGlzLmdldFZhbGlkRGF0ZShfdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoY29udHJvbC52YWx1ZVsxXSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoIV90aGlzLm1pbiB8fCAhY29udHJvbFZhbHVlRnJvbSB8fCAhY29udHJvbFZhbHVlVG8gfHxcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoX3RoaXMubWluLCBjb250cm9sVmFsdWVGcm9tKSA8PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGwgOiB7ICdvd2xEYXRlVGltZU1pbic6IHsgJ21pbic6IF90aGlzLm1pbiwgJ2FjdHVhbCc6IFtjb250cm9sVmFsdWVGcm9tLCBjb250cm9sVmFsdWVUb10gfSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1heFZhbGlkYXRvciA9IGZ1bmN0aW9uIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNJblNpbmdsZU1vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udHJvbFZhbHVlID0gX3RoaXMuZ2V0VmFsaWREYXRlKF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShjb250cm9sLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICghX3RoaXMubWF4IHx8ICFjb250cm9sVmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoX3RoaXMubWF4LCBjb250cm9sVmFsdWUpID49IDApID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6IHsgJ293bERhdGVUaW1lTWF4JzogeyAnbWF4JzogX3RoaXMubWF4LCAnYWN0dWFsJzogY29udHJvbFZhbHVlIH0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLmlzSW5SYW5nZU1vZGUgJiYgY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250cm9sVmFsdWVGcm9tID0gX3RoaXMuZ2V0VmFsaWREYXRlKF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShjb250cm9sLnZhbHVlWzBdKSk7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xWYWx1ZVRvID0gX3RoaXMuZ2V0VmFsaWREYXRlKF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShjb250cm9sLnZhbHVlWzFdKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICghX3RoaXMubWF4IHx8ICFjb250cm9sVmFsdWVGcm9tIHx8ICFjb250cm9sVmFsdWVUbyB8fFxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShfdGhpcy5tYXgsIGNvbnRyb2xWYWx1ZVRvKSA+PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGwgOiB7ICdvd2xEYXRlVGltZU1heCc6IHsgJ21heCc6IF90aGlzLm1heCwgJ2FjdHVhbCc6IFtjb250cm9sVmFsdWVGcm9tLCBjb250cm9sVmFsdWVUb10gfSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpbHRlclZhbGlkYXRvciA9IGZ1bmN0aW9uIChjb250cm9sKSB7XG4gICAgICAgICAgICB2YXIgY29udHJvbFZhbHVlID0gX3RoaXMuZ2V0VmFsaWREYXRlKF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShjb250cm9sLnZhbHVlKSk7XG4gICAgICAgICAgICByZXR1cm4gIV90aGlzLl9kYXRlVGltZUZpbHRlciB8fCAhY29udHJvbFZhbHVlIHx8IF90aGlzLl9kYXRlVGltZUZpbHRlcihjb250cm9sVmFsdWUpID9cbiAgICAgICAgICAgICAgICBudWxsIDogeyAnb3dsRGF0ZVRpbWVGaWx0ZXInOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmFuZ2VWYWxpZGF0b3IgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzSW5TaW5nbGVNb2RlIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY29udHJvbFZhbHVlRnJvbSA9IF90aGlzLmdldFZhbGlkRGF0ZShfdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUoY29udHJvbC52YWx1ZVswXSkpO1xuICAgICAgICAgICAgdmFyIGNvbnRyb2xWYWx1ZVRvID0gX3RoaXMuZ2V0VmFsaWREYXRlKF90aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZShjb250cm9sLnZhbHVlWzFdKSk7XG4gICAgICAgICAgICByZXR1cm4gIWNvbnRyb2xWYWx1ZUZyb20gfHwgIWNvbnRyb2xWYWx1ZVRvIHx8IF90aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGNvbnRyb2xWYWx1ZUZyb20sIGNvbnRyb2xWYWx1ZVRvKSA8PSAwID9cbiAgICAgICAgICAgICAgICBudWxsIDogeyAnb3dsRGF0ZVRpbWVSYW5nZSc6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52YWxpZGF0b3IgPSBWYWxpZGF0b3JzLmNvbXBvc2UoW3RoaXMucGFyc2VWYWxpZGF0b3IsIHRoaXMubWluVmFsaWRhdG9yLCB0aGlzLm1heFZhbGlkYXRvciwgdGhpcy5maWx0ZXJWYWxpZGF0b3IsIHRoaXMucmFuZ2VWYWxpZGF0b3JdKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGVUaW1lQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJPd2xEYXRlVGltZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yIERhdGVUaW1lUGlja2VyLiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgXCIgK1xuICAgICAgICAgICAgICAgIFwibW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlLCBPd2xNb21lbnREYXRlVGltZU1vZHVsZSwgb3IgcHJvdmlkZSBhIFwiICtcbiAgICAgICAgICAgICAgICBcImN1c3RvbSBpbXBsZW1lbnRhdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRhdGVUaW1lRm9ybWF0cykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJPd2xEYXRlVGltZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yIE9XTF9EQVRFX1RJTUVfRk9STUFUUy4gWW91IG11c3QgaW1wb3J0IG9uZSBvZiB0aGUgZm9sbG93aW5nIFwiICtcbiAgICAgICAgICAgICAgICBcIm1vZHVsZXMgYXQgeW91ciBhcHBsaWNhdGlvbiByb290OiBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSwgT3dsTW9tZW50RGF0ZVRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBcIiArXG4gICAgICAgICAgICAgICAgXCJjdXN0b20gaW1wbGVtZW50YXRpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9jYWxlU3ViID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMudmFsdWUgPSBfdGhpcy52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJvd2xEYXRlVGltZVwiLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGF0ZVRpbWVQaWNrZXIodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwib3dsRGF0ZVRpbWVGaWx0ZXJcIiwge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRmlsdGVyID0gZmlsdGVyO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JPbkNoYW5nZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwiZGF0ZVRpbWVGaWx0ZXJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUZpbHRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxtUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICYmIGVsZW1lbnQuYmx1cikge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwibWluXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbWluID0gdGhpcy5nZXRWYWxpZERhdGUodGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdG9yT25DaGFuZ2UoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLCBcIm1heFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21heCA9IHRoaXMuZ2V0VmFsaWREYXRlKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRvck9uQ2hhbmdlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJzZWxlY3RNb2RlXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TW9kZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobW9kZSkge1xuICAgICAgICAgICAgaWYgKG1vZGUgIT09ICdzaW5nbGUnICYmIG1vZGUgIT09ICdyYW5nZScgJiZcbiAgICAgICAgICAgICAgICBtb2RlICE9PSAncmFuZ2VGcm9tJyAmJiBtb2RlICE9PSAncmFuZ2VUbycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignT3dsRGF0ZVRpbWUgRXJyb3I6IGludmFsaWQgc2VsZWN0TW9kZSB2YWx1ZSEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdE1vZGUgPSBtb2RlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5sYXN0VmFsdWVWYWxpZCA9ICF2YWx1ZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICAgICAgdmFyIG9sZERhdGUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNFcXVhbChvbGREYXRlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwidmFsdWVzXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICB2ID0gX3RoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuZ2V0VmFsaWREYXRlKHYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFZhbHVlVmFsaWQgPSAoIXRoaXMuX3ZhbHVlc1swXSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuX3ZhbHVlc1swXSkpICYmICghdGhpcy5fdmFsdWVzWzFdIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5fdmFsdWVzWzFdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RWYWx1ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9ybWF0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJlbGVtZW50UmVmXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbG1SZWY7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJpc0luU2luZ2xlTW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1vZGUgPT09ICdzaW5nbGUnO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwiaXNJblJhbmdlTW9kZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1vZGUgPT09ICdyYW5nZScgfHwgdGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbSdcbiAgICAgICAgICAgICAgICB8fCB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VUbyc7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJvd2xEYXRlVGltZUlucHV0QXJpYUhhc3BvcHVwXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLCBcIm93bERhdGVUaW1lSW5wdXRBcmlhT3duc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmR0UGlja2VyLm9wZW5lZCAmJiB0aGlzLmR0UGlja2VyLmlkKSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwibWluSXNvODYwMVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWluID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIudG9Jc284NjAxKHRoaXMubWluKSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJtYXhJc284NjAxXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXggPyB0aGlzLmRhdGVUaW1lQWRhcHRlci50b0lzbzg2MDEodGhpcy5tYXgpIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLCBcIm93bERhdGVUaW1lSW5wdXREaXNhYmxlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLm5nT25Jbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuZHRQaWNrZXIpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiT3dsRGF0ZVRpbWVQaWNrZXI6IHRoZSBwaWNrZXIgaW5wdXQgZG9lc24ndCBoYXZlIGFueSBhc3NvY2lhdGVkIG93bC1kYXRlLXRpbWUgY29tcG9uZW50XCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZHRQaWNrZXJTdWIgPSB0aGlzLmR0UGlja2VyLmNvbmZpcm1TZWxlY3RlZENoYW5nZS5zdWJzY3JpYmUoZnVuY3Rpb24gKHNlbGVjdGVkcykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRzKSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlcyA9IHNlbGVjdGVkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF90aGlzLnZhbHVlID0gc2VsZWN0ZWRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMub25Nb2RlbENoYW5nZShzZWxlY3RlZHMpO1xuICAgICAgICAgICAgX3RoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgICAgIF90aGlzLmRhdGVUaW1lQ2hhbmdlLmVtaXQoeyBzb3VyY2U6IF90aGlzLCB2YWx1ZTogc2VsZWN0ZWRzLCBpbnB1dDogX3RoaXMuZWxtUmVmLm5hdGl2ZUVsZW1lbnQgfSk7XG4gICAgICAgICAgICBfdGhpcy5kYXRlVGltZUlucHV0LmVtaXQoeyBzb3VyY2U6IF90aGlzLCB2YWx1ZTogc2VsZWN0ZWRzLCBpbnB1dDogX3RoaXMuZWxtUmVmLm5hdGl2ZUVsZW1lbnQgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUubmdPbkRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZHRQaWNrZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS53cml0ZVZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5TaW5nbGVNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5yZWdpc3Rlck9uQ2hhbmdlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUuc2V0RGlzYWJsZWRTdGF0ZSA9IGZ1bmN0aW9uIChpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IgPyB0aGlzLnZhbGlkYXRvcihjKSA6IG51bGw7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdG9yT25DaGFuZ2UgPSBmbjtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLmhhbmRsZUtleWRvd25Pbkhvc3QgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXlDb2RlID09PSBET1dOX0FSUk9XKSB7XG4gICAgICAgICAgICB0aGlzLmR0UGlja2VyLm9wZW4oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLmhhbmRsZUJsdXJPbkhvc3QgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUuaGFuZGxlSW5wdXRPbkhvc3QgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSW5wdXRJblNpbmdsZU1vZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NlbGVjdE1vZGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSW5wdXRJblJhbmdlTW9kZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUlucHV0SW5SYW5nZUZyb21Ub01vZGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5oYW5kbGVDaGFuZ2VPbkhvc3QgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIHY7XG4gICAgICAgIGlmICh0aGlzLmlzSW5TaW5nbGVNb2RlKSB7XG4gICAgICAgICAgICB2ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgICAgICAgIHYgPSB0aGlzLnZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVUaW1lQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBpbnB1dDogdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLmZvcm1hdE5hdGl2ZUlucHV0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5TaW5nbGVNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxtUmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHRoaXMuX3ZhbHVlID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHRoaXMuX3ZhbHVlLCB0aGlzLmR0UGlja2VyLmZvcm1hdFN0cmluZykgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWVzICYmIHRoaXMudmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbSA9IHRoaXMuX3ZhbHVlc1swXTtcbiAgICAgICAgICAgICAgICB2YXIgdG8gPSB0aGlzLl92YWx1ZXNbMV07XG4gICAgICAgICAgICAgICAgdmFyIGZyb21Gb3JtYXR0ZWQgPSBmcm9tID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGZyb20sIHRoaXMuZHRQaWNrZXIuZm9ybWF0U3RyaW5nKSA6ICcnO1xuICAgICAgICAgICAgICAgIHZhciB0b0Zvcm1hdHRlZCA9IHRvID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHRvLCB0aGlzLmR0UGlja2VyLmZvcm1hdFN0cmluZykgOiAnJztcbiAgICAgICAgICAgICAgICBpZiAoIWZyb21Gb3JtYXR0ZWQgJiYgIXRvRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0TW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmcm9tRm9ybWF0dGVkICsgJyAnICsgdGhpcy5yYW5nZVNlcGFyYXRvciArICcgJyArIHRvRm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmcm9tRm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VUbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdG9Gb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUucmVnaXN0ZXJEYXRlVGltZVBpY2tlciA9IGZ1bmN0aW9uIChwaWNrZXIpIHtcbiAgICAgICAgaWYgKHBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5kdFBpY2tlciA9IHBpY2tlcjtcbiAgICAgICAgICAgIHRoaXMuZHRQaWNrZXIucmVnaXN0ZXJJbnB1dCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUuZ2V0VmFsaWREYXRlID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzRGF0ZUluc3RhbmNlKG9iaikgJiYgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopKSA/IG9iaiA6IG51bGw7XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5jb252ZXJ0VGltZVN0cmluZ1RvRGF0ZVRpbWVTdHJpbmcgPSBmdW5jdGlvbiAodGltZVN0cmluZywgZGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB2ID0gZGF0ZVRpbWUgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KCk7XG4gICAgICAgICAgICB2YXIgZGF0ZVN0cmluZyA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdCh2LCB0aGlzLmRhdGVUaW1lRm9ybWF0cy5kYXRlUGlja2VySW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVTdHJpbmcgKyAnICcgKyB0aW1lU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLmNoYW5nZUlucHV0SW5TaW5nbGVNb2RlID0gZnVuY3Rpb24gKGlucHV0VmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuZHRQaWNrZXIucGlja2VyVHlwZSA9PT0gJ3RpbWVyJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnZlcnRUaW1lU3RyaW5nVG9EYXRlVGltZVN0cmluZyh2YWx1ZSwgdGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKHZhbHVlLCB0aGlzLmRhdGVUaW1lRm9ybWF0cy5wYXJzZUlucHV0KTtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWVWYWxpZCA9ICFyZXN1bHQgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChyZXN1bHQpO1xuICAgICAgICByZXN1bHQgPSB0aGlzLmdldFZhbGlkRGF0ZShyZXN1bHQpO1xuICAgICAgICBpZiAoIXRoaXMuaXNTYW1lVmFsdWUocmVzdWx0LCB0aGlzLl92YWx1ZSkgfHxcbiAgICAgICAgICAgIHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShyZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0LmVtaXQoeyBzb3VyY2U6IHRoaXMsIHZhbHVlOiByZXN1bHQsIGlucHV0OiB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5jaGFuZ2VJbnB1dEluUmFuZ2VGcm9tVG9Nb2RlID0gZnVuY3Rpb24gKGlucHV0VmFsdWUpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VGcm9tJyA/IHRoaXMuX3ZhbHVlc1swXSA6IHRoaXMuX3ZhbHVlc1sxXTtcbiAgICAgICAgaWYgKHRoaXMuZHRQaWNrZXIucGlja2VyVHlwZSA9PT0gJ3RpbWVyJykge1xuICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuY29udmVydFRpbWVTdHJpbmdUb0RhdGVUaW1lU3RyaW5nKGlucHV0VmFsdWUsIG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5wYXJzZShpbnB1dFZhbHVlLCB0aGlzLmRhdGVUaW1lRm9ybWF0cy5wYXJzZUlucHV0KTtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWVWYWxpZCA9ICFyZXN1bHQgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChyZXN1bHQpO1xuICAgICAgICByZXN1bHQgPSB0aGlzLmdldFZhbGlkRGF0ZShyZXN1bHQpO1xuICAgICAgICBpZiAoKHRoaXMuX3NlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nICYmIHRoaXMuaXNTYW1lVmFsdWUocmVzdWx0LCB0aGlzLl92YWx1ZXNbMF0pICYmIHJlc3VsdCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgJiYgdGhpcy5pc1NhbWVWYWx1ZShyZXN1bHQsIHRoaXMuX3ZhbHVlc1sxXSkpICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHRoaXMuX3NlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nID8gW3Jlc3VsdCwgdGhpcy5fdmFsdWVzWzFdXSA6IFt0aGlzLl92YWx1ZXNbMF0sIHJlc3VsdF07XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZXMpO1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0LmVtaXQoeyBzb3VyY2U6IHRoaXMsIHZhbHVlOiB0aGlzLl92YWx1ZXMsIGlucHV0OiB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICAgIH07XG4gICAgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUuY2hhbmdlSW5wdXRJblJhbmdlTW9kZSA9IGZ1bmN0aW9uIChpbnB1dFZhbHVlKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZHMgPSBpbnB1dFZhbHVlLnNwbGl0KHRoaXMucmFuZ2VTZXBhcmF0b3IpO1xuICAgICAgICB2YXIgZnJvbVN0cmluZyA9IHNlbGVjdGVkc1swXTtcbiAgICAgICAgdmFyIHRvU3RyaW5nID0gc2VsZWN0ZWRzWzFdO1xuICAgICAgICBpZiAodGhpcy5kdFBpY2tlci5waWNrZXJUeXBlID09PSAndGltZXInKSB7XG4gICAgICAgICAgICBmcm9tU3RyaW5nID0gdGhpcy5jb252ZXJ0VGltZVN0cmluZ1RvRGF0ZVRpbWVTdHJpbmcoZnJvbVN0cmluZywgdGhpcy52YWx1ZXNbMF0pO1xuICAgICAgICAgICAgdG9TdHJpbmcgPSB0aGlzLmNvbnZlcnRUaW1lU3RyaW5nVG9EYXRlVGltZVN0cmluZyh0b1N0cmluZywgdGhpcy52YWx1ZXNbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmcm9tID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIucGFyc2UoZnJvbVN0cmluZywgdGhpcy5kYXRlVGltZUZvcm1hdHMucGFyc2VJbnB1dCk7XG4gICAgICAgIHZhciB0byA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKHRvU3RyaW5nLCB0aGlzLmRhdGVUaW1lRm9ybWF0cy5wYXJzZUlucHV0KTtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWVWYWxpZCA9ICghZnJvbSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGZyb20pKSAmJiAoIXRvIHx8IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodG8pKTtcbiAgICAgICAgZnJvbSA9IHRoaXMuZ2V0VmFsaWREYXRlKGZyb20pO1xuICAgICAgICB0byA9IHRoaXMuZ2V0VmFsaWREYXRlKHRvKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2FtZVZhbHVlKGZyb20sIHRoaXMuX3ZhbHVlc1swXSkgfHxcbiAgICAgICAgICAgICF0aGlzLmlzU2FtZVZhbHVlKHRvLCB0aGlzLl92YWx1ZXNbMV0pIHx8XG4gICAgICAgICAgICAoZnJvbSA9PT0gbnVsbCAmJiB0byA9PT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IFtmcm9tLCB0b107XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLl92YWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0LmVtaXQoeyBzb3VyY2U6IHRoaXMsIHZhbHVlOiB0aGlzLl92YWx1ZXMsIGlucHV0OiB0aGlzLmVsbVJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZS5pc1NhbWVWYWx1ZSA9IGZ1bmN0aW9uIChmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIGlmIChmaXJzdCAmJiBzZWNvbmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGZpcnN0LCBzZWNvbmQpID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7XG4gICAgfTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE93bERhdGVUaW1lQ29tcG9uZW50KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPd2xEYXRlVGltZUNvbXBvbmVudF0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwib3dsRGF0ZVRpbWVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRnVuY3Rpb25dKVxuICAgIF0sIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLCBcIm93bERhdGVUaW1lRmlsdGVyXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbilcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJfZGlzYWJsZWRcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJtaW5cIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwibWF4XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBJbnB1dCgpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtTdHJpbmddKVxuICAgIF0sIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUucHJvdG90eXBlLCBcInNlbGVjdE1vZGVcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIElucHV0KCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwicmFuZ2VTZXBhcmF0b3JcIiwgdm9pZCAwKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdCksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSlcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSW5wdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtBcnJheV0pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwidmFsdWVzXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJkYXRlVGltZUNoYW5nZVwiLCB2b2lkIDApO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBPdXRwdXQoKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJkYXRlVGltZUlucHV0XCIsIHZvaWQgMCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaGFzcG9wdXAnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwib3dsRGF0ZVRpbWVJbnB1dEFyaWFIYXNwb3B1cFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwib3dsRGF0ZVRpbWVJbnB1dEFyaWFPd25zXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnYXR0ci5taW4nKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJtaW5Jc284NjAxXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnYXR0ci5tYXgnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZyksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJtYXhJc284NjAxXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0QmluZGluZygnZGlzYWJsZWQnKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgICAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwib3dsRGF0ZVRpbWVJbnB1dERpc2FibGVkXCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtLZXlib2FyZEV2ZW50XSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwiaGFuZGxlS2V5ZG93bk9uSG9zdFwiLCBudWxsKTtcbiAgICBfX2RlY29yYXRlKFtcbiAgICAgICAgSG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRXZlbnRdKSxcbiAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIHZvaWQgMClcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlLnByb3RvdHlwZSwgXCJoYW5kbGVCbHVyT25Ib3N0XCIsIG51bGwpO1xuICAgIF9fZGVjb3JhdGUoW1xuICAgICAgICBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwiaGFuZGxlSW5wdXRPbkhvc3RcIiwgbnVsbCk7XG4gICAgX19kZWNvcmF0ZShbXG4gICAgICAgIEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0XSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCB2b2lkIDApXG4gICAgXSwgT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZS5wcm90b3R5cGUsIFwiaGFuZGxlQ2hhbmdlT25Ib3N0XCIsIG51bGwpO1xuICAgIE93bERhdGVUaW1lSW5wdXREaXJlY3RpdmUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgRGlyZWN0aXZlKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXRbb3dsRGF0ZVRpbWVdJyxcbiAgICAgICAgICAgIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVJbnB1dCcsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICBPV0xfREFURVRJTUVfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICAgICAgT1dMX0RBVEVUSU1FX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICAgX19wYXJhbSgyLCBPcHRpb25hbCgpKSxcbiAgICAgICAgX19wYXJhbSgzLCBPcHRpb25hbCgpKSwgX19wYXJhbSgzLCBJbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTKSksXG4gICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRWxlbWVudFJlZixcbiAgICAgICAgICAgIFJlbmRlcmVyMixcbiAgICAgICAgICAgIERhdGVUaW1lQWRhcHRlciwgT2JqZWN0XSlcbiAgICBdLCBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlKTtcbiAgICByZXR1cm4gT3dsRGF0ZVRpbWVJbnB1dERpcmVjdGl2ZTtcbn0oKSk7XG5leHBvcnQgeyBPd2xEYXRlVGltZUlucHV0RGlyZWN0aXZlIH07XG4iXX0=","import * as i1 from '@angular/cdk/scrolling';\nimport { ScrollDispatcher, ViewportRuler, ScrollingModule } from '@angular/cdk/scrolling';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/platform';\nimport * as ɵngcc3 from '@angular/cdk/bidi';\nimport * as ɵngcc4 from '@angular/common';\nexport { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';\nimport * as i1$1 from '@angular/common';\nimport { DOCUMENT, Location } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Injectable, NgZone, Inject, Optional, ElementRef, ApplicationRef, ComponentFactoryResolver, Injector, InjectionToken, Directive, EventEmitter, TemplateRef, ViewContainerRef, Input, Output, NgModule } from '@angular/core';\nimport { coerceCssPixelValue, coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport * as i2 from '@angular/cdk/platform';\nimport { supportsScrollBehavior, _getEventTarget, Platform } from '@angular/cdk/platform';\nimport { Directionality, BidiModule } from '@angular/cdk/bidi';\nimport { DomPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { Subject, Subscription, merge } from 'rxjs';\nimport { take, takeUntil, takeWhile } from 'rxjs/operators';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst scrollBehaviorSupported = supportsScrollBehavior();\n/**\n * Strategy that will prevent the user from scrolling while the overlay is visible.\n */\nclass BlockScrollStrategy {\n constructor(_viewportRuler, document) {\n this._viewportRuler = _viewportRuler;\n this._previousHTMLStyles = { top: '', left: '' };\n this._isEnabled = false;\n this._document = document;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach() { }\n /** Blocks page-level scroll while the attached overlay is open. */\n enable() {\n if (this._canBeEnabled()) {\n const root = this._document.documentElement;\n this._previousScrollPosition = this._viewportRuler.getViewportScrollPosition();\n // Cache the previous inline styles in case the user had set them.\n this._previousHTMLStyles.left = root.style.left || '';\n this._previousHTMLStyles.top = root.style.top || '';\n // Note: we're using the `html` node, instead of the `body`, because the `body` may\n // have the user agent margin, whereas the `html` is guaranteed not to have one.\n root.style.left = coerceCssPixelValue(-this._previousScrollPosition.left);\n root.style.top = coerceCssPixelValue(-this._previousScrollPosition.top);\n root.classList.add('cdk-global-scrollblock');\n this._isEnabled = true;\n }\n }\n /** Unblocks page-level scroll while the attached overlay is open. */\n disable() {\n if (this._isEnabled) {\n const html = this._document.documentElement;\n const body = this._document.body;\n const htmlStyle = html.style;\n const bodyStyle = body.style;\n const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';\n const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';\n this._isEnabled = false;\n htmlStyle.left = this._previousHTMLStyles.left;\n htmlStyle.top = this._previousHTMLStyles.top;\n html.classList.remove('cdk-global-scrollblock');\n // Disable user-defined smooth scrolling temporarily while we restore the scroll position.\n // See https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior\n // Note that we don't mutate the property if the browser doesn't support `scroll-behavior`,\n // because it can throw off feature detections in `supportsScrollBehavior` which\n // checks for `'scrollBehavior' in documentElement.style`.\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';\n }\n window.scroll(this._previousScrollPosition.left, this._previousScrollPosition.top);\n if (scrollBehaviorSupported) {\n htmlStyle.scrollBehavior = previousHtmlScrollBehavior;\n bodyStyle.scrollBehavior = previousBodyScrollBehavior;\n }\n }\n }\n _canBeEnabled() {\n // Since the scroll strategies can't be singletons, we have to use a global CSS class\n // (`cdk-global-scrollblock`) to make sure that we don't try to disable global\n // scrolling multiple times.\n const html = this._document.documentElement;\n if (html.classList.contains('cdk-global-scrollblock') || this._isEnabled) {\n return false;\n }\n const body = this._document.body;\n const viewport = this._viewportRuler.getViewportSize();\n return body.scrollHeight > viewport.height || body.scrollWidth > viewport.width;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when attempting to attach an already-attached scroll strategy.\n */\nfunction getMatScrollStrategyAlreadyAttachedError() {\n return Error(`Scroll strategy has already been attached.`);\n}\n\n/**\n * Strategy that will close the overlay as soon as the user starts scrolling.\n */\nclass CloseScrollStrategy {\n constructor(_scrollDispatcher, _ngZone, _viewportRuler, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._config = _config;\n this._scrollSubscription = null;\n /** Detaches the overlay ref and disables the scroll strategy. */\n this._detach = () => {\n this.disable();\n if (this._overlayRef.hasAttached()) {\n this._ngZone.run(() => this._overlayRef.detach());\n }\n };\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables the closing of the attached overlay on scroll. */\n enable() {\n if (this._scrollSubscription) {\n return;\n }\n const stream = this._scrollDispatcher.scrolled(0);\n if (this._config && this._config.threshold && this._config.threshold > 1) {\n this._initialScrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n this._scrollSubscription = stream.subscribe(() => {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition().top;\n if (Math.abs(scrollPosition - this._initialScrollPosition) > this._config.threshold) {\n this._detach();\n }\n else {\n this._overlayRef.updatePosition();\n }\n });\n }\n else {\n this._scrollSubscription = stream.subscribe(this._detach);\n }\n }\n /** Disables the closing the attached overlay on scroll. */\n disable() {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n }\n detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Scroll strategy that doesn't do anything. */\nclass NoopScrollStrategy {\n /** Does nothing, as this scroll strategy is a no-op. */\n enable() { }\n /** Does nothing, as this scroll strategy is a no-op. */\n disable() { }\n /** Does nothing, as this scroll strategy is a no-op. */\n attach() { }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(jelbourn): move this to live with the rest of the scrolling code\n// TODO(jelbourn): someday replace this with IntersectionObservers\n/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nfunction isElementScrolledOutsideView(element, scrollContainers) {\n return scrollContainers.some(containerBounds => {\n const outsideAbove = element.bottom < containerBounds.top;\n const outsideBelow = element.top > containerBounds.bottom;\n const outsideLeft = element.right < containerBounds.left;\n const outsideRight = element.left > containerBounds.right;\n return outsideAbove || outsideBelow || outsideLeft || outsideRight;\n });\n}\n/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nfunction isElementClippedByScrolling(element, scrollContainers) {\n return scrollContainers.some(scrollContainerRect => {\n const clippedAbove = element.top < scrollContainerRect.top;\n const clippedBelow = element.bottom > scrollContainerRect.bottom;\n const clippedLeft = element.left < scrollContainerRect.left;\n const clippedRight = element.right > scrollContainerRect.right;\n return clippedAbove || clippedBelow || clippedLeft || clippedRight;\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Strategy that will update the element position as the user is scrolling.\n */\nclass RepositionScrollStrategy {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, _config) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n this._config = _config;\n this._scrollSubscription = null;\n }\n /** Attaches this scroll strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatScrollStrategyAlreadyAttachedError();\n }\n this._overlayRef = overlayRef;\n }\n /** Enables repositioning of the attached overlay on scroll. */\n enable() {\n if (!this._scrollSubscription) {\n const throttle = this._config ? this._config.scrollThrottle : 0;\n this._scrollSubscription = this._scrollDispatcher.scrolled(throttle).subscribe(() => {\n this._overlayRef.updatePosition();\n // TODO(crisbeto): make `close` on by default once all components can handle it.\n if (this._config && this._config.autoClose) {\n const overlayRect = this._overlayRef.overlayElement.getBoundingClientRect();\n const { width, height } = this._viewportRuler.getViewportSize();\n // TODO(crisbeto): include all ancestor scroll containers here once\n // we have a way of exposing the trigger element to the scroll strategy.\n const parentRects = [{ width, height, bottom: height, right: width, top: 0, left: 0 }];\n if (isElementScrolledOutsideView(overlayRect, parentRects)) {\n this.disable();\n this._ngZone.run(() => this._overlayRef.detach());\n }\n }\n });\n }\n }\n /** Disables repositioning of the attached overlay on scroll. */\n disable() {\n if (this._scrollSubscription) {\n this._scrollSubscription.unsubscribe();\n this._scrollSubscription = null;\n }\n }\n detach() {\n this.disable();\n this._overlayRef = null;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Options for how an overlay will handle scrolling.\n *\n * Users can provide a custom value for `ScrollStrategyOptions` to replace the default\n * behaviors. This class primarily acts as a factory for ScrollStrategy instances.\n */\nclass ScrollStrategyOptions {\n constructor(_scrollDispatcher, _viewportRuler, _ngZone, document) {\n this._scrollDispatcher = _scrollDispatcher;\n this._viewportRuler = _viewportRuler;\n this._ngZone = _ngZone;\n /** Do nothing on scroll. */\n this.noop = () => new NoopScrollStrategy();\n /**\n * Close the overlay as soon as the user scrolls.\n * @param config Configuration to be used inside the scroll strategy.\n */\n this.close = (config) => new CloseScrollStrategy(this._scrollDispatcher, this._ngZone, this._viewportRuler, config);\n /** Block scrolling. */\n this.block = () => new BlockScrollStrategy(this._viewportRuler, this._document);\n /**\n * Update the overlay's position on scroll.\n * @param config Configuration to be used inside the scroll strategy.\n * Allows debouncing the reposition calls.\n */\n this.reposition = (config) => new RepositionScrollStrategy(this._scrollDispatcher, this._viewportRuler, this._ngZone, config);\n this._document = document;\n }\n}\nScrollStrategyOptions.ɵfac = function ScrollStrategyOptions_Factory(t) { return new (t || ScrollStrategyOptions)(ɵngcc0.ɵɵinject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵinject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DOCUMENT)); };\nScrollStrategyOptions.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScrollStrategyOptions_Factory() { return new ScrollStrategyOptions(i0.ɵɵinject(i1.ScrollDispatcher), i0.ɵɵinject(i1.ViewportRuler), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1$1.DOCUMENT)); }, token: ScrollStrategyOptions, providedIn: \"root\" });\nScrollStrategyOptions.ctorParameters = () => [\n { type: ScrollDispatcher },\n { type: ViewportRuler },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollStrategyOptions, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc1.ViewportRuler }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Initial configuration used when creating an overlay. */\nclass OverlayConfig {\n constructor(config) {\n /** Strategy to be used when handling scroll events while the overlay is open. */\n this.scrollStrategy = new NoopScrollStrategy();\n /** Custom class to add to the overlay pane. */\n this.panelClass = '';\n /** Whether the overlay has a backdrop. */\n this.hasBackdrop = false;\n /** Custom class to add to the backdrop */\n this.backdropClass = 'cdk-overlay-dark-backdrop';\n /**\n * Whether the overlay should be disposed of when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.disposeOnNavigation = false;\n if (config) {\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n const configKeys = Object.keys(config);\n for (const key of configKeys) {\n if (config[key] !== undefined) {\n // TypeScript, as of version 3.5, sees the left-hand-side of this expression\n // as \"I don't know *which* key this is, so the only valid value is the intersection\n // of all the posible values.\" In this case, that happens to be `undefined`. TypeScript\n // is not smart enough to see that the right-hand-side is actually an access of the same\n // exact type with the same exact key, meaning that the value type must be identical.\n // So we use `any` to work around this.\n this[key] = config[key];\n }\n }\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** The points of the origin element and the overlay element to connect. */\nclass ConnectionPositionPair {\n constructor(origin, overlay, \n /** Offset along the X axis. */\n offsetX, \n /** Offset along the Y axis. */\n offsetY, \n /** Class(es) to be applied to the panel while this position is active. */\n panelClass) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.panelClass = panelClass;\n this.originX = origin.originX;\n this.originY = origin.originY;\n this.overlayX = overlay.overlayX;\n this.overlayY = overlay.overlayY;\n }\n}\n/**\n * Set of properties regarding the position of the origin and overlay relative to the viewport\n * with respect to the containing Scrollable elements.\n *\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\n *\n * The overlay and origin are outside view if there is no overlap between their bounding client\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\n *\n * ----------- -----------\n * | outside | | clipped |\n * | view | --------------------------\n * | | | | | |\n * ---------- | ----------- |\n * -------------------------- | |\n * | | | Scrollable |\n * | | | |\n * | | --------------------------\n * | Scrollable |\n * | |\n * --------------------------\n *\n * @docs-private\n */\nclass ScrollingVisibility {\n}\n/** The change event emitted by the strategy when a fallback position is used. */\nclass ConnectedOverlayPositionChange {\n constructor(\n /** The position used as a result of this change. */\n connectionPair, \n /** @docs-private */\n scrollableViewProperties) {\n this.connectionPair = connectionPair;\n this.scrollableViewProperties = scrollableViewProperties;\n }\n}\nConnectedOverlayPositionChange.ctorParameters = () => [\n { type: ConnectionPositionPair },\n { type: ScrollingVisibility, decorators: [{ type: Optional }] }\n];\n/**\n * Validates whether a vertical position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nfunction validateVerticalPosition(property, value) {\n if (value !== 'top' && value !== 'bottom' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n `Expected \"top\", \"bottom\" or \"center\".`);\n }\n}\n/**\n * Validates whether a horizontal position property matches the expected values.\n * @param property Name of the property being validated.\n * @param value Value of the property being validated.\n * @docs-private\n */\nfunction validateHorizontalPosition(property, value) {\n if (value !== 'start' && value !== 'end' && value !== 'center') {\n throw Error(`ConnectedPosition: Invalid ${property} \"${value}\". ` +\n `Expected \"start\", \"end\" or \"center\".`);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Service for dispatching events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nclass BaseOverlayDispatcher {\n constructor(document) {\n /** Currently attached overlays in the order they were attached. */\n this._attachedOverlays = [];\n this._document = document;\n }\n ngOnDestroy() {\n this.detach();\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n // Ensure that we don't get the same overlay multiple times.\n this.remove(overlayRef);\n this._attachedOverlays.push(overlayRef);\n }\n /** Remove an overlay from the list of attached overlay refs. */\n remove(overlayRef) {\n const index = this._attachedOverlays.indexOf(overlayRef);\n if (index > -1) {\n this._attachedOverlays.splice(index, 1);\n }\n // Remove the global listener once there are no more overlays.\n if (this._attachedOverlays.length === 0) {\n this.detach();\n }\n }\n}\nBaseOverlayDispatcher.ɵfac = function BaseOverlayDispatcher_Factory(t) { return new (t || BaseOverlayDispatcher)(ɵngcc0.ɵɵinject(DOCUMENT)); };\nBaseOverlayDispatcher.ɵprov = i0.ɵɵdefineInjectable({ factory: function BaseOverlayDispatcher_Factory() { return new BaseOverlayDispatcher(i0.ɵɵinject(i1$1.DOCUMENT)); }, token: BaseOverlayDispatcher, providedIn: \"root\" });\nBaseOverlayDispatcher.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BaseOverlayDispatcher, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Service for dispatching keyboard events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nclass OverlayKeyboardDispatcher extends BaseOverlayDispatcher {\n constructor(document) {\n super(document);\n /** Keyboard event listener that will be attached to the body. */\n this._keydownListener = (event) => {\n const overlays = this._attachedOverlays;\n for (let i = overlays.length - 1; i > -1; i--) {\n // Dispatch the keydown event to the top overlay which has subscribers to its keydown events.\n // We want to target the most recent overlay, rather than trying to match where the event came\n // from, because some components might open an overlay, but keep focus on a trigger element\n // (e.g. for select and autocomplete). We skip overlays without keydown event subscriptions,\n // because we don't want overlays that don't handle keyboard events to block the ones below\n // them that do.\n if (overlays[i]._keydownEvents.observers.length > 0) {\n overlays[i]._keydownEvents.next(event);\n break;\n }\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Lazily start dispatcher once first overlay is added\n if (!this._isAttached) {\n this._document.body.addEventListener('keydown', this._keydownListener);\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n this._document.body.removeEventListener('keydown', this._keydownListener);\n this._isAttached = false;\n }\n }\n}\nOverlayKeyboardDispatcher.ɵfac = function OverlayKeyboardDispatcher_Factory(t) { return new (t || OverlayKeyboardDispatcher)(ɵngcc0.ɵɵinject(DOCUMENT)); };\nOverlayKeyboardDispatcher.ɵprov = i0.ɵɵdefineInjectable({ factory: function OverlayKeyboardDispatcher_Factory() { return new OverlayKeyboardDispatcher(i0.ɵɵinject(i1$1.DOCUMENT)); }, token: OverlayKeyboardDispatcher, providedIn: \"root\" });\nOverlayKeyboardDispatcher.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OverlayKeyboardDispatcher, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Service for dispatching mouse click events that land on the body to appropriate overlay ref,\n * if any. It maintains a list of attached overlays to determine best suited overlay based\n * on event target and order of overlay opens.\n */\nclass OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {\n constructor(document, _platform) {\n super(document);\n this._platform = _platform;\n this._cursorStyleIsSet = false;\n /** Click event listener that will be attached to the body propagate phase. */\n this._clickListener = (event) => {\n const target = _getEventTarget(event);\n // We copy the array because the original may be modified asynchronously if the\n // outsidePointerEvents listener decides to detach overlays resulting in index errors inside\n // the for loop.\n const overlays = this._attachedOverlays.slice();\n // Dispatch the mouse event to the top overlay which has subscribers to its mouse events.\n // We want to target all overlays for which the click could be considered as outside click.\n // As soon as we reach an overlay for which the click is not outside click we break off\n // the loop.\n for (let i = overlays.length - 1; i > -1; i--) {\n const overlayRef = overlays[i];\n if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {\n continue;\n }\n // If it's a click inside the overlay, just break - we should do nothing\n // If it's an outside click dispatch the mouse event, and proceed with the next overlay\n if (overlayRef.overlayElement.contains(target)) {\n break;\n }\n overlayRef._outsidePointerEvents.next(event);\n }\n };\n }\n /** Add a new overlay to the list of attached overlay refs. */\n add(overlayRef) {\n super.add(overlayRef);\n // Safari on iOS does not generate click events for non-interactive\n // elements. However, we want to receive a click for any element outside\n // the overlay. We can force a \"clickable\" state by setting\n // `cursor: pointer` on the document body. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event#Safari_Mobile\n // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n if (!this._isAttached) {\n const body = this._document.body;\n body.addEventListener('click', this._clickListener, true);\n body.addEventListener('auxclick', this._clickListener, true);\n body.addEventListener('contextmenu', this._clickListener, true);\n // click event is not fired on iOS. To make element \"clickable\" we are\n // setting the cursor to pointer\n if (this._platform.IOS && !this._cursorStyleIsSet) {\n this._cursorOriginalValue = body.style.cursor;\n body.style.cursor = 'pointer';\n this._cursorStyleIsSet = true;\n }\n this._isAttached = true;\n }\n }\n /** Detaches the global keyboard event listener. */\n detach() {\n if (this._isAttached) {\n const body = this._document.body;\n body.removeEventListener('click', this._clickListener, true);\n body.removeEventListener('auxclick', this._clickListener, true);\n body.removeEventListener('contextmenu', this._clickListener, true);\n if (this._platform.IOS && this._cursorStyleIsSet) {\n body.style.cursor = this._cursorOriginalValue;\n this._cursorStyleIsSet = false;\n }\n this._isAttached = false;\n }\n }\n}\nOverlayOutsideClickDispatcher.ɵfac = function OverlayOutsideClickDispatcher_Factory(t) { return new (t || OverlayOutsideClickDispatcher)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc2.Platform)); };\nOverlayOutsideClickDispatcher.ɵprov = i0.ɵɵdefineInjectable({ factory: function OverlayOutsideClickDispatcher_Factory() { return new OverlayOutsideClickDispatcher(i0.ɵɵinject(i1$1.DOCUMENT), i0.ɵɵinject(i2.Platform)); }, token: OverlayOutsideClickDispatcher, providedIn: \"root\" });\nOverlayOutsideClickDispatcher.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Platform }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OverlayOutsideClickDispatcher, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc2.Platform }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst globalsForTest = (typeof window !== 'undefined' ? window : {});\n/**\n * Whether we're in a testing environment.\n * TODO(crisbeto): remove this once we have an overlay testing module or Angular starts tearing\n * down the testing `NgModule` (see https://github.com/angular/angular/issues/18831).\n */\nconst isTestEnvironment = (typeof globalsForTest.__karma__ !== 'undefined' && !!globalsForTest.__karma__) ||\n (typeof globalsForTest.jasmine !== 'undefined' && !!globalsForTest.jasmine) ||\n (typeof globalsForTest.jest !== 'undefined' && !!globalsForTest.jest) ||\n (typeof globalsForTest.Mocha !== 'undefined' && !!globalsForTest.Mocha);\n/** Container inside which all overlays will render. */\nclass OverlayContainer {\n constructor(document, _platform) {\n this._platform = _platform;\n this._document = document;\n }\n ngOnDestroy() {\n const container = this._containerElement;\n if (container && container.parentNode) {\n container.parentNode.removeChild(container);\n }\n }\n /**\n * This method returns the overlay container element. It will lazily\n * create the element the first time it is called to facilitate using\n * the container in non-browser environments.\n * @returns the container element\n */\n getContainerElement() {\n if (!this._containerElement) {\n this._createContainer();\n }\n return this._containerElement;\n }\n /**\n * Create the overlay container element, which is simply a div\n * with the 'cdk-overlay-container' class on the document body.\n */\n _createContainer() {\n const containerClass = 'cdk-overlay-container';\n if (this._platform.isBrowser || isTestEnvironment) {\n const oppositePlatformContainers = this._document.querySelectorAll(`.${containerClass}[platform=\"server\"], ` +\n `.${containerClass}[platform=\"test\"]`);\n // Remove any old containers from the opposite platform.\n // This can happen when transitioning from the server to the client.\n for (let i = 0; i < oppositePlatformContainers.length; i++) {\n oppositePlatformContainers[i].parentNode.removeChild(oppositePlatformContainers[i]);\n }\n }\n const container = this._document.createElement('div');\n container.classList.add(containerClass);\n // A long time ago we kept adding new overlay containers whenever a new app was instantiated,\n // but at some point we added logic which clears the duplicate ones in order to avoid leaks.\n // The new logic was a little too aggressive since it was breaking some legitimate use cases.\n // To mitigate the problem we made it so that only containers from a different platform are\n // cleared, but the side-effect was that people started depending on the overly-aggressive\n // logic to clean up their tests for them. Until we can introduce an overlay-specific testing\n // module which does the cleanup, we try to detect that we're in a test environment and we\n // always clear the container. See #17006.\n // TODO(crisbeto): remove the test environment check once we have an overlay testing module.\n if (isTestEnvironment) {\n container.setAttribute('platform', 'test');\n }\n else if (!this._platform.isBrowser) {\n container.setAttribute('platform', 'server');\n }\n this._document.body.appendChild(container);\n this._containerElement = container;\n }\n}\nOverlayContainer.ɵfac = function OverlayContainer_Factory(t) { return new (t || OverlayContainer)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc2.Platform)); };\nOverlayContainer.ɵprov = i0.ɵɵdefineInjectable({ factory: function OverlayContainer_Factory() { return new OverlayContainer(i0.ɵɵinject(i1$1.DOCUMENT), i0.ɵɵinject(i2.Platform)); }, token: OverlayContainer, providedIn: \"root\" });\nOverlayContainer.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Platform }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OverlayContainer, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc2.Platform }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nclass OverlayRef {\n constructor(_portalOutlet, _host, _pane, _config, _ngZone, _keyboardDispatcher, _document, _location, _outsideClickDispatcher) {\n this._portalOutlet = _portalOutlet;\n this._host = _host;\n this._pane = _pane;\n this._config = _config;\n this._ngZone = _ngZone;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._document = _document;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n this._backdropElement = null;\n this._backdropClick = new Subject();\n this._attachments = new Subject();\n this._detachments = new Subject();\n this._locationChanges = Subscription.EMPTY;\n this._backdropClickHandler = (event) => this._backdropClick.next(event);\n /** Stream of keydown events dispatched to this overlay. */\n this._keydownEvents = new Subject();\n /** Stream of mouse outside events dispatched to this overlay. */\n this._outsidePointerEvents = new Subject();\n if (_config.scrollStrategy) {\n this._scrollStrategy = _config.scrollStrategy;\n this._scrollStrategy.attach(this);\n }\n this._positionStrategy = _config.positionStrategy;\n }\n /** The overlay's HTML element */\n get overlayElement() {\n return this._pane;\n }\n /** The overlay's backdrop HTML element. */\n get backdropElement() {\n return this._backdropElement;\n }\n /**\n * Wrapper around the panel element. Can be used for advanced\n * positioning where a wrapper with specific styling is\n * required around the overlay pane.\n */\n get hostElement() {\n return this._host;\n }\n /**\n * Attaches content, given via a Portal, to the overlay.\n * If the overlay is configured to have a backdrop, it will be created.\n *\n * @param portal Portal instance to which to attach the overlay.\n * @returns The portal attachment result.\n */\n attach(portal) {\n let attachResult = this._portalOutlet.attach(portal);\n // Update the pane element with the given configuration.\n if (!this._host.parentElement && this._previousHostParent) {\n this._previousHostParent.appendChild(this._host);\n }\n if (this._positionStrategy) {\n this._positionStrategy.attach(this);\n }\n this._updateStackingOrder();\n this._updateElementSize();\n this._updateElementDirection();\n if (this._scrollStrategy) {\n this._scrollStrategy.enable();\n }\n // Update the position once the zone is stable so that the overlay will be fully rendered\n // before attempting to position it, as the position may depend on the size of the rendered\n // content.\n this._ngZone.onStable\n .pipe(take(1))\n .subscribe(() => {\n // The overlay could've been detached before the zone has stabilized.\n if (this.hasAttached()) {\n this.updatePosition();\n }\n });\n // Enable pointer events for the overlay pane element.\n this._togglePointerEvents(true);\n if (this._config.hasBackdrop) {\n this._attachBackdrop();\n }\n if (this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, true);\n }\n // Only emit the `attachments` event once all other setup is done.\n this._attachments.next();\n // Track this overlay by the keyboard dispatcher\n this._keyboardDispatcher.add(this);\n if (this._config.disposeOnNavigation) {\n this._locationChanges = this._location.subscribe(() => this.dispose());\n }\n this._outsideClickDispatcher.add(this);\n return attachResult;\n }\n /**\n * Detaches an overlay from a portal.\n * @returns The portal detachment result.\n */\n detach() {\n if (!this.hasAttached()) {\n return;\n }\n this.detachBackdrop();\n // When the overlay is detached, the pane element should disable pointer events.\n // This is necessary because otherwise the pane element will cover the page and disable\n // pointer events therefore. Depends on the position strategy and the applied pane boundaries.\n this._togglePointerEvents(false);\n if (this._positionStrategy && this._positionStrategy.detach) {\n this._positionStrategy.detach();\n }\n if (this._scrollStrategy) {\n this._scrollStrategy.disable();\n }\n const detachmentResult = this._portalOutlet.detach();\n // Only emit after everything is detached.\n this._detachments.next();\n // Remove this overlay from keyboard dispatcher tracking.\n this._keyboardDispatcher.remove(this);\n // Keeping the host element in the DOM can cause scroll jank, because it still gets\n // rendered, even though it's transparent and unclickable which is why we remove it.\n this._detachContentWhenStable();\n this._locationChanges.unsubscribe();\n this._outsideClickDispatcher.remove(this);\n return detachmentResult;\n }\n /** Cleans up the overlay from the DOM. */\n dispose() {\n const isAttached = this.hasAttached();\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._disposeScrollStrategy();\n this.detachBackdrop();\n this._locationChanges.unsubscribe();\n this._keyboardDispatcher.remove(this);\n this._portalOutlet.dispose();\n this._attachments.complete();\n this._backdropClick.complete();\n this._keydownEvents.complete();\n this._outsidePointerEvents.complete();\n this._outsideClickDispatcher.remove(this);\n if (this._host && this._host.parentNode) {\n this._host.parentNode.removeChild(this._host);\n this._host = null;\n }\n this._previousHostParent = this._pane = null;\n if (isAttached) {\n this._detachments.next();\n }\n this._detachments.complete();\n }\n /** Whether the overlay has attached content. */\n hasAttached() {\n return this._portalOutlet.hasAttached();\n }\n /** Gets an observable that emits when the backdrop has been clicked. */\n backdropClick() {\n return this._backdropClick;\n }\n /** Gets an observable that emits when the overlay has been attached. */\n attachments() {\n return this._attachments;\n }\n /** Gets an observable that emits when the overlay has been detached. */\n detachments() {\n return this._detachments;\n }\n /** Gets an observable of keydown events targeted to this overlay. */\n keydownEvents() {\n return this._keydownEvents;\n }\n /** Gets an observable of pointer events targeted outside this overlay. */\n outsidePointerEvents() {\n return this._outsidePointerEvents;\n }\n /** Gets the current overlay configuration, which is immutable. */\n getConfig() {\n return this._config;\n }\n /** Updates the position of the overlay based on the position strategy. */\n updatePosition() {\n if (this._positionStrategy) {\n this._positionStrategy.apply();\n }\n }\n /** Switches to a new position strategy and updates the overlay position. */\n updatePositionStrategy(strategy) {\n if (strategy === this._positionStrategy) {\n return;\n }\n if (this._positionStrategy) {\n this._positionStrategy.dispose();\n }\n this._positionStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n this.updatePosition();\n }\n }\n /** Update the size properties of the overlay. */\n updateSize(sizeConfig) {\n this._config = Object.assign(Object.assign({}, this._config), sizeConfig);\n this._updateElementSize();\n }\n /** Sets the LTR/RTL direction for the overlay. */\n setDirection(dir) {\n this._config = Object.assign(Object.assign({}, this._config), { direction: dir });\n this._updateElementDirection();\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, true);\n }\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n if (this._pane) {\n this._toggleClasses(this._pane, classes, false);\n }\n }\n /**\n * Returns the layout direction of the overlay panel.\n */\n getDirection() {\n const direction = this._config.direction;\n if (!direction) {\n return 'ltr';\n }\n return typeof direction === 'string' ? direction : direction.value;\n }\n /** Switches to a new scroll strategy. */\n updateScrollStrategy(strategy) {\n if (strategy === this._scrollStrategy) {\n return;\n }\n this._disposeScrollStrategy();\n this._scrollStrategy = strategy;\n if (this.hasAttached()) {\n strategy.attach(this);\n strategy.enable();\n }\n }\n /** Updates the text direction of the overlay panel. */\n _updateElementDirection() {\n this._host.setAttribute('dir', this.getDirection());\n }\n /** Updates the size of the overlay element based on the overlay config. */\n _updateElementSize() {\n if (!this._pane) {\n return;\n }\n const style = this._pane.style;\n style.width = coerceCssPixelValue(this._config.width);\n style.height = coerceCssPixelValue(this._config.height);\n style.minWidth = coerceCssPixelValue(this._config.minWidth);\n style.minHeight = coerceCssPixelValue(this._config.minHeight);\n style.maxWidth = coerceCssPixelValue(this._config.maxWidth);\n style.maxHeight = coerceCssPixelValue(this._config.maxHeight);\n }\n /** Toggles the pointer events for the overlay pane element. */\n _togglePointerEvents(enablePointer) {\n this._pane.style.pointerEvents = enablePointer ? '' : 'none';\n }\n /** Attaches a backdrop for this overlay. */\n _attachBackdrop() {\n const showingClass = 'cdk-overlay-backdrop-showing';\n this._backdropElement = this._document.createElement('div');\n this._backdropElement.classList.add('cdk-overlay-backdrop');\n if (this._config.backdropClass) {\n this._toggleClasses(this._backdropElement, this._config.backdropClass, true);\n }\n // Insert the backdrop before the pane in the DOM order,\n // in order to handle stacked overlays properly.\n this._host.parentElement.insertBefore(this._backdropElement, this._host);\n // Forward backdrop clicks such that the consumer of the overlay can perform whatever\n // action desired when such a click occurs (usually closing the overlay).\n this._backdropElement.addEventListener('click', this._backdropClickHandler);\n // Add class to fade-in the backdrop after one frame.\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._backdropElement) {\n this._backdropElement.classList.add(showingClass);\n }\n });\n });\n }\n else {\n this._backdropElement.classList.add(showingClass);\n }\n }\n /**\n * Updates the stacking order of the element, moving it to the top if necessary.\n * This is required in cases where one overlay was detached, while another one,\n * that should be behind it, was destroyed. The next time both of them are opened,\n * the stacking will be wrong, because the detached element's pane will still be\n * in its original DOM position.\n */\n _updateStackingOrder() {\n if (this._host.nextSibling) {\n this._host.parentNode.appendChild(this._host);\n }\n }\n /** Detaches the backdrop (if any) associated with the overlay. */\n detachBackdrop() {\n let backdropToDetach = this._backdropElement;\n if (!backdropToDetach) {\n return;\n }\n let timeoutId;\n let finishDetach = () => {\n // It may not be attached to anything in certain cases (e.g. unit tests).\n if (backdropToDetach) {\n backdropToDetach.removeEventListener('click', this._backdropClickHandler);\n backdropToDetach.removeEventListener('transitionend', finishDetach);\n if (backdropToDetach.parentNode) {\n backdropToDetach.parentNode.removeChild(backdropToDetach);\n }\n }\n // It is possible that a new portal has been attached to this overlay since we started\n // removing the backdrop. If that is the case, only clear the backdrop reference if it\n // is still the same instance that we started to remove.\n if (this._backdropElement == backdropToDetach) {\n this._backdropElement = null;\n }\n if (this._config.backdropClass) {\n this._toggleClasses(backdropToDetach, this._config.backdropClass, false);\n }\n clearTimeout(timeoutId);\n };\n backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');\n this._ngZone.runOutsideAngular(() => {\n backdropToDetach.addEventListener('transitionend', finishDetach);\n });\n // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\n // In this case we make it unclickable and we try to remove it after a delay.\n backdropToDetach.style.pointerEvents = 'none';\n // Run this outside the Angular zone because there's nothing that Angular cares about.\n // If it were to run inside the Angular zone, every test that used Overlay would have to be\n // either async or fakeAsync.\n timeoutId = this._ngZone.runOutsideAngular(() => setTimeout(finishDetach, 500));\n }\n /** Toggles a single CSS class or an array of classes on an element. */\n _toggleClasses(element, cssClasses, isAdd) {\n const classList = element.classList;\n coerceArray(cssClasses).forEach(cssClass => {\n // We can't do a spread here, because IE doesn't support setting multiple classes.\n // Also trying to add an empty string to a DOMTokenList will throw.\n if (cssClass) {\n isAdd ? classList.add(cssClass) : classList.remove(cssClass);\n }\n });\n }\n /** Detaches the overlay content next time the zone stabilizes. */\n _detachContentWhenStable() {\n // Normally we wouldn't have to explicitly run this outside the `NgZone`, however\n // if the consumer is using `zone-patch-rxjs`, the `Subscription.unsubscribe` call will\n // be patched to run inside the zone, which will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => {\n // We can't remove the host here immediately, because the overlay pane's content\n // might still be animating. This stream helps us avoid interrupting the animation\n // by waiting for the pane to become empty.\n const subscription = this._ngZone.onStable\n .pipe(takeUntil(merge(this._attachments, this._detachments)))\n .subscribe(() => {\n // Needs a couple of checks for the pane and host, because\n // they may have been removed by the time the zone stabilizes.\n if (!this._pane || !this._host || this._pane.children.length === 0) {\n if (this._pane && this._config.panelClass) {\n this._toggleClasses(this._pane, this._config.panelClass, false);\n }\n if (this._host && this._host.parentElement) {\n this._previousHostParent = this._host.parentElement;\n this._previousHostParent.removeChild(this._host);\n }\n subscription.unsubscribe();\n }\n });\n });\n }\n /** Disposes of a scroll strategy. */\n _disposeScrollStrategy() {\n const scrollStrategy = this._scrollStrategy;\n if (scrollStrategy) {\n scrollStrategy.disable();\n if (scrollStrategy.detach) {\n scrollStrategy.detach();\n }\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO: refactor clipping detection into a separate thing (part of scrolling module)\n// TODO: doesn't handle both flexible width and height when it has to scroll along both axis.\n/** Class to be added to the overlay bounding box. */\nconst boundingBoxClass = 'cdk-overlay-connected-position-bounding-box';\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n */\nclass FlexibleConnectedPositionStrategy {\n constructor(connectedTo, _viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n /** Last size used for the bounding box. Used to avoid resizing the overlay after open. */\n this._lastBoundingBoxSize = { width: 0, height: 0 };\n /** Whether the overlay was pushed in a previous positioning. */\n this._isPushed = false;\n /** Whether the overlay can be pushed on-screen on the initial open. */\n this._canPush = true;\n /** Whether the overlay can grow via flexible width/height after the initial open. */\n this._growAfterOpen = false;\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n this._hasFlexibleDimensions = true;\n /** Whether the overlay position is locked. */\n this._positionLocked = false;\n /** Amount of space that must be maintained between the overlay and the edge of the viewport. */\n this._viewportMargin = 0;\n /** The Scrollable containers used to check scrollable view properties on position change. */\n this._scrollables = [];\n /** Ordered list of preferred positions, from most to least desirable. */\n this._preferredPositions = [];\n /** Subject that emits whenever the position changes. */\n this._positionChanges = new Subject();\n /** Subscription to viewport size changes. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Default offset for the overlay along the x axis. */\n this._offsetX = 0;\n /** Default offset for the overlay along the y axis. */\n this._offsetY = 0;\n /** Keeps track of the CSS classes that the position strategy has applied on the overlay panel. */\n this._appliedPanelClasses = [];\n /** Observable sequence of position changes. */\n this.positionChanges = this._positionChanges;\n this.setOrigin(connectedTo);\n }\n /** Ordered list of preferred positions, from most to least desirable. */\n get positions() {\n return this._preferredPositions;\n }\n /** Attaches this position strategy to an overlay. */\n attach(overlayRef) {\n if (this._overlayRef && overlayRef !== this._overlayRef &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('This position strategy is already attached to an overlay');\n }\n this._validatePositions();\n overlayRef.hostElement.classList.add(boundingBoxClass);\n this._overlayRef = overlayRef;\n this._boundingBox = overlayRef.hostElement;\n this._pane = overlayRef.overlayElement;\n this._isDisposed = false;\n this._isInitialRender = true;\n this._lastPosition = null;\n this._resizeSubscription.unsubscribe();\n this._resizeSubscription = this._viewportRuler.change().subscribe(() => {\n // When the window is resized, we want to trigger the next reposition as if it\n // was an initial render, in order for the strategy to pick a new optimal position,\n // otherwise position locking will cause it to stay at the old one.\n this._isInitialRender = true;\n this.apply();\n });\n }\n /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin best fits on-screen.\n *\n * The selection of a position goes as follows:\n * - If any positions fit completely within the viewport as-is,\n * choose the first position that does so.\n * - If flexible dimensions are enabled and at least one satifies the given minimum width/height,\n * choose the position with the greatest available size modified by the positions' weight.\n * - If pushing is enabled, take the position that went off-screen the least and push it\n * on-screen.\n * - If none of the previous criteria were met, use the position that goes off-screen the least.\n * @docs-private\n */\n apply() {\n // We shouldn't do anything if the strategy was disposed or we're on the server.\n if (this._isDisposed || !this._platform.isBrowser) {\n return;\n }\n // If the position has been applied already (e.g. when the overlay was opened) and the\n // consumer opted into locking in the position, re-use the old position, in order to\n // prevent the overlay from jumping around.\n if (!this._isInitialRender && this._positionLocked && this._lastPosition) {\n this.reapplyLastPosition();\n return;\n }\n this._clearPanelClasses();\n this._resetOverlayElementStyles();\n this._resetBoundingBoxStyles();\n // We need the bounding rects for the origin and the overlay to determine how to position\n // the overlay relative to the origin.\n // We use the viewport rect to determine whether a position would go off-screen.\n this._viewportRect = this._getNarrowedViewportRect();\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n const originRect = this._originRect;\n const overlayRect = this._overlayRect;\n const viewportRect = this._viewportRect;\n // Positions where the overlay will fit with flexible dimensions.\n const flexibleFits = [];\n // Fallback if none of the preferred positions fit within the viewport.\n let fallback;\n // Go through each of the preferred positions looking for a good fit.\n // If a good fit is found, it will be applied immediately.\n for (let pos of this._preferredPositions) {\n // Get the exact (x, y) coordinate for the point-of-origin on the origin element.\n let originPoint = this._getOriginPoint(originRect, pos);\n // From that point-of-origin, get the exact (x, y) coordinate for the top-left corner of the\n // overlay in this position. We use the top-left corner for calculations and later translate\n // this into an appropriate (top, left, bottom, right) style.\n let overlayPoint = this._getOverlayPoint(originPoint, overlayRect, pos);\n // Calculate how well the overlay would fit into the viewport with this point.\n let overlayFit = this._getOverlayFit(overlayPoint, overlayRect, viewportRect, pos);\n // If the overlay, without any further work, fits into the viewport, use this position.\n if (overlayFit.isCompletelyWithinViewport) {\n this._isPushed = false;\n this._applyPosition(pos, originPoint);\n return;\n }\n // If the overlay has flexible dimensions, we can use this position\n // so long as there's enough space for the minimum dimensions.\n if (this._canFitWithFlexibleDimensions(overlayFit, overlayPoint, viewportRect)) {\n // Save positions where the overlay will fit with flexible dimensions. We will use these\n // if none of the positions fit *without* flexible dimensions.\n flexibleFits.push({\n position: pos,\n origin: originPoint,\n overlayRect,\n boundingBoxRect: this._calculateBoundingBoxRect(originPoint, pos)\n });\n continue;\n }\n // If the current preferred position does not fit on the screen, remember the position\n // if it has more visible area on-screen than we've seen and move onto the next preferred\n // position.\n if (!fallback || fallback.overlayFit.visibleArea < overlayFit.visibleArea) {\n fallback = { overlayFit, overlayPoint, originPoint, position: pos, overlayRect };\n }\n }\n // If there are any positions where the overlay would fit with flexible dimensions, choose the\n // one that has the greatest area available modified by the position's weight\n if (flexibleFits.length) {\n let bestFit = null;\n let bestScore = -1;\n for (const fit of flexibleFits) {\n const score = fit.boundingBoxRect.width * fit.boundingBoxRect.height * (fit.position.weight || 1);\n if (score > bestScore) {\n bestScore = score;\n bestFit = fit;\n }\n }\n this._isPushed = false;\n this._applyPosition(bestFit.position, bestFit.origin);\n return;\n }\n // When none of the preferred positions fit within the viewport, take the position\n // that went off-screen the least and attempt to push it on-screen.\n if (this._canPush) {\n // TODO(jelbourn): after pushing, the opening \"direction\" of the overlay might not make sense.\n this._isPushed = true;\n this._applyPosition(fallback.position, fallback.originPoint);\n return;\n }\n // All options for getting the overlay within the viewport have been exhausted, so go with the\n // position that went off-screen the least.\n this._applyPosition(fallback.position, fallback.originPoint);\n }\n detach() {\n this._clearPanelClasses();\n this._lastPosition = null;\n this._previousPushAmount = null;\n this._resizeSubscription.unsubscribe();\n }\n /** Cleanup after the element gets destroyed. */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n // We can't use `_resetBoundingBoxStyles` here, because it resets\n // some properties to zero, rather than removing them.\n if (this._boundingBox) {\n extendStyles(this._boundingBox.style, {\n top: '',\n left: '',\n right: '',\n bottom: '',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: '',\n });\n }\n if (this._pane) {\n this._resetOverlayElementStyles();\n }\n if (this._overlayRef) {\n this._overlayRef.hostElement.classList.remove(boundingBoxClass);\n }\n this.detach();\n this._positionChanges.complete();\n this._overlayRef = this._boundingBox = null;\n this._isDisposed = true;\n }\n /**\n * This re-aligns the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n */\n reapplyLastPosition() {\n if (!this._isDisposed && (!this._platform || this._platform.isBrowser)) {\n this._originRect = this._getOriginRect();\n this._overlayRect = this._pane.getBoundingClientRect();\n this._viewportRect = this._getNarrowedViewportRect();\n const lastPosition = this._lastPosition || this._preferredPositions[0];\n const originPoint = this._getOriginPoint(this._originRect, lastPosition);\n this._applyPosition(lastPosition, originPoint);\n }\n }\n /**\n * Sets the list of Scrollable containers that host the origin element so that\n * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n * Scrollable must be an ancestor element of the strategy's origin element.\n */\n withScrollableContainers(scrollables) {\n this._scrollables = scrollables;\n return this;\n }\n /**\n * Adds new preferred positions.\n * @param positions List of positions options for this overlay.\n */\n withPositions(positions) {\n this._preferredPositions = positions;\n // If the last calculated position object isn't part of the positions anymore, clear\n // it in order to avoid it being picked up if the consumer tries to re-apply.\n if (positions.indexOf(this._lastPosition) === -1) {\n this._lastPosition = null;\n }\n this._validatePositions();\n return this;\n }\n /**\n * Sets a minimum distance the overlay may be positioned to the edge of the viewport.\n * @param margin Required margin between the overlay and the viewport edge in pixels.\n */\n withViewportMargin(margin) {\n this._viewportMargin = margin;\n return this;\n }\n /** Sets whether the overlay's width and height can be constrained to fit within the viewport. */\n withFlexibleDimensions(flexibleDimensions = true) {\n this._hasFlexibleDimensions = flexibleDimensions;\n return this;\n }\n /** Sets whether the overlay can grow after the initial open via flexible width/height. */\n withGrowAfterOpen(growAfterOpen = true) {\n this._growAfterOpen = growAfterOpen;\n return this;\n }\n /** Sets whether the overlay can be pushed on-screen if none of the provided positions fit. */\n withPush(canPush = true) {\n this._canPush = canPush;\n return this;\n }\n /**\n * Sets whether the overlay's position should be locked in after it is positioned\n * initially. When an overlay is locked in, it won't attempt to reposition itself\n * when the position is re-applied (e.g. when the user scrolls away).\n * @param isLocked Whether the overlay should locked in.\n */\n withLockedPosition(isLocked = true) {\n this._positionLocked = isLocked;\n return this;\n }\n /**\n * Sets the origin, relative to which to position the overlay.\n * Using an element origin is useful for building components that need to be positioned\n * relatively to a trigger (e.g. dropdown menus or tooltips), whereas using a point can be\n * used for cases like contextual menus which open relative to the user's pointer.\n * @param origin Reference to the new origin.\n */\n setOrigin(origin) {\n this._origin = origin;\n return this;\n }\n /**\n * Sets the default offset for the overlay's connection point on the x-axis.\n * @param offset New offset in the X axis.\n */\n withDefaultOffsetX(offset) {\n this._offsetX = offset;\n return this;\n }\n /**\n * Sets the default offset for the overlay's connection point on the y-axis.\n * @param offset New offset in the Y axis.\n */\n withDefaultOffsetY(offset) {\n this._offsetY = offset;\n return this;\n }\n /**\n * Configures that the position strategy should set a `transform-origin` on some elements\n * inside the overlay, depending on the current position that is being applied. This is\n * useful for the cases where the origin of an animation can change depending on the\n * alignment of the overlay.\n * @param selector CSS selector that will be used to find the target\n * elements onto which to set the transform origin.\n */\n withTransformOriginOn(selector) {\n this._transformOriginSelector = selector;\n return this;\n }\n /**\n * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\n */\n _getOriginPoint(originRect, pos) {\n let x;\n if (pos.originX == 'center') {\n // Note: when centering we should always use the `left`\n // offset, otherwise the position will be wrong in RTL.\n x = originRect.left + (originRect.width / 2);\n }\n else {\n const startX = this._isRtl() ? originRect.right : originRect.left;\n const endX = this._isRtl() ? originRect.left : originRect.right;\n x = pos.originX == 'start' ? startX : endX;\n }\n let y;\n if (pos.originY == 'center') {\n y = originRect.top + (originRect.height / 2);\n }\n else {\n y = pos.originY == 'top' ? originRect.top : originRect.bottom;\n }\n return { x, y };\n }\n /**\n * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\n * origin point to which the overlay should be connected.\n */\n _getOverlayPoint(originPoint, overlayRect, pos) {\n // Calculate the (overlayStartX, overlayStartY), the start of the\n // potential overlay position relative to the origin point.\n let overlayStartX;\n if (pos.overlayX == 'center') {\n overlayStartX = -overlayRect.width / 2;\n }\n else if (pos.overlayX === 'start') {\n overlayStartX = this._isRtl() ? -overlayRect.width : 0;\n }\n else {\n overlayStartX = this._isRtl() ? 0 : -overlayRect.width;\n }\n let overlayStartY;\n if (pos.overlayY == 'center') {\n overlayStartY = -overlayRect.height / 2;\n }\n else {\n overlayStartY = pos.overlayY == 'top' ? 0 : -overlayRect.height;\n }\n // The (x, y) coordinates of the overlay.\n return {\n x: originPoint.x + overlayStartX,\n y: originPoint.y + overlayStartY,\n };\n }\n /** Gets how well an overlay at the given point will fit within the viewport. */\n _getOverlayFit(point, rawOverlayRect, viewport, position) {\n // Round the overlay rect when comparing against the\n // viewport, because the viewport is always rounded.\n const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n let { x, y } = point;\n let offsetX = this._getOffset(position, 'x');\n let offsetY = this._getOffset(position, 'y');\n // Account for the offsets since they could push the overlay out of the viewport.\n if (offsetX) {\n x += offsetX;\n }\n if (offsetY) {\n y += offsetY;\n }\n // How much the overlay would overflow at this position, on each side.\n let leftOverflow = 0 - x;\n let rightOverflow = (x + overlay.width) - viewport.width;\n let topOverflow = 0 - y;\n let bottomOverflow = (y + overlay.height) - viewport.height;\n // Visible parts of the element on each axis.\n let visibleWidth = this._subtractOverflows(overlay.width, leftOverflow, rightOverflow);\n let visibleHeight = this._subtractOverflows(overlay.height, topOverflow, bottomOverflow);\n let visibleArea = visibleWidth * visibleHeight;\n return {\n visibleArea,\n isCompletelyWithinViewport: (overlay.width * overlay.height) === visibleArea,\n fitsInViewportVertically: visibleHeight === overlay.height,\n fitsInViewportHorizontally: visibleWidth == overlay.width,\n };\n }\n /**\n * Whether the overlay can fit within the viewport when it may resize either its width or height.\n * @param fit How well the overlay fits in the viewport at some position.\n * @param point The (x, y) coordinates of the overlat at some position.\n * @param viewport The geometry of the viewport.\n */\n _canFitWithFlexibleDimensions(fit, point, viewport) {\n if (this._hasFlexibleDimensions) {\n const availableHeight = viewport.bottom - point.y;\n const availableWidth = viewport.right - point.x;\n const minHeight = getPixelValue(this._overlayRef.getConfig().minHeight);\n const minWidth = getPixelValue(this._overlayRef.getConfig().minWidth);\n const verticalFit = fit.fitsInViewportVertically ||\n (minHeight != null && minHeight <= availableHeight);\n const horizontalFit = fit.fitsInViewportHorizontally ||\n (minWidth != null && minWidth <= availableWidth);\n return verticalFit && horizontalFit;\n }\n return false;\n }\n /**\n * Gets the point at which the overlay can be \"pushed\" on-screen. If the overlay is larger than\n * the viewport, the top-left corner will be pushed on-screen (with overflow occuring on the\n * right and bottom).\n *\n * @param start Starting point from which the overlay is pushed.\n * @param overlay Dimensions of the overlay.\n * @param scrollPosition Current viewport scroll position.\n * @returns The point at which to position the overlay after pushing. This is effectively a new\n * originPoint.\n */\n _pushOverlayOnScreen(start, rawOverlayRect, scrollPosition) {\n // If the position is locked and we've pushed the overlay already, reuse the previous push\n // amount, rather than pushing it again. If we were to continue pushing, the element would\n // remain in the viewport, which goes against the expectations when position locking is enabled.\n if (this._previousPushAmount && this._positionLocked) {\n return {\n x: start.x + this._previousPushAmount.x,\n y: start.y + this._previousPushAmount.y\n };\n }\n // Round the overlay rect when comparing against the\n // viewport, because the viewport is always rounded.\n const overlay = getRoundedBoundingClientRect(rawOverlayRect);\n const viewport = this._viewportRect;\n // Determine how much the overlay goes outside the viewport on each\n // side, which we'll use to decide which direction to push it.\n const overflowRight = Math.max(start.x + overlay.width - viewport.width, 0);\n const overflowBottom = Math.max(start.y + overlay.height - viewport.height, 0);\n const overflowTop = Math.max(viewport.top - scrollPosition.top - start.y, 0);\n const overflowLeft = Math.max(viewport.left - scrollPosition.left - start.x, 0);\n // Amount by which to push the overlay in each axis such that it remains on-screen.\n let pushX = 0;\n let pushY = 0;\n // If the overlay fits completely within the bounds of the viewport, push it from whichever\n // direction is goes off-screen. Otherwise, push the top-left corner such that its in the\n // viewport and allow for the trailing end of the overlay to go out of bounds.\n if (overlay.width <= viewport.width) {\n pushX = overflowLeft || -overflowRight;\n }\n else {\n pushX = start.x < this._viewportMargin ? (viewport.left - scrollPosition.left) - start.x : 0;\n }\n if (overlay.height <= viewport.height) {\n pushY = overflowTop || -overflowBottom;\n }\n else {\n pushY = start.y < this._viewportMargin ? (viewport.top - scrollPosition.top) - start.y : 0;\n }\n this._previousPushAmount = { x: pushX, y: pushY };\n return {\n x: start.x + pushX,\n y: start.y + pushY,\n };\n }\n /**\n * Applies a computed position to the overlay and emits a position change.\n * @param position The position preference\n * @param originPoint The point on the origin element where the overlay is connected.\n */\n _applyPosition(position, originPoint) {\n this._setTransformOrigin(position);\n this._setOverlayElementStyles(originPoint, position);\n this._setBoundingBoxStyles(originPoint, position);\n if (position.panelClass) {\n this._addPanelClasses(position.panelClass);\n }\n // Save the last connected position in case the position needs to be re-calculated.\n this._lastPosition = position;\n // Notify that the position has been changed along with its change properties.\n // We only emit if we've got any subscriptions, because the scroll visibility\n // calculcations can be somewhat expensive.\n if (this._positionChanges.observers.length) {\n const scrollableViewProperties = this._getScrollVisibility();\n const changeEvent = new ConnectedOverlayPositionChange(position, scrollableViewProperties);\n this._positionChanges.next(changeEvent);\n }\n this._isInitialRender = false;\n }\n /** Sets the transform origin based on the configured selector and the passed-in position. */\n _setTransformOrigin(position) {\n if (!this._transformOriginSelector) {\n return;\n }\n const elements = this._boundingBox.querySelectorAll(this._transformOriginSelector);\n let xOrigin;\n let yOrigin = position.overlayY;\n if (position.overlayX === 'center') {\n xOrigin = 'center';\n }\n else if (this._isRtl()) {\n xOrigin = position.overlayX === 'start' ? 'right' : 'left';\n }\n else {\n xOrigin = position.overlayX === 'start' ? 'left' : 'right';\n }\n for (let i = 0; i < elements.length; i++) {\n elements[i].style.transformOrigin = `${xOrigin} ${yOrigin}`;\n }\n }\n /**\n * Gets the position and size of the overlay's sizing container.\n *\n * This method does no measuring and applies no styles so that we can cheaply compute the\n * bounds for all positions and choose the best fit based on these results.\n */\n _calculateBoundingBoxRect(origin, position) {\n const viewport = this._viewportRect;\n const isRtl = this._isRtl();\n let height, top, bottom;\n if (position.overlayY === 'top') {\n // Overlay is opening \"downward\" and thus is bound by the bottom viewport edge.\n top = origin.y;\n height = viewport.height - top + this._viewportMargin;\n }\n else if (position.overlayY === 'bottom') {\n // Overlay is opening \"upward\" and thus is bound by the top viewport edge. We need to add\n // the viewport margin back in, because the viewport rect is narrowed down to remove the\n // margin, whereas the `origin` position is calculated based on its `ClientRect`.\n bottom = viewport.height - origin.y + this._viewportMargin * 2;\n height = viewport.height - bottom + this._viewportMargin;\n }\n else {\n // If neither top nor bottom, it means that the overlay is vertically centered on the\n // origin point. Note that we want the position relative to the viewport, rather than\n // the page, which is why we don't use something like `viewport.bottom - origin.y` and\n // `origin.y - viewport.top`.\n const smallestDistanceToViewportEdge = Math.min(viewport.bottom - origin.y + viewport.top, origin.y);\n const previousHeight = this._lastBoundingBoxSize.height;\n height = smallestDistanceToViewportEdge * 2;\n top = origin.y - smallestDistanceToViewportEdge;\n if (height > previousHeight && !this._isInitialRender && !this._growAfterOpen) {\n top = origin.y - (previousHeight / 2);\n }\n }\n // The overlay is opening 'right-ward' (the content flows to the right).\n const isBoundedByRightViewportEdge = (position.overlayX === 'start' && !isRtl) ||\n (position.overlayX === 'end' && isRtl);\n // The overlay is opening 'left-ward' (the content flows to the left).\n const isBoundedByLeftViewportEdge = (position.overlayX === 'end' && !isRtl) ||\n (position.overlayX === 'start' && isRtl);\n let width, left, right;\n if (isBoundedByLeftViewportEdge) {\n right = viewport.width - origin.x + this._viewportMargin;\n width = origin.x - this._viewportMargin;\n }\n else if (isBoundedByRightViewportEdge) {\n left = origin.x;\n width = viewport.right - origin.x;\n }\n else {\n // If neither start nor end, it means that the overlay is horizontally centered on the\n // origin point. Note that we want the position relative to the viewport, rather than\n // the page, which is why we don't use something like `viewport.right - origin.x` and\n // `origin.x - viewport.left`.\n const smallestDistanceToViewportEdge = Math.min(viewport.right - origin.x + viewport.left, origin.x);\n const previousWidth = this._lastBoundingBoxSize.width;\n width = smallestDistanceToViewportEdge * 2;\n left = origin.x - smallestDistanceToViewportEdge;\n if (width > previousWidth && !this._isInitialRender && !this._growAfterOpen) {\n left = origin.x - (previousWidth / 2);\n }\n }\n return { top: top, left: left, bottom: bottom, right: right, width, height };\n }\n /**\n * Sets the position and size of the overlay's sizing wrapper. The wrapper is positioned on the\n * origin's connection point and stetches to the bounds of the viewport.\n *\n * @param origin The point on the origin element where the overlay is connected.\n * @param position The position preference\n */\n _setBoundingBoxStyles(origin, position) {\n const boundingBoxRect = this._calculateBoundingBoxRect(origin, position);\n // It's weird if the overlay *grows* while scrolling, so we take the last size into account\n // when applying a new size.\n if (!this._isInitialRender && !this._growAfterOpen) {\n boundingBoxRect.height = Math.min(boundingBoxRect.height, this._lastBoundingBoxSize.height);\n boundingBoxRect.width = Math.min(boundingBoxRect.width, this._lastBoundingBoxSize.width);\n }\n const styles = {};\n if (this._hasExactPosition()) {\n styles.top = styles.left = '0';\n styles.bottom = styles.right = styles.maxHeight = styles.maxWidth = '';\n styles.width = styles.height = '100%';\n }\n else {\n const maxHeight = this._overlayRef.getConfig().maxHeight;\n const maxWidth = this._overlayRef.getConfig().maxWidth;\n styles.height = coerceCssPixelValue(boundingBoxRect.height);\n styles.top = coerceCssPixelValue(boundingBoxRect.top);\n styles.bottom = coerceCssPixelValue(boundingBoxRect.bottom);\n styles.width = coerceCssPixelValue(boundingBoxRect.width);\n styles.left = coerceCssPixelValue(boundingBoxRect.left);\n styles.right = coerceCssPixelValue(boundingBoxRect.right);\n // Push the pane content towards the proper direction.\n if (position.overlayX === 'center') {\n styles.alignItems = 'center';\n }\n else {\n styles.alignItems = position.overlayX === 'end' ? 'flex-end' : 'flex-start';\n }\n if (position.overlayY === 'center') {\n styles.justifyContent = 'center';\n }\n else {\n styles.justifyContent = position.overlayY === 'bottom' ? 'flex-end' : 'flex-start';\n }\n if (maxHeight) {\n styles.maxHeight = coerceCssPixelValue(maxHeight);\n }\n if (maxWidth) {\n styles.maxWidth = coerceCssPixelValue(maxWidth);\n }\n }\n this._lastBoundingBoxSize = boundingBoxRect;\n extendStyles(this._boundingBox.style, styles);\n }\n /** Resets the styles for the bounding box so that a new positioning can be computed. */\n _resetBoundingBoxStyles() {\n extendStyles(this._boundingBox.style, {\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n height: '',\n width: '',\n alignItems: '',\n justifyContent: '',\n });\n }\n /** Resets the styles for the overlay pane so that a new positioning can be computed. */\n _resetOverlayElementStyles() {\n extendStyles(this._pane.style, {\n top: '',\n left: '',\n bottom: '',\n right: '',\n position: '',\n transform: '',\n });\n }\n /** Sets positioning styles to the overlay element. */\n _setOverlayElementStyles(originPoint, position) {\n const styles = {};\n const hasExactPosition = this._hasExactPosition();\n const hasFlexibleDimensions = this._hasFlexibleDimensions;\n const config = this._overlayRef.getConfig();\n if (hasExactPosition) {\n const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n extendStyles(styles, this._getExactOverlayY(position, originPoint, scrollPosition));\n extendStyles(styles, this._getExactOverlayX(position, originPoint, scrollPosition));\n }\n else {\n styles.position = 'static';\n }\n // Use a transform to apply the offsets. We do this because the `center` positions rely on\n // being in the normal flex flow and setting a `top` / `left` at all will completely throw\n // off the position. We also can't use margins, because they won't have an effect in some\n // cases where the element doesn't have anything to \"push off of\". Finally, this works\n // better both with flexible and non-flexible positioning.\n let transformString = '';\n let offsetX = this._getOffset(position, 'x');\n let offsetY = this._getOffset(position, 'y');\n if (offsetX) {\n transformString += `translateX(${offsetX}px) `;\n }\n if (offsetY) {\n transformString += `translateY(${offsetY}px)`;\n }\n styles.transform = transformString.trim();\n // If a maxWidth or maxHeight is specified on the overlay, we remove them. We do this because\n // we need these values to both be set to \"100%\" for the automatic flexible sizing to work.\n // The maxHeight and maxWidth are set on the boundingBox in order to enforce the constraint.\n // Note that this doesn't apply when we have an exact position, in which case we do want to\n // apply them because they'll be cleared from the bounding box.\n if (config.maxHeight) {\n if (hasExactPosition) {\n styles.maxHeight = coerceCssPixelValue(config.maxHeight);\n }\n else if (hasFlexibleDimensions) {\n styles.maxHeight = '';\n }\n }\n if (config.maxWidth) {\n if (hasExactPosition) {\n styles.maxWidth = coerceCssPixelValue(config.maxWidth);\n }\n else if (hasFlexibleDimensions) {\n styles.maxWidth = '';\n }\n }\n extendStyles(this._pane.style, styles);\n }\n /** Gets the exact top/bottom for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayY(position, originPoint, scrollPosition) {\n // Reset any existing styles. This is necessary in case the\n // preferred position has changed since the last `apply`.\n let styles = { top: '', bottom: '' };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n let virtualKeyboardOffset = this._overlayContainer.getContainerElement().getBoundingClientRect().top;\n // Normally this would be zero, however when the overlay is attached to an input (e.g. in an\n // autocomplete), mobile browsers will shift everything in order to put the input in the middle\n // of the screen and to make space for the virtual keyboard. We need to account for this offset,\n // otherwise our positioning will be thrown off.\n overlayPoint.y -= virtualKeyboardOffset;\n // We want to set either `top` or `bottom` based on whether the overlay wants to appear\n // above or below the origin and the direction in which the element will expand.\n if (position.overlayY === 'bottom') {\n // When using `bottom`, we adjust the y position such that it is the distance\n // from the bottom of the viewport rather than the top.\n const documentHeight = this._document.documentElement.clientHeight;\n styles.bottom = `${documentHeight - (overlayPoint.y + this._overlayRect.height)}px`;\n }\n else {\n styles.top = coerceCssPixelValue(overlayPoint.y);\n }\n return styles;\n }\n /** Gets the exact left/right for the overlay when not using flexible sizing or when pushing. */\n _getExactOverlayX(position, originPoint, scrollPosition) {\n // Reset any existing styles. This is necessary in case the preferred position has\n // changed since the last `apply`.\n let styles = { left: '', right: '' };\n let overlayPoint = this._getOverlayPoint(originPoint, this._overlayRect, position);\n if (this._isPushed) {\n overlayPoint = this._pushOverlayOnScreen(overlayPoint, this._overlayRect, scrollPosition);\n }\n // We want to set either `left` or `right` based on whether the overlay wants to appear \"before\"\n // or \"after\" the origin, which determines the direction in which the element will expand.\n // For the horizontal axis, the meaning of \"before\" and \"after\" change based on whether the\n // page is in RTL or LTR.\n let horizontalStyleProperty;\n if (this._isRtl()) {\n horizontalStyleProperty = position.overlayX === 'end' ? 'left' : 'right';\n }\n else {\n horizontalStyleProperty = position.overlayX === 'end' ? 'right' : 'left';\n }\n // When we're setting `right`, we adjust the x position such that it is the distance\n // from the right edge of the viewport rather than the left edge.\n if (horizontalStyleProperty === 'right') {\n const documentWidth = this._document.documentElement.clientWidth;\n styles.right = `${documentWidth - (overlayPoint.x + this._overlayRect.width)}px`;\n }\n else {\n styles.left = coerceCssPixelValue(overlayPoint.x);\n }\n return styles;\n }\n /**\n * Gets the view properties of the trigger and overlay, including whether they are clipped\n * or completely outside the view of any of the strategy's scrollables.\n */\n _getScrollVisibility() {\n // Note: needs fresh rects since the position could've changed.\n const originBounds = this._getOriginRect();\n const overlayBounds = this._pane.getBoundingClientRect();\n // TODO(jelbourn): instead of needing all of the client rects for these scrolling containers\n // every time, we should be able to use the scrollTop of the containers if the size of those\n // containers hasn't changed.\n const scrollContainerBounds = this._scrollables.map(scrollable => {\n return scrollable.getElementRef().nativeElement.getBoundingClientRect();\n });\n return {\n isOriginClipped: isElementClippedByScrolling(originBounds, scrollContainerBounds),\n isOriginOutsideView: isElementScrolledOutsideView(originBounds, scrollContainerBounds),\n isOverlayClipped: isElementClippedByScrolling(overlayBounds, scrollContainerBounds),\n isOverlayOutsideView: isElementScrolledOutsideView(overlayBounds, scrollContainerBounds),\n };\n }\n /** Subtracts the amount that an element is overflowing on an axis from its length. */\n _subtractOverflows(length, ...overflows) {\n return overflows.reduce((currentValue, currentOverflow) => {\n return currentValue - Math.max(currentOverflow, 0);\n }, length);\n }\n /** Narrows the given viewport rect by the current _viewportMargin. */\n _getNarrowedViewportRect() {\n // We recalculate the viewport rect here ourselves, rather than using the ViewportRuler,\n // because we want to use the `clientWidth` and `clientHeight` as the base. The difference\n // being that the client properties don't include the scrollbar, as opposed to `innerWidth`\n // and `innerHeight` that do. This is necessary, because the overlay container uses\n // 100% `width` and `height` which don't include the scrollbar either.\n const width = this._document.documentElement.clientWidth;\n const height = this._document.documentElement.clientHeight;\n const scrollPosition = this._viewportRuler.getViewportScrollPosition();\n return {\n top: scrollPosition.top + this._viewportMargin,\n left: scrollPosition.left + this._viewportMargin,\n right: scrollPosition.left + width - this._viewportMargin,\n bottom: scrollPosition.top + height - this._viewportMargin,\n width: width - (2 * this._viewportMargin),\n height: height - (2 * this._viewportMargin),\n };\n }\n /** Whether the we're dealing with an RTL context */\n _isRtl() {\n return this._overlayRef.getDirection() === 'rtl';\n }\n /** Determines whether the overlay uses exact or flexible positioning. */\n _hasExactPosition() {\n return !this._hasFlexibleDimensions || this._isPushed;\n }\n /** Retrieves the offset of a position along the x or y axis. */\n _getOffset(position, axis) {\n if (axis === 'x') {\n // We don't do something like `position['offset' + axis]` in\n // order to avoid breking minifiers that rename properties.\n return position.offsetX == null ? this._offsetX : position.offsetX;\n }\n return position.offsetY == null ? this._offsetY : position.offsetY;\n }\n /** Validates that the current position match the expected values. */\n _validatePositions() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._preferredPositions.length) {\n throw Error('FlexibleConnectedPositionStrategy: At least one position is required.');\n }\n // TODO(crisbeto): remove these once Angular's template type\n // checking is advanced enough to catch these cases.\n this._preferredPositions.forEach(pair => {\n validateHorizontalPosition('originX', pair.originX);\n validateVerticalPosition('originY', pair.originY);\n validateHorizontalPosition('overlayX', pair.overlayX);\n validateVerticalPosition('overlayY', pair.overlayY);\n });\n }\n }\n /** Adds a single CSS class or an array of classes on the overlay panel. */\n _addPanelClasses(cssClasses) {\n if (this._pane) {\n coerceArray(cssClasses).forEach(cssClass => {\n if (cssClass !== '' && this._appliedPanelClasses.indexOf(cssClass) === -1) {\n this._appliedPanelClasses.push(cssClass);\n this._pane.classList.add(cssClass);\n }\n });\n }\n }\n /** Clears the classes that the position strategy has applied from the overlay panel. */\n _clearPanelClasses() {\n if (this._pane) {\n this._appliedPanelClasses.forEach(cssClass => {\n this._pane.classList.remove(cssClass);\n });\n this._appliedPanelClasses = [];\n }\n }\n /** Returns the ClientRect of the current origin. */\n _getOriginRect() {\n const origin = this._origin;\n if (origin instanceof ElementRef) {\n return origin.nativeElement.getBoundingClientRect();\n }\n // Check for Element so SVG elements are also supported.\n if (origin instanceof Element) {\n return origin.getBoundingClientRect();\n }\n const width = origin.width || 0;\n const height = origin.height || 0;\n // If the origin is a point, return a client rect as if it was a 0x0 element at the point.\n return {\n top: origin.y,\n bottom: origin.y + height,\n left: origin.x,\n right: origin.x + width,\n height,\n width\n };\n }\n}\n/** Shallow-extends a stylesheet object with another stylesheet object. */\nfunction extendStyles(destination, source) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n destination[key] = source[key];\n }\n }\n return destination;\n}\n/**\n * Extracts the pixel value as a number from a value, if it's a number\n * or a CSS pixel string (e.g. `1337px`). Otherwise returns null.\n */\nfunction getPixelValue(input) {\n if (typeof input !== 'number' && input != null) {\n const [value, units] = input.split(cssUnitPattern);\n return (!units || units === 'px') ? parseFloat(value) : null;\n }\n return input || null;\n}\n/**\n * Gets a version of an element's bounding `ClientRect` where all the values are rounded down to\n * the nearest pixel. This allows us to account for the cases where there may be sub-pixel\n * deviations in the `ClientRect` returned by the browser (e.g. when zoomed in with a percentage\n * size, see #21350).\n */\nfunction getRoundedBoundingClientRect(clientRect) {\n return {\n top: Math.floor(clientRect.top),\n right: Math.floor(clientRect.right),\n bottom: Math.floor(clientRect.bottom),\n left: Math.floor(clientRect.left),\n width: Math.floor(clientRect.width),\n height: Math.floor(clientRect.height)\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * implicit position relative to some origin element. The relative position is defined in terms of\n * a point on the origin element that is connected to a point on the overlay element. For example,\n * a basic dropdown is connecting the bottom-left corner of the origin to the top-left corner\n * of the overlay.\n * @deprecated Use `FlexibleConnectedPositionStrategy` instead.\n * @breaking-change 8.0.0\n */\nclass ConnectedPositionStrategy {\n constructor(originPos, overlayPos, connectedTo, viewportRuler, document, platform, overlayContainer) {\n /** Ordered list of preferred positions, from most to least desirable. */\n this._preferredPositions = [];\n // Since the `ConnectedPositionStrategy` is deprecated and we don't want to maintain\n // the extra logic, we create an instance of the positioning strategy that has some\n // defaults that make it behave as the old position strategy and to which we'll\n // proxy all of the API calls.\n this._positionStrategy = new FlexibleConnectedPositionStrategy(connectedTo, viewportRuler, document, platform, overlayContainer)\n .withFlexibleDimensions(false)\n .withPush(false)\n .withViewportMargin(0);\n this.withFallbackPosition(originPos, overlayPos);\n this.onPositionChange = this._positionStrategy.positionChanges;\n }\n /** Ordered list of preferred positions, from most to least desirable. */\n get positions() {\n return this._preferredPositions;\n }\n /** Attach this position strategy to an overlay. */\n attach(overlayRef) {\n this._overlayRef = overlayRef;\n this._positionStrategy.attach(overlayRef);\n if (this._direction) {\n overlayRef.setDirection(this._direction);\n this._direction = null;\n }\n }\n /** Disposes all resources used by the position strategy. */\n dispose() {\n this._positionStrategy.dispose();\n }\n /** @docs-private */\n detach() {\n this._positionStrategy.detach();\n }\n /**\n * Updates the position of the overlay element, using whichever preferred position relative\n * to the origin fits on-screen.\n * @docs-private\n */\n apply() {\n this._positionStrategy.apply();\n }\n /**\n * Re-positions the overlay element with the trigger in its last calculated position,\n * even if a position higher in the \"preferred positions\" list would now fit. This\n * allows one to re-align the panel without changing the orientation of the panel.\n */\n recalculateLastPosition() {\n this._positionStrategy.reapplyLastPosition();\n }\n /**\n * Sets the list of Scrollable containers that host the origin element so that\n * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\n * Scrollable must be an ancestor element of the strategy's origin element.\n */\n withScrollableContainers(scrollables) {\n this._positionStrategy.withScrollableContainers(scrollables);\n }\n /**\n * Adds a new preferred fallback position.\n * @param originPos\n * @param overlayPos\n */\n withFallbackPosition(originPos, overlayPos, offsetX, offsetY) {\n const position = new ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY);\n this._preferredPositions.push(position);\n this._positionStrategy.withPositions(this._preferredPositions);\n return this;\n }\n /**\n * Sets the layout direction so the overlay's position can be adjusted to match.\n * @param dir New layout direction.\n */\n withDirection(dir) {\n // Since the direction might be declared before the strategy is attached,\n // we save the value in a temporary property and we'll transfer it to the\n // overlay ref on attachment.\n if (this._overlayRef) {\n this._overlayRef.setDirection(dir);\n }\n else {\n this._direction = dir;\n }\n return this;\n }\n /**\n * Sets an offset for the overlay's connection point on the x-axis\n * @param offset New offset in the X axis.\n */\n withOffsetX(offset) {\n this._positionStrategy.withDefaultOffsetX(offset);\n return this;\n }\n /**\n * Sets an offset for the overlay's connection point on the y-axis\n * @param offset New offset in the Y axis.\n */\n withOffsetY(offset) {\n this._positionStrategy.withDefaultOffsetY(offset);\n return this;\n }\n /**\n * Sets whether the overlay's position should be locked in after it is positioned\n * initially. When an overlay is locked in, it won't attempt to reposition itself\n * when the position is re-applied (e.g. when the user scrolls away).\n * @param isLocked Whether the overlay should locked in.\n */\n withLockedPosition(isLocked) {\n this._positionStrategy.withLockedPosition(isLocked);\n return this;\n }\n /**\n * Overwrites the current set of positions with an array of new ones.\n * @param positions Position pairs to be set on the strategy.\n */\n withPositions(positions) {\n this._preferredPositions = positions.slice();\n this._positionStrategy.withPositions(this._preferredPositions);\n return this;\n }\n /**\n * Sets the origin element, relative to which to position the overlay.\n * @param origin Reference to the new origin element.\n */\n setOrigin(origin) {\n this._positionStrategy.setOrigin(origin);\n return this;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Class to be added to the overlay pane wrapper. */\nconst wrapperClass = 'cdk-global-overlay-wrapper';\n/**\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\n * explicit position relative to the browser's viewport. We use flexbox, instead of\n * transforms, in order to avoid issues with subpixel rendering which can cause the\n * element to become blurry.\n */\nclass GlobalPositionStrategy {\n constructor() {\n this._cssPosition = 'static';\n this._topOffset = '';\n this._bottomOffset = '';\n this._leftOffset = '';\n this._rightOffset = '';\n this._alignItems = '';\n this._justifyContent = '';\n this._width = '';\n this._height = '';\n }\n attach(overlayRef) {\n const config = overlayRef.getConfig();\n this._overlayRef = overlayRef;\n if (this._width && !config.width) {\n overlayRef.updateSize({ width: this._width });\n }\n if (this._height && !config.height) {\n overlayRef.updateSize({ height: this._height });\n }\n overlayRef.hostElement.classList.add(wrapperClass);\n this._isDisposed = false;\n }\n /**\n * Sets the top position of the overlay. Clears any previously set vertical position.\n * @param value New top offset.\n */\n top(value = '') {\n this._bottomOffset = '';\n this._topOffset = value;\n this._alignItems = 'flex-start';\n return this;\n }\n /**\n * Sets the left position of the overlay. Clears any previously set horizontal position.\n * @param value New left offset.\n */\n left(value = '') {\n this._rightOffset = '';\n this._leftOffset = value;\n this._justifyContent = 'flex-start';\n return this;\n }\n /**\n * Sets the bottom position of the overlay. Clears any previously set vertical position.\n * @param value New bottom offset.\n */\n bottom(value = '') {\n this._topOffset = '';\n this._bottomOffset = value;\n this._alignItems = 'flex-end';\n return this;\n }\n /**\n * Sets the right position of the overlay. Clears any previously set horizontal position.\n * @param value New right offset.\n */\n right(value = '') {\n this._leftOffset = '';\n this._rightOffset = value;\n this._justifyContent = 'flex-end';\n return this;\n }\n /**\n * Sets the overlay width and clears any previously set width.\n * @param value New width for the overlay\n * @deprecated Pass the `width` through the `OverlayConfig`.\n * @breaking-change 8.0.0\n */\n width(value = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({ width: value });\n }\n else {\n this._width = value;\n }\n return this;\n }\n /**\n * Sets the overlay height and clears any previously set height.\n * @param value New height for the overlay\n * @deprecated Pass the `height` through the `OverlayConfig`.\n * @breaking-change 8.0.0\n */\n height(value = '') {\n if (this._overlayRef) {\n this._overlayRef.updateSize({ height: value });\n }\n else {\n this._height = value;\n }\n return this;\n }\n /**\n * Centers the overlay horizontally with an optional offset.\n * Clears any previously set horizontal position.\n *\n * @param offset Overlay offset from the horizontal center.\n */\n centerHorizontally(offset = '') {\n this.left(offset);\n this._justifyContent = 'center';\n return this;\n }\n /**\n * Centers the overlay vertically with an optional offset.\n * Clears any previously set vertical position.\n *\n * @param offset Overlay offset from the vertical center.\n */\n centerVertically(offset = '') {\n this.top(offset);\n this._alignItems = 'center';\n return this;\n }\n /**\n * Apply the position to the element.\n * @docs-private\n */\n apply() {\n // Since the overlay ref applies the strategy asynchronously, it could\n // have been disposed before it ends up being applied. If that is the\n // case, we shouldn't do anything.\n if (!this._overlayRef || !this._overlayRef.hasAttached()) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parentStyles = this._overlayRef.hostElement.style;\n const config = this._overlayRef.getConfig();\n const { width, height, maxWidth, maxHeight } = config;\n const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') &&\n (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');\n const shouldBeFlushVertically = (height === '100%' || height === '100vh') &&\n (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');\n styles.position = this._cssPosition;\n styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset;\n styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;\n styles.marginBottom = this._bottomOffset;\n styles.marginRight = this._rightOffset;\n if (shouldBeFlushHorizontally) {\n parentStyles.justifyContent = 'flex-start';\n }\n else if (this._justifyContent === 'center') {\n parentStyles.justifyContent = 'center';\n }\n else if (this._overlayRef.getConfig().direction === 'rtl') {\n // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we\n // don't want that because our positioning is explicitly `left` and `right`, hence\n // why we do another inversion to ensure that the overlay stays in the same position.\n // TODO: reconsider this if we add `start` and `end` methods.\n if (this._justifyContent === 'flex-start') {\n parentStyles.justifyContent = 'flex-end';\n }\n else if (this._justifyContent === 'flex-end') {\n parentStyles.justifyContent = 'flex-start';\n }\n }\n else {\n parentStyles.justifyContent = this._justifyContent;\n }\n parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;\n }\n /**\n * Cleans up the DOM changes from the position strategy.\n * @docs-private\n */\n dispose() {\n if (this._isDisposed || !this._overlayRef) {\n return;\n }\n const styles = this._overlayRef.overlayElement.style;\n const parent = this._overlayRef.hostElement;\n const parentStyles = parent.style;\n parent.classList.remove(wrapperClass);\n parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop =\n styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';\n this._overlayRef = null;\n this._isDisposed = true;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Builder for overlay position strategy. */\nclass OverlayPositionBuilder {\n constructor(_viewportRuler, _document, _platform, _overlayContainer) {\n this._viewportRuler = _viewportRuler;\n this._document = _document;\n this._platform = _platform;\n this._overlayContainer = _overlayContainer;\n }\n /**\n * Creates a global position strategy.\n */\n global() {\n return new GlobalPositionStrategy();\n }\n /**\n * Creates a relative position strategy.\n * @param elementRef\n * @param originPos\n * @param overlayPos\n * @deprecated Use `flexibleConnectedTo` instead.\n * @breaking-change 8.0.0\n */\n connectedTo(elementRef, originPos, overlayPos) {\n return new ConnectedPositionStrategy(originPos, overlayPos, elementRef, this._viewportRuler, this._document, this._platform, this._overlayContainer);\n }\n /**\n * Creates a flexible position strategy.\n * @param origin Origin relative to which to position the overlay.\n */\n flexibleConnectedTo(origin) {\n return new FlexibleConnectedPositionStrategy(origin, this._viewportRuler, this._document, this._platform, this._overlayContainer);\n }\n}\nOverlayPositionBuilder.ɵfac = function OverlayPositionBuilder_Factory(t) { return new (t || OverlayPositionBuilder)(ɵngcc0.ɵɵinject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc2.Platform), ɵngcc0.ɵɵinject(OverlayContainer)); };\nOverlayPositionBuilder.ɵprov = i0.ɵɵdefineInjectable({ factory: function OverlayPositionBuilder_Factory() { return new OverlayPositionBuilder(i0.ɵɵinject(i1.ViewportRuler), i0.ɵɵinject(i1$1.DOCUMENT), i0.ɵɵinject(i2.Platform), i0.ɵɵinject(OverlayContainer)); }, token: OverlayPositionBuilder, providedIn: \"root\" });\nOverlayPositionBuilder.ctorParameters = () => [\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Platform },\n { type: OverlayContainer }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OverlayPositionBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc2.Platform }, { type: OverlayContainer }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Next overlay unique ID. */\nlet nextUniqueId = 0;\n// Note that Overlay is *not* scoped to the app root because of the ComponentFactoryResolver\n// which needs to be different depending on where OverlayModule is imported.\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalOutlet, so any kind of Portal can be loaded into one.\n */\nclass Overlay {\n constructor(\n /** Scrolling strategies that can be used when creating an overlay. */\n scrollStrategies, _overlayContainer, _componentFactoryResolver, _positionBuilder, _keyboardDispatcher, _injector, _ngZone, _document, _directionality, _location, _outsideClickDispatcher) {\n this.scrollStrategies = scrollStrategies;\n this._overlayContainer = _overlayContainer;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._positionBuilder = _positionBuilder;\n this._keyboardDispatcher = _keyboardDispatcher;\n this._injector = _injector;\n this._ngZone = _ngZone;\n this._document = _document;\n this._directionality = _directionality;\n this._location = _location;\n this._outsideClickDispatcher = _outsideClickDispatcher;\n }\n /**\n * Creates an overlay.\n * @param config Configuration applied to the overlay.\n * @returns Reference to the created overlay.\n */\n create(config) {\n const host = this._createHostElement();\n const pane = this._createPaneElement(host);\n const portalOutlet = this._createPortalOutlet(pane);\n const overlayConfig = new OverlayConfig(config);\n overlayConfig.direction = overlayConfig.direction || this._directionality.value;\n return new OverlayRef(portalOutlet, host, pane, overlayConfig, this._ngZone, this._keyboardDispatcher, this._document, this._location, this._outsideClickDispatcher);\n }\n /**\n * Gets a position builder that can be used, via fluent API,\n * to construct and configure a position strategy.\n * @returns An overlay position builder.\n */\n position() {\n return this._positionBuilder;\n }\n /**\n * Creates the DOM element for an overlay and appends it to the overlay container.\n * @returns Newly-created pane element\n */\n _createPaneElement(host) {\n const pane = this._document.createElement('div');\n pane.id = `cdk-overlay-${nextUniqueId++}`;\n pane.classList.add('cdk-overlay-pane');\n host.appendChild(pane);\n return pane;\n }\n /**\n * Creates the host element that wraps around an overlay\n * and can be used for advanced positioning.\n * @returns Newly-create host element.\n */\n _createHostElement() {\n const host = this._document.createElement('div');\n this._overlayContainer.getContainerElement().appendChild(host);\n return host;\n }\n /**\n * Create a DomPortalOutlet into which the overlay content can be loaded.\n * @param pane The DOM element to turn into a portal outlet.\n * @returns A portal outlet for the given DOM element.\n */\n _createPortalOutlet(pane) {\n // We have to resolve the ApplicationRef later in order to allow people\n // to use overlay-based providers during app initialization.\n if (!this._appRef) {\n this._appRef = this._injector.get(ApplicationRef);\n }\n return new DomPortalOutlet(pane, this._componentFactoryResolver, this._appRef, this._injector, this._document);\n }\n}\nOverlay.ɵfac = function Overlay_Factory(t) { return new (t || Overlay)(ɵngcc0.ɵɵinject(ScrollStrategyOptions), ɵngcc0.ɵɵinject(OverlayContainer), ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵinject(OverlayPositionBuilder), ɵngcc0.ɵɵinject(OverlayKeyboardDispatcher), ɵngcc0.ɵɵinject(ɵngcc0.Injector), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc3.Directionality), ɵngcc0.ɵɵinject(ɵngcc4.Location), ɵngcc0.ɵɵinject(OverlayOutsideClickDispatcher)); };\nOverlay.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: Overlay, factory: Overlay.ɵfac });\nOverlay.ctorParameters = () => [\n { type: ScrollStrategyOptions },\n { type: OverlayContainer },\n { type: ComponentFactoryResolver },\n { type: OverlayPositionBuilder },\n { type: OverlayKeyboardDispatcher },\n { type: Injector },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Directionality },\n { type: Location },\n { type: OverlayOutsideClickDispatcher }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(Overlay, [{\n type: Injectable\n }], function () { return [{ type: ScrollStrategyOptions }, { type: OverlayContainer }, { type: ɵngcc0.ComponentFactoryResolver }, { type: OverlayPositionBuilder }, { type: OverlayKeyboardDispatcher }, { type: ɵngcc0.Injector }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc3.Directionality }, { type: ɵngcc4.Location }, { type: OverlayOutsideClickDispatcher }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Default set of positions for the overlay. Follows the behavior of a dropdown. */\nconst defaultPositionList = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n }\n];\n/** Injection token that determines the scroll handling while the connected overlay is open. */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY = new InjectionToken('cdk-connected-overlay-scroll-strategy');\n/**\n * Directive applied to an element to make it usable as an origin for an Overlay using a\n * ConnectedPositionStrategy.\n */\nclass CdkOverlayOrigin {\n constructor(\n /** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n}\nCdkOverlayOrigin.ɵfac = function CdkOverlayOrigin_Factory(t) { return new (t || CdkOverlayOrigin)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nCdkOverlayOrigin.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkOverlayOrigin, selectors: [[\"\", \"cdk-overlay-origin\", \"\"], [\"\", \"overlay-origin\", \"\"], [\"\", \"cdkOverlayOrigin\", \"\"]], exportAs: [\"cdkOverlayOrigin\"] });\nCdkOverlayOrigin.ctorParameters = () => [\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkOverlayOrigin, [{\n type: Directive,\n args: [{\n selector: '[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]',\n exportAs: 'cdkOverlayOrigin'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, null); })();\n/**\n * Directive to facilitate declarative creation of an\n * Overlay using a FlexibleConnectedPositionStrategy.\n */\nclass CdkConnectedOverlay {\n // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.\n constructor(_overlay, templateRef, viewContainerRef, scrollStrategyFactory, _dir) {\n this._overlay = _overlay;\n this._dir = _dir;\n this._hasBackdrop = false;\n this._lockPosition = false;\n this._growAfterOpen = false;\n this._flexibleDimensions = false;\n this._push = false;\n this._backdropSubscription = Subscription.EMPTY;\n this._attachSubscription = Subscription.EMPTY;\n this._detachSubscription = Subscription.EMPTY;\n this._positionSubscription = Subscription.EMPTY;\n /** Margin between the overlay and the viewport edges. */\n this.viewportMargin = 0;\n /** Whether the overlay is open. */\n this.open = false;\n /** Whether the overlay can be closed by user interaction. */\n this.disableClose = false;\n /** Event emitted when the backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Event emitted when the position has changed. */\n this.positionChange = new EventEmitter();\n /** Event emitted when the overlay has been attached. */\n this.attach = new EventEmitter();\n /** Event emitted when the overlay has been detached. */\n this.detach = new EventEmitter();\n /** Emits when there are keyboard events that are targeted at the overlay. */\n this.overlayKeydown = new EventEmitter();\n /** Emits when there are mouse outside click events that are targeted at the overlay. */\n this.overlayOutsideClick = new EventEmitter();\n this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);\n this._scrollStrategyFactory = scrollStrategyFactory;\n this.scrollStrategy = this._scrollStrategyFactory();\n }\n /** The offset in pixels for the overlay connection point on the x-axis */\n get offsetX() { return this._offsetX; }\n set offsetX(offsetX) {\n this._offsetX = offsetX;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** The offset in pixels for the overlay connection point on the y-axis */\n get offsetY() { return this._offsetY; }\n set offsetY(offsetY) {\n this._offsetY = offsetY;\n if (this._position) {\n this._updatePositionStrategy(this._position);\n }\n }\n /** Whether or not the overlay should attach a backdrop. */\n get hasBackdrop() { return this._hasBackdrop; }\n set hasBackdrop(value) { this._hasBackdrop = coerceBooleanProperty(value); }\n /** Whether or not the overlay should be locked when scrolling. */\n get lockPosition() { return this._lockPosition; }\n set lockPosition(value) { this._lockPosition = coerceBooleanProperty(value); }\n /** Whether the overlay's width and height can be constrained to fit within the viewport. */\n get flexibleDimensions() { return this._flexibleDimensions; }\n set flexibleDimensions(value) {\n this._flexibleDimensions = coerceBooleanProperty(value);\n }\n /** Whether the overlay can grow after the initial open when flexible positioning is turned on. */\n get growAfterOpen() { return this._growAfterOpen; }\n set growAfterOpen(value) { this._growAfterOpen = coerceBooleanProperty(value); }\n /** Whether the overlay can be pushed on-screen if none of the provided positions fit. */\n get push() { return this._push; }\n set push(value) { this._push = coerceBooleanProperty(value); }\n /** The associated overlay reference. */\n get overlayRef() {\n return this._overlayRef;\n }\n /** The element's layout direction. */\n get dir() {\n return this._dir ? this._dir.value : 'ltr';\n }\n ngOnDestroy() {\n this._attachSubscription.unsubscribe();\n this._detachSubscription.unsubscribe();\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n }\n ngOnChanges(changes) {\n if (this._position) {\n this._updatePositionStrategy(this._position);\n this._overlayRef.updateSize({\n width: this.width,\n minWidth: this.minWidth,\n height: this.height,\n minHeight: this.minHeight,\n });\n if (changes['origin'] && this.open) {\n this._position.apply();\n }\n }\n if (changes['open']) {\n this.open ? this._attachOverlay() : this._detachOverlay();\n }\n }\n /** Creates an overlay */\n _createOverlay() {\n if (!this.positions || !this.positions.length) {\n this.positions = defaultPositionList;\n }\n const overlayRef = this._overlayRef = this._overlay.create(this._buildConfig());\n this._attachSubscription = overlayRef.attachments().subscribe(() => this.attach.emit());\n this._detachSubscription = overlayRef.detachments().subscribe(() => this.detach.emit());\n overlayRef.keydownEvents().subscribe((event) => {\n this.overlayKeydown.next(event);\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this._detachOverlay();\n }\n });\n this._overlayRef.outsidePointerEvents().subscribe((event) => {\n this.overlayOutsideClick.next(event);\n });\n }\n /** Builds the overlay config based on the directive's inputs */\n _buildConfig() {\n const positionStrategy = this._position =\n this.positionStrategy || this._createPositionStrategy();\n const overlayConfig = new OverlayConfig({\n direction: this._dir,\n positionStrategy,\n scrollStrategy: this.scrollStrategy,\n hasBackdrop: this.hasBackdrop\n });\n if (this.width || this.width === 0) {\n overlayConfig.width = this.width;\n }\n if (this.height || this.height === 0) {\n overlayConfig.height = this.height;\n }\n if (this.minWidth || this.minWidth === 0) {\n overlayConfig.minWidth = this.minWidth;\n }\n if (this.minHeight || this.minHeight === 0) {\n overlayConfig.minHeight = this.minHeight;\n }\n if (this.backdropClass) {\n overlayConfig.backdropClass = this.backdropClass;\n }\n if (this.panelClass) {\n overlayConfig.panelClass = this.panelClass;\n }\n return overlayConfig;\n }\n /** Updates the state of a position strategy, based on the values of the directive inputs. */\n _updatePositionStrategy(positionStrategy) {\n const positions = this.positions.map(currentPosition => ({\n originX: currentPosition.originX,\n originY: currentPosition.originY,\n overlayX: currentPosition.overlayX,\n overlayY: currentPosition.overlayY,\n offsetX: currentPosition.offsetX || this.offsetX,\n offsetY: currentPosition.offsetY || this.offsetY,\n panelClass: currentPosition.panelClass || undefined,\n }));\n return positionStrategy\n .setOrigin(this.origin.elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(this.flexibleDimensions)\n .withPush(this.push)\n .withGrowAfterOpen(this.growAfterOpen)\n .withViewportMargin(this.viewportMargin)\n .withLockedPosition(this.lockPosition)\n .withTransformOriginOn(this.transformOriginSelector);\n }\n /** Returns the position strategy of the overlay to be set on the overlay config */\n _createPositionStrategy() {\n const strategy = this._overlay.position().flexibleConnectedTo(this.origin.elementRef);\n this._updatePositionStrategy(strategy);\n return strategy;\n }\n /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists */\n _attachOverlay() {\n if (!this._overlayRef) {\n this._createOverlay();\n }\n else {\n // Update the overlay size, in case the directive's inputs have changed\n this._overlayRef.getConfig().hasBackdrop = this.hasBackdrop;\n }\n if (!this._overlayRef.hasAttached()) {\n this._overlayRef.attach(this._templatePortal);\n }\n if (this.hasBackdrop) {\n this._backdropSubscription = this._overlayRef.backdropClick().subscribe(event => {\n this.backdropClick.emit(event);\n });\n }\n else {\n this._backdropSubscription.unsubscribe();\n }\n this._positionSubscription.unsubscribe();\n // Only subscribe to `positionChanges` if requested, because putting\n // together all the information for it can be expensive.\n if (this.positionChange.observers.length > 0) {\n this._positionSubscription = this._position.positionChanges\n .pipe(takeWhile(() => this.positionChange.observers.length > 0))\n .subscribe(position => {\n this.positionChange.emit(position);\n if (this.positionChange.observers.length === 0) {\n this._positionSubscription.unsubscribe();\n }\n });\n }\n }\n /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop exists */\n _detachOverlay() {\n if (this._overlayRef) {\n this._overlayRef.detach();\n }\n this._backdropSubscription.unsubscribe();\n this._positionSubscription.unsubscribe();\n }\n}\nCdkConnectedOverlay.ɵfac = function CdkConnectedOverlay_Factory(t) { return new (t || CdkConnectedOverlay)(ɵngcc0.ɵɵdirectiveInject(Overlay), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Directionality, 8)); };\nCdkConnectedOverlay.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkConnectedOverlay, selectors: [[\"\", \"cdk-connected-overlay\", \"\"], [\"\", \"connected-overlay\", \"\"], [\"\", \"cdkConnectedOverlay\", \"\"]], inputs: { viewportMargin: [\"cdkConnectedOverlayViewportMargin\", \"viewportMargin\"], open: [\"cdkConnectedOverlayOpen\", \"open\"], disableClose: [\"cdkConnectedOverlayDisableClose\", \"disableClose\"], scrollStrategy: [\"cdkConnectedOverlayScrollStrategy\", \"scrollStrategy\"], offsetX: [\"cdkConnectedOverlayOffsetX\", \"offsetX\"], offsetY: [\"cdkConnectedOverlayOffsetY\", \"offsetY\"], hasBackdrop: [\"cdkConnectedOverlayHasBackdrop\", \"hasBackdrop\"], lockPosition: [\"cdkConnectedOverlayLockPosition\", \"lockPosition\"], flexibleDimensions: [\"cdkConnectedOverlayFlexibleDimensions\", \"flexibleDimensions\"], growAfterOpen: [\"cdkConnectedOverlayGrowAfterOpen\", \"growAfterOpen\"], push: [\"cdkConnectedOverlayPush\", \"push\"], positions: [\"cdkConnectedOverlayPositions\", \"positions\"], origin: [\"cdkConnectedOverlayOrigin\", \"origin\"], positionStrategy: [\"cdkConnectedOverlayPositionStrategy\", \"positionStrategy\"], width: [\"cdkConnectedOverlayWidth\", \"width\"], height: [\"cdkConnectedOverlayHeight\", \"height\"], minWidth: [\"cdkConnectedOverlayMinWidth\", \"minWidth\"], minHeight: [\"cdkConnectedOverlayMinHeight\", \"minHeight\"], backdropClass: [\"cdkConnectedOverlayBackdropClass\", \"backdropClass\"], panelClass: [\"cdkConnectedOverlayPanelClass\", \"panelClass\"], transformOriginSelector: [\"cdkConnectedOverlayTransformOriginOn\", \"transformOriginSelector\"] }, outputs: { backdropClick: \"backdropClick\", positionChange: \"positionChange\", attach: \"attach\", detach: \"detach\", overlayKeydown: \"overlayKeydown\", overlayOutsideClick: \"overlayOutsideClick\" }, exportAs: [\"cdkConnectedOverlay\"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkConnectedOverlay.ctorParameters = () => [\n { type: Overlay },\n { type: TemplateRef },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,] }] },\n { type: Directionality, decorators: [{ type: Optional }] }\n];\nCdkConnectedOverlay.propDecorators = {\n origin: [{ type: Input, args: ['cdkConnectedOverlayOrigin',] }],\n positions: [{ type: Input, args: ['cdkConnectedOverlayPositions',] }],\n positionStrategy: [{ type: Input, args: ['cdkConnectedOverlayPositionStrategy',] }],\n offsetX: [{ type: Input, args: ['cdkConnectedOverlayOffsetX',] }],\n offsetY: [{ type: Input, args: ['cdkConnectedOverlayOffsetY',] }],\n width: [{ type: Input, args: ['cdkConnectedOverlayWidth',] }],\n height: [{ type: Input, args: ['cdkConnectedOverlayHeight',] }],\n minWidth: [{ type: Input, args: ['cdkConnectedOverlayMinWidth',] }],\n minHeight: [{ type: Input, args: ['cdkConnectedOverlayMinHeight',] }],\n backdropClass: [{ type: Input, args: ['cdkConnectedOverlayBackdropClass',] }],\n panelClass: [{ type: Input, args: ['cdkConnectedOverlayPanelClass',] }],\n viewportMargin: [{ type: Input, args: ['cdkConnectedOverlayViewportMargin',] }],\n scrollStrategy: [{ type: Input, args: ['cdkConnectedOverlayScrollStrategy',] }],\n open: [{ type: Input, args: ['cdkConnectedOverlayOpen',] }],\n disableClose: [{ type: Input, args: ['cdkConnectedOverlayDisableClose',] }],\n transformOriginSelector: [{ type: Input, args: ['cdkConnectedOverlayTransformOriginOn',] }],\n hasBackdrop: [{ type: Input, args: ['cdkConnectedOverlayHasBackdrop',] }],\n lockPosition: [{ type: Input, args: ['cdkConnectedOverlayLockPosition',] }],\n flexibleDimensions: [{ type: Input, args: ['cdkConnectedOverlayFlexibleDimensions',] }],\n growAfterOpen: [{ type: Input, args: ['cdkConnectedOverlayGrowAfterOpen',] }],\n push: [{ type: Input, args: ['cdkConnectedOverlayPush',] }],\n backdropClick: [{ type: Output }],\n positionChange: [{ type: Output }],\n attach: [{ type: Output }],\n detach: [{ type: Output }],\n overlayKeydown: [{ type: Output }],\n overlayOutsideClick: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkConnectedOverlay, [{\n type: Directive,\n args: [{\n selector: '[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]',\n exportAs: 'cdkConnectedOverlay'\n }]\n }], function () { return [{ type: Overlay }, { type: ɵngcc0.TemplateRef }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY]\n }] }, { type: ɵngcc3.Directionality, decorators: [{\n type: Optional\n }] }]; }, { viewportMargin: [{\n type: Input,\n args: ['cdkConnectedOverlayViewportMargin']\n }], open: [{\n type: Input,\n args: ['cdkConnectedOverlayOpen']\n }], disableClose: [{\n type: Input,\n args: ['cdkConnectedOverlayDisableClose']\n }], backdropClick: [{\n type: Output\n }], positionChange: [{\n type: Output\n }], attach: [{\n type: Output\n }], detach: [{\n type: Output\n }], overlayKeydown: [{\n type: Output\n }], overlayOutsideClick: [{\n type: Output\n }], scrollStrategy: [{\n type: Input,\n args: ['cdkConnectedOverlayScrollStrategy']\n }], offsetX: [{\n type: Input,\n args: ['cdkConnectedOverlayOffsetX']\n }], offsetY: [{\n type: Input,\n args: ['cdkConnectedOverlayOffsetY']\n }], hasBackdrop: [{\n type: Input,\n args: ['cdkConnectedOverlayHasBackdrop']\n }], lockPosition: [{\n type: Input,\n args: ['cdkConnectedOverlayLockPosition']\n }], flexibleDimensions: [{\n type: Input,\n args: ['cdkConnectedOverlayFlexibleDimensions']\n }], growAfterOpen: [{\n type: Input,\n args: ['cdkConnectedOverlayGrowAfterOpen']\n }], push: [{\n type: Input,\n args: ['cdkConnectedOverlayPush']\n }], positions: [{\n type: Input,\n args: ['cdkConnectedOverlayPositions']\n }], origin: [{\n type: Input,\n args: ['cdkConnectedOverlayOrigin']\n }], positionStrategy: [{\n type: Input,\n args: ['cdkConnectedOverlayPositionStrategy']\n }], width: [{\n type: Input,\n args: ['cdkConnectedOverlayWidth']\n }], height: [{\n type: Input,\n args: ['cdkConnectedOverlayHeight']\n }], minWidth: [{\n type: Input,\n args: ['cdkConnectedOverlayMinWidth']\n }], minHeight: [{\n type: Input,\n args: ['cdkConnectedOverlayMinHeight']\n }], backdropClass: [{\n type: Input,\n args: ['cdkConnectedOverlayBackdropClass']\n }], panelClass: [{\n type: Input,\n args: ['cdkConnectedOverlayPanelClass']\n }], transformOriginSelector: [{\n type: Input,\n args: ['cdkConnectedOverlayTransformOriginOn']\n }] }); })();\n/** @docs-private */\nfunction CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER = {\n provide: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass OverlayModule {\n}\nOverlayModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: OverlayModule });\nOverlayModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function OverlayModule_Factory(t) { return new (t || OverlayModule)(); }, providers: [\n Overlay,\n CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n ], imports: [[BidiModule, PortalModule, ScrollingModule], ScrollingModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(OverlayModule, { declarations: function () { return [CdkConnectedOverlay, CdkOverlayOrigin]; }, imports: function () { return [BidiModule, PortalModule, ScrollingModule]; }, exports: function () { return [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OverlayModule, [{\n type: NgModule,\n args: [{\n imports: [BidiModule, PortalModule, ScrollingModule],\n exports: [CdkConnectedOverlay, CdkOverlayOrigin, ScrollingModule],\n declarations: [CdkConnectedOverlay, CdkOverlayOrigin],\n providers: [\n Overlay,\n CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Alternative to OverlayContainer that supports correct displaying of overlay elements in\n * Fullscreen mode\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n *\n * Should be provided in the root component.\n */\nclass FullscreenOverlayContainer extends OverlayContainer {\n constructor(_document, platform) {\n super(_document, platform);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._fullScreenEventName && this._fullScreenListener) {\n this._document.removeEventListener(this._fullScreenEventName, this._fullScreenListener);\n }\n }\n _createContainer() {\n super._createContainer();\n this._adjustParentForFullscreenChange();\n this._addFullscreenChangeListener(() => this._adjustParentForFullscreenChange());\n }\n _adjustParentForFullscreenChange() {\n if (!this._containerElement) {\n return;\n }\n const fullscreenElement = this.getFullscreenElement();\n const parent = fullscreenElement || this._document.body;\n parent.appendChild(this._containerElement);\n }\n _addFullscreenChangeListener(fn) {\n const eventName = this._getEventName();\n if (eventName) {\n if (this._fullScreenListener) {\n this._document.removeEventListener(eventName, this._fullScreenListener);\n }\n this._document.addEventListener(eventName, fn);\n this._fullScreenListener = fn;\n }\n }\n _getEventName() {\n if (!this._fullScreenEventName) {\n const _document = this._document;\n if (_document.fullscreenEnabled) {\n this._fullScreenEventName = 'fullscreenchange';\n }\n else if (_document.webkitFullscreenEnabled) {\n this._fullScreenEventName = 'webkitfullscreenchange';\n }\n else if (_document.mozFullScreenEnabled) {\n this._fullScreenEventName = 'mozfullscreenchange';\n }\n else if (_document.msFullscreenEnabled) {\n this._fullScreenEventName = 'MSFullscreenChange';\n }\n }\n return this._fullScreenEventName;\n }\n /**\n * When the page is put into fullscreen mode, a specific element is specified.\n * Only that element and its children are visible when in fullscreen mode.\n */\n getFullscreenElement() {\n const _document = this._document;\n return _document.fullscreenElement ||\n _document.webkitFullscreenElement ||\n _document.mozFullScreenElement ||\n _document.msFullscreenElement ||\n null;\n }\n}\nFullscreenOverlayContainer.ɵfac = function FullscreenOverlayContainer_Factory(t) { return new (t || FullscreenOverlayContainer)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc2.Platform)); };\nFullscreenOverlayContainer.ɵprov = i0.ɵɵdefineInjectable({ factory: function FullscreenOverlayContainer_Factory() { return new FullscreenOverlayContainer(i0.ɵɵinject(i1$1.DOCUMENT), i0.ɵɵinject(i2.Platform)); }, token: FullscreenOverlayContainer, providedIn: \"root\" });\nFullscreenOverlayContainer.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Platform }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FullscreenOverlayContainer, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc2.Platform }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BlockScrollStrategy, CdkConnectedOverlay, CdkOverlayOrigin, CloseScrollStrategy, ConnectedOverlayPositionChange, ConnectedPositionStrategy, ConnectionPositionPair, FlexibleConnectedPositionStrategy, FullscreenOverlayContainer, GlobalPositionStrategy, NoopScrollStrategy, Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayModule, OverlayOutsideClickDispatcher, OverlayPositionBuilder, OverlayRef, RepositionScrollStrategy, ScrollStrategyOptions, ScrollingVisibility, validateHorizontalPosition, validateVerticalPosition, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY as ɵangular_material_src_cdk_overlay_overlay_a, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_cdk_overlay_overlay_b, CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER as ɵangular_material_src_cdk_overlay_overlay_c, BaseOverlayDispatcher as ɵangular_material_src_cdk_overlay_overlay_d };\n\n//# sourceMappingURL=overlay.js.map","import * as ɵngcc0 from '@angular/core';\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NgModule } from '@angular/core';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { DateTimeAdapter } from './date-time-adapter.class';\nimport { NativeDateTimeAdapter } from './native-date-time-adapter.class';\nimport { OWL_DATE_TIME_FORMATS } from './date-time-format.class';\nimport { OWL_NATIVE_DATE_TIME_FORMATS } from './native-date-time-format.class';\nvar NativeDateTimeModule = (function () {\n function NativeDateTimeModule() {\n }\nNativeDateTimeModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: NativeDateTimeModule });\nNativeDateTimeModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function NativeDateTimeModule_Factory(t) { return new (t || NativeDateTimeModule)(); }, providers: [\n { provide: DateTimeAdapter, useClass: NativeDateTimeAdapter },\n ], imports: [[PlatformModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(NativeDateTimeModule, { imports: function () { return [PlatformModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NativeDateTimeModule, [{\n type: NgModule,\n args: [{\n imports: [PlatformModule],\n providers: [\n { provide: DateTimeAdapter, useClass: NativeDateTimeAdapter },\n ]\n }]\n }], function () { return []; }, null); })();\n return NativeDateTimeModule;\n}());\nexport { NativeDateTimeModule };\nvar ɵ0 = OWL_NATIVE_DATE_TIME_FORMATS;\nvar OwlNativeDateTimeModule = (function () {\n function OwlNativeDateTimeModule() {\n }\nOwlNativeDateTimeModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: OwlNativeDateTimeModule });\nOwlNativeDateTimeModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function OwlNativeDateTimeModule_Factory(t) { return new (t || OwlNativeDateTimeModule)(); }, providers: [{ provide: OWL_DATE_TIME_FORMATS, useValue: ɵ0 }], imports: [[NativeDateTimeModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(OwlNativeDateTimeModule, { imports: [NativeDateTimeModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(OwlNativeDateTimeModule, [{\n type: NgModule,\n args: [{\n imports: [NativeDateTimeModule],\n providers: [{ provide: OWL_DATE_TIME_FORMATS, useValue: ɵ0 }]\n }]\n }], function () { return []; }, null); })();\n return OwlNativeDateTimeModule;\n}());\nexport { OwlNativeDateTimeModule };\nexport { ɵ0 };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS5tb2R1bGUuanMiLCJzb3VyY2VzIjpbIm5hdGl2ZS1kYXRlLXRpbWUubW9kdWxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O2dEQVE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztnREFNZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm1Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX05BVElWRV9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4vbmF0aXZlLWRhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xudmFyIE5hdGl2ZURhdGVUaW1lTW9kdWxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOYXRpdmVEYXRlVGltZU1vZHVsZSgpIHtcbiAgICB9XG4gICAgTmF0aXZlRGF0ZVRpbWVNb2R1bGUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgTmdNb2R1bGUoe1xuICAgICAgICAgICAgaW1wb3J0czogW1BsYXRmb3JtTW9kdWxlXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRGF0ZVRpbWVBZGFwdGVyLCB1c2VDbGFzczogTmF0aXZlRGF0ZVRpbWVBZGFwdGVyIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KVxuICAgIF0sIE5hdGl2ZURhdGVUaW1lTW9kdWxlKTtcbiAgICByZXR1cm4gTmF0aXZlRGF0ZVRpbWVNb2R1bGU7XG59KCkpO1xuZXhwb3J0IHsgTmF0aXZlRGF0ZVRpbWVNb2R1bGUgfTtcbnZhciDJtTAgPSBPV0xfTkFUSVZFX0RBVEVfVElNRV9GT1JNQVRTO1xudmFyIE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPd2xOYXRpdmVEYXRlVGltZU1vZHVsZSgpIHtcbiAgICB9XG4gICAgT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgTmdNb2R1bGUoe1xuICAgICAgICAgICAgaW1wb3J0czogW05hdGl2ZURhdGVUaW1lTW9kdWxlXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogT1dMX0RBVEVfVElNRV9GT1JNQVRTLCB1c2VWYWx1ZTogybUwIH1dLFxuICAgICAgICB9KVxuICAgIF0sIE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlKTtcbiAgICByZXR1cm4gT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGU7XG59KCkpO1xuZXhwb3J0IHsgT3dsTmF0aXZlRGF0ZVRpbWVNb2R1bGUgfTtcbmV4cG9ydCB7IMm1MCB9O1xuIl19","export * from './date-time';\n\nexport {OwlCalendarComponent} from './date-time/calendar.component';\nexport {OwlTimerComponent} from './date-time/timer.component';\nexport {OwlDateTimeTriggerDirective} from './date-time/date-time-picker-trigger.directive';\nexport {OwlDateTimeInputDirective} from './date-time/date-time-picker-input.directive';\nexport {OwlMultiYearViewComponent} from './date-time/calendar-multi-year-view.component';\nexport {OwlYearViewComponent} from './date-time/calendar-year-view.component';\nexport {OwlMonthViewComponent} from './date-time/calendar-month-view.component';\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmpzIiwic291cmNlcyI6WyJwaWNrZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGUtdGltZSc7XG4iXX0="],"sourceRoot":"webpack:///"}